diff --git a/.github/workflows/update_golang_version.yml b/.github/workflows/update_golang_version.yml index 0d0ad0c19ce..11f65b54f83 100644 --- a/.github/workflows/update_golang_version.yml +++ b/.github/workflows/update_golang_version.yml @@ -15,7 +15,7 @@ jobs: pull-requests: write strategy: matrix: - branch: [ main, release-21.0, release-20.0 ] + branch: [ main, release-22.0, release-21.0, release-20.0 ] name: Update Golang Version runs-on: ubuntu-24.04 steps: @@ -37,9 +37,9 @@ jobs: old_go_version=$(go run ./go/tools/go-upgrade/go-upgrade.go get go-version) echo "old-go-version=${old_go_version}" >> $GITHUB_OUTPUT - if [ "${{ matrix.branch }}" == "main" ]; then + if [[ "${{ matrix.branch }}" == "main" ]]; then go run ./go/tools/go-upgrade/go-upgrade.go upgrade --main --allow-major-upgrade - elif [ "${{ matrix.branch }}" == "release-21.0" ]; then + elif [[ ("${{ matrix.branch }}" == "release-21.0") || ("${{ matrix.branch }}" == "release-22.0") ]]; then go run ./go/tools/go-upgrade/go-upgrade.go upgrade else go run ./go/tools/go-upgrade/go-upgrade.go upgrade --workflow-update=false diff --git a/.gitignore b/.gitignore index e8c441d3bd7..088ef5bb574 100644 --- a/.gitignore +++ b/.gitignore @@ -93,3 +93,4 @@ report # mise files .mise.toml /errors/ +go/flags/endtoend/count_flags.sh diff --git a/Makefile b/Makefile index fc4aba7aae0..23d71c57293 100644 --- a/Makefile +++ b/Makefile @@ -286,7 +286,7 @@ $(PROTO_GO_OUTS): minimaltools install_protoc-gen-go proto/*.proto # This rule builds the bootstrap images for all flavors. DOCKER_IMAGES_FOR_TEST = mysql80 mysql84 percona80 DOCKER_IMAGES = common $(DOCKER_IMAGES_FOR_TEST) -BOOTSTRAP_VERSION=43 +BOOTSTRAP_VERSION=45 ensure_bootstrap_version: find docker/ -type f -exec sed -i "s/^\(ARG bootstrap_version\)=.*/\1=${BOOTSTRAP_VERSION}/" {} \; sed -i 's/\(^.*flag.String(\"bootstrap-version\",\) *\"[^\"]\+\"/\1 \"${BOOTSTRAP_VERSION}\"/' test.go diff --git a/build.env b/build.env index 30c58842ef7..8c4f9322b29 100755 --- a/build.env +++ b/build.env @@ -17,7 +17,7 @@ source ./tools/shell_functions.inc go version >/dev/null 2>&1 || fail "Go is not installed or is not in \$PATH. See https://vitess.io/contributing/build-from-source for install instructions." -goversion_min 1.24.1 || echo "Go version reported: `go version`. Version 1.24.1+ recommended. See https://vitess.io/contributing/build-from-source for install instructions." +goversion_min 1.24.3 || echo "Go version reported: `go version`. Version 1.24.3+ recommended. See https://vitess.io/contributing/build-from-source for install instructions." mkdir -p dist mkdir -p bin diff --git a/changelog/20.0/20.0.7/changelog.md b/changelog/20.0/20.0.7/changelog.md new file mode 100644 index 00000000000..4b90481685a --- /dev/null +++ b/changelog/20.0/20.0.7/changelog.md @@ -0,0 +1,51 @@ +# Changelog of Vitess v20.0.7 + +### Bug fixes +#### Backup and Restore + * [release-20.0] Fix tablet selection in `vtctld BackupShard` (#18002) [#18024](https://github.com/vitessio/vitess/pull/18024) + * Fix backup shard copy paste error [#18099](https://github.com/vitessio/vitess/pull/18099) +#### Cluster management + * [release-20.0] ValidateKeyspace: Add check for no shards (#18055) [#18062](https://github.com/vitessio/vitess/pull/18062) +#### Evalengine + * [release-20.0] Implement temporal comparisons (#17826) [#17853](https://github.com/vitessio/vitess/pull/17853) +#### Query Serving + * backport: support subqueries inside subqueries when merging (Release 20.0) [#17810](https://github.com/vitessio/vitess/pull/17810) + * [release-20.0] evalengine: normalize types during compilation (#17887) [#17895](https://github.com/vitessio/vitess/pull/17895) + * [release-20.0] Fix DISTINCT on ENUM/SET columns by making enums/set hashable (#17936) [#17990](https://github.com/vitessio/vitess/pull/17990) + * [release-20.0] Set proper join vars type for the RHS field query in OLAP (#18028) [#18037](https://github.com/vitessio/vitess/pull/18037) + * [release-20.0] Bugfix: Missing data when running vtgate outer joins (#18036) [#18043](https://github.com/vitessio/vitess/pull/18043) + * [release-20.0] bugfix: allow window functions when possible to push down (#18103) [#18104](https://github.com/vitessio/vitess/pull/18104) +#### VReplication + * [release-20.0] VReplication Atomic Copy Workflows: fix bugs around concurrent inserts (#17772) [#17792](https://github.com/vitessio/vitess/pull/17792) + * [release-20.0] Multi-tenant workflow SwitchWrites: Don't add denied tables on cancelMigration() (#17782) [#17796](https://github.com/vitessio/vitess/pull/17796) + * [release-20.0] VDiff: Fix logic for reconciling extra rows (#17950) [#18071](https://github.com/vitessio/vitess/pull/18071) + * [release-20.0] VStream API: Reset stopPos in catchup (#18119) [#18121](https://github.com/vitessio/vitess/pull/18121) +#### VTTablet + * [release-20.0] fix: race on storing schema engine last changed time (#17914) [#17916](https://github.com/vitessio/vitess/pull/17916) +#### vtctldclient + * [release-20.0] Filter out tablets with unknown replication lag when electing a new primary (#18004) [#18074](https://github.com/vitessio/vitess/pull/18074) + * [release-20.0] Fix `Reshard Cancel` behavior (#18020) [#18079](https://github.com/vitessio/vitess/pull/18079) +### CI/Build +#### General + * [release-20.0] Upgrade the Golang version to `go1.22.12` [#17702](https://github.com/vitessio/vitess/pull/17702) +### Performance +#### Performance + * [release-20.0] smartconnpool: Better handling for idle expiration (#17757) [#17780](https://github.com/vitessio/vitess/pull/17780) +#### Query Serving + * [release-20.0] pool: reopen connection closed by idle timeout (#17818) [#17830](https://github.com/vitessio/vitess/pull/17830) + * [release-20.0] Fix: Separate Lock for Keyspace to Update Controller Mapping in Schema Tracking (#17873) [#17884](https://github.com/vitessio/vitess/pull/17884) +### Regression +#### Query Serving + * [release-20.0] Fix a potential connection pool leak. (#17807) [#17813](https://github.com/vitessio/vitess/pull/17813) +#### VTTablet + * [release-20.0] fix: App and Dba Pool metrics (#18048) [#18083](https://github.com/vitessio/vitess/pull/18083) +### Release +#### General + * [release-20.0] Bump to `v20.0.7-SNAPSHOT` after the `v20.0.6` release [#17768](https://github.com/vitessio/vitess/pull/17768) +### Testing +#### Build/CI + * [release-20.0] Use release branches for upgrade downgrade tests (#18029) [#18034](https://github.com/vitessio/vitess/pull/18034) +#### Query Serving + * [release-20.0] [release-21.0] DML test fix for duplicate column value (#17980) [#17987](https://github.com/vitessio/vitess/pull/17987) + * [release-20.0] Test: Increase query timeout to fix flaky test 'TestQueryTimeoutWithShardTargeting' (#18016) [#18039](https://github.com/vitessio/vitess/pull/18039) + diff --git a/changelog/20.0/20.0.7/release_notes.md b/changelog/20.0/20.0.7/release_notes.md new file mode 100644 index 00000000000..eef8d5d4dc1 --- /dev/null +++ b/changelog/20.0/20.0.7/release_notes.md @@ -0,0 +1,7 @@ +# Release of Vitess v20.0.7 +The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/20.0/20.0.7/changelog.md). + +The release includes 27 merged Pull Requests. + +Thanks to all our contributors: @app/vitess-bot, @dbussink, @harshit-gangal, @systay, @vitess-bot + diff --git a/changelog/20.0/README.md b/changelog/20.0/README.md index 2e938aa8f51..987ea5f4254 100644 --- a/changelog/20.0/README.md +++ b/changelog/20.0/README.md @@ -1,4 +1,8 @@ ## v20.0 +* **[20.0.7](20.0.7)** + * [Changelog](20.0.7/changelog.md) + * [Release Notes](20.0.7/release_notes.md) + * **[20.0.6](20.0.6)** * [Changelog](20.0.6/changelog.md) * [Release Notes](20.0.6/release_notes.md) diff --git a/changelog/21.0/21.0.4/changelog.md b/changelog/21.0/21.0.4/changelog.md new file mode 100644 index 00000000000..d0f4e0d2ff4 --- /dev/null +++ b/changelog/21.0/21.0.4/changelog.md @@ -0,0 +1,62 @@ +# Changelog of Vitess v21.0.4 + +### Bug fixes +#### Backup and Restore + * [release-21.0] Fix tablet selection in `vtctld BackupShard` (#18002) [#18025](https://github.com/vitessio/vitess/pull/18025) + * Fix backup shard copy paste error [#18100](https://github.com/vitessio/vitess/pull/18100) +#### Evalengine + * [release-21.0] Implement temporal comparisons (#17826) [#17854](https://github.com/vitessio/vitess/pull/17854) +#### Query Serving + * [release-21.0] Fail assignment expressions with the correct message (#17752) [#17776](https://github.com/vitessio/vitess/pull/17776) + * backport: support subqueries inside subqueries when merging (Release 21.0) [#17811](https://github.com/vitessio/vitess/pull/17811) + * [release-21.0] evalengine: normalize types during compilation (#17887) [#17896](https://github.com/vitessio/vitess/pull/17896) + * [release-21.0] Fix DISTINCT on ENUM/SET columns by making enums/set hashable (#17936) [#17991](https://github.com/vitessio/vitess/pull/17991) + * [release-21.0] go/vt/vtgate: take routing rules into account for traffic mirroring (#17953) [#17994](https://github.com/vitessio/vitess/pull/17994) + * [release-21.0] Set proper join vars type for the RHS field query in OLAP (#18028) [#18038](https://github.com/vitessio/vitess/pull/18038) + * [release-21.0] Bugfix: Missing data when running vtgate outer joins (#18036) [#18044](https://github.com/vitessio/vitess/pull/18044) + * [release-21.0] Fix: Ensure Consistent Lookup Vindex Handles Duplicate Rows in Single Query (#17974) [#18078](https://github.com/vitessio/vitess/pull/18078) + * [release-21.0] bugfix: allow window functions when possible to push down (#18103) [#18105](https://github.com/vitessio/vitess/pull/18105) +#### VReplication + * [release-21.0] VReplication Atomic Copy Workflows: fix bugs around concurrent inserts (#17772) [#17793](https://github.com/vitessio/vitess/pull/17793) + * [release-21.0] Multi-tenant workflow SwitchWrites: Don't add denied tables on cancelMigration() (#17782) [#17797](https://github.com/vitessio/vitess/pull/17797) + * [release-21.0] VDiff: Fix logic for reconciling extra rows (#17950) [#18072](https://github.com/vitessio/vitess/pull/18072) + * [release-21.0] VStream API: Reset stopPos in catchup (#18119) [#18122](https://github.com/vitessio/vitess/pull/18122) +#### VTAdmin + * [release-21.0] [VTAdmin] Insert into schema cache if exists already and not expired (#17908) [#17924](https://github.com/vitessio/vitess/pull/17924) +#### VTCombo + * [release-21.0] Fix vtcombo parsing flags incorrectly (#17743) [#17820](https://github.com/vitessio/vitess/pull/17820) +#### VTTablet + * [release-21.0] fix: race on storing schema engine last changed time (#17914) [#17917](https://github.com/vitessio/vitess/pull/17917) +#### vtctldclient + * [release-21.0] Filter out tablets with unknown replication lag when electing a new primary (#18004) [#18075](https://github.com/vitessio/vitess/pull/18075) + * [release-21.0] Fix `Reshard Cancel` behavior (#18020) [#18080](https://github.com/vitessio/vitess/pull/18080) +### CI/Build +#### General + * [release-21.0] Upgrade the Golang version to `go1.23.6` [#17699](https://github.com/vitessio/vitess/pull/17699) + * [release-21.0] Upgrade the Golang version to `go1.23.7` [#17901](https://github.com/vitessio/vitess/pull/17901) + * [release-21.0] Upgrade the Golang version to `go1.23.8` [#18092](https://github.com/vitessio/vitess/pull/18092) +### Dependencies +#### Build/CI + * [release-21.0] Bump golang.org/x/net from 0.34.0 to 0.36.0 (#17958) [#17960](https://github.com/vitessio/vitess/pull/17960) +### Performance +#### Performance + * [release-21.0] smartconnpool: Better handling for idle expiration (#17757) [#17781](https://github.com/vitessio/vitess/pull/17781) +#### Query Serving + * [release-21.0] pool: reopen connection closed by idle timeout (#17818) [#17829](https://github.com/vitessio/vitess/pull/17829) + * [release-21.0] Fix: Separate Lock for Keyspace to Update Controller Mapping in Schema Tracking (#17873) [#17885](https://github.com/vitessio/vitess/pull/17885) +### Regression +#### Query Serving + * [release-21.0] Fix a potential connection pool leak. (#17807) [#17814](https://github.com/vitessio/vitess/pull/17814) +#### VTTablet + * [release-21.0] fix: App and Dba Pool metrics (#18048) [#18084](https://github.com/vitessio/vitess/pull/18084) +### Release +#### General + * [release-21.0] Bump to `v21.0.4-SNAPSHOT` after the `v21.0.3` release [#17766](https://github.com/vitessio/vitess/pull/17766) + * [release-21.0] Code Freeze for `v21.0.4` [#18135](https://github.com/vitessio/vitess/pull/18135) +### Testing +#### Build/CI + * [release-21.0] Use release branches for upgrade downgrade tests (#18029) [#18035](https://github.com/vitessio/vitess/pull/18035) +#### Query Serving + * [release-21.0] DML test fix for duplicate column value [#17980](https://github.com/vitessio/vitess/pull/17980) + * [release-21.0] Test: Increase query timeout to fix flaky test 'TestQueryTimeoutWithShardTargeting' (#18016) [#18040](https://github.com/vitessio/vitess/pull/18040) + diff --git a/changelog/21.0/21.0.4/release_notes.md b/changelog/21.0/21.0.4/release_notes.md new file mode 100644 index 00000000000..3d0ea486ff7 --- /dev/null +++ b/changelog/21.0/21.0.4/release_notes.md @@ -0,0 +1,7 @@ +# Release of Vitess v21.0.4 +The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/21.0/21.0.4/changelog.md). + +The release includes 35 merged Pull Requests. + +Thanks to all our contributors: @app/vitess-bot, @dbussink, @frouioui, @harshit-gangal, @mattlord, @systay, @vitess-bot + diff --git a/changelog/21.0/README.md b/changelog/21.0/README.md index 61467855055..360358d1675 100644 --- a/changelog/21.0/README.md +++ b/changelog/21.0/README.md @@ -1,4 +1,8 @@ ## v21.0 +* **[21.0.4](21.0.4)** + * [Changelog](21.0.4/changelog.md) + * [Release Notes](21.0.4/release_notes.md) + * **[21.0.3](21.0.3)** * [Changelog](21.0.3/changelog.md) * [Release Notes](21.0.3/release_notes.md) diff --git a/changelog/22.0/22.0.0/changelog.md b/changelog/22.0/22.0.0/changelog.md new file mode 100644 index 00000000000..4fbb85b81e7 --- /dev/null +++ b/changelog/22.0/22.0.0/changelog.md @@ -0,0 +1,603 @@ +# Changelog of Vitess v22.0.0 + +### Bug fixes +#### ACL + * Don't exit tablet server on reloading invalid ACL [#17485](https://github.com/vitessio/vitess/pull/17485) +#### Backup and Restore + * fix releasing the global read lock when mysqlshell backup fails [#17000](https://github.com/vitessio/vitess/pull/17000) + * Fix how we cancel the context in the builtin backup engine [#17285](https://github.com/vitessio/vitess/pull/17285) + * Replace uses of os.Create with os2.Create within backup/restore workflows [#17648](https://github.com/vitessio/vitess/pull/17648) + * Fix tablet selection in `vtctld BackupShard` [#18002](https://github.com/vitessio/vitess/pull/18002) +#### Build/CI + * Fix typos in MySQL 8.4 Dockerfile [#17601](https://github.com/vitessio/vitess/pull/17601) + * Fix golang dependencies upgrade workflow [#17692](https://github.com/vitessio/vitess/pull/17692) +#### CLI + * Fix config file not found handling [#17578](https://github.com/vitessio/vitess/pull/17578) +#### Cluster management + * Fix Errant GTID detection logic in `SetReplicationSource` [#17031](https://github.com/vitessio/vitess/pull/17031) + * Fix panic in vttablet when closing topo server twice [#17094](https://github.com/vitessio/vitess/pull/17094) + * Fixes for avoidance of hosts taking backup in PRS & ERS [#17300](https://github.com/vitessio/vitess/pull/17300) + * Clear `demotePrimaryStalled` field after the function ends [#17823](https://github.com/vitessio/vitess/pull/17823) + * fix: fix incorrect nil return value [#17881](https://github.com/vitessio/vitess/pull/17881) + * Fix semi-sync monitor bug of expecting incorrect number of fields [#17939](https://github.com/vitessio/vitess/pull/17939) + * ValidateKeyspace: Add check for no shards [#18055](https://github.com/vitessio/vitess/pull/18055) + * [release-22.0] Add code to clear orphaned files for a deleted keyspace (#18098) [#18115](https://github.com/vitessio/vitess/pull/18115) +#### Evalengine + * Fix week number for date_format evalengine function [#17432](https://github.com/vitessio/vitess/pull/17432) + * [release-20.0] Fix week number for date_format evalengine function (#17432) [#17453](https://github.com/vitessio/vitess/pull/17453) + * [release-19.0] Fix week number for date_format evalengine function (#17432) [#17454](https://github.com/vitessio/vitess/pull/17454) + * Implement temporal comparisons [#17826](https://github.com/vitessio/vitess/pull/17826) +#### Java + * Use proper `groupId` for mysql connector in java [#17540](https://github.com/vitessio/vitess/pull/17540) +#### Online DDL + * Online DDL: fix defer function, potential connection pool exhaustion [#17207](https://github.com/vitessio/vitess/pull/17207) + * Propagate CallerID through vtctld OnlineDDL RPCs [#17935](https://github.com/vitessio/vitess/pull/17935) +#### Query Serving + * fix issue with json unmarshalling of operators with space in them [#16905](https://github.com/vitessio/vitess/pull/16905) + * VTGate MoveTables Buffering: Fix panic when buffering is disabled [#16922](https://github.com/vitessio/vitess/pull/16922) + * fixes bugs around expression precedence and LIKE [#16934](https://github.com/vitessio/vitess/pull/16934) + * Fix `GetUnresolvedTransactions` command for Vtctld [#16961](https://github.com/vitessio/vitess/pull/16961) + * bugfix: add HAVING columns inside derived tables [#16976](https://github.com/vitessio/vitess/pull/16976) + * Handle encoding binary data separately [#16988](https://github.com/vitessio/vitess/pull/16988) + * bugfix: treat EXPLAIN like SELECT [#17054](https://github.com/vitessio/vitess/pull/17054) + * Fix: Update found rows pool transaction capacity dynamically via vttablet debug/env [#17055](https://github.com/vitessio/vitess/pull/17055) + * Delegate Column Availability Checks to MySQL for Single-Route Queries [#17077](https://github.com/vitessio/vitess/pull/17077) + * bugfix: Handle CTEs with columns named in the CTE def [#17179](https://github.com/vitessio/vitess/pull/17179) + * Use proper keyspace when updating the query graph of a reference DML [#17226](https://github.com/vitessio/vitess/pull/17226) + * Reference Table DML Join Fix [#17414](https://github.com/vitessio/vitess/pull/17414) + * Fix Data race in semi-join [#17417](https://github.com/vitessio/vitess/pull/17417) + * vexplain to protect the log fields from concurrent writes [#17460](https://github.com/vitessio/vitess/pull/17460) + * Fix crash in the evalengine [#17487](https://github.com/vitessio/vitess/pull/17487) + * Fix how we generate the query serving error documentation [#17516](https://github.com/vitessio/vitess/pull/17516) + * fix: add missing MySQL 8.4 keywords [#17538](https://github.com/vitessio/vitess/pull/17538) + * Always return a valid timezone in cursor [#17546](https://github.com/vitessio/vitess/pull/17546) + * sizegen: do not ignore type aliases [#17556](https://github.com/vitessio/vitess/pull/17556) + * `sendBinlogDumpCommand`: apply BinlogThroughGTID flag [#17580](https://github.com/vitessio/vitess/pull/17580) + * `parseComBinlogDumpGTID`: GTID payload is always 5.6 flavor [#17605](https://github.com/vitessio/vitess/pull/17605) + * Fix panic inside schema tracker [#17659](https://github.com/vitessio/vitess/pull/17659) + * smartconnpool: do not allow connections to starve [#17675](https://github.com/vitessio/vitess/pull/17675) + * Fail assignment expressions with the correct message [#17752](https://github.com/vitessio/vitess/pull/17752) + * bugfix: support subqueries inside subqueries when merging [#17764](https://github.com/vitessio/vitess/pull/17764) + * evalengine: normalize types during compilation [#17887](https://github.com/vitessio/vitess/pull/17887) + * Fix DISTINCT on ENUM/SET columns by making enums/set hashable [#17936](https://github.com/vitessio/vitess/pull/17936) + * go/vt/vtgate: take routing rules into account for traffic mirroring [#17953](https://github.com/vitessio/vitess/pull/17953) + * Fix TEXT and BLOB column types not supporting length parameter in CREATE TABLE [#17973](https://github.com/vitessio/vitess/pull/17973) + * Fix: Ensure Consistent Lookup Vindex Handles Duplicate Rows in Single Query [#17974](https://github.com/vitessio/vitess/pull/17974) + * Set proper join vars type for the RHS field query in OLAP [#18028](https://github.com/vitessio/vitess/pull/18028) + * Bugfix: Missing data when running vtgate outer joins [#18036](https://github.com/vitessio/vitess/pull/18036) + * Fix `SHOW VITESS_SHARDS` bug that led to incomplete output [#18069](https://github.com/vitessio/vitess/pull/18069) + * [release-22.0] bugfix: allow window functions when possible to push down (#18103) [#18106](https://github.com/vitessio/vitess/pull/18106) + * [release-22.0] Fix: Add tablet type to the plan key (#18155) [#18156](https://github.com/vitessio/vitess/pull/18156) + * [release-22.0] Fix split statement for create procedure to account for definers (#18142) [#18158](https://github.com/vitessio/vitess/pull/18158) + * [release-22.0] bugfix: INSERT IGNORE not inserting rows (#18151) [#18165](https://github.com/vitessio/vitess/pull/18165) +#### Schema Tracker + * `engine.Reload()`: fix file size aggregation for partitioned tables [#18058](https://github.com/vitessio/vitess/pull/18058) +#### Topology + * Close zookeeper topo connection on disconnect [#17136](https://github.com/vitessio/vitess/pull/17136) + * Limit rare race condition in `topo.Server` [#17165](https://github.com/vitessio/vitess/pull/17165) +#### VReplication + * VReplication: Support reversing read-only traffic in vtctldclient [#16920](https://github.com/vitessio/vitess/pull/16920) + * fix: Infinite logs in case of non-existent stream logs [#17004](https://github.com/vitessio/vitess/pull/17004) + * Use proper zstd decoder pool for binlog event compression handling [#17042](https://github.com/vitessio/vitess/pull/17042) + * VReplication: Fixes for generated column handling [#17107](https://github.com/vitessio/vitess/pull/17107) + * VReplication: Qualify and SQL escape tables in created AutoIncrement VSchema definitions [#17174](https://github.com/vitessio/vitess/pull/17174) + * VReplication: recover from closed connection [#17249](https://github.com/vitessio/vitess/pull/17249) + * LookupVindex: fix CLI to allow creating non-unique lookups with single column [#17301](https://github.com/vitessio/vitess/pull/17301) + * SwitchTraffic: use separate context while canceling a migration [#17340](https://github.com/vitessio/vitess/pull/17340) + * LookupVindex bug fix: Fix typos from PR 17301 [#17423](https://github.com/vitessio/vitess/pull/17423) + * VReplication: Handle --vreplication_experimental_flags options properly for partial images [#17428](https://github.com/vitessio/vitess/pull/17428) + * VDiff: Save lastpk value for source and target [#17493](https://github.com/vitessio/vitess/pull/17493) + * Tablet picker: Handle the case where a primary tablet is not setup for a shard [#17573](https://github.com/vitessio/vitess/pull/17573) + * VReplication: Address SwitchTraffic bugs around replication lag and cancel on error [#17616](https://github.com/vitessio/vitess/pull/17616) + * VDiff: fix race when a vdiff resumes on vttablet restart [#17638](https://github.com/vitessio/vitess/pull/17638) + * Atomic Copy: Fix panics when the copy phase starts in some clusters [#17717](https://github.com/vitessio/vitess/pull/17717) + * VReplication Atomic Copy Workflows: fix bugs around concurrent inserts [#17772](https://github.com/vitessio/vitess/pull/17772) + * Multi-tenant workflow SwitchWrites: Don't add denied tables on cancelMigration() [#17782](https://github.com/vitessio/vitess/pull/17782) + * VReplication: Align VReplication and VTGate VStream Retry Logic [#17783](https://github.com/vitessio/vitess/pull/17783) + * VDiff: Fix logic for reconciling extra rows [#17950](https://github.com/vitessio/vitess/pull/17950) + * VDiff: Fix bug with handling tables with no pks but only a unique key. [#17968](https://github.com/vitessio/vitess/pull/17968) + * [release-22.0] VStream API: Reset stopPos in catchup (#18119) [#18123](https://github.com/vitessio/vitess/pull/18123) +#### VTAdmin + * VTAdmin: Support for multiple DataTable accessing same URL [#17036](https://github.com/vitessio/vitess/pull/17036) + * fix SchemaCacheConfig.DefaultExpiration [#17609](https://github.com/vitessio/vitess/pull/17609) + * [VTAdmin] Insert into schema cache if exists already and not expired [#17908](https://github.com/vitessio/vitess/pull/17908) + * vtadmin: allow cluster IDs with underscores by sanitizing resolver scheme [#17962](https://github.com/vitessio/vitess/pull/17962) +#### VTCombo + * Fix vtcombo parsing flags incorrectly [#17743](https://github.com/vitessio/vitess/pull/17743) +#### VTGate + * Fix deadlock between health check and topology watcher [#16995](https://github.com/vitessio/vitess/pull/16995) + * Increase health check channel buffer [#17821](https://github.com/vitessio/vitess/pull/17821) +#### VTTablet + * Fix deadlock in messager and health streamer [#17230](https://github.com/vitessio/vitess/pull/17230) + * Fix potential deadlock in health streamer [#17261](https://github.com/vitessio/vitess/pull/17261) + * fix: race on storing schema engine last changed time [#17914](https://github.com/vitessio/vitess/pull/17914) + * Fix data race in Schema Engine [#17921](https://github.com/vitessio/vitess/pull/17921) + * Schema Engine Reload: check for file and allocated size columns to be available [#17967](https://github.com/vitessio/vitess/pull/17967) + * Allow the use of db credentials when verifying unmanaged tablets config [#17984](https://github.com/vitessio/vitess/pull/17984) +#### VTorc + * Errant GTID detection fix for VTOrc [#17287](https://github.com/vitessio/vitess/pull/17287) + * Use uint64 for binary log file position [#17472](https://github.com/vitessio/vitess/pull/17472) + * `vtorc`: improve handling of partial cell topo results [#17718](https://github.com/vitessio/vitess/pull/17718) + * Take into account the tablet type not being set while checking for primary tablet mismatch recovery [#18032](https://github.com/vitessio/vitess/pull/18032) +#### schema management + * `Applyschema` uses `ExecuteMultiFetchAsDba` [#17078](https://github.com/vitessio/vitess/pull/17078) + * `schemadiff`: consistent key ordering in table diff [#17141](https://github.com/vitessio/vitess/pull/17141) + * schemadiff: skip keys with expressions in Online DDL analysis [#17475](https://github.com/vitessio/vitess/pull/17475) + * `schemadiff`: explicit `ALGORITHM=INSTANT` counts as instant-able [#17942](https://github.com/vitessio/vitess/pull/17942) + * `schemadiff`: normalize `TEXT(length)` and `BLOB(length)` columns [#18030](https://github.com/vitessio/vitess/pull/18030) +#### vtclient + * Fix vtclient vtgate missing flags (specifically --grpc_*) [#17800](https://github.com/vitessio/vitess/pull/17800) + * Fix how we generate `vtclient` CLI docs [#17897](https://github.com/vitessio/vitess/pull/17897) +#### vtctldclient + * Fix flag name typo from #16852 [#16921](https://github.com/vitessio/vitess/pull/16921) + * Correct WriteTopologyPath args to match help text [#17735](https://github.com/vitessio/vitess/pull/17735) + * Filter out tablets with unknown replication lag when electing a new primary [#18004](https://github.com/vitessio/vitess/pull/18004) + * Fix `Reshard Cancel` behavior [#18020](https://github.com/vitessio/vitess/pull/18020) + * [release-22.0] Fix deadlock in `ValidateKeyspace` (#18114) [#18117](https://github.com/vitessio/vitess/pull/18117) +#### vttestserver + * vttestserver should only pass a BindAddressGprc if one is passed in [#17457](https://github.com/vitessio/vitess/pull/17457) +### CI/Build +#### Build/CI + * Flakes: Address flakes in TestMoveTables* unit tests [#16942](https://github.com/vitessio/vitess/pull/16942) + * CI: Correct etcd and ncurses package names for Ubuntu 24.04 [#16966](https://github.com/vitessio/vitess/pull/16966) + * Flakes: Address TestServerStats flakiness [#16991](https://github.com/vitessio/vitess/pull/16991) + * Specify Ubuntu 24.04 for all jobs [#17278](https://github.com/vitessio/vitess/pull/17278) + * use newer versions of actions in scorecard workflow [#17373](https://github.com/vitessio/vitess/pull/17373) + * split upgrade downgrade queries test to 2 CI workflows [#17464](https://github.com/vitessio/vitess/pull/17464) + * CI: fix to Online DDL flow test, do not t.Log from within a goroutine [#17496](https://github.com/vitessio/vitess/pull/17496) + * Revert using the oracle runners [#18015](https://github.com/vitessio/vitess/pull/18015) +#### Cluster management + * Fix flakiness in `TestListenerShutdown` [#17024](https://github.com/vitessio/vitess/pull/17024) +#### Docker + * Build `vttestserver` in GHA and send Slack message on Docker Build failure [#16963](https://github.com/vitessio/vitess/pull/16963) + * feat: add mysql 8.4 docker images [#17529](https://github.com/vitessio/vitess/pull/17529) +#### General + * [main] Upgrade the Golang version to `go1.23.3` [#17199](https://github.com/vitessio/vitess/pull/17199) + * [main] Bump go version to 1.23.4 [#17335](https://github.com/vitessio/vitess/pull/17335) + * [main] Upgrade the Golang version to `go1.23.5` [#17563](https://github.com/vitessio/vitess/pull/17563) + * Add Shlomi & Frances to VReplication CODEOWNERS [#17878](https://github.com/vitessio/vitess/pull/17878) + * [main] Upgrade the Golang version to `go1.24.1` [#17902](https://github.com/vitessio/vitess/pull/17902) + * Fix `sync` import error in keyspace_shard_discovery.go [#17972](https://github.com/vitessio/vitess/pull/17972) + * [release-22.0] Upgrade the Golang version to `go1.24.2` [#18097](https://github.com/vitessio/vitess/pull/18097) +#### Query Serving + * Flakes: Setup new fake server if it has gone away [#17023](https://github.com/vitessio/vitess/pull/17023) +#### Throttler + * Fix flakiness in throttler's `TestDormant` [#17940](https://github.com/vitessio/vitess/pull/17940) +#### VReplication + * VReplication: Restore previous minimal e2e test behavior [#17016](https://github.com/vitessio/vitess/pull/17016) +#### VTAdmin + * Update to latest Nodejs LTS and NPM [#17606](https://github.com/vitessio/vitess/pull/17606) +### Compatibility Bug +#### Query Serving + * Partially revert the binary encoding logic for safer upgrade [#18200](https://github.com/vitessio/vitess/pull/18200) +### Dependencies +#### Build/CI + * Bump golang.org/x/crypto from 0.29.0 to 0.31.0 [#17376](https://github.com/vitessio/vitess/pull/17376) + * Update bundled MySQL version to 8.0.40 [#17552](https://github.com/vitessio/vitess/pull/17552) + * Update dependencies manually [#17691](https://github.com/vitessio/vitess/pull/17691) + * Update to Go 1.24.0 [#17790](https://github.com/vitessio/vitess/pull/17790) + * Bump golang.org/x/net from 0.34.0 to 0.36.0 [#17958](https://github.com/vitessio/vitess/pull/17958) +#### General + * go mod update [#17227](https://github.com/vitessio/vitess/pull/17227) + * Bump golang.org/x/net from 0.31.0 to 0.33.0 [#17416](https://github.com/vitessio/vitess/pull/17416) + * CVE Fix: Update glog to v1.2.4 [#17524](https://github.com/vitessio/vitess/pull/17524) + * Upgrade the Golang Dependencies [#17695](https://github.com/vitessio/vitess/pull/17695) + * Upgrade the Golang Dependencies [#17803](https://github.com/vitessio/vitess/pull/17803) + * [release-22.0] Bump golang.org/x/net from 0.37.0 to 0.38.0 (#18177) [#18189](https://github.com/vitessio/vitess/pull/18189) +#### Java + * Bump commons-io:commons-io from 2.7 to 2.14.0 in /java [#16889](https://github.com/vitessio/vitess/pull/16889) + * java package updates for grpc and protobuf and release plugins [#17100](https://github.com/vitessio/vitess/pull/17100) + * [Java]: Bump mysql-connector-java version from 8.0.33 to mysql-connector-j 8.4.0 [#17522](https://github.com/vitessio/vitess/pull/17522) + * Bump io.netty:netty-handler from 4.1.110.Final to 4.1.118.Final in /java [#17730](https://github.com/vitessio/vitess/pull/17730) +#### Operator + * Upgrade `sigs.k8s.io/controller-tools` and `KUBE_VERSION` [#17889](https://github.com/vitessio/vitess/pull/17889) +#### VTAdmin + * VTAdmin: Upgrade msw package to address security vuln [#17108](https://github.com/vitessio/vitess/pull/17108) + * Bump nanoid from 3.3.7 to 3.3.8 in /web/vtadmin [#17375](https://github.com/vitessio/vitess/pull/17375) +### Documentation +#### Documentation + * Add missing changelog for PR #16852 [#17002](https://github.com/vitessio/vitess/pull/17002) + * [release-22.0] copy edit release notes to prepare for v22 GA (#18186) [#18192](https://github.com/vitessio/vitess/pull/18192) +#### General + * Reorganize the `v22.0.0` release notes [#18052](https://github.com/vitessio/vitess/pull/18052) +#### Governance + * Move Andrew Mason to emeritus [#17745](https://github.com/vitessio/vitess/pull/17745) + * Get some CLOMonitor checks passing [#17773](https://github.com/vitessio/vitess/pull/17773) + * Update email address for mattlord [#17961](https://github.com/vitessio/vitess/pull/17961) +#### Query Serving + * Update Atomic Distributed Transaction Design [#17005](https://github.com/vitessio/vitess/pull/17005) + * [release-22.0] Add summary note change for unsharded `create procedure` support (#18148) [#18157](https://github.com/vitessio/vitess/pull/18157) +### Enhancement +#### Authn/z + * Add support for hashed caching sha2 passwords [#17948](https://github.com/vitessio/vitess/pull/17948) +#### Backup and Restore + * add S3 minimum part size defined by the user [#17171](https://github.com/vitessio/vitess/pull/17171) + * Implement a per-file retry mechanism in the `BuiltinBackupEngine` [#17271](https://github.com/vitessio/vitess/pull/17271) + * Fail VTBackup early when replication or MySQL is failing [#17356](https://github.com/vitessio/vitess/pull/17356) + * Allow for specifying a specific MySQL shutdown timeout [#17923](https://github.com/vitessio/vitess/pull/17923) +#### Build/CI + * Change upgrade test to still use the older version of tests [#16937](https://github.com/vitessio/vitess/pull/16937) +#### Cluster management + * Improve errant GTID detection in ERS to handle more cases. [#16926](https://github.com/vitessio/vitess/pull/16926) + * PRS and ERS don't promote replicas taking backups [#16997](https://github.com/vitessio/vitess/pull/16997) + * go/vt/mysqlctl: add postflight_mysqld_start and preflight_mysqld_shutdown hooks [#17652](https://github.com/vitessio/vitess/pull/17652) + * Add semi-sync monitor to unblock primaries blocked on semi-sync ACKs [#17763](https://github.com/vitessio/vitess/pull/17763) + * [Feature]: Sort results of getTablets for consistency in output/readability [#17771](https://github.com/vitessio/vitess/pull/17771) + * Change healthcheck to only reload specific keyspace shard tablets [#17872](https://github.com/vitessio/vitess/pull/17872) + * Rebuild `SrvKeyspace` and `SrvVSchema` during vtgate init if required [#17915](https://github.com/vitessio/vitess/pull/17915) +#### Documentation + * CobraDocs: Remove commit hash from docs. Fix issue with workdir replacement [#17392](https://github.com/vitessio/vitess/pull/17392) + * Fix `vtbackup` help output [#17892](https://github.com/vitessio/vitess/pull/17892) +#### Evalengine + * Improved Compatibility Around LAST_INSERT_ID - evalengine [#17409](https://github.com/vitessio/vitess/pull/17409) +#### Examples + * Added the initial script for the 40x example for backup and restore [#16893](https://github.com/vitessio/vitess/pull/16893) + * Feature Request: Change varbinary to varchar in schemas used in examples folder [#17318](https://github.com/vitessio/vitess/pull/17318) +#### General + * MySQL errors: `ERWrongParamcountToNativeFct` [#16914](https://github.com/vitessio/vitess/pull/16914) + * Standardize topo flags to use hyphen-based naming [#17975](https://github.com/vitessio/vitess/pull/17975) +#### Observability + * Improve vtgate logging for buffering [#17654](https://github.com/vitessio/vitess/pull/17654) + * Add more vstream metrics for vstream manager [#17858](https://github.com/vitessio/vitess/pull/17858) +#### Online DDL + * Online DDL: detect `vreplication` errors via `vreplication_log` history [#16925](https://github.com/vitessio/vitess/pull/16925) + * Online DDL: better error messages in cut-over phase [#17052](https://github.com/vitessio/vitess/pull/17052) + * Improve Schema Engine's TablesWithSize80 query [#17066](https://github.com/vitessio/vitess/pull/17066) + * Online DDL: dynamic cut-over threshold via `ALTER VITESS_MIGRATION ... CUTOVER_THRESHOLD ...` command [#17126](https://github.com/vitessio/vitess/pull/17126) + * Online DDL: `--singleton-table` DDL strategy flag [#17169](https://github.com/vitessio/vitess/pull/17169) + * Online DDL: `ANALYZE` the shadow table before cut-over [#17201](https://github.com/vitessio/vitess/pull/17201) + * Online DDL: publish `vreplication_lag_seconds` from vreplication progress [#17263](https://github.com/vitessio/vitess/pull/17263) + * Online DDL `--analyze-table`: use non-local `ANALYZE TABLE` [#17462](https://github.com/vitessio/vitess/pull/17462) + * Online DDL forced cut-over: terminate transactions holding metadata locks on table [#17535](https://github.com/vitessio/vitess/pull/17535) + * Online DDL: consider UUID throttle ratios in `user_throttle_ratio` [#17850](https://github.com/vitessio/vitess/pull/17850) +#### Operator + * Update example operator.yaml to support vtgate HPA [#16805](https://github.com/vitessio/vitess/pull/16805) + * `operator.yaml`: pass on the `sidecarDbName` when creating a keyspace [#17739](https://github.com/vitessio/vitess/pull/17739) + * Use `vtbackup` in scheduled backups [#17869](https://github.com/vitessio/vitess/pull/17869) + * Support multiple namespaces with the vitess-operator [#17928](https://github.com/vitessio/vitess/pull/17928) + * Add deployment strategy to vtgate in `operator.yaml` [#18063](https://github.com/vitessio/vitess/pull/18063) +#### Query Serving + * Support settings changes with atomic transactions [#16974](https://github.com/vitessio/vitess/pull/16974) + * Fix to prevent stopping buffering prematurely [#17013](https://github.com/vitessio/vitess/pull/17013) + * Atomic Transaction `StartCommit` api to return the commit state [#17116](https://github.com/vitessio/vitess/pull/17116) + * --consolidator-query-waiter-cap to set the max number of waiter for consolidated query [#17244](https://github.com/vitessio/vitess/pull/17244) + * Handle MySQL handler error codes [#17252](https://github.com/vitessio/vitess/pull/17252) + * Track shard session affecting change inside the transaction [#17266](https://github.com/vitessio/vitess/pull/17266) + * Allow for dynamic configuration of DDL settings [#17328](https://github.com/vitessio/vitess/pull/17328) + * Allow dynamic configuration of vschema acl [#17333](https://github.com/vitessio/vitess/pull/17333) + * Range Query Optimization (For sequential Vindex types) [#17342](https://github.com/vitessio/vitess/pull/17342) + * Add missing tables to globally routed list in schema tracker only if they are not already present in a VSchema [#17371](https://github.com/vitessio/vitess/pull/17371) + * Add linearizable support to SQL VSchema management [#17401](https://github.com/vitessio/vitess/pull/17401) + * Improved Compatibility Around LAST_INSERT_ID [#17408](https://github.com/vitessio/vitess/pull/17408) + * Make transaction mode a dynamic configuration [#17419](https://github.com/vitessio/vitess/pull/17419) + * Views: VTGate changes for seamless integration [#17439](https://github.com/vitessio/vitess/pull/17439) + * VALUES statement AST and parsing [#17500](https://github.com/vitessio/vitess/pull/17500) + * Remove shard targeted keyspace from database qualifier on the query [#17503](https://github.com/vitessio/vitess/pull/17503) + * Add support for global routing in describe statement [#17510](https://github.com/vitessio/vitess/pull/17510) + * Engine primitive for join-values [#17518](https://github.com/vitessio/vitess/pull/17518) + * Improve sizegen to handle more types [#17583](https://github.com/vitessio/vitess/pull/17583) + * Views global routing [#17633](https://github.com/vitessio/vitess/pull/17633) + * Handle Percona compressed column extension [#17660](https://github.com/vitessio/vitess/pull/17660) + * Wrap fatal TX errors in a new `vterrors` code [#17669](https://github.com/vitessio/vitess/pull/17669) + * Parse SRID attribute for virtual columns [#17680](https://github.com/vitessio/vitess/pull/17680) + * Vtgate metrics: Added plan and query type metrics [#17727](https://github.com/vitessio/vitess/pull/17727) + * Add a Visitable interface to support AST nodes declared outside sqlparser [#17875](https://github.com/vitessio/vitess/pull/17875) + * Unsharded support for `CREATE PROCEDURE` and `DROP PROCEDURE` statement [#17946](https://github.com/vitessio/vitess/pull/17946) + * Ensure DML Queries with Large Input Rows Succeed When Passthrough DML is Enabled [#17949](https://github.com/vitessio/vitess/pull/17949) + * Pass through predicates when trying to merge apply join. [#17955](https://github.com/vitessio/vitess/pull/17955) + * Planner: Allow Arbitrary Expression Pushdown in UNION Queries [#18000](https://github.com/vitessio/vitess/pull/18000) + * Make it possible to use paths with Visitable nodes [#18053](https://github.com/vitessio/vitess/pull/18053) +#### Throttler + * Tablet throttler: read and use MySQL host metrics [#16904](https://github.com/vitessio/vitess/pull/16904) + * Multi-metrics throttler: post v21 deprecations and changes [#16915](https://github.com/vitessio/vitess/pull/16915) + * Multi-metrics throttler: adding InnoDB `history_list_length` metric [#17262](https://github.com/vitessio/vitess/pull/17262) +#### Topology + * Avoid flaky topo concurrency test [#17407](https://github.com/vitessio/vitess/pull/17407) +#### VReplication + * fix: Avoid creation of workflows with non-empty tables in target keyspace [#16874](https://github.com/vitessio/vitess/pull/16874) + * VReplication: Properly support cancel and delete for multi-tenant MoveTables [#16906](https://github.com/vitessio/vitess/pull/16906) + * VDiff: Also generate default new UUID in VtctldServer VDiffCreate [#17003](https://github.com/vitessio/vitess/pull/17003) + * VReplication: Relax restrictions on Cancel and ReverseTraffic when writes not involved [#17128](https://github.com/vitessio/vitess/pull/17128) + * Binlog: Improve ZstdInMemoryDecompressorMaxSize management [#17220](https://github.com/vitessio/vitess/pull/17220) + * VReplication: Support for filter using `IN` operator [#17296](https://github.com/vitessio/vitess/pull/17296) + * VReplication: Support binlog_row_value_options=PARTIAL_JSON [#17345](https://github.com/vitessio/vitess/pull/17345) + * Export `BuildSummary` func for VDiff show [#17413](https://github.com/vitessio/vitess/pull/17413) + * VReplication: Improve error handling in VTGate VStreams [#17558](https://github.com/vitessio/vitess/pull/17558) + * VReplication Workflow command: Allow stop/start on specific shards [#17581](https://github.com/vitessio/vitess/pull/17581) + * VReplication: Support for `BETWEEN`/`NOT BETWEEN` filter in VStream [#17721](https://github.com/vitessio/vitess/pull/17721) + * VReplication: Support ignoring the source Keyspace on MoveTables cancel/complete [#17729](https://github.com/vitessio/vitess/pull/17729) + * VReplication: Support excluding lagging tablets and use this in vstream manager [#17835](https://github.com/vitessio/vitess/pull/17835) + * VStream: Add `IS NULL` filter support [#17848](https://github.com/vitessio/vitess/pull/17848) + * VTTablet schema reload: include stats only on periodic reload for all flavors. Default to "base table" query for the "with sizes" query for 5.7 only [#17855](https://github.com/vitessio/vitess/pull/17855) + * Refactor vstream_dynamic_packet_size and vstream_packet_size flags to use dashes [#17964](https://github.com/vitessio/vitess/pull/17964) + * VReplication Workflows: make defer-secondary-keys true by default [#18006](https://github.com/vitessio/vitess/pull/18006) +#### VTAdmin + * VTAdmin: Support for Workflow Actions [#16816](https://github.com/vitessio/vitess/pull/16816) + * VTAdmin: Support for conclude txn and abandon age param [#16834](https://github.com/vitessio/vitess/pull/16834) + * VTAdmin(web): Add refresh compatibility to workflow screen (all tabs) [#16865](https://github.com/vitessio/vitess/pull/16865) + * VTAdmin: Add support for Create Reshard [#16903](https://github.com/vitessio/vitess/pull/16903) + * VTAdmin: Support for `Materialize` Create [#16941](https://github.com/vitessio/vitess/pull/16941) + * VTAdmin: Support for `VDiff` create and show last [#16943](https://github.com/vitessio/vitess/pull/16943) + * VTAdmin: Support for schema migrations view/create [#17134](https://github.com/vitessio/vitess/pull/17134) + * Add GetTransactionInfo in VTadmin API and page [#17142](https://github.com/vitessio/vitess/pull/17142) + * VTAdmin(web): Add simpler topology tree structure [#17245](https://github.com/vitessio/vitess/pull/17245) + * vtadmin: enable sorting in all tables [#17468](https://github.com/vitessio/vitess/pull/17468) + * VTAdmin to use VTGate's vexplain [#17508](https://github.com/vitessio/vitess/pull/17508) + * VTAdmin: Add advanced workflow `switchtraffic` options [#17658](https://github.com/vitessio/vitess/pull/17658) + * VTAdmin: update logo and favicon for the new Vitess logos [#17715](https://github.com/vitessio/vitess/pull/17715) + * vtadmin: display transaction participant list as comma separated [#17986](https://github.com/vitessio/vitess/pull/17986) +#### VTGate + * Store the health check subscriber name to improve error message [#17863](https://github.com/vitessio/vitess/pull/17863) +#### VTTablet + * vttablet debugenv changes [#17161](https://github.com/vitessio/vitess/pull/17161) + * Fail loading an ACL config if the provided file is empty and enforceTableACLConfig is true [#17274](https://github.com/vitessio/vitess/pull/17274) + * Refactor Disk Stall implementation and mark tablet not serving if disk is stalled [#17624](https://github.com/vitessio/vitess/pull/17624) +#### VTorc + * Improve efficiency of `vtorc` topo calls [#17071](https://github.com/vitessio/vitess/pull/17071) + * `vtorc`: require topo for `Healthy: true` in `/debug/health` [#17129](https://github.com/vitessio/vitess/pull/17129) + * `vtorc`: make SQL formatting consistent [#17154](https://github.com/vitessio/vitess/pull/17154) + * Fix errant GTID detection in VTOrc to also work with a replica not connected to any primary [#17267](https://github.com/vitessio/vitess/pull/17267) + * Add StalledDiskPrimary analysis and recovery to vtorc [#17470](https://github.com/vitessio/vitess/pull/17470) + * Use prefix in all vtorc check and recover logs [#17526](https://github.com/vitessio/vitess/pull/17526) + * Add stats for shards watched by VTOrc, purge stale shards [#17815](https://github.com/vitessio/vitess/pull/17815) + * Add VTOrc recovery for mismatch in tablet type [#17870](https://github.com/vitessio/vitess/pull/17870) + * `vtorc`: add tablets watched stats [#17911](https://github.com/vitessio/vitess/pull/17911) + * `vtorc`: add stats to shard locks and instance discovery [#17977](https://github.com/vitessio/vitess/pull/17977) +#### schema management + * Only run sidecardb change detection on serving primary tablets [#17051](https://github.com/vitessio/vitess/pull/17051) + * `engine.Reload()`: read InnoDB tables sizes including `FULLTEXT` index volume [#17118](https://github.com/vitessio/vitess/pull/17118) + * `schemadiff`: validate uniqueness of `CHECK` and of `FOREIGN KEY` constraints [#17627](https://github.com/vitessio/vitess/pull/17627) + * `schemadiff` textual annotation fix + tests [#17630](https://github.com/vitessio/vitess/pull/17630) + * Supporting `InnoDBParallelReadThreadsCapability` [#17689](https://github.com/vitessio/vitess/pull/17689) + * Ignore execution time errors for schemadiff view analysis [#17704](https://github.com/vitessio/vitess/pull/17704) + * schemadiff: `ViewDependencyUnresolvedError` lists missing referenced entities [#17711](https://github.com/vitessio/vitess/pull/17711) +#### vtctldclient + * Add RPC to read the statements to be executed in an unresolved prepared transaction [#17131](https://github.com/vitessio/vitess/pull/17131) +#### vttestserver + * Add support for receiving `grpc_bind_adress` on `vttestserver` [#17231](https://github.com/vitessio/vitess/pull/17231) +#### web UI + * VTAdmin(web): Better visualization for JSON screens [#17459](https://github.com/vitessio/vitess/pull/17459) + * VTAdmin: Show Hostname Alongside Tablet ID on tablet selection drop-downs [#17982](https://github.com/vitessio/vitess/pull/17982) +### Feature +#### Cluster management + * Tool to determine mapping from vindex and value to shard [#17290](https://github.com/vitessio/vitess/pull/17290) +#### Query Serving + * Add savepoint support to atomic distributed transaction [#16863](https://github.com/vitessio/vitess/pull/16863) + * feat: add metrics for atomic distributed transactions [#16939](https://github.com/vitessio/vitess/pull/16939) + * connection pool: max idle connections implementation [#17443](https://github.com/vitessio/vitess/pull/17443) + * [release-22.0] Add a new implementation for handling multiple queries without needing to split them (#18059) [#18139](https://github.com/vitessio/vitess/pull/18139) +#### VReplication + * LookupVindex: Implement `internalize` command for lookup vindexes [#17429](https://github.com/vitessio/vitess/pull/17429) + * VReplication: Support passing VStream filters down to MySQL [#17677](https://github.com/vitessio/vitess/pull/17677) + * VReplication SwitchTraffic: for a dry run check if sequences need to be updated [#17842](https://github.com/vitessio/vitess/pull/17842) +#### VTGate + * Add option to log error queries only [#17554](https://github.com/vitessio/vitess/pull/17554) +#### VTTablet + * Add a way to know if DemotePrimary is blocked and send it in the health stream [#17289](https://github.com/vitessio/vitess/pull/17289) + * Add index and table metrics to vttablet [#17570](https://github.com/vitessio/vitess/pull/17570) +#### VTorc + * Improve VTOrc config handling to support dynamic variables [#17218](https://github.com/vitessio/vitess/pull/17218) + * Support KeyRange in `--clusters_to_watch` flag [#17604](https://github.com/vitessio/vitess/pull/17604) +### Internal Cleanup +#### ACL + * Remove unused code from go/acl [#17741](https://github.com/vitessio/vitess/pull/17741) +#### Backup and Restore + * Remove binlog-server point in time recoveries code & tests [#17361](https://github.com/vitessio/vitess/pull/17361) +#### Build/CI + * Add release-21.0 to the Golang Upgrade workflow [#16916](https://github.com/vitessio/vitess/pull/16916) + * Change the name of the vitess-tester repository [#16917](https://github.com/vitessio/vitess/pull/16917) + * Security improvements to GitHub Actions [#17520](https://github.com/vitessio/vitess/pull/17520) + * Rename docker clusters for more clarity and group all java test together [#17542](https://github.com/vitessio/vitess/pull/17542) + * Upgrade default etcd version to 3.5.17 [#17653](https://github.com/vitessio/vitess/pull/17653) + * test: replace `t.Errorf` and `t.Fatalf` with `assert` and `require` [#17720](https://github.com/vitessio/vitess/pull/17720) + * Simply changing GH Actions runner [#17788](https://github.com/vitessio/vitess/pull/17788) + * nit: move new `const`s to own section [#17802](https://github.com/vitessio/vitess/pull/17802) + * Add support for `GOPRIVATE` in CI templates [#17806](https://github.com/vitessio/vitess/pull/17806) + * Allow build git envs to be set in `docker/lite` [#17827](https://github.com/vitessio/vitess/pull/17827) + * Set 16 core runners to oci gh arc runners [#17879](https://github.com/vitessio/vitess/pull/17879) + * Add @frouioui to CODEOWNERS for backups [#17927](https://github.com/vitessio/vitess/pull/17927) + * Migrate all but one of the other jobs to use cncf-hosted gha runners [#17943](https://github.com/vitessio/vitess/pull/17943) + * re-replace most runners with the cncf-hosted runners [#17993](https://github.com/vitessio/vitess/pull/17993) +#### CLI + * Remove deprecated items before `v22.0.0` [#17894](https://github.com/vitessio/vitess/pull/17894) +#### Cluster management + * Remove legacy way of considering SQL thread being stopped on a replica as unreachable [#17918](https://github.com/vitessio/vitess/pull/17918) +#### General + * sqltypes: add ToTime conversion funcs [#17178](https://github.com/vitessio/vitess/pull/17178) + * Fix integer parsing logic [#17650](https://github.com/vitessio/vitess/pull/17650) + * Remove unused code from go/mysql package [#17740](https://github.com/vitessio/vitess/pull/17740) + * Remove bits of unused code across various packages [#17785](https://github.com/vitessio/vitess/pull/17785) + * sqltypes: move datetime handling to Value method [#17929](https://github.com/vitessio/vitess/pull/17929) + * Remove direct usage of archived github.com/pkg/errors (#17933) [#17934](https://github.com/vitessio/vitess/pull/17934) + * Update to golangci-lint 2 [#18050](https://github.com/vitessio/vitess/pull/18050) +#### Java + * Update the how to release java docs [#17603](https://github.com/vitessio/vitess/pull/17603) +#### Observability + * Remove unused go/stats code [#17742](https://github.com/vitessio/vitess/pull/17742) +#### Online DDL + * Online DDL: removal of `gh-ost` and `pt-osc` strategies [#17626](https://github.com/vitessio/vitess/pull/17626) +#### Query Serving + * Parse enum/set values with `sqlparser` [#17133](https://github.com/vitessio/vitess/pull/17133) + * Deprecate `twopc_enable` flag and change input type for `twopc_abandon_age` to time.Duration [#17279](https://github.com/vitessio/vitess/pull/17279) + * Improve logging in buffering [#17294](https://github.com/vitessio/vitess/pull/17294) + * refactor: rename DefaultKeyspace() to CurrentKeyspace() [#17303](https://github.com/vitessio/vitess/pull/17303) + * refactor: VTGate executor with a runnable context package [#17305](https://github.com/vitessio/vitess/pull/17305) + * Clean up duplicate datetime parsing code [#17582](https://github.com/vitessio/vitess/pull/17582) + * Make sure no AST types are bare slices [#17674](https://github.com/vitessio/vitess/pull/17674) + * Small planner refactoring [#17851](https://github.com/vitessio/vitess/pull/17851) + * Refactor Join Predicate Handling in Planner [#17877](https://github.com/vitessio/vitess/pull/17877) + * VTGate: Session in StreamExecute response as default [#17907](https://github.com/vitessio/vitess/pull/17907) + * Refactor transitive closure handling [#17978](https://github.com/vitessio/vitess/pull/17978) +#### TabletManager + * Use non-deprecated flags to skip replication [#17400](https://github.com/vitessio/vitess/pull/17400) + * Add forward compatibility for caching_sha2_password and replication [#18033](https://github.com/vitessio/vitess/pull/18033) +#### Throttler + * throttler: formal gRPC calls in endtoend tests, removing HTTP API calls [#16530](https://github.com/vitessio/vitess/pull/16530) + * e2e framework change to find empty throttler config [#17228](https://github.com/vitessio/vitess/pull/17228) + * Multi-metrics throttler post v21 cleanup: remove unthrottled entry from topo [#17283](https://github.com/vitessio/vitess/pull/17283) +#### VReplication + * refac: Remove duplicate `forAllShards` methods from `vt/vtctl/workflow` [#17025](https://github.com/vitessio/vitess/pull/17025) + * VDiff: Comment the VDiffCreate proto msg and set reasonable server side defaults [#17026](https://github.com/vitessio/vitess/pull/17026) + * refac: Refactor `Server.GetWorkflows()` [#17092](https://github.com/vitessio/vitess/pull/17092) + * Refactor `Server.LookupVindexCreate` [#17242](https://github.com/vitessio/vitess/pull/17242) + * Remove unused code for old START_GTID logic [#17265](https://github.com/vitessio/vitess/pull/17265) + * VDiff: Remove extra % sign in vdiff text report template [#17568](https://github.com/vitessio/vitess/pull/17568) + * VReplication: CODEOWNERS and unit test housekeeping [#17646](https://github.com/vitessio/vitess/pull/17646) + * Always make sure to escape all strings [#17649](https://github.com/vitessio/vitess/pull/17649) +#### VTGate + * Change keys of the discovery flags such that they conform to the convention [#17430](https://github.com/vitessio/vitess/pull/17430) +#### VTTablet + * Remove deprecated `--disable_active_reparents` flag [#17919](https://github.com/vitessio/vitess/pull/17919) +#### VTorc + * `vtorc`: cleanup init db handling [#17198](https://github.com/vitessio/vitess/pull/17198) + * Cleanup legacy MariaDB bits from vtorc [#17415](https://github.com/vitessio/vitess/pull/17415) + * Make all durability policy names constants [#17448](https://github.com/vitessio/vitess/pull/17448) + * Remove unused code in discovery queue creation [#17515](https://github.com/vitessio/vitess/pull/17515) + * `vtorc`: use `golang.org/x/sync/semaphore`, add flag for db concurrency [#17837](https://github.com/vitessio/vitess/pull/17837) + * `vtorc`: use `errgroup` in keyspace/shard discovery [#17857](https://github.com/vitessio/vitess/pull/17857) + * `vtorc`: add stats for discovery workers [#17937](https://github.com/vitessio/vitess/pull/17937) +#### vtctldclient + * Move all e2e tests to vtctldclient [#17441](https://github.com/vitessio/vitess/pull/17441) + * Add vtctldclient missing cmds and remove remaining vtctl[client] usage in e2e tests [#17442](https://github.com/vitessio/vitess/pull/17442) +### Performance +#### Backup and Restore + * go/stats: improve performance of safeJoinLabels [#16953](https://github.com/vitessio/vitess/pull/16953) +#### Performance + * `vtorc`: fetch all tablets from cells once + filter during refresh [#17388](https://github.com/vitessio/vitess/pull/17388) + * smartconnpool: Better handling for idle expiration [#17757](https://github.com/vitessio/vitess/pull/17757) +#### Query Serving + * grpc: upgrade to 1.66.2 and use Codec v2 [#16790](https://github.com/vitessio/vitess/pull/16790) + * Benchmark Prepared statement and expected Improvement [#17449](https://github.com/vitessio/vitess/pull/17449) + * Reduce VTGate Normalizer multiple AST walks [#17619](https://github.com/vitessio/vitess/pull/17619) + * Optimise AST rewriting [#17623](https://github.com/vitessio/vitess/pull/17623) + * Faster dependency copying [#17708](https://github.com/vitessio/vitess/pull/17708) + * Use ast-paths for subquery planning to improve performance [#17738](https://github.com/vitessio/vitess/pull/17738) + * Faster Prepared Statement Execution by Using Raw SQL for Caching [#17777](https://github.com/vitessio/vitess/pull/17777) + * pool: reopen connection closed by idle timeout [#17818](https://github.com/vitessio/vitess/pull/17818) + * Fix: Separate Lock for Keyspace to Update Controller Mapping in Schema Tracking [#17873](https://github.com/vitessio/vitess/pull/17873) + * Implement Deferred Optimization for Prepared Statements [#17992](https://github.com/vitessio/vitess/pull/17992) + * Only sort when receiving results from multiple shards [#17998](https://github.com/vitessio/vitess/pull/17998) +#### Throttler + * Throttler: reduce regexp/string allocations by pre-computing pascal case [#17817](https://github.com/vitessio/vitess/pull/17817) +#### VReplication + * VReplication: Optimize replication on target tablets [#17166](https://github.com/vitessio/vitess/pull/17166) + * VStreamer: For larger compressed transaction payloads, stream the internal contents [#17239](https://github.com/vitessio/vitess/pull/17239) + * VReplication: Disable /debug/vrlog by default [#17832](https://github.com/vitessio/vitess/pull/17832) +#### VTGate + * Ensure all topo read calls consider `--topo_read_concurrency` [#17276](https://github.com/vitessio/vitess/pull/17276) +#### VTTablet + * Skip Field Query for Views During Schema Refresh to Improve Reload Time [#18066](https://github.com/vitessio/vitess/pull/18066) +#### VTorc + * Move to native sqlite3 queries [#17124](https://github.com/vitessio/vitess/pull/17124) + * `vtorc`: cleanup discover queue, add concurrency flag [#17825](https://github.com/vitessio/vitess/pull/17825) + * `vtorc`: remove duplicate instance read from backend [#17834](https://github.com/vitessio/vitess/pull/17834) + * `vtorc`: add index for `inst.ReadInstanceClusterAttributes` table scan [#17866](https://github.com/vitessio/vitess/pull/17866) + * `vtorc`: skip unnecessary backend read in `logic.LockShard(...)` [#17900](https://github.com/vitessio/vitess/pull/17900) +### Regression +#### Backup and Restore + * Fix unreachable errors when taking a backup [#17062](https://github.com/vitessio/vitess/pull/17062) +#### Java + * [Java] Fix dependency issues in Java package [#17481](https://github.com/vitessio/vitess/pull/17481) +#### Query Serving + * Add support for `MultiEqual` opcode for lookup vindexes. [#16975](https://github.com/vitessio/vitess/pull/16975) + * fix: route engine to handle column truncation for execute after lookup [#16981](https://github.com/vitessio/vitess/pull/16981) + * Fix release 18 again [#17069](https://github.com/vitessio/vitess/pull/17069) + * Fix a potential connection pool leak. [#17807](https://github.com/vitessio/vitess/pull/17807) +#### VTTablet + * fix: App and Dba Pool metrics [#18048](https://github.com/vitessio/vitess/pull/18048) +### Release +#### Build/CI + * Fix the release workflow [#16964](https://github.com/vitessio/vitess/pull/16964) + * v19 EOL: Remove v19 from Golang Update Version CI workflow [#17932](https://github.com/vitessio/vitess/pull/17932) +#### Documentation + * Update the EOL documentation [#17215](https://github.com/vitessio/vitess/pull/17215) + * [release-22.0] Update release notes with proper upgrade path [#18197](https://github.com/vitessio/vitess/pull/18197) + * [release-22.0] Narrow down affected users by new v22 migration path [#18199](https://github.com/vitessio/vitess/pull/18199) +#### General + * Bump to `v22.0.0-SNAPSHOT` after the `v21.0.0-RC1` release [#16913](https://github.com/vitessio/vitess/pull/16913) + * [main] Copy `v21.0.0-RC1` release notes [#16954](https://github.com/vitessio/vitess/pull/16954) + * [main] Copy `v21.0.0-RC2` release notes [#17048](https://github.com/vitessio/vitess/pull/17048) + * [main] Copy `v21.0.0` release notes [#17097](https://github.com/vitessio/vitess/pull/17097) + * [main] Copy `v18.0.8` release notes [#17155](https://github.com/vitessio/vitess/pull/17155) + * [main] Copy `v19.0.7` release notes [#17157](https://github.com/vitessio/vitess/pull/17157) + * [main] Copy `v20.0.3` release notes [#17159](https://github.com/vitessio/vitess/pull/17159) + * [main] Copy `v19.0.8` release notes [#17320](https://github.com/vitessio/vitess/pull/17320) + * [main] Copy `v20.0.4` release notes [#17322](https://github.com/vitessio/vitess/pull/17322) + * [main] Copy `v21.0.1` release notes [#17324](https://github.com/vitessio/vitess/pull/17324) + * [main] Copy `v19.0.9` release notes [#17595](https://github.com/vitessio/vitess/pull/17595) + * [main] Copy `v20.0.5` release notes [#17597](https://github.com/vitessio/vitess/pull/17597) + * [main] Copy `v21.0.2` release notes [#17599](https://github.com/vitessio/vitess/pull/17599) + * [main] Copy `v21.0.3` release notes [#17765](https://github.com/vitessio/vitess/pull/17765) + * [main] Copy `v20.0.6` release notes [#17767](https://github.com/vitessio/vitess/pull/17767) + * [main] Copy `v19.0.10` release notes [#17769](https://github.com/vitessio/vitess/pull/17769) + * [release-22.0] Code Freeze for `v22.0.0-RC1` [#18087](https://github.com/vitessio/vitess/pull/18087) + * Bump to `v23.0.0-SNAPSHOT` after the `v22.0.0-RC1` release [#18088](https://github.com/vitessio/vitess/pull/18088) + * [release-22.0] Release of `v22.0.0-RC1` [#18128](https://github.com/vitessio/vitess/pull/18128) + * [release-22.0] Bump to `v22.0.0-SNAPSHOT` after the `v22.0.0-RC1` release [#18134](https://github.com/vitessio/vitess/pull/18134) + * [release-22.0] Release of `v22.0.0-RC2` [#18168](https://github.com/vitessio/vitess/pull/18168) + * [release-22.0] Bump to `v22.0.0-SNAPSHOT` after the `v22.0.0-RC2` release [#18170](https://github.com/vitessio/vitess/pull/18170) + * [release-22.0] Release of `v22.0.0-RC3` [#18204](https://github.com/vitessio/vitess/pull/18204) + * [release-22.0] Bump to `v22.0.0-SNAPSHOT` after the `v22.0.0-RC3` release [#18206](https://github.com/vitessio/vitess/pull/18206) +### Testing +#### Backup and Restore + * fix flaky test on mysqlshell backup engine [#17037](https://github.com/vitessio/vitess/pull/17037) + * [release-21.0] fix flaky test on mysqlshell backup engine [#17981](https://github.com/vitessio/vitess/pull/17981) +#### Build/CI + * Fix flakiness in `TestDisruptions` for two pc testing [#17106](https://github.com/vitessio/vitess/pull/17106) + * Flakes: Address flakiness in TestZkConnClosedOnDisconnect [#17194](https://github.com/vitessio/vitess/pull/17194) + * A couple `endtoend` cluster tests enhancement [#17247](https://github.com/vitessio/vitess/pull/17247) + * Fix fuzzer paths [#17380](https://github.com/vitessio/vitess/pull/17380) + * Use release branches for upgrade downgrade tests [#18029](https://github.com/vitessio/vitess/pull/18029) +#### Cluster management + * Flaky test fixes [#16940](https://github.com/vitessio/vitess/pull/16940) +#### General + * Remove broken panic handler [#17354](https://github.com/vitessio/vitess/pull/17354) +#### Java + * Remove deprecated syntax [#17631](https://github.com/vitessio/vitess/pull/17631) +#### Operator + * Add CI for VTop example [#16007](https://github.com/vitessio/vitess/pull/16007) +#### Query Serving + * fix: flaky test on twopc transaction [#17068](https://github.com/vitessio/vitess/pull/17068) + * Fix flaky test `TestShardSync` [#17095](https://github.com/vitessio/vitess/pull/17095) + * Run plan tests in end to end configuration [#17117](https://github.com/vitessio/vitess/pull/17117) + * List join predicates used in `GetVExplainKeys` [#17130](https://github.com/vitessio/vitess/pull/17130) + * Fix flakiness in `TestReadTransactionStatus` [#17277](https://github.com/vitessio/vitess/pull/17277) + * Add multi table updates in the 2pc fuzzer testing [#17293](https://github.com/vitessio/vitess/pull/17293) + * Add test for vindexes in atomic transactions package [#17308](https://github.com/vitessio/vitess/pull/17308) + * Fix flakiness in `TestSemiSyncRequiredWithTwoPC` [#17332](https://github.com/vitessio/vitess/pull/17332) + * test fix: make sure to keep the skipE2E field around [#17357](https://github.com/vitessio/vitess/pull/17357) + * Ensure PRS runs for all the shards in `TestSemiSyncRequiredWithTwoPC` [#17384](https://github.com/vitessio/vitess/pull/17384) + * Consistent lookup vindex tests for atomic distributed transactions [#17393](https://github.com/vitessio/vitess/pull/17393) + * benchmark: TwoPC commit mode [#17397](https://github.com/vitessio/vitess/pull/17397) + * test: make it easier to run tests without a main keyspace [#17501](https://github.com/vitessio/vitess/pull/17501) + * Fix TestTrackerNoLock flaky test by increasing time to mark failure [#17886](https://github.com/vitessio/vitess/pull/17886) + * Test: Increase query timeout to fix flaky test 'TestQueryTimeoutWithShardTargeting' [#18016](https://github.com/vitessio/vitess/pull/18016) + * Skip end-to-end test [#18162](https://github.com/vitessio/vitess/pull/18162) +#### TabletManager + * Skip `TestRunFailsToStartTabletManager` for now [#17167](https://github.com/vitessio/vitess/pull/17167) + * Fix flaky mysqlctl blackbox test [#17387](https://github.com/vitessio/vitess/pull/17387) +#### VReplication + * VReplication fix Flaky e2e test TestMoveTablesBuffering [#17180](https://github.com/vitessio/vitess/pull/17180) + * VReplication Flaky Test fix: TestVtctldMigrateSharded [#17182](https://github.com/vitessio/vitess/pull/17182) + * test: Add missing unit tests in `vtctl/workflow` [#17304](https://github.com/vitessio/vitess/pull/17304) + * test: Add missing tests for `traffic_switcher.go` [#17334](https://github.com/vitessio/vitess/pull/17334) + * VReplication: Enable VPlayerBatching in unit tests [#17339](https://github.com/vitessio/vitess/pull/17339) + * Flaky test fix: TestMoveTablesSharded and TestMoveTablesUnsharded [#17343](https://github.com/vitessio/vitess/pull/17343) + * test: Include unit tests for `switcher-dry-run` [#17403](https://github.com/vitessio/vitess/pull/17403) + * Flaky TestMoveTables(Un)sharded: Handle race condition [#17440](https://github.com/vitessio/vitess/pull/17440) + * Move VDiff related workflow server APIs to `vdiff.go` and add unit tests [#17466](https://github.com/vitessio/vitess/pull/17466) + * Fix flaky vreplication tests: correct logic that checks for workflow state in test helper [#17498](https://github.com/vitessio/vitess/pull/17498) + * Flaky TestTickSkip: Remove inherently flaky test [#17504](https://github.com/vitessio/vitess/pull/17504) + * test: Add unit tests for `vtctl/workflow` [#17618](https://github.com/vitessio/vitess/pull/17618) + * test: Add more unit tests for `server.go` [#17679](https://github.com/vitessio/vitess/pull/17679) + * CI: Add some randomness to the ports used in VReplication e2e tests [#17712](https://github.com/vitessio/vitess/pull/17712) +#### VTGate + * [release-22.0]: skip test check for upgrade test for TestStraighJoin [#18153](https://github.com/vitessio/vitess/pull/18153) +#### VTTablet + * Fix data race in `TestIsServingLocked` [#17728](https://github.com/vitessio/vitess/pull/17728) +#### VTorc + * Remove mysql parameters from VTOrc setup [#16996](https://github.com/vitessio/vitess/pull/16996) + * Fix flakiness in checking for drained tablets in Vtorc test [#18008](https://github.com/vitessio/vitess/pull/18008) +#### schema management + * `schemadiff`: more index expression validations (tests only) [#17483](https://github.com/vitessio/vitess/pull/17483) + diff --git a/changelog/22.0/22.0.0/release_notes.md b/changelog/22.0/22.0.0/release_notes.md new file mode 100644 index 00000000000..965815a63dd --- /dev/null +++ b/changelog/22.0/22.0.0/release_notes.md @@ -0,0 +1,382 @@ +# Release of Vitess v22.0.0 +## Summary + +### Table of Contents + +- **[Major Changes](#major-changes)** + - **[Deprecations](#deprecations)** + - [Metrics](#deprecated-metrics) + - [CLI Flags](#deprecated-cli-flags) + - **[Deletions](#deletions)** + - [Metrics](#deleted-metrics) + - [CLI Flags](#deleted-cli-flags) + - [gh-ost and pt-osc Online DDL strategies](#deleted-ghost-ptosc) + - **[New Metrics](#new-metrics)** + - [VTGate](#new-vtgate-metrics) + - [VTTablet](#new-vtgate-metrics) + - **[Config File Changes](#config-file-changes)** + - [VTOrc](#vtorc-config-file-changes) + - [VTGate](#vtgate-config-file-changes) + - **[VTOrc](#vtorc)** + - [Stalled Disk Recovery](#stall-disk-recovery-vtorc) + - [KeyRanges in `--clusters_to_watch`](#key-range-vtorc) + - **[New Default Versions](#new-default-versions)** + - [MySQL 8.0.40](#mysql-8-0-40) + - [Docker `vitess/lite` images with Debian Bookworm](#debian-bookworm) + - **[New Support](#new-support)** + - [More Efficient JSON Replication](#efficient-json-replication) + - [LAST_INSERT_ID(x)](#last-insert-id) + - [Maximum Idle Connections in the Pool](#max-idle-connections) + - [Filtering Query logs on Error](#query-logs) + - [MultiQuery RPC in vtgate](#multiquery) + - [Unsharded `CREATE PROCEDURE` support](#create-procedure) + - **[Optimization](#optimization)** + - [Prepared Statement](#prepared-statement) + - **[New VtctldServer RPC](#rpc-changes)** + - **[Prefer not promoting a replica that is currently taking a backup](#reparents-prefer-not-backing-up)** + - **[Semi-sync monitor in vttablet](#semi-sync-monitor)** + - **[Wrapped fatal transaction errors](#new-errors-fatal-tx)** +- **[Minor Changes](#minor-changes)** + - **[Topology read concurrency behaviour changes](#topo-read-concurrency-changes)** + - **[VTTablet](#minor-changes-vttablet)** + - [CLI Flags](#flags-vttablet) + - [ACL enforcement and reloading](#reloading-vttablet-acl) + - **[VTAdmin](#vtadmin)** + - [Updated to node v22.13.1](#updated-node) + +## Major Changes + +### Deprecations + +#### Metrics + +| Component | Metric Name | Deprecation PR | +|:---------:|:-------------------------:|:-------------------------------------------------------:| +| `vtgate` | `QueriesProcessed` | [#17727](https://github.com/vitessio/vitess/pull/17727) | +| `vtgate` | `QueriesRouted` | [#17727](https://github.com/vitessio/vitess/pull/17727) | +| `vtgate` | `QueriesProcessedByTable` | [#17727](https://github.com/vitessio/vitess/pull/17727) | +| `vtgate` | `QueriesRoutedByTable` | [#17727](https://github.com/vitessio/vitess/pull/17727) | + + +#### CLI Flags + +| Component | Flag Name | Notes | Deprecation PR | +|:----------:|:--------------------------------:|----------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------:| +| `vttablet` | `twopc_enable` | Usage of TwoPC commit will be determined by the `transaction_mode` set on VTGate via flag or session variable. | [#17279](https://github.com/vitessio/vitess/pull/17279) | +| `vtgate` | `grpc-send-session-in-streaming` | Session will always be sent as part of the response from the StreamExecute RPC. | [#17907](https://github.com/vitessio/vitess/pull/17907) | + +--- + +### Deletions + +#### Metrics + +| Component | Metric Name | Was Deprecated In | Deletion PR | +|:----------:|:---------------------:|:-----------------:|:-------------------------------------------------------:| +| `vttablet` | `QueryCacheLength` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) | +| `vttablet` | `QueryCacheSize` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) | +| `vttablet` | `QueryCacheCapacity` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) | +| `vttablet` | `QueryCacheEvictions` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) | +| `vttablet` | `QueryCacheHits` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) | +| `vttablet` | `QueryCacheMisses` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) | + +#### CLI Flags + +| Component | Flag Name | Was Deprecated In | Deletion PR | +|:-----------------------------:|:----------------------------------:|:-----------------:|:-------------------------------------------------------:| +| `vttablet` | `queryserver-enable-settings-pool` | `v21.0.0` | [#16280](https://github.com/vitessio/vitess/pull/16280) | +| `vttablet` | `remove-sharded-auto-increment` | `v21.0.0` | [#16860](https://github.com/vitessio/vitess/pull/16860) | +| `vttablet` | `disable_active_reparents` | `v20.0.0` | [#14871](https://github.com/vitessio/vitess/pull/14871) | +| `vtgate`, `vtcombo`, `vtctld` | `healthcheck-dial-concurrency` | `v21.0.0` | [#16378](https://github.com/vitessio/vitess/pull/16378) | + +#### gh-ost and pt-osc Online DDL strategies + +Vitess no longer recognizes the `gh-ost` and `pt-osc` (`pt-online-schema-change`) Online DDL strategies. The `vitess` strategy is the recommended way to make schema changes at scale. `mysql` and `direct` strategies continue to be supported. + +These `vttablet` flags have been removed: + +- `--gh-ost-path` +- `--pt-osc-path` + +Attempting to use `gh-ost` or `pt-osc` as `--ddl-strategy` will yield an error: +```sh +$ vtctldclient ApplySchema --ddl-strategy="gh-ost" ... +$ vtctldclient ApplySchema --ddl-strategy="pt-osc" ... +``` + +--- + +### New Metrics + +#### VTGate + +| Name | Dimensions | Description | PR | +|:-------------------------:|:-------------------------------------:|:-----------------------------------------------------------:|:-------------------------------------------------------:| +| `QueryExecutions` | `Query`, `Plan`, `Tablet` | Number of queries executed. | [#17727](https://github.com/vitessio/vitess/pull/17727) | +| `QueryRoutes` | `Query`, `Plan`, `Tablet` | Number of vttablets the query was executed on. | [#17727](https://github.com/vitessio/vitess/pull/17727) | +| `QueryExecutionsByTable` | `Query`, `Table` | Queries executed by vtgate, with counts recorded per table. | [#17727](https://github.com/vitessio/vitess/pull/17727) | +| `VStreamsCount` | `Keyspace`, `ShardName`, `TabletType` | Number of active vstreams. | [#17858](https://github.com/vitessio/vitess/pull/17858) | +| `VStreamsEventsStreamed` | `Keyspace`, `ShardName`, `TabletType` | Number of events sent across all vstreams. | [#17858](https://github.com/vitessio/vitess/pull/17858) | +| `VStreamsEndedWithErrors` | `Keyspace`, `ShardName`, `TabletType` | Number of vstreams that ended with errors. | [#17858](https://github.com/vitessio/vitess/pull/17858) | +| `CommitModeTimings` | `Mode` | Timing metrics for commit (Single, Multi, TwoPC). | [#16939](https://github.com/vitessio/vitess/pull/16939) | +| `CommitUnresolved` | N/A | Counter for 2PC transaction failures after Prepare. | [#16939](https://github.com/vitessio/vitess/pull/16939) | + + +The work done in [#17727](https://github.com/vitessio/vitess/pull/17727) introduces new metrics for queries. Via this work we have deprecated several vtgate metrics, please see the [Deprecated Metrics](#deprecated-metrics) section. Here is an example of how the new metrics are calculated: +``` +Query: select t1.a, t2.b from t1 join t2 on t1.id = t2.id +Shards: 2 +Sharding Key: id for both tables + +Metrics Published: +1. QueryExecutions – {select, scatter, primary}, 1 +2. QueryRoutes – {select, scatter, primary}, 2 +3. QueryExecutionsByTable – {select, t1}, 1 and {select, t2}, 1 +``` + +#### VTTablet + +| Name | Dimensions | Description | PR | +|:-------------------------:|:----------------:|:-------------------------------------------------:|:-------------------------------------------------------:| +| `TableRows` | `Table` | Estimated number of rows in the table. | [#17570](https://github.com/vitessio/vitess/pull/17570) | +| `TableClusteredIndexSize` | `Table` | Byte size of the clustered index (i.e. row data). | [#17570](https://github.com/vitessio/vitess/pull/17570) | +| `IndexCardinality` | `Table`, `Index` | Estimated number of unique values in the index | [#17570](https://github.com/vitessio/vitess/pull/17570) | +| `IndexBytes` | `Table`, `Index` | Byte size of the index. | [#17570](https://github.com/vitessio/vitess/pull/17570) | +| `UnresolvedTransaction` | `ManagerType` | Current number of unresolved transactions. | [#16939](https://github.com/vitessio/vitess/pull/16939) | +| `CommitPreparedFail` | `FailureType` | Transactions that failed to commit after prepare. | [#16939](https://github.com/vitessio/vitess/pull/16939) | +| `RedoPreparedFail` | `FailureType` | Transactions that failed to re-prepare. | [#16939](https://github.com/vitessio/vitess/pull/16939) | + +--- + +### Config File Changes + +#### VTOrc + +VTOrc now supports dynamic configuration using [viper](https://github.com/spf13/viper). The old `--config` parameter has been removed. Use the `--config-file` parameter instead. Configuration can be provided in json, yaml or any other format that viper supports. + +The following fields can be dynamically changed - +1. `instance-poll-time` +2. `prevent-cross-cell-failover` +3. `snapshot-topology-interval` +4. `reasonable-replication-lag` +5. `audit-to-backend` +6. `audit-to-syslog` +7. `audit-purge-duration` +8. `wait-replicas-timeout` +9. `tolerable-replication-lag` +10. `topo-information-refresh-duration` +11. `recovery-poll-duration` +12. `allow-emergency-reparent` +13. `change-tablets-with-errant-gtid-to-drained` + +To upgrade to the new version of the configuration file, first switch to using the flags in your current deployment before upgrading. Then you can switch to using the configuration file after upgrade. + +#### VTGate + +The Viper configuration keys for the following flags has been changed to match their flag names. Previously they had a discovery prefix instead of it being part of the name. + +| Flag Name | Old Configuration Key | New Configuration Key | +|--------------------------------------------------|--------------------------------------------------|--------------------------------------------------| +| `discovery_low_replication_lag` | `discovery.low_replication_lag` | `discovery_low_replication_lag` | +| `discovery_high_replication_lag_minimum_serving` | `discovery.high_replication_lag_minimum_serving` | `discovery_high_replication_lag_minimum_serving` | +| `discovery_min_number_serving_vttablets` | `discovery.min_number_serving_vttablets` | `discovery_min_number_serving_vttablets` | +| `discovery_legacy_replication_lag_algorithm` | `discovery.legacy_replication_lag_algorithm` | `discovery_legacy_replication_lag_algorithm` | + +To upgrade to the newer version of the configuration keys, first switch to using the flags in your current deployment before upgrading. Then you can switch to using the new configuration keys after upgrade. + +--- + +### VTOrc + +#### Stalled Disk Recovery + +VTOrc can now identify and recover from stalled disk errors. +VTTablets test whether the disk is writable and they send this information in the `FullStatus` RPC response to VTOrc. +If the disk is not writable on the primary tablet, VTOrc will attempt to recover the cluster by promoting a new primary. +This is useful in scenarios where the disk is stalled and the primary vttablet is unable to accept writes because of it. + +To opt into this feature, `--enable-primary-disk-stalled-recovery` flag has to be specified on VTOrc, and `--disk-write-dir` flag has to be specified on the vttablets. +`--disk-write-interval` and `--disk-write-timeout` flags can be used to configure the polling interval and timeout respectively. + +#### KeyRanges in `--clusters_to_watch` +VTOrc now supports specifying keyranges in the `--clusters_to_watch` flag. This means that there is no need to restart a VTOrc instance with a different flag value when you reshard a keyspace. + +For example, if a VTOrc is configured to watch `ks/-80`, then it would watch all the shards that fall under the keyrange `-80`. +If a reshard is performed and `-80` is split into new shards `-40` and `40-80`, the VTOrc instance will automatically start watching the new shards without needing a restart. +In the previous logic, specifying `ks/-80` for the flag would mean that VTOrc would watch only 1 (or no) shard. +In the new system, since we interpret `-80` as a key range, it can watch multiple shards as described in the example. + +Users can continue to specify exact keyranges. The new feature is backward compatible. + +--- +### New Default Versions + +#### MySQL 8.0.40 + +The default major MySQL version used by our `vitess/lite:latest` image is going from `8.0.30` to `8.0.40`. +This change was merged in [#17552](https://github.com/vitessio/vitess/pull/17552). + +VTGate also advertises MySQL version `8.0.40` by default instead of `8.0.30`. If that is not what you are running, you can set the `mysql_server_version` flag to advertise the desired version. + +> ⚠️ Upgrading to this release with vitess-operator: +> +> If you are using the `vitess-operator`, considering that we are bumping the MySQL version from `8.0.30` to `8.0.40`, you will have to manually upgrade: +> +> 1. Add `innodb_fast_shutdown=0` to your extra cnf in your YAML file. +> 2. Apply this file. +> 3. Wait for all the pods to be healthy. +> 4. Then change your YAML file to use the new Docker Images (`vitess/lite:v22.0.0`). +> 5. Remove `innodb_fast_shutdown=0` from your extra cnf in your YAML file. +> 6. Apply this file. +> +> This is the last time this will be needed in the `8.0.x` series, as starting with MySQL `8.0.35` it is possible to upgrade and downgrade between `8.0.x` versions without needing to run `innodb_fast_shutdown=0`. + +#### Docker `vitess/lite` images with Debian Bookworm + +The docker build system now uses Debian Bookworm instead of Debian Bullseye for the `vitess/lite` images. This change was merged in [#17552](https://github.com/vitessio/vitess/pull/17552). + +--- + +### New Support + +#### More Efficient JSON Replication + +In [#7345](https://github.com/vitessio/vitess/pull/17345) we added support for [`--binlog-row-value-options=PARTIAL_JSON`](https://dev.mysql.com/doc/refman/en/replication-options-binary-log.html#sysvar_binlog_row_value_options). You can read more about [this feature added to MySQL 8.0 here](https://dev.mysql.com/blog-archive/efficient-json-replication-in-mysql-8-0/). + +If you are using MySQL 8.0 or later and using JSON columns, you can now enable this MySQL feature across your Vitess cluster(s) to lower the disk space needed for binary logs and improve the CPU and memory usage in both `mysqld` (standard intrashard MySQL replication) and `vttablet` ([VReplication](https://vitess.io/docs/reference/vreplication/vreplication/)) without losing any capabilities or features. + +#### `LAST_INSERT_ID(x)` + +In [#17408](https://github.com/vitessio/vitess/pull/17408) and [#17409](https://github.com/vitessio/vitess/pull/17409), we added the ability to use `LAST_INSERT_ID(x)` in Vitess directly at vtgate. This improvement allows certain queries—like `SELECT last_insert_id(123);` or `SELECT last_insert_id(count(*)) ...`—to be handled without relying on MySQL for the final value. + +**Limitations**: +- When using `LAST_INSERT_ID(x)` in ordered queries (e.g., `SELECT last_insert_id(col) FROM table ORDER BY foo`), MySQL sets the session’s last-insert-id value according to the *last row returned*. Vitess does not guarantee the same behavior. + +#### Maximum Idle Connections in the Pool + +In [#17443](https://github.com/vitessio/vitess/pull/17443) we introduced a new configurable max-idle-count parameter for connection pools. This allows you to specify the maximum number of idle connections retained in each connection pool to optimize performance and resource efficiency. + +You can control idle connection retention for the query server’s query pool, stream pool, and transaction pool with the following flags: +• --queryserver-config-query-pool-max-idle-count: Defines the maximum number of idle connections retained in the query pool. +• --queryserver-config-stream-pool-max-idle-count: Defines the maximum number of idle connections retained in the stream pool. +• --queryserver-config-txpool-max-idle-count: Defines the maximum number of idle connections retained in the transaction pool. + +This feature ensures that, during traffic spikes, idle connections are available for faster responses, while minimizing overhead in low-traffic periods by limiting the number of idle connections retained. It helps strike a balance between performance, efficiency, and cost. + +#### Filtering Query logs on Error + +The `querylog-mode` setting can be configured to `error` to log only queries that result in errors. This option is supported in both VTGate and VTTablet. + +--- + +#### MultiQuery RPC in vtgate + +New RPCs have been added to VTGate that allow users to pass multiple queries in a single sql string. The behavior is the same as that of MySQL: the RPCs will return multiple result sets in the same order as the queries until and unless an error is encountered. The new RPCs are `ExecuteMulti` and `StreamExecuteMulti`. + +A new flag `--mysql-server-multi-query-protocol` has also been added that makes the server use this new implementation. This flag is set to `false` by default, so the old implementation is used by default. The new implementation is more efficient and allows for better performance when executing multiple queries in a single RPC call. + +--- + +#### Unsharded `CREATE PROCEDURE` support + +Until now Vitess didn't allow users to create procedures through VTGate. They had to be created by running a DDL directly against the underlying MySQL. In this release, we have started adding support for running `CREATE PROCEDURE` statements through VTGate for unsharded keyspaces. Not all constructs of procedures are currently supported in the parser, so there are still some limitations which will be addressed in future releases. + +--- + +### Optimization + +#### Prepared Statement +Prepared statements now benefit from Deferred Optimization, enabling parameter-aware query plans. +Initially, a baseline plan is created at prepare-time, and on first execution, a more efficient parameter-optimized plan is generated. +Subsequent executions dynamically switch between these plans based on input values, improving query performance while ensuring correctness. + +--- + +### New VtctldServer RPC + +`GetTransactionInfo` RPC has been added to `VtctldServer` and `TabletManagerClient` interfaces. These RPCs can be used to read the state of an unresolved distributed transaction. This can be useful in debugging what went wrong and how to fix the problem. + +--- + +### Prefer not promoting a replica that is currently taking a backup + +Emergency reparents now prefer to not promote replicas that are currently taking backups with a backup engine other than +`builtin`. Note that if there's only one suitable replica to promote, and it is taking a backup, it will still be +promoted. + +For planned reparents, hosts taking backups with a backup engine other than `builtin` are filtered out of the list of +valid candidates. This means they will never get promoted - not even if there are no other candidates. + +Note that behavior for `builtin` backups remains unchanged: a replica that is currently taking a `builtin` backup will +never be promoted, neither by planned nor by emergency reparents. + +--- + +### Semi-sync monitor in vttablet + +Primary VTTablets now monitor the semi-sync status of their underlying MySQL instance . +We've observed cases where a brief network disruption can cause the primary to get stuck indefinitely waiting for semi-sync ACKs. +In rare scenarios, this can also block reparent operations and render the primary unresponsive. +More information can be found in the issues [#17709](https://github.com/vitessio/vitess/issues/17709) and [#17749](https://github.com/vitessio/vitess/issues/17749). + +To address this, the primary VTTablets continuously monitor their semi-sync status. If the primary MySQL gets stuck waiting for semi-sync ACKs, the monitor generates synthetic writes to unblock it. If this fails, VTOrc is notified of the issue and it will initiate an emergency reparent operation. + +The monitoring interval can be adjusted using the `--semi-sync-monitor-interval` flag, which defaults to 10 seconds. + +--- + +### Wrapped fatal transaction errors + +When a query fails while running in a transaction, due to the transaction no longer being valid (e.g. PRS, rollout, primary down, etc.), the original error is now wrapped in a `VT15001` error. + +When a query produce a `VT15001` error, VTGate will try to rollback and clear the transaction. +Any new queries on the same connection will fail with a `VT09032` error, until a `ROLLBACK` is received +to acknowledge that the transaction was automatically rolled back and cleared by VTGate. + +`VT09032` is returned to clients to avoid applications blindly sending queries to VTGate thinking they are still in a transaction. + +This change was introduced by [#17669](https://github.com/vitessio/vitess/pull/17669). + + +--- + +## Minor Changes + +### `--topo_read_concurrency` behaviour changes + +The `--topo_read_concurrency` flag was added to all components that access the topology and the provided limit is now applied separately for each global or local cell _(default `32`)_. + +All topology read calls _(`Get`, `GetVersion`, `List` and `ListDir`)_ now respect this per-cell limit. Previous to this version a single limit was applied to all cell calls and it was not respected by many topology calls. + +--- + +### VTTablet + +#### CLI Flags + +- `twopc_abandon_age` flag now supports values in the time.Duration format (e.g., 1s, 2m, 1h). +While the flag will continue to accept float values (interpreted as seconds) for backward compatibility, +**float inputs are deprecated** and will be removed in a future release. + +- `--consolidator-query-waiter-cap` flag to set the maximum number of clients allowed to wait on the consolidator. The default value is set to 0 for unlimited wait. Users can adjust this value based on the performance of VTTablet to avoid excessive memory usage and the risk of being OOMKilled, particularly in Kubernetes deployments. + +#### ACL enforcement and reloading + +When a tablet is started with `--enforce-tableacl-config` it will exit with an error if the contents of the file are not valid. After the changes made in [#17485](https://github.com/vitessio/vitess/pull/17485) the tablet will no longer exit when reloading the contents of the file after receiving a SIGHUP. When the file contents are invalid on reload the tablet will now log an error and the active in-memory ACLs remain in effect. + +--- + +### VTAdmin + +#### vtadmin-web updated to node v22.13.1 (LTS) + +Building `vtadmin-web` now requires node >= v22.13.0 (LTS). Breaking changes from v20 to v22 can be found at https://nodejs.org/en/blog/release/v22.13.0 -- with no known issues that apply to VTAdmin. +Full details on the node v20.12.2 release can be found at https://nodejs.org/en/blog/release/v22.13.1. + +------------ +The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/22.0/22.0.0/changelog.md). + +The release includes 475 merged Pull Requests. + +Thanks to all our contributors: @GrahamCampbell, @GuptaManan100, @L3o-pold, @akagami-harsh, @anirbanmu, @app/dependabot, @app/vitess-bot, @arthmis, @arthurschreiber, @beingnoble03, @c-r-dev, @corbantek, @dbussink, @deepthi, @derekperkins, @ejortegau, @frouioui, @garfthoffman, @gmpify, @gopoto, @harshit-gangal, @huochexizhan, @jeefy, @jwangace, @kbutz, @lmorduch, @mattlord, @mattrobenolt, @maxenglander, @mcrauwel, @mounicasruthi, @niladrix719, @notfelineit, @rafer, @rohit-nayak-ps, @rvrangel, @shailpujan88, @shanth96, @shlomi-noach, @siadat, @systay, @timvaillancourt, @twthorn, @vitess-bot, @vmg, @wiebeytec, @wukuai + diff --git a/changelog/22.0/22.0.0/summary.md b/changelog/22.0/22.0.0/summary.md index 51a9fc9dd41..d01658c30e6 100644 --- a/changelog/22.0/22.0.0/summary.md +++ b/changelog/22.0/22.0.0/summary.md @@ -27,9 +27,11 @@ - [LAST_INSERT_ID(x)](#last-insert-id) - [Maximum Idle Connections in the Pool](#max-idle-connections) - [Filtering Query logs on Error](#query-logs) + - [MultiQuery RPC in vtgate](#multiquery) + - [Unsharded `CREATE PROCEDURE` support](#create-procedure) - **[Optimization](#optimization)** - [Prepared Statement](#prepared-statement) - - **[RPC Changes](#rpc-changes)** + - **[New VtctldServer RPC](#rpc-changes)** - **[Prefer not promoting a replica that is currently taking a backup](#reparents-prefer-not-backing-up)** - **[Semi-sync monitor in vttablet](#semi-sync-monitor)** - **[Wrapped fatal transaction errors](#new-errors-fatal-tx)** @@ -60,7 +62,7 @@ | Component | Flag Name | Notes | Deprecation PR | |:----------:|:--------------------------------:|----------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------:| | `vttablet` | `twopc_enable` | Usage of TwoPC commit will be determined by the `transaction_mode` set on VTGate via flag or session variable. | [#17279](https://github.com/vitessio/vitess/pull/17279) | -| `vtgate` | `grpc-send-session-in-streaming` | Session will be sent as part of response on StreamExecute API call. | [#17907](https://github.com/vitessio/vitess/pull/17907) | +| `vtgate` | `grpc-send-session-in-streaming` | Session will always be sent as part of the response from the StreamExecute RPC. | [#17907](https://github.com/vitessio/vitess/pull/17907) | --- @@ -68,7 +70,7 @@ #### Metrics -| Component | Metric Name | Was Deprecated In | Deprecation PR | +| Component | Metric Name | Was Deprecated In | Deletion PR | |:----------:|:---------------------:|:-----------------:|:-------------------------------------------------------:| | `vttablet` | `QueryCacheLength` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) | | `vttablet` | `QueryCacheSize` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) | @@ -79,7 +81,7 @@ #### CLI Flags -| Component | Flag Name | Was Deprecated In | Deprecation PR | +| Component | Flag Name | Was Deprecated In | Deletion PR | |:-----------------------------:|:----------------------------------:|:-----------------:|:-------------------------------------------------------:| | `vttablet` | `queryserver-enable-settings-pool` | `v21.0.0` | [#16280](https://github.com/vitessio/vitess/pull/16280) | | `vttablet` | `remove-sharded-auto-increment` | `v21.0.0` | [#16860](https://github.com/vitessio/vitess/pull/16860) | @@ -95,7 +97,7 @@ These `vttablet` flags have been removed: - `--gh-ost-path` - `--pt-osc-path` -The use of `gh-ost` and `pt-osc` as strategies as follows, yields an error: +Attempting to use `gh-ost` or `pt-osc` as `--ddl-strategy` will yield an error: ```sh $ vtctldclient ApplySchema --ddl-strategy="gh-ost" ... $ vtctldclient ApplySchema --ddl-strategy="pt-osc" ... @@ -111,15 +113,15 @@ $ vtctldclient ApplySchema --ddl-strategy="pt-osc" ... |:-------------------------:|:-------------------------------------:|:-----------------------------------------------------------:|:-------------------------------------------------------:| | `QueryExecutions` | `Query`, `Plan`, `Tablet` | Number of queries executed. | [#17727](https://github.com/vitessio/vitess/pull/17727) | | `QueryRoutes` | `Query`, `Plan`, `Tablet` | Number of vttablets the query was executed on. | [#17727](https://github.com/vitessio/vitess/pull/17727) | -| `QueryExecutionsByTable` | `Query`, `Table` | Queries executed at vtgate, with counts recorded per table. | [#17727](https://github.com/vitessio/vitess/pull/17727) | -| `VStreamsCount` | `Keyspace`, `ShardName`, `TabletType` | Number of active vstream. | [#17858](https://github.com/vitessio/vitess/pull/17858) | +| `QueryExecutionsByTable` | `Query`, `Table` | Queries executed by vtgate, with counts recorded per table. | [#17727](https://github.com/vitessio/vitess/pull/17727) | +| `VStreamsCount` | `Keyspace`, `ShardName`, `TabletType` | Number of active vstreams. | [#17858](https://github.com/vitessio/vitess/pull/17858) | | `VStreamsEventsStreamed` | `Keyspace`, `ShardName`, `TabletType` | Number of events sent across all vstreams. | [#17858](https://github.com/vitessio/vitess/pull/17858) | | `VStreamsEndedWithErrors` | `Keyspace`, `ShardName`, `TabletType` | Number of vstreams that ended with errors. | [#17858](https://github.com/vitessio/vitess/pull/17858) | | `CommitModeTimings` | `Mode` | Timing metrics for commit (Single, Multi, TwoPC). | [#16939](https://github.com/vitessio/vitess/pull/16939) | -| `CommitUnresolved` | N/A | Counter for failure after Prepare. | [#16939](https://github.com/vitessio/vitess/pull/16939) | +| `CommitUnresolved` | N/A | Counter for 2PC transaction failures after Prepare. | [#16939](https://github.com/vitessio/vitess/pull/16939) | -The work done [#17727](https://github.com/vitessio/vitess/pull/17727) introduces new metrics for queries. Via this work we have deprecated several vtgate metrics, please see the [Deprecated Metrics](#deprecated-metrics) section. Here is an example on how to use them: +The work done in [#17727](https://github.com/vitessio/vitess/pull/17727) introduces new metrics for queries. Via this work we have deprecated several vtgate metrics, please see the [Deprecated Metrics](#deprecated-metrics) section. Here is an example of how the new metrics are calculated: ``` Query: select t1.a, t2.b from t1 join t2 on t1.id = t2.id Shards: 2 @@ -131,8 +133,6 @@ Metrics Published: 3. QueryExecutionsByTable – {select, t1}, 1 and {select, t2}, 1 ``` ---- - #### VTTablet | Name | Dimensions | Description | PR | @@ -141,9 +141,9 @@ Metrics Published: | `TableClusteredIndexSize` | `Table` | Byte size of the clustered index (i.e. row data). | [#17570](https://github.com/vitessio/vitess/pull/17570) | | `IndexCardinality` | `Table`, `Index` | Estimated number of unique values in the index | [#17570](https://github.com/vitessio/vitess/pull/17570) | | `IndexBytes` | `Table`, `Index` | Byte size of the index. | [#17570](https://github.com/vitessio/vitess/pull/17570) | -| `UnresolvedTransaction` | `ManagerType` | Number of events sent across all vstreams. | [#16939](https://github.com/vitessio/vitess/pull/16939) | -| `CommitPreparedFail` | `FailureType` | Number of vstreams that ended with errors. | [#16939](https://github.com/vitessio/vitess/pull/16939) | -| `RedoPreparedFail` | `FailureType` | Timing metrics for commit (Single, Multi, TwoPC) | [#16939](https://github.com/vitessio/vitess/pull/16939) | +| `UnresolvedTransaction` | `ManagerType` | Current number of unresolved transactions. | [#16939](https://github.com/vitessio/vitess/pull/16939) | +| `CommitPreparedFail` | `FailureType` | Transactions that failed to commit after prepare. | [#16939](https://github.com/vitessio/vitess/pull/16939) | +| `RedoPreparedFail` | `FailureType` | Transactions that failed to re-prepare. | [#16939](https://github.com/vitessio/vitess/pull/16939) | --- @@ -151,7 +151,7 @@ Metrics Published: #### VTOrc -The configuration file for VTOrc has been updated to now support dynamic fields. The old `--config` parameter has been removed. The alternative is to use the `--config-file` parameter. The configuration can now be provided in json, yaml or any other format that [viper](https://github.com/spf13/viper) supports. +VTOrc now supports dynamic configuration using [viper](https://github.com/spf13/viper). The old `--config` parameter has been removed. Use the `--config-file` parameter instead. Configuration can be provided in json, yaml or any other format that viper supports. The following fields can be dynamically changed - 1. `instance-poll-time` @@ -168,9 +168,7 @@ The following fields can be dynamically changed - 12. `allow-emergency-reparent` 13. `change-tablets-with-errant-gtid-to-drained` -To upgrade to the newer version of the configuration file, first switch to using the flags in your current deployment before upgrading. Then you can switch to using the configuration file in the newer release. - ---- +To upgrade to the new version of the configuration file, first switch to using the flags in your current deployment before upgrading. Then you can switch to using the configuration file after upgrade. #### VTGate @@ -183,7 +181,7 @@ The Viper configuration keys for the following flags has been changed to match t | `discovery_min_number_serving_vttablets` | `discovery.min_number_serving_vttablets` | `discovery_min_number_serving_vttablets` | | `discovery_legacy_replication_lag_algorithm` | `discovery.legacy_replication_lag_algorithm` | `discovery_legacy_replication_lag_algorithm` | -To upgrade to the newer version of the configuration keys, first switch to using the flags in your current deployment before upgrading. Then you can switch to using the new configuration keys in the newer release. +To upgrade to the newer version of the configuration keys, first switch to using the flags in your current deployment before upgrading. Then you can switch to using the new configuration keys after upgrade. --- @@ -192,15 +190,13 @@ To upgrade to the newer version of the configuration keys, first switch to using #### Stalled Disk Recovery VTOrc can now identify and recover from stalled disk errors. -VTTablets test whether the disk is writable and they send this information in the full status output to VTOrc. +VTTablets test whether the disk is writable and they send this information in the `FullStatus` RPC response to VTOrc. If the disk is not writable on the primary tablet, VTOrc will attempt to recover the cluster by promoting a new primary. This is useful in scenarios where the disk is stalled and the primary vttablet is unable to accept writes because of it. To opt into this feature, `--enable-primary-disk-stalled-recovery` flag has to be specified on VTOrc, and `--disk-write-dir` flag has to be specified on the vttablets. `--disk-write-interval` and `--disk-write-timeout` flags can be used to configure the polling interval and timeout respectively. ---- - #### KeyRanges in `--clusters_to_watch` VTOrc now supports specifying keyranges in the `--clusters_to_watch` flag. This means that there is no need to restart a VTOrc instance with a different flag value when you reshard a keyspace. @@ -217,13 +213,13 @@ Users can continue to specify exact keyranges. The new feature is backward compa #### MySQL 8.0.40 The default major MySQL version used by our `vitess/lite:latest` image is going from `8.0.30` to `8.0.40`. -This change was brought by [#17552](https://github.com/vitessio/vitess/pull/17552). +This change was merged in [#17552](https://github.com/vitessio/vitess/pull/17552). -VTGate also advertises MySQL version `8.0.40` by default instead of `8.0.30` if no explicit version is set. The users can set the `mysql_server_version` flag to advertise the correct version. +VTGate also advertises MySQL version `8.0.40` by default instead of `8.0.30`. If that is not what you are running, you can set the `mysql_server_version` flag to advertise the desired version. > ⚠️ Upgrading to this release with vitess-operator: > -> If you are using the `vitess-operator`, considering that we are bumping the patch version of MySQL 80 from `8.0.30` to `8.0.40`, you will have to manually upgrade: +> If you are using the `vitess-operator`, considering that we are bumping the MySQL version from `8.0.30` to `8.0.40`, you will have to manually upgrade: > > 1. Add `innodb_fast_shutdown=0` to your extra cnf in your YAML file. > 2. Apply this file. @@ -234,11 +230,9 @@ VTGate also advertises MySQL version `8.0.40` by default instead of `8.0.30` if > > This is the last time this will be needed in the `8.0.x` series, as starting with MySQL `8.0.35` it is possible to upgrade and downgrade between `8.0.x` versions without needing to run `innodb_fast_shutdown=0`. ---- - #### Docker `vitess/lite` images with Debian Bookworm -The base system now uses Debian Bookworm instead of Debian Bullseye for the `vitess/lite` images. This change was brought by [#17552](https://github.com/vitessio/vitess/pull/17552). +The docker build system now uses Debian Bookworm instead of Debian Bullseye for the `vitess/lite` images. This change was merged in [#17552](https://github.com/vitessio/vitess/pull/17552). --- @@ -250,8 +244,6 @@ In [#7345](https://github.com/vitessio/vitess/pull/17345) we added support for [ If you are using MySQL 8.0 or later and using JSON columns, you can now enable this MySQL feature across your Vitess cluster(s) to lower the disk space needed for binary logs and improve the CPU and memory usage in both `mysqld` (standard intrashard MySQL replication) and `vttablet` ([VReplication](https://vitess.io/docs/reference/vreplication/vreplication/)) without losing any capabilities or features. ---- - #### `LAST_INSERT_ID(x)` In [#17408](https://github.com/vitessio/vitess/pull/17408) and [#17409](https://github.com/vitessio/vitess/pull/17409), we added the ability to use `LAST_INSERT_ID(x)` in Vitess directly at vtgate. This improvement allows certain queries—like `SELECT last_insert_id(123);` or `SELECT last_insert_id(count(*)) ...`—to be handled without relying on MySQL for the final value. @@ -259,8 +251,6 @@ In [#17408](https://github.com/vitessio/vitess/pull/17408) and [#17409](https:// **Limitations**: - When using `LAST_INSERT_ID(x)` in ordered queries (e.g., `SELECT last_insert_id(col) FROM table ORDER BY foo`), MySQL sets the session’s last-insert-id value according to the *last row returned*. Vitess does not guarantee the same behavior. ---- - #### Maximum Idle Connections in the Pool In [#17443](https://github.com/vitessio/vitess/pull/17443) we introduced a new configurable max-idle-count parameter for connection pools. This allows you to specify the maximum number of idle connections retained in each connection pool to optimize performance and resource efficiency. @@ -272,14 +262,26 @@ You can control idle connection retention for the query server’s query pool, s This feature ensures that, during traffic spikes, idle connections are available for faster responses, while minimizing overhead in low-traffic periods by limiting the number of idle connections retained. It helps strike a balance between performance, efficiency, and cost. ---- - #### Filtering Query logs on Error The `querylog-mode` setting can be configured to `error` to log only queries that result in errors. This option is supported in both VTGate and VTTablet. --- +#### MultiQuery RPC in vtgate + +New RPCs have been added to VTGate that allow users to pass multiple queries in a single sql string. The behavior is the same as that of MySQL: the RPCs will return multiple result sets in the same order as the queries until and unless an error is encountered. The new RPCs are `ExecuteMulti` and `StreamExecuteMulti`. + +A new flag `--mysql-server-multi-query-protocol` has also been added that makes the server use this new implementation. This flag is set to `false` by default, so the old implementation is used by default. The new implementation is more efficient and allows for better performance when executing multiple queries in a single RPC call. + +--- + +#### Unsharded `CREATE PROCEDURE` support + +Until now Vitess didn't allow users to create procedures through VTGate. They had to be created by running a DDL directly against the underlying MySQL. In this release, we have started adding support for running `CREATE PROCEDURE` statements through VTGate for unsharded keyspaces. Not all constructs of procedures are currently supported in the parser, so there are still some limitations which will be addressed in future releases. + +--- + ### Optimization #### Prepared Statement @@ -287,22 +289,22 @@ Prepared statements now benefit from Deferred Optimization, enabling parameter-a Initially, a baseline plan is created at prepare-time, and on first execution, a more efficient parameter-optimized plan is generated. Subsequent executions dynamically switch between these plans based on input values, improving query performance while ensuring correctness. -### RPC Changes +--- -These are the RPC changes made in this release - +### New VtctldServer RPC -1. `GetTransactionInfo` RPC has been added to both `VtctldServer`, and `TabletManagerClient` interface. These RPCs are used to facilitate the users in reading the state of an unresolved distributed transaction. This can be useful in debugging what went wrong and how to fix the problem. +`GetTransactionInfo` RPC has been added to `VtctldServer` and `TabletManagerClient` interfaces. These RPCs can be used to read the state of an unresolved distributed transaction. This can be useful in debugging what went wrong and how to fix the problem. --- ### Prefer not promoting a replica that is currently taking a backup -Emergency reparents now prefer not promoting replicas that are currently taking backups with a backup engine other than +Emergency reparents now prefer to not promote replicas that are currently taking backups with a backup engine other than `builtin`. Note that if there's only one suitable replica to promote, and it is taking a backup, it will still be promoted. For planned reparents, hosts taking backups with a backup engine other than `builtin` are filtered out of the list of -valid candidates. This means they will never get promoted - not even if there's no other candidates. +valid candidates. This means they will never get promoted - not even if there are no other candidates. Note that behavior for `builtin` backups remains unchanged: a replica that is currently taking a `builtin` backup will never be promoted, neither by planned nor by emergency reparents. @@ -311,12 +313,12 @@ never be promoted, neither by planned nor by emergency reparents. ### Semi-sync monitor in vttablet -A new component has been added to the vttablet binary to monitor the semi-sync status of primary vttablets. +Primary VTTablets now monitor the semi-sync status of their underlying MySQL instance . We've observed cases where a brief network disruption can cause the primary to get stuck indefinitely waiting for semi-sync ACKs. -In rare scenarios, this can block reparent operations and render the primary unresponsive. +In rare scenarios, this can also block reparent operations and render the primary unresponsive. More information can be found in the issues [#17709](https://github.com/vitessio/vitess/issues/17709) and [#17749](https://github.com/vitessio/vitess/issues/17749). -To address this, the new component continuously monitors the semi-sync status. If the primary becomes stuck on semi-sync ACKs, it generates writes to unblock it. If this fails, VTOrc is notified of the issue and initiates an emergency reparent operation. +To address this, the primary VTTablets continuously monitor their semi-sync status. If the primary MySQL gets stuck waiting for semi-sync ACKs, the monitor generates synthetic writes to unblock it. If this fails, VTOrc is notified of the issue and it will initiate an emergency reparent operation. The monitoring interval can be adjusted using the `--semi-sync-monitor-interval` flag, which defaults to 10 seconds. @@ -324,10 +326,9 @@ The monitoring interval can be adjusted using the `--semi-sync-monitor-interval` ### Wrapped fatal transaction errors +When a query fails while running in a transaction, due to the transaction no longer being valid (e.g. PRS, rollout, primary down, etc.), the original error is now wrapped in a `VT15001` error. -When a query fails while being in a transaction, due to the transaction no longer being valid (e.g. PRS, rollout, primary down, etc), the original error is now wrapped around a `VT15001` error. - -For non-transactional queries that produce a `VT15001`, VTGate will try to rollback and clear the transaction. +When a query produce a `VT15001` error, VTGate will try to rollback and clear the transaction. Any new queries on the same connection will fail with a `VT09032` error, until a `ROLLBACK` is received to acknowledge that the transaction was automatically rolled back and cleared by VTGate. @@ -358,8 +359,6 @@ While the flag will continue to accept float values (interpreted as seconds) for - `--consolidator-query-waiter-cap` flag to set the maximum number of clients allowed to wait on the consolidator. The default value is set to 0 for unlimited wait. Users can adjust this value based on the performance of VTTablet to avoid excessive memory usage and the risk of being OOMKilled, particularly in Kubernetes deployments. ---- - #### ACL enforcement and reloading When a tablet is started with `--enforce-tableacl-config` it will exit with an error if the contents of the file are not valid. After the changes made in [#17485](https://github.com/vitessio/vitess/pull/17485) the tablet will no longer exit when reloading the contents of the file after receiving a SIGHUP. When the file contents are invalid on reload the tablet will now log an error and the active in-memory ACLs remain in effect. diff --git a/changelog/22.0/README.md b/changelog/22.0/README.md index 0e790e5dc0b..18196e3f49d 100644 --- a/changelog/22.0/README.md +++ b/changelog/22.0/README.md @@ -1,2 +1,4 @@ ## v22.0 * **[22.0.0](22.0.0)** + * [Changelog](22.0.0/changelog.md) + * [Release Notes](22.0.0/release_notes.md) diff --git a/changelog/23.0/23.0.0/summary.md b/changelog/23.0/23.0.0/summary.md new file mode 100644 index 00000000000..3be034ba1fa --- /dev/null +++ b/changelog/23.0/23.0.0/summary.md @@ -0,0 +1,51 @@ +## Summary + +### Table of Contents + +- **[Minor Changes](#minor-changes)** + - **[Deletions](#deletions)** + - [Metrics](#deleted-metrics) + - **[New Metrics](#new-metrics)** + - [VTGate](#new-vtgate-metrics) + - **[VTTablet](#minor-changes-vttablet)** + - [CLI Flags](#flags-vttablet) + - [Managed MySQL configuration defaults to caching-sha2-password](#mysql-caching-sha2-password) + +## Minor Changes + +### Deletions + +#### Metrics + +| Component | Metric Name | Was Deprecated In | Deprecation PR | +|:---------:|:-------------------------:|:-----------------:|:-------------------------------------------------------:| +| `vtgate` | `QueriesProcessed` | `v22.0.0` | [#17727](https://github.com/vitessio/vitess/pull/17727) | +| `vtgate` | `QueriesRouted` | `v22.0.0` | [#17727](https://github.com/vitessio/vitess/pull/17727) | +| `vtgate` | `QueriesProcessedByTable` | `v22.0.0` | [#17727](https://github.com/vitessio/vitess/pull/17727) | +| `vtgate` | `QueriesRoutedByTable` | `v22.0.0` | [#17727](https://github.com/vitessio/vitess/pull/17727) | + +### New Metrics + +#### VTGate + +| Name | Dimensions | Description | PR | +|:-----------------------:|:---------------:|:-----------------------------------------------------------------------------------:|:-------------------------------------------------------:| +| `TransactionsProcessed` | `Shard`, `Type` | Counts transactions processed at VTGate by shard distribution and transaction type. | [#18171](https://github.com/vitessio/vitess/pull/18171) | + +### VTTablet + +#### CLI Flags + +- `skip-user-metrics` flag if enabled, replaces the username label with "UserLabelDisabled" to prevent metric explosion in environments with many unique users. + +#### Managed MySQL configuration defaults to caching-sha2-password + +The default authentication plugin for MySQL 8.0.26 and later is now `caching_sha2_password` instead of `mysql_native_password`. This change is made because `mysql_native_password` is deprecated and removed in future MySQL versions. `mysql_native_password` is still enabled for backwards compatibility. + +This change specifically affects the replication user. If you have a user configured with an explicit password, it is recommended to make sure to upgrade this user after upgrading to v23 with a statement like the following: + +```sql +ALTER USER 'vt_repl'@'%' IDENTIFIED WITH caching_sha2_password BY 'your-existing-password'; +``` + +In future Vitess versions, the `mysql_native_password` authentication plugin will be disabled for managed MySQL instances. \ No newline at end of file diff --git a/changelog/23.0/README.md b/changelog/23.0/README.md new file mode 100644 index 00000000000..42a151fd40c --- /dev/null +++ b/changelog/23.0/README.md @@ -0,0 +1,2 @@ +## v23.0 +* **[23.0.0](23.0.0)** diff --git a/changelog/README.md b/changelog/README.md index 7cade673d26..b5cfdedcc8c 100644 --- a/changelog/README.md +++ b/changelog/README.md @@ -1,4 +1,5 @@ ## Releases +* [23.0](23.0) * [22.0](22.0) * [21.0](21.0) * [20.0](20.0) diff --git a/config/mycnf/mysql8026.cnf b/config/mycnf/mysql8026.cnf index df63a589918..05e2fbc586e 100644 --- a/config/mycnf/mysql8026.cnf +++ b/config/mycnf/mysql8026.cnf @@ -16,9 +16,6 @@ binlog_expire_logs_seconds = 259200 # disable mysqlx mysqlx = 0 -# 8.0 changes the default auth-plugin to caching_sha2_password -default_authentication_plugin = mysql_native_password - # Semi-sync replication is required for automated unplanned failover # (when the primary goes away). Here we just load the plugin so it's # available if desired, but it's disabled at startup. diff --git a/config/mycnf/mysql84.cnf b/config/mycnf/mysql84.cnf index e75c885af39..f0097ce42d5 100644 --- a/config/mycnf/mysql84.cnf +++ b/config/mycnf/mysql84.cnf @@ -16,10 +16,9 @@ binlog_expire_logs_seconds = 259200 # disable mysqlx mysqlx = 0 -# 8.4 changes the default auth-plugin to caching_sha2_password and -# disables mysql_native_password by default. +# 8.4 disables mysql_native_password by default, but we keep it +# enabled for compatibility while upgrading Vitess and / or MySQL. mysql_native_password = ON -authentication_policy = 'mysql_native_password' # Semi-sync replication is required for automated unplanned failover # (when the primary goes away). Here we just load the plugin so it's diff --git a/config/tablet/default.yaml b/config/tablet/default.yaml index d0e4eca477b..f7f6d01eca8 100644 --- a/config/tablet/default.yaml +++ b/config/tablet/default.yaml @@ -1,34 +1,34 @@ tabletID: zone-1234 init: - dbName: # init_db_name_override - keyspace: # init_keyspace - shard: # init_shard - tabletType: # init_tablet_type - timeoutSeconds: 60 # init_timeout + dbName: # init-db-name-override + keyspace: # init-keyspace + shard: # init-shard + tabletType: # init-tablet-type + timeoutSeconds: 60 # init-timeout db: - socket: # db_socket - host: # db_host - port: 0 # db_port - charSet: # db_charset - flags: 0 # db_flags - flavor: # db_flavor - sslCa: # db_ssl_ca - sslCaPath: # db_ssl_ca_path - sslCert: # db_ssl_cert - sslKey: # db_ssl_key - serverName: # db_server_name - connectTimeoutMilliseconds: 0 # db_connect_timeout_ms + socket: # db-socket + host: # db-host + port: 0 # db-port + charSet: # db-charset + flags: 0 # db-flags + flavor: # db-flavor + sslCa: # db-ssl-ca + sslCaPath: # db-ssl-ca-path + sslCert: # db-ssl-cert + sslKey: # db-ssl-key + serverName: # db-server-name + connectTimeoutMilliseconds: 0 # db-connect-timeout-ms app: user: vt_app # db_app_user password: # db_app_password useSsl: true # db_app_use_ssl preferTcp: false dba: - user: vt_dba # db_dba_user - password: # db_dba_password - useSsl: true # db_dba_use_ssl + user: vt_dba # db-dba-user + password: # db-dba-password + useSsl: true # db-dba-use-ssl preferTcp: false filtered: user: vt_filtered # db_filtered_user @@ -77,8 +77,8 @@ oltp: warnRows: 0 # queryserver-config-warn-result-size healthcheck: - intervalSeconds: 20 # health_check_interval - degradedThresholdSeconds: 30 # degraded_threshold + intervalSeconds: 20 # health-check-interval + degradedThresholdSeconds: 30 # degraded-threshold unhealthyThresholdSeconds: 7200 # unhealthy_threshold gracePeriods: @@ -86,28 +86,28 @@ gracePeriods: transitionSeconds: 0 # serving_state_grace_period replicationTracker: - mode: disable # enable_replication_reporter - heartbeatIntervalMilliseconds: 0 # heartbeat_enable, heartbeat_interval + mode: disable # enable-replication-reporter + heartbeatIntervalMilliseconds: 0 # heartbeat-enable, heartbeat-interval hotRowProtection: - mode: disable|dryRun|enable # enable_hot_row_protection, enable_hot_row_protection_dry_run + mode: disable|dryRun|enable # enable-hot-row-protection, enable-hot-row-protection-dry-run # Recommended value: same as txPool.size. - maxQueueSize: 20 # hot_row_protection_max_queue_size - maxGlobalQueueSize: 1000 # hot_row_protection_max_global_queue_size - maxConcurrency: 5 # hot_row_protection_concurrent_transactions + maxQueueSize: 20 # hot-row-protection-max-queue-size + maxGlobalQueueSize: 1000 # hot-row-protection-max-global-queue-size + maxConcurrency: 5 # hot-row-protection-concurrent-transactions consolidator: enable|disable|notOnPrimary # enable-consolidator, enable-consolidator-replicas passthroughDML: false # queryserver-config-passthrough-dmls streamBufferSize: 32768 # queryserver-config-stream-buffer-size schemaReloadIntervalSeconds: 1800 # queryserver-config-schema-reload-time -watchReplication: false # watch_replication_stream +watchReplication: false # watch-replication-stream terseErrors: false # queryserver-config-terse-errors truncateErrorLen: 0 # queryserver-config-truncate-error-len messagePostponeParallelism: 4 # queryserver-config-message-postpone-cap # The following flags are currently not supported. -# enforce_strict_trans_tables +# enforce-strict-trans-tables # queryserver-config-strict-table-acl # queryserver-config-enable-table-acl-dry-run # queryserver-config-acl-exempt-acl @@ -115,10 +115,10 @@ messagePostponeParallelism: 4 # queryserver-config-message-postpone-c # tx-throttler-config # tx-throttler-healthcheck-cells # tx-throttler-tablet-types -# enable_transaction_limit -# enable_transaction_limit_dry_run -# transaction_limit_per_user -# transaction_limit_by_username -# transaction_limit_by_principal -# transaction_limit_by_component -# transaction_limit_by_subcomponent +# enable-transaction-limit +# enable-transaction-limit-dry-run +# transaction-limit-per-user +# transaction-limit-by-username +# transaction-limit-by-principal +# transaction-limit-by-component +# transaction-limit-by-subcomponent diff --git a/doc/design-docs/TopoLocks.md b/doc/design-docs/TopoLocks.md index b25927b4ed8..0036c1e0407 100644 --- a/doc/design-docs/TopoLocks.md +++ b/doc/design-docs/TopoLocks.md @@ -15,7 +15,7 @@ The implementations of `LockShard` and `CheckShardLocked` differ slightly for al ### Etcd -In Etcd implementation, we use `KeepAlive` API to keep renewing the context that we have for acquiring the shard lock every 10 seconds. The duration of the lease is controlled by the `--topo_etcd_lease_ttl` flag which defaults to 10 seconds. Once we acquire the shard lock, the context for acquiring the shard lock expires and that stops the KeepAlives too. +In Etcd implementation, we use `KeepAlive` API to keep renewing the context that we have for acquiring the shard lock every 10 seconds. The duration of the lease is controlled by the `--topo-etcd-lease-ttl` flag which defaults to 10 seconds. Once we acquire the shard lock, the context for acquiring the shard lock expires and that stops the KeepAlives too. The shard lock is released either when the unlock function is called, or if the lease ttl expires. This guards against servers crashing while holding the shard lock. @@ -30,6 +30,6 @@ The Check function doesn't do anything in ZooKeeper. The implementation just ret ### Consul -In Consul, the timeout for the lock is controlled by the `--topo_consul_lock_session_ttl` flag. +In Consul, the timeout for the lock is controlled by the `--topo-consul-lock-session-ttl` flag. The Check function works properly and checks if the lock still exists. \ No newline at end of file diff --git a/docker/bootstrap/CHANGELOG.md b/docker/bootstrap/CHANGELOG.md index 277963dd461..6039a167024 100644 --- a/docker/bootstrap/CHANGELOG.md +++ b/docker/bootstrap/CHANGELOG.md @@ -170,4 +170,12 @@ List of changes between bootstrap image versions. ## [43] - 2025-03-04 ### Changes -- Update build to golang 1.24.1 \ No newline at end of file +- Update build to golang 1.24.1 + +## [44] - 2025-04-02 +### Changes +- Update build to golang 1.24.2 + +## [45] - 2025-05-07 +### Changes +- Update build to golang 1.24.3 \ No newline at end of file diff --git a/docker/bootstrap/Dockerfile.common b/docker/bootstrap/Dockerfile.common index 6d474beb023..cc0e7cb7aff 100644 --- a/docker/bootstrap/Dockerfile.common +++ b/docker/bootstrap/Dockerfile.common @@ -1,4 +1,4 @@ -FROM --platform=linux/amd64 golang:1.24.1-bookworm +FROM --platform=linux/amd64 golang:1.24.3-bookworm # Install Vitess build dependencies RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ diff --git a/docker/lite/Dockerfile b/docker/lite/Dockerfile index a1855c347c1..5364e329a6e 100644 --- a/docker/lite/Dockerfile +++ b/docker/lite/Dockerfile @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM --platform=linux/amd64 golang:1.24.1-bookworm AS builder +FROM --platform=linux/amd64 golang:1.24.3-bookworm AS builder # Allows docker builds to set the BUILD_NUMBER ARG BUILD_NUMBER diff --git a/docker/lite/Dockerfile.mysql84 b/docker/lite/Dockerfile.mysql84 index de3e3f8a764..7c1fb1873a6 100644 --- a/docker/lite/Dockerfile.mysql84 +++ b/docker/lite/Dockerfile.mysql84 @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM --platform=linux/amd64 golang:1.24.1-bookworm AS builder +FROM --platform=linux/amd64 golang:1.24.3-bookworm AS builder # Allows docker builds to set the BUILD_NUMBER ARG BUILD_NUMBER diff --git a/docker/lite/Dockerfile.percona80 b/docker/lite/Dockerfile.percona80 index e70b9949c17..27859a200bb 100644 --- a/docker/lite/Dockerfile.percona80 +++ b/docker/lite/Dockerfile.percona80 @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM --platform=linux/amd64 golang:1.24.1-bookworm AS builder +FROM --platform=linux/amd64 golang:1.24.3-bookworm AS builder # Allows docker builds to set the BUILD_NUMBER ARG BUILD_NUMBER diff --git a/docker/mini/vtctld-mini-up.sh b/docker/mini/vtctld-mini-up.sh index 641763ab016..778d5e6180a 100755 --- a/docker/mini/vtctld-mini-up.sh +++ b/docker/mini/vtctld-mini-up.sh @@ -23,6 +23,7 @@ grpc_port=15999 echo "- Starting vtctld..." # shellcheck disable=SC2086 +#TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation vtctld \ $TOPOLOGY_FLAGS \ --disable_active_reparents \ diff --git a/docker/mini/vttablet-mini-up.sh b/docker/mini/vttablet-mini-up.sh index 37e74565763..288a41d44c3 100755 --- a/docker/mini/vttablet-mini-up.sh +++ b/docker/mini/vttablet-mini-up.sh @@ -39,6 +39,7 @@ echo "> Starting vttablet for server $mysql_host:$mysql_port" echo " - Tablet alias is $alias" echo " - Tablet listens on http://$hostname:$port" # shellcheck disable=SC2086 +#TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation vttablet \ $TOPOLOGY_FLAGS \ -log_dir $VTDATAROOT/tmp \ diff --git a/docker/vttestserver/Dockerfile.mysql80 b/docker/vttestserver/Dockerfile.mysql80 index 5d57d2fe61d..e867bec47c6 100644 --- a/docker/vttestserver/Dockerfile.mysql80 +++ b/docker/vttestserver/Dockerfile.mysql80 @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM --platform=linux/amd64 golang:1.24.1-bookworm AS builder +FROM --platform=linux/amd64 golang:1.24.3-bookworm AS builder # Allows docker builds to set the BUILD_NUMBER ARG BUILD_NUMBER diff --git a/docker/vttestserver/Dockerfile.mysql84 b/docker/vttestserver/Dockerfile.mysql84 index cbc56b6bb7b..ff1c89e9f42 100644 --- a/docker/vttestserver/Dockerfile.mysql84 +++ b/docker/vttestserver/Dockerfile.mysql84 @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM --platform=linux/amd64 golang:1.24.1-bookworm AS builder +FROM --platform=linux/amd64 golang:1.24.3-bookworm AS builder # Allows docker builds to set the BUILD_NUMBER ARG BUILD_NUMBER diff --git a/docker/vttestserver/run.sh b/docker/vttestserver/run.sh index e3a99ab38f4..37585666d44 100755 --- a/docker/vttestserver/run.sh +++ b/docker/vttestserver/run.sh @@ -36,7 +36,7 @@ rm -vf "$VTDATAROOT"/"$tablet_dir"/{mysql.sock,mysql.sock.lock} --num_shards "$NUM_SHARDS" \ --mysql_bind_host "${MYSQL_BIND_HOST:-127.0.0.1}" \ --vtcombo-bind-host "${VTCOMBO_BIND_HOST:-127.0.0.1}" \ - --mysql_server_version "${MYSQL_SERVER_VERSION:-$1}" \ + --mysql-server-version "${MYSQL_SERVER_VERSION:-$1}" \ --charset "${CHARSET:-utf8mb4}" \ --foreign_key_mode "${FOREIGN_KEY_MODE:-allow}" \ --enable_online_ddl="${ENABLE_ONLINE_DDL:-true}" \ diff --git a/examples/common/env.sh b/examples/common/env.sh index 8b717f4df3a..40de8230bc8 100644 --- a/examples/common/env.sh +++ b/examples/common/env.sh @@ -53,6 +53,7 @@ if [ "${TOPO}" = "zk2" ]; then # Set topology environment parameters. ZK_SERVER="localhost:21811,localhost:21812,localhost:21813" # shellcheck disable=SC2034 + #TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation TOPOLOGY_FLAGS="--topo_implementation zk2 --topo_global_server_address ${ZK_SERVER} --topo_global_root /vitess/global" mkdir -p "${VTDATAROOT}/tmp" @@ -61,10 +62,12 @@ elif [ "${TOPO}" = "consul" ]; then CONSUL_SERVER=127.0.0.1 CONSUL_HTTP_PORT=8500 CONSUL_SERVER_PORT=8300 + #TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation TOPOLOGY_FLAGS="--topo_implementation consul --topo_global_server_address ${CONSUL_SERVER}:${CONSUL_HTTP_PORT} --topo_global_root vitess/global/" mkdir -p "${VTDATAROOT}/consul" else ETCD_SERVER="localhost:2379" + #TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation TOPOLOGY_FLAGS="--topo_implementation etcd2 --topo_global_server_address $ETCD_SERVER --topo_global_root /vitess/global" mkdir -p "${VTDATAROOT}/etcd" diff --git a/examples/common/scripts/mysqlctl-down.sh b/examples/common/scripts/mysqlctl-down.sh index b2dee4e2119..62de7df0c4b 100755 --- a/examples/common/scripts/mysqlctl-down.sh +++ b/examples/common/scripts/mysqlctl-down.sh @@ -24,5 +24,6 @@ uid=$TABLET_UID printf -v alias '%s-%010d' $cell $uid echo "Shutting down MySQL for tablet $alias..." + #TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation mysqlctl --tablet_uid $uid shutdown diff --git a/examples/common/scripts/mysqlctl-up.sh b/examples/common/scripts/mysqlctl-up.sh index ff20cae5793..fdec7265905 100755 --- a/examples/common/scripts/mysqlctl-up.sh +++ b/examples/common/scripts/mysqlctl-up.sh @@ -35,6 +35,7 @@ if [ -d $VTDATAROOT/$tablet_dir ]; then action='start' fi +#TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation mysqlctl \ --log_dir $VTDATAROOT/tmp \ --tablet_uid $uid \ diff --git a/examples/common/scripts/vtctld-up.sh b/examples/common/scripts/vtctld-up.sh index b0e302679e0..c678826ba2a 100755 --- a/examples/common/scripts/vtctld-up.sh +++ b/examples/common/scripts/vtctld-up.sh @@ -23,6 +23,7 @@ grpc_port=15999 echo "Starting vtctld..." # shellcheck disable=SC2086 +#TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation vtctld \ $TOPOLOGY_FLAGS \ --cell $cell \ diff --git a/examples/common/scripts/vtgate-up.sh b/examples/common/scripts/vtgate-up.sh index fd7860cf6ba..6fabe2d658c 100755 --- a/examples/common/scripts/vtgate-up.sh +++ b/examples/common/scripts/vtgate-up.sh @@ -26,6 +26,7 @@ mysql_server_socket_path="/tmp/mysql.sock" echo "Starting vtgate..." # shellcheck disable=SC2086 +#TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation vtgate \ $TOPOLOGY_FLAGS \ --log_dir $VTDATAROOT/tmp \ @@ -36,7 +37,7 @@ vtgate \ --mysql_server_socket_path $mysql_server_socket_path \ --cell $cell \ --cells_to_watch $cell \ - --tablet_types_to_wait PRIMARY,REPLICA \ + --tablet-types-to-wait PRIMARY,REPLICA \ --service_map 'grpc-vtgateservice' \ --pid_file $VTDATAROOT/tmp/vtgate.pid \ --enable_buffer \ diff --git a/examples/compose/.env b/examples/compose/.env index 0f008404ea9..7f8cf225309 100644 --- a/examples/compose/.env +++ b/examples/compose/.env @@ -1,4 +1,4 @@ -TOPOLOGY_FLAGS=--topo_implementation consul --topo_global_server_address consul1:8500 --topo_global_root vitess/global +TOPOLOGY_FLAGS=--topo-implementation consul --topo-global-server-address consul1:8500 --topo-global-root vitess/global GRPC_PORT=15999 WEB_PORT=8080 MYSQL_PORT=15306 diff --git a/examples/compose/docker-compose.beginners.yml b/examples/compose/docker-compose.beginners.yml index bb364846df1..e321b70fbb5 100644 --- a/examples/compose/docker-compose.beginners.yml +++ b/examples/compose/docker-compose.beginners.yml @@ -63,14 +63,15 @@ services: - "15000:$WEB_PORT" - "$GRPC_PORT" command: ["sh", "-c", " /vt/bin/vtctld \ + # TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation $TOPOLOGY_FLAGS \ --cell $CELL \ - --service_map 'grpc-vtctl,grpc-vtctld' \ - --backup_storage_implementation file \ + --service-map 'grpc-vtctl,grpc-vtctld' \ + --backup-storage-implementation file \ --file_backup_storage_root /vt/vtdataroot/backups \ --logtostderr=true \ --port $WEB_PORT \ - --grpc_port $GRPC_PORT + --grpc-port $GRPC_PORT "] depends_on: consul1: @@ -89,16 +90,17 @@ services: - "$GRPC_PORT" - "15306:$MYSQL_PORT" command: ["sh", "-c", "/vt/bin/vtgate \ + # TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation $TOPOLOGY_FLAGS \ --logtostderr=true \ --port $WEB_PORT \ - --grpc_port $GRPC_PORT \ - --mysql_server_port $MYSQL_PORT \ - --mysql_auth_server_impl none \ + --grpc-port $GRPC_PORT \ + --mysql-server-port $MYSQL_PORT \ + --mysql-auth-server-impl none \ --cell $CELL \ --cells_to_watch $CELL \ - --tablet_types_to_wait PRIMARY,REPLICA \ - --service_map 'grpc-vtgateservice' \ + --tablet-types-to-wait PRIMARY,REPLICA \ + --service-map 'grpc-vtgateservice' \ --enable_system_settings=true \ "] volumes: diff --git a/examples/compose/docker-compose.yml b/examples/compose/docker-compose.yml index f0b869781de..a03de6c3184 100644 --- a/examples/compose/docker-compose.yml +++ b/examples/compose/docker-compose.yml @@ -63,8 +63,8 @@ services: vttablet301: condition: service_healthy environment: - - TOPOLOGY_FLAGS=--topo_implementation consul --topo_global_server_address consul1:8500 - --topo_global_root vitess/global + - TOPOLOGY_FLAGS=--topo-implementation consul --topo-global-server-address consul1:8500 + --topo-global-root vitess/global - WEB_PORT=8080 - GRPC_PORT=15999 - CELL=test @@ -89,8 +89,8 @@ services: vttablet201: condition: service_healthy environment: - - TOPOLOGY_FLAGS=--topo_implementation consul --topo_global_server_address consul1:8500 - --topo_global_root vitess/global + - TOPOLOGY_FLAGS=--topo-implementation consul --topo-global-server-address consul1:8500 + --topo-global-root vitess/global - WEB_PORT=8080 - GRPC_PORT=15999 - CELL=test @@ -126,8 +126,8 @@ services: depends_on: - vtctld environment: - - TOPOLOGY_FLAGS=--topo_implementation consul --topo_global_server_address consul1:8500 - --topo_global_root vitess/global + - TOPOLOGY_FLAGS=--topo-implementation consul --topo-global-server-address consul1:8500 + --topo-global-root vitess/global - EXTERNAL_DB=0 image: vitess/lite:${VITESS_TAG:-latest} volumes: @@ -136,10 +136,10 @@ services: command: - sh - -c - - ' /vt/bin/vtctld --topo_implementation consul --topo_global_server_address consul1:8500 - --topo_global_root vitess/global --cell test - --service_map ''grpc-vtctl,grpc-vtctld'' --backup_storage_implementation file --file_backup_storage_root - /vt/vtdataroot/backups --logtostderr=true --port 8080 --grpc_port 15999 ' + - ' /vt/bin/vtctld --topo-implementation consul --topo-global-server-address consul1:8500 + --topo-global-root vitess/global --cell test + --service-map ''grpc-vtctl,grpc-vtctld'' --backup-storage-implementation file --file_backup_storage_root + /vt/vtdataroot/backups --logtostderr=true --port 8080 --grpc-port 15999 ' depends_on: external_db_host: condition: service_healthy @@ -153,11 +153,11 @@ services: command: - sh - -c - - '/script/run-forever.sh /vt/bin/vtgate --topo_implementation consul --topo_global_server_address - consul1:8500 --topo_global_root vitess/global --logtostderr=true --port 8080 --grpc_port - 15999 --mysql_server_port 15306 --mysql_auth_server_impl none --cell test --cells_to_watch - test --tablet_types_to_wait PRIMARY,REPLICA,RDONLY --service_map ''grpc-vtgateservice'' - --normalize_queries=true ' + - '/script/run-forever.sh /vt/bin/vtgate --topo-implementation consul --topo-global-server-address + consul1:8500 --topo-global-root vitess/global --logtostderr=true --port 8080 --grpc-port + 15999 --mysql-server-port 15306 --mysql-auth-server-impl none --cell test --cells_to_watch + test --tablet-types-to-wait PRIMARY,REPLICA,RDONLY --service-map ''grpc-vtgateservice'' + --normalize-queries=true ' depends_on: - vtctld image: vitess/lite:${VITESS_TAG:-latest} @@ -176,8 +176,8 @@ services: - vtctld - set_keyspace_durability_policy environment: - - TOPOLOGY_FLAGS=--topo_implementation consul --topo_global_server_address consul1:8500 - --topo_global_root vitess/global + - TOPOLOGY_FLAGS=--topo-implementation consul --topo-global-server-address consul1:8500 + --topo-global-root vitess/global - WEB_PORT=8080 - EXTERNAL_DB=0 - DB_USER= @@ -195,8 +195,8 @@ services: depends_on: - vtctld environment: - - TOPOLOGY_FLAGS=--topo_implementation consul --topo_global_server_address consul1:8500 - --topo_global_root vitess/global + - TOPOLOGY_FLAGS=--topo-implementation consul --topo-global-server-address consul1:8500 + --topo-global-root vitess/global - WEB_PORT=8080 - GRPC_PORT=15999 - CELL=test @@ -232,8 +232,8 @@ services: depends_on: - vtctld environment: - - TOPOLOGY_FLAGS=--topo_implementation consul --topo_global_server_address consul1:8500 - --topo_global_root vitess/global + - TOPOLOGY_FLAGS=--topo-implementation consul --topo-global-server-address consul1:8500 + --topo-global-root vitess/global - WEB_PORT=8080 - GRPC_PORT=15999 - CELL=test @@ -269,8 +269,8 @@ services: depends_on: - vtctld environment: - - TOPOLOGY_FLAGS=--topo_implementation consul --topo_global_server_address consul1:8500 - --topo_global_root vitess/global + - TOPOLOGY_FLAGS=--topo-implementation consul --topo-global-server-address consul1:8500 + --topo-global-root vitess/global - WEB_PORT=8080 - GRPC_PORT=15999 - CELL=test @@ -306,8 +306,8 @@ services: depends_on: - vtctld environment: - - TOPOLOGY_FLAGS=--topo_implementation consul --topo_global_server_address consul1:8500 - --topo_global_root vitess/global + - TOPOLOGY_FLAGS=--topo-implementation consul --topo-global-server-address consul1:8500 + --topo-global-root vitess/global - WEB_PORT=8080 - GRPC_PORT=15999 - CELL=test @@ -343,8 +343,8 @@ services: depends_on: - vtctld environment: - - TOPOLOGY_FLAGS=--topo_implementation consul --topo_global_server_address consul1:8500 - --topo_global_root vitess/global + - TOPOLOGY_FLAGS=--topo-implementation consul --topo-global-server-address consul1:8500 + --topo-global-root vitess/global - WEB_PORT=8080 - GRPC_PORT=15999 - CELL=test @@ -380,8 +380,8 @@ services: depends_on: - vtctld environment: - - TOPOLOGY_FLAGS=--topo_implementation consul --topo_global_server_address consul1:8500 - --topo_global_root vitess/global + - TOPOLOGY_FLAGS=--topo-implementation consul --topo-global-server-address consul1:8500 + --topo-global-root vitess/global - WEB_PORT=8080 - GRPC_PORT=15999 - CELL=test diff --git a/examples/compose/template.env b/examples/compose/template.env index 0f008404ea9..7f8cf225309 100644 --- a/examples/compose/template.env +++ b/examples/compose/template.env @@ -1,4 +1,4 @@ -TOPOLOGY_FLAGS=--topo_implementation consul --topo_global_server_address consul1:8500 --topo_global_root vitess/global +TOPOLOGY_FLAGS=--topo-implementation consul --topo-global-server-address consul1:8500 --topo-global-root vitess/global GRPC_PORT=15999 WEB_PORT=8080 MYSQL_PORT=15306 diff --git a/examples/compose/vtcompose/docker-compose.test.yml b/examples/compose/vtcompose/docker-compose.test.yml index a04fa5aa310..0b95b6aeea2 100644 --- a/examples/compose/vtcompose/docker-compose.test.yml +++ b/examples/compose/vtcompose/docker-compose.test.yml @@ -67,8 +67,8 @@ services: vttablet201: condition: service_healthy environment: - - TOPOLOGY_FLAGS=--topo_implementation consul --topo_global_server_address consul1:8500 - --topo_global_root vitess/global + - TOPOLOGY_FLAGS=--topo-implementation consul --topo-global-server-address consul1:8500 + --topo-global-root vitess/global - WEB_PORT=8080 - GRPC_PORT=15999 - CELL=test @@ -91,8 +91,8 @@ services: vttablet301: condition: service_healthy environment: - - TOPOLOGY_FLAGS=--topo_implementation consul --topo_global_server_address consul1:8500 - --topo_global_root vitess/global + - TOPOLOGY_FLAGS=--topo-implementation consul --topo-global-server-address consul1:8500 + --topo-global-root vitess/global - WEB_PORT=8080 - GRPC_PORT=15999 - CELL=test @@ -141,8 +141,8 @@ services: depends_on: - vtctld environment: - - TOPOLOGY_FLAGS=--topo_implementation consul --topo_global_server_address consul1:8500 - --topo_global_root vitess/global + - TOPOLOGY_FLAGS=--topo-implementation consul --topo-global-server-address consul1:8500 + --topo-global-root vitess/global - EXTERNAL_DB=0 image: vitess/lite:${VITESS_TAG:-latest} volumes: @@ -151,11 +151,11 @@ services: command: - sh - -c - - ' /vt/bin/vtctld --topo_implementation consul --topo_global_server_address consul1:8500 - --topo_global_root vitess/global --cell test - --service_map ''grpc-vtctl,grpc-vtctld'' --backup_storage_implementation file - --file_backup_storage_root /vt/vtdataroot/backups --logtostderr=true --port - 8080 --grpc_port 15999 ' + - ' /vt/bin/vtctld --topo-implementation consul --topo-global-server-address consul1:8500 + --topo-global-root vitess/global --cell test + --service-map ''grpc-vtctl,grpc-vtctld'' --backup-storage-implementation file + --file_backup_storage_root /vt/vtdataroot/backups --logtostderr=true --port + 8080 --grpc-port 15999 ' depends_on: external_db_host: condition: service_healthy @@ -169,11 +169,11 @@ services: command: - sh - -c - - '/script/run-forever.sh /vt/bin/vtgate --topo_implementation consul --topo_global_server_address - consul1:8500 --topo_global_root vitess/global --logtostderr=true --port 8080 - --grpc_port 15999 --mysql_server_port 15306 --mysql_auth_server_impl none --cell - test --cells_to_watch test --tablet_types_to_wait PRIMARY,REPLICA,RDONLY --service_map - ''grpc-vtgateservice'' --normalize_queries=true ' + - '/script/run-forever.sh /vt/bin/vtgate --topo-implementation consul --topo-global-server-address + consul1:8500 --topo-global-root vitess/global --logtostderr=true --port 8080 + --grpc-port 15999 --mysql-server-port 15306 --mysql-auth-server-impl none --cell + test --cells_to_watch test --tablet-types-to-wait PRIMARY,REPLICA,RDONLY --service-map + ''grpc-vtgateservice'' --normalize-queries=true ' depends_on: - vtctld image: vitess/lite:${VITESS_TAG:-latest} @@ -194,8 +194,8 @@ services: - vtctld environment: - WEB_PORT=8080 - - TOPOLOGY_FLAGS=--topo_implementation consul --topo_global_server_address consul1:8500 - --topo_global_root vitess/global + - TOPOLOGY_FLAGS=--topo-implementation consul --topo-global-server-address consul1:8500 + --topo-global-root vitess/global - EXTERNAL_DB=0 - DB_USER= - DB_PASS= @@ -212,8 +212,8 @@ services: depends_on: - vtctld environment: - - TOPOLOGY_FLAGS=--topo_implementation consul --topo_global_server_address consul1:8500 - --topo_global_root vitess/global + - TOPOLOGY_FLAGS=--topo-implementation consul --topo-global-server-address consul1:8500 + --topo-global-root vitess/global - WEB_PORT=8080 - GRPC_PORT=15999 - CELL=test @@ -249,8 +249,8 @@ services: depends_on: - vtctld environment: - - TOPOLOGY_FLAGS=--topo_implementation consul --topo_global_server_address consul1:8500 - --topo_global_root vitess/global + - TOPOLOGY_FLAGS=--topo-implementation consul --topo-global-server-address consul1:8500 + --topo-global-root vitess/global - WEB_PORT=8080 - GRPC_PORT=15999 - CELL=test @@ -286,8 +286,8 @@ services: depends_on: - vtctld environment: - - TOPOLOGY_FLAGS=--topo_implementation consul --topo_global_server_address consul1:8500 - --topo_global_root vitess/global + - TOPOLOGY_FLAGS=--topo-implementation consul --topo-global-server-address consul1:8500 + --topo-global-root vitess/global - WEB_PORT=8080 - GRPC_PORT=15999 - CELL=test @@ -323,8 +323,8 @@ services: depends_on: - vtctld environment: - - TOPOLOGY_FLAGS=--topo_implementation consul --topo_global_server_address consul1:8500 - --topo_global_root vitess/global + - TOPOLOGY_FLAGS=--topo-implementation consul --topo-global-server-address consul1:8500 + --topo-global-root vitess/global - WEB_PORT=8080 - GRPC_PORT=15999 - CELL=test @@ -360,8 +360,8 @@ services: depends_on: - vtctld environment: - - TOPOLOGY_FLAGS=--topo_implementation consul --topo_global_server_address consul1:8500 - --topo_global_root vitess/global + - TOPOLOGY_FLAGS=--topo-implementation consul --topo-global-server-address consul1:8500 + --topo-global-root vitess/global - WEB_PORT=8080 - GRPC_PORT=15999 - CELL=test diff --git a/examples/compose/vtcompose/vtcompose.go b/examples/compose/vtcompose/vtcompose.go index 3bcfd8315e5..55d132a0649 100644 --- a/examples/compose/vtcompose/vtcompose.go +++ b/examples/compose/vtcompose/vtcompose.go @@ -46,7 +46,7 @@ const ( cellUsage = "Vitess Cell name" DefaultExternalDbData = "" externalDbDataUsage = "List of Data corresponding to external DBs. List of ,,,,, separated by ';'" - DefaultTopologyFlags = "--topo_implementation consul --topo_global_server_address consul1:8500 --topo_global_root vitess/global" + DefaultTopologyFlags = "--topo-implementation consul --topo-global-server-address consul1:8500 --topo-global-root vitess/global" topologyFlagsUsage = "Vitess Topology Flags config" ) @@ -632,12 +632,12 @@ func generateVtctld(opts vtOptions) string { command: ["sh", "-c", " /vt/bin/vtctld \ %[3]s \ --cell %[4]s \ - --service_map 'grpc-vtctl,grpc-vtctld' \ - --backup_storage_implementation file \ + --service-map 'grpc-vtctl,grpc-vtctld' \ + --backup-storage-implementation file \ --file_backup_storage_root /vt/vtdataroot/backups \ --logtostderr=true \ --port %[1]d \ - --grpc_port %[2]d \ + --grpc-port %[2]d \ "] volumes: - .:/script @@ -665,14 +665,14 @@ func generateVtgate(opts vtOptions) string { %[4]s \ --logtostderr=true \ --port %[1]d \ - --grpc_port %[2]d \ - --mysql_server_port %[3]d \ - --mysql_auth_server_impl none \ + --grpc-port %[2]d \ + --mysql-server-port %[3]d \ + --mysql-auth-server-impl none \ --cell %[5]s \ --cells_to_watch %[5]s \ - --tablet_types_to_wait PRIMARY,REPLICA,RDONLY \ - --service_map 'grpc-vtgateservice' \ - --normalize_queries=true \ + --tablet-types-to-wait PRIMARY,REPLICA,RDONLY \ + --service-map 'grpc-vtgateservice' \ + --normalize-queries=true \ "] volumes: - .:/script diff --git a/examples/compose/vttablet-up.sh b/examples/compose/vttablet-up.sh index 71ddbe5232a..afc39698757 100755 --- a/examples/compose/vttablet-up.sh +++ b/examples/compose/vttablet-up.sh @@ -95,6 +95,7 @@ rm -rf $VTDATAROOT/$tablet_dir/{mysql.sock,mysql.sock.lock} # Create mysql instances # Do not create mysql instance for primary if connecting to external mysql database +#TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation if [[ $tablet_role != "externalprimary" ]]; then echo "Initing mysql for tablet: $uid role: $role external: $external.. " $VTROOT/bin/mysqlctld \ @@ -142,7 +143,7 @@ else --restore_from_backup" fi - +#TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation echo "Starting vttablet..." exec $VTROOT/bin/vttablet \ $TOPOLOGY_FLAGS \ diff --git a/examples/operator/101_initial_cluster.yaml b/examples/operator/101_initial_cluster.yaml index e936ce9d13c..fc67f83e03c 100644 --- a/examples/operator/101_initial_cluster.yaml +++ b/examples/operator/101_initial_cluster.yaml @@ -44,7 +44,7 @@ spec: cells: - zone1 extraFlags: - security_policy: read-only + security-policy: read-only replicas: 1 resources: limits: @@ -101,7 +101,7 @@ spec: replicas: 2 vttablet: extraFlags: - db_charset: utf8mb4 + db-charset: utf8mb4 resources: limits: memory: 256Mi diff --git a/examples/operator/201_customer_tablets.yaml b/examples/operator/201_customer_tablets.yaml index cef29d551cc..d9cd812e405 100644 --- a/examples/operator/201_customer_tablets.yaml +++ b/examples/operator/201_customer_tablets.yaml @@ -40,7 +40,7 @@ spec: cells: - zone1 extraFlags: - security_policy: read-only + security-policy: read-only replicas: 1 resources: limits: @@ -97,7 +97,7 @@ spec: replicas: 2 vttablet: extraFlags: - db_charset: utf8mb4 + db-charset: utf8mb4 resources: limits: memory: 256Mi @@ -132,7 +132,7 @@ spec: replicas: 2 vttablet: extraFlags: - db_charset: utf8mb4 + db-charset: utf8mb4 resources: limits: memory: 256Mi diff --git a/examples/operator/302_new_shards.yaml b/examples/operator/302_new_shards.yaml index 30f5a2e9987..5d96185754d 100644 --- a/examples/operator/302_new_shards.yaml +++ b/examples/operator/302_new_shards.yaml @@ -40,7 +40,7 @@ spec: cells: - zone1 extraFlags: - security_policy: read-only + security-policy: read-only replicas: 1 resources: limits: @@ -97,7 +97,7 @@ spec: replicas: 2 vttablet: extraFlags: - db_charset: utf8mb4 + db-charset: utf8mb4 resources: limits: memory: 256Mi @@ -132,7 +132,7 @@ spec: replicas: 2 vttablet: extraFlags: - db_charset: utf8mb4 + db-charset: utf8mb4 resources: limits: memory: 256Mi @@ -163,7 +163,7 @@ spec: replicas: 2 vttablet: extraFlags: - db_charset: utf8mb4 + db-charset: utf8mb4 resources: limits: memory: 256Mi diff --git a/examples/operator/306_down_shard_0.yaml b/examples/operator/306_down_shard_0.yaml index a3b472e4fe9..521afe3bcfe 100644 --- a/examples/operator/306_down_shard_0.yaml +++ b/examples/operator/306_down_shard_0.yaml @@ -40,7 +40,7 @@ spec: cells: - zone1 extraFlags: - security_policy: read-only + security-policy: read-only replicas: 1 resources: limits: @@ -97,7 +97,7 @@ spec: replicas: 2 vttablet: extraFlags: - db_charset: utf8mb4 + db-charset: utf8mb4 resources: limits: memory: 256Mi @@ -132,7 +132,7 @@ spec: replicas: 2 vttablet: extraFlags: - db_charset: utf8mb4 + db-charset: utf8mb4 resources: limits: memory: 256Mi diff --git a/examples/operator/401_scheduled_backups.yaml b/examples/operator/401_scheduled_backups.yaml index 9f11261cf22..4053125b289 100644 --- a/examples/operator/401_scheduled_backups.yaml +++ b/examples/operator/401_scheduled_backups.yaml @@ -74,7 +74,7 @@ spec: cells: - zone1 extraFlags: - security_policy: read-only + security-policy: read-only replicas: 1 resources: limits: @@ -131,8 +131,8 @@ spec: replicas: 2 vttablet: extraFlags: - db_charset: utf8mb4 - wait_for_backup_interval: "0" + db-charset: utf8mb4 + wait-for-backup-interval: "0" resources: limits: memory: 1024Mi @@ -167,8 +167,8 @@ spec: replicas: 2 vttablet: extraFlags: - db_charset: utf8mb4 - wait_for_backup_interval: "0" + db-charset: utf8mb4 + wait-for-backup-interval: "0" resources: limits: memory: 1024Mi diff --git a/go.mod b/go.mod index cf3127bc60c..feef1752727 100644 --- a/go.mod +++ b/go.mod @@ -1,9 +1,9 @@ module vitess.io/vitess -go 1.24.1 +go 1.24.3 require ( - cloud.google.com/go/storage v1.51.0 + cloud.google.com/go/storage v1.54.0 github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 github.com/Azure/azure-pipeline-go v0.2.3 github.com/Azure/azure-storage-blob-go v0.15.0 @@ -15,9 +15,9 @@ require ( github.com/corpix/uarand v0.1.1 // indirect github.com/dave/jennifer v1.7.1 github.com/evanphx/json-patch v5.9.11+incompatible - github.com/fsnotify/fsnotify v1.8.0 + github.com/fsnotify/fsnotify v1.9.0 github.com/go-sql-driver/mysql v1.7.1 - github.com/golang/glog v1.2.4 + github.com/golang/glog v1.2.5 github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v1.0.0 github.com/google/go-cmp v0.7.0 @@ -27,60 +27,59 @@ require ( github.com/gorilla/mux v1.8.1 github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 - github.com/hashicorp/consul/api v1.31.2 + github.com/hashicorp/consul/api v1.32.1 github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/serf v0.10.2 // indirect github.com/icrowley/fake v0.0.0-20180203215853-4178557ae428 github.com/klauspost/compress v1.18.0 github.com/klauspost/pgzip v1.2.6 github.com/krishicks/yaml-patch v0.0.10 - github.com/magiconair/properties v1.8.9 // indirect github.com/minio/minio-go v0.0.0-20190131015406-c8a261de75c1 github.com/montanaflynn/stats v0.7.1 github.com/olekukonko/tablewriter v0.0.5 - github.com/opentracing-contrib/go-grpc v0.1.1 + github.com/opentracing-contrib/go-grpc v0.1.2 github.com/opentracing/opentracing-go v1.2.0 github.com/patrickmn/go-cache v2.1.0+incompatible github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect github.com/pierrec/lz4 v2.6.1+incompatible - github.com/pires/go-proxyproto v0.8.0 + github.com/pires/go-proxyproto v0.8.1 github.com/pkg/errors v0.9.1 // indirect github.com/planetscale/pargzip v0.0.0-20201116224723-90c7fc03ea8a github.com/planetscale/vtprotobuf v0.6.1-0.20241121165744-79df5c4772f2 - github.com/prometheus/client_golang v1.21.1 + github.com/prometheus/client_golang v1.22.0 github.com/prometheus/common v0.63.0 github.com/sjmudd/stopwatch v0.1.1 github.com/soheilhy/cmux v0.1.5 github.com/spf13/cobra v1.9.1 github.com/spf13/pflag v1.0.6 - github.com/spf13/viper v1.19.0 + github.com/spf13/viper v1.20.1 github.com/stretchr/testify v1.10.0 github.com/tchap/go-patricia v2.3.0+incompatible github.com/tidwall/gjson v1.18.0 - github.com/tinylib/msgp v1.2.5 // indirect + github.com/tinylib/msgp v1.3.0 // indirect github.com/uber/jaeger-client-go v2.30.0+incompatible github.com/uber/jaeger-lib v2.4.1+incompatible // indirect github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 github.com/z-division/go-zookeeper v1.0.0 - go.etcd.io/etcd/api/v3 v3.5.19 - go.etcd.io/etcd/client/pkg/v3 v3.5.19 - go.etcd.io/etcd/client/v3 v3.5.19 + go.etcd.io/etcd/api/v3 v3.5.21 + go.etcd.io/etcd/client/pkg/v3 v3.5.21 + go.etcd.io/etcd/client/v3 v3.5.21 go.uber.org/mock v0.5.0 - golang.org/x/crypto v0.36.0 // indirect + golang.org/x/crypto v0.38.0 // indirect golang.org/x/mod v0.24.0 // indirect - golang.org/x/net v0.37.0 - golang.org/x/oauth2 v0.28.0 - golang.org/x/sys v0.31.0 - golang.org/x/term v0.30.0 - golang.org/x/text v0.23.0 // indirect + golang.org/x/net v0.40.0 + golang.org/x/oauth2 v0.30.0 + golang.org/x/sys v0.33.0 + golang.org/x/term v0.32.0 + golang.org/x/text v0.25.0 // indirect golang.org/x/time v0.11.0 - golang.org/x/tools v0.31.0 - google.golang.org/api v0.226.0 - google.golang.org/genproto v0.0.0-20250313205543-e70fdf4c4cb4 // indirect - google.golang.org/grpc v1.71.0 + golang.org/x/tools v0.33.0 + google.golang.org/api v0.233.0 + google.golang.org/genproto v0.0.0-20250512202823-5a2f75b736a9 // indirect + google.golang.org/grpc v1.72.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 google.golang.org/grpc/examples v0.0.0-20250204041003-947e2a4be2ba - google.golang.org/protobuf v1.36.5 + google.golang.org/protobuf v1.36.6 gopkg.in/DataDog/dd-trace-go.v1 v1.69.1 gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d // indirect gopkg.in/ldap.v2 v2.5.1 @@ -89,11 +88,11 @@ require ( require ( github.com/DataDog/datadog-go/v5 v5.6.0 - github.com/Shopify/toxiproxy/v2 v2.11.0 + github.com/Shopify/toxiproxy/v2 v2.12.0 github.com/aws/aws-sdk-go-v2 v1.36.3 - github.com/aws/aws-sdk-go-v2/config v1.29.9 - github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.66 - github.com/aws/aws-sdk-go-v2/service/s3 v1.78.2 + github.com/aws/aws-sdk-go-v2/config v1.29.14 + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.75 + github.com/aws/aws-sdk-go-v2/service/s3 v1.79.3 github.com/aws/smithy-go v1.22.3 github.com/bndr/gotabulate v1.1.2 github.com/dustin/go-humanize v1.0.1 @@ -104,29 +103,29 @@ require ( github.com/kr/text v0.2.0 github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c github.com/nsf/jsondiff v0.0.0-20210926074059-1e845ec5d249 - github.com/spf13/afero v1.12.0 + github.com/spf13/afero v1.14.0 github.com/spf13/jwalterweatherman v1.1.0 github.com/xlab/treeprint v1.2.0 go.uber.org/goleak v1.3.0 - golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 - golang.org/x/sync v0.12.0 + golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 + golang.org/x/sync v0.14.0 gonum.org/v1/gonum v0.15.1 - modernc.org/sqlite v1.36.1 + modernc.org/sqlite v1.37.0 ) require ( - cel.dev/expr v0.22.0 // indirect - cloud.google.com/go v0.119.0 // indirect - cloud.google.com/go/auth v0.15.0 // indirect - cloud.google.com/go/auth/oauth2adapt v0.2.7 // indirect - cloud.google.com/go/compute/metadata v0.6.0 // indirect - cloud.google.com/go/iam v1.4.2 // indirect - cloud.google.com/go/monitoring v1.24.1 // indirect - github.com/DataDog/appsec-internal-go v1.10.0 // indirect - github.com/DataDog/datadog-agent/pkg/obfuscate v0.64.1 // indirect - github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.64.1 // indirect + cel.dev/expr v0.24.0 // indirect + cloud.google.com/go v0.121.1 // indirect + cloud.google.com/go/auth v0.16.1 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect + cloud.google.com/go/compute/metadata v0.7.0 // indirect + cloud.google.com/go/iam v1.5.2 // indirect + cloud.google.com/go/monitoring v1.24.2 // indirect + github.com/DataDog/appsec-internal-go v1.11.2 // indirect + github.com/DataDog/datadog-agent/pkg/obfuscate v0.65.1 // indirect + github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.65.1 // indirect github.com/DataDog/go-libddwaf/v3 v3.5.4 // indirect - github.com/DataDog/go-sqllexer v0.1.3 // indirect + github.com/DataDog/go-sqllexer v0.1.6 // indirect github.com/DataDog/go-tuf v1.1.0-0.5.2 // indirect github.com/DataDog/sketches-go v1.4.7 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0 // indirect @@ -134,37 +133,39 @@ require ( github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.51.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.17.62 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.17.67 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.0 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.1 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 // indirect github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.25.1 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.29.1 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.33.17 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.33.19 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42 // indirect + github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 // indirect github.com/coreos/go-semver v0.3.1 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/eapache/queue/v2 v2.0.0-20230407133247-75960ed334e4 // indirect - github.com/ebitengine/purego v0.8.2 // indirect + github.com/ebitengine/purego v0.8.3 // indirect github.com/envoyproxy/go-control-plane/envoy v1.32.4 // indirect github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect github.com/fatih/color v1.18.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/go-jose/go-jose/v4 v4.1.0 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-viper/mapstructure/v2 v2.2.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/google/s2a-go v0.1.9 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect - github.com/googleapis/gax-go/v2 v2.14.1 // indirect + github.com/googleapis/gax-go/v2 v2.14.2 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-hclog v1.6.3 // indirect @@ -175,7 +176,6 @@ require ( github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect github.com/hashicorp/go-sockaddr v1.0.7 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect - github.com/hashicorp/hcl v1.0.1-vault-7 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-ieproxy v0.0.12 // indirect @@ -187,23 +187,24 @@ require ( github.com/onsi/ginkgo v1.16.5 // indirect github.com/onsi/gomega v1.23.0 // indirect github.com/outcaste-io/ristretto v0.2.3 // indirect - github.com/pelletier/go-toml/v2 v2.2.3 // indirect + github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/procfs v0.15.1 // indirect + github.com/prometheus/client_model v0.6.2 // indirect + github.com/prometheus/procfs v0.16.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/ryanuber/go-glob v1.0.0 // indirect - github.com/sagikazarmark/locafero v0.7.0 // indirect - github.com/sagikazarmark/slog-shim v0.1.0 // indirect + github.com/sagikazarmark/locafero v0.9.0 // indirect github.com/secure-systems-lab/go-securesystemslib v0.9.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect - github.com/spf13/cast v1.7.1 // indirect + github.com/spf13/cast v1.8.0 // indirect + github.com/spiffe/go-spiffe/v2 v2.5.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect + github.com/zeebo/errs v1.4.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/contrib/detectors/gcp v1.35.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 // indirect @@ -217,12 +218,12 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250313205543-e70fdf4c4cb4 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250512202823-5a2f75b736a9 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250512202823-5a2f75b736a9 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - modernc.org/libc v1.61.13 // indirect + modernc.org/libc v1.65.6 // indirect modernc.org/mathutil v1.7.1 // indirect - modernc.org/memory v1.8.2 // indirect + modernc.org/memory v1.10.0 // indirect ) diff --git a/go.sum b/go.sum index f9afeb5980c..96b6dcae32d 100644 --- a/go.sum +++ b/go.sum @@ -1,27 +1,27 @@ -cel.dev/expr v0.22.0 h1:+hFFhLPmquBImfs1BiN2PZmkr5ASse2ZOuaxIs9e4R8= -cel.dev/expr v0.22.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw= +cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY= +cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.119.0 h1:tw7OjErMzJKbbjaEHkrt60KQrK5Wus/boCZ7tm5/RNE= -cloud.google.com/go v0.119.0/go.mod h1:fwB8QLzTcNevxqi8dcpR+hoMIs3jBherGS9VUBDAW08= -cloud.google.com/go/auth v0.15.0 h1:Ly0u4aA5vG/fsSsxu98qCQBemXtAtJf+95z9HK+cxps= -cloud.google.com/go/auth v0.15.0/go.mod h1:WJDGqZ1o9E9wKIL+IwStfyn/+s59zl4Bi+1KQNVXLZ8= -cloud.google.com/go/auth/oauth2adapt v0.2.7 h1:/Lc7xODdqcEw8IrZ9SvwnlLX6j9FHQM74z6cBk9Rw6M= -cloud.google.com/go/auth/oauth2adapt v0.2.7/go.mod h1:NTbTTzfvPl1Y3V1nPpOgl2w6d/FjO7NNUQaWSox6ZMc= -cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I= -cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg= -cloud.google.com/go/iam v1.4.2 h1:4AckGYAYsowXeHzsn/LCKWIwSWLkdb0eGjH8wWkd27Q= -cloud.google.com/go/iam v1.4.2/go.mod h1:REGlrt8vSlh4dfCJfSEcNjLGq75wW75c5aU3FLOYq34= +cloud.google.com/go v0.121.1 h1:S3kTQSydxmu1JfLRLpKtxRPA7rSrYPRPEUmL/PavVUw= +cloud.google.com/go v0.121.1/go.mod h1:nRFlrHq39MNVWu+zESP2PosMWA0ryJw8KUBZ2iZpxbw= +cloud.google.com/go/auth v0.16.1 h1:XrXauHMd30LhQYVRHLGvJiYeczweKQXZxsTbV9TiguU= +cloud.google.com/go/auth v0.16.1/go.mod h1:1howDHJ5IETh/LwYs3ZxvlkXF48aSqqJUM+5o02dNOI= +cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= +cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= +cloud.google.com/go/compute/metadata v0.7.0 h1:PBWF+iiAerVNe8UCHxdOt6eHLVc3ydFeOCw78U8ytSU= +cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo= +cloud.google.com/go/iam v1.5.2 h1:qgFRAGEmd8z6dJ/qyEchAuL9jpswyODjA2lS+w234g8= +cloud.google.com/go/iam v1.5.2/go.mod h1:SE1vg0N81zQqLzQEwxL2WI6yhetBdbNQuTvIKCSkUHE= cloud.google.com/go/logging v1.13.0 h1:7j0HgAp0B94o1YRDqiqm26w4q1rDMH7XNRU34lJXHYc= cloud.google.com/go/logging v1.13.0/go.mod h1:36CoKh6KA/M0PbhPKMq6/qety2DCAErbhXT62TuXALA= -cloud.google.com/go/longrunning v0.6.5 h1:sD+t8DO8j4HKW4QfouCklg7ZC1qC4uzVZt8iz3uTW+Q= -cloud.google.com/go/longrunning v0.6.5/go.mod h1:Et04XK+0TTLKa5IPYryKf5DkpwImy6TluQ1QTLwlKmY= -cloud.google.com/go/monitoring v1.24.1 h1:vKiypZVFD/5a3BbQMvI4gZdl8445ITzXFh257XBgrS0= -cloud.google.com/go/monitoring v1.24.1/go.mod h1:Z05d1/vn9NaujqY2voG6pVQXoJGbp+r3laV+LySt9K0= -cloud.google.com/go/storage v1.51.0 h1:ZVZ11zCiD7b3k+cH5lQs/qcNaoSz3U9I0jgwVzqDlCw= -cloud.google.com/go/storage v1.51.0/go.mod h1:YEJfu/Ki3i5oHC/7jyTgsGZwdQ8P9hqMqvpi5kRKGgc= -cloud.google.com/go/trace v1.11.3 h1:c+I4YFjxRQjvAhRmSsmjpASUKq88chOX854ied0K/pE= -cloud.google.com/go/trace v1.11.3/go.mod h1:pt7zCYiDSQjC9Y2oqCsh9jF4GStB/hmjrYLsxRR27q8= +cloud.google.com/go/longrunning v0.6.7 h1:IGtfDWHhQCgCjwQjV9iiLnUta9LBCo8R9QmAFsS/PrE= +cloud.google.com/go/longrunning v0.6.7/go.mod h1:EAFV3IZAKmM56TyiE6VAP3VoTzhZzySwI/YI1s/nRsY= +cloud.google.com/go/monitoring v1.24.2 h1:5OTsoJ1dXYIiMiuL+sYscLc9BumrL3CarVLL7dd7lHM= +cloud.google.com/go/monitoring v1.24.2/go.mod h1:x7yzPWcgDRnPEv3sI+jJGBkwl5qINf+6qY4eq0I9B4U= +cloud.google.com/go/storage v1.54.0 h1:Du3XEyliAiftfyW0bwfdppm2MMLdpVAfiIg4T2nAI+0= +cloud.google.com/go/storage v1.54.0/go.mod h1:hIi9Boe8cHxTyaeqh7KMMwKg088VblFK46C2x/BWaZE= +cloud.google.com/go/trace v1.11.6 h1:2O2zjPzqPYAHrn3OKl029qlqG6W8ZdYaOWRyr8NgMT4= +cloud.google.com/go/trace v1.11.6/go.mod h1:GA855OeDEBiBMzcckLPE2kDunIpC72N+Pq8WFieFjnI= github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 h1:He8afgbRMd7mFxO99hRNu+6tazq8nFF9lIwo9JFroBk= github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= github.com/Azure/azure-pipeline-go v0.2.3 h1:7U9HBg1JFK3jHl5qmo4CTZKFTVgMwdFHMVtCdfBE21U= @@ -40,19 +40,19 @@ github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZ github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/appsec-internal-go v1.10.0 h1:RlY1FXYeaDCHs5fbhcs5x/MxZYUwg53LOy+iSj0iHsU= -github.com/DataDog/appsec-internal-go v1.10.0/go.mod h1:9eYpAdKZF4Pz49qOmNL+OSVFHjhkZrBdBBjmAwBeN5c= -github.com/DataDog/datadog-agent/pkg/obfuscate v0.64.1 h1:pZQkM5znAheg61GNv8qIkVxyUKmVEgN/ZN9sNDULtgg= -github.com/DataDog/datadog-agent/pkg/obfuscate v0.64.1/go.mod h1:izbemZjqzBn9upkZj8SyT9igSGPMALaQYgswJ0408vY= -github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.64.1 h1:B+kUwdbxFO4Dd07MfoOsenuV5jTEpJxYhFEbL8l95bs= -github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.64.1/go.mod h1:1AAhFoEuoXs8jfpj7EiGW6lsqvCYgQc0B0pRpYAPEW4= +github.com/DataDog/appsec-internal-go v1.11.2 h1:Q00pPMQzqMIw7jT2ObaORIxBzSly+deS0Ely9OZ/Bj0= +github.com/DataDog/appsec-internal-go v1.11.2/go.mod h1:9YppRCpElfGX+emXOKruShFYsdPq7WEPq/Fen4tYYpk= +github.com/DataDog/datadog-agent/pkg/obfuscate v0.65.1 h1:WMSComl8tXteUjDnQKZzONEOnaVloOPbZWjjGv+kFNQ= +github.com/DataDog/datadog-agent/pkg/obfuscate v0.65.1/go.mod h1:aZhd/54tdkoestFE6bqGn+u2Z3eEnKnWwy4xY/bzSW4= +github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.65.1 h1:XGScSyjkISrbd58Sm4rEuXc+s5Cs7YVKiy3X7PucReo= +github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.65.1/go.mod h1:IVspeNtooiQazY8K0dluINf5gdksPfHXUB8zShmDZrU= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/datadog-go/v5 v5.6.0 h1:2oCLxjF/4htd55piM75baflj/KoE6VYS7alEUqFvRDw= github.com/DataDog/datadog-go/v5 v5.6.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= github.com/DataDog/go-libddwaf/v3 v3.5.4 h1:cLV5lmGhrUBnHG50EUXdqPQAlJdVCp9n3aQ5bDWJEAg= github.com/DataDog/go-libddwaf/v3 v3.5.4/go.mod h1:HoLUHdj0NybsPBth/UppTcg8/DKA4g+AXuk8cZ6nuoo= -github.com/DataDog/go-sqllexer v0.1.3 h1:Kl2T6QVndMEZqQSY8rkoltYP+LVNaA54N+EwAMc9N5w= -github.com/DataDog/go-sqllexer v0.1.3/go.mod h1:KwkYhpFEVIq+BfobkTC1vfqm4gTi65skV/DpDBXtexc= +github.com/DataDog/go-sqllexer v0.1.6 h1:skEXpWEVCpeZFIiydoIa2f2rf+ymNpjiIMqpW4w3YAk= +github.com/DataDog/go-sqllexer v0.1.6/go.mod h1:GGpo1h9/BVSN+6NJKaEcJ9Jn44Hqc63Rakeb+24Mjgo= github.com/DataDog/go-tuf v1.1.0-0.5.2 h1:4CagiIekonLSfL8GMHRHcHudo1fQnxELS9g4tiAupQ4= github.com/DataDog/go-tuf v1.1.0-0.5.2/go.mod h1:zBcq6f654iVqmkk8n2Cx81E1JnNTMOAx1UEO/wZR+P0= github.com/DataDog/gostackparse v0.7.0 h1:i7dLkXHvYzHV308hnkvVGDL3BR4FWl7IsXNPz/IGQh4= @@ -75,8 +75,8 @@ github.com/Masterminds/vcs v1.13.0/go.mod h1:N09YCmOQr6RLxC6UNHzuVwAdodYbbnycGHS github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= -github.com/Shopify/toxiproxy/v2 v2.11.0 h1:iXm78nBN50T2BTs1Z8w1fdC0Y1kltkJZQEyMcYyCgGQ= -github.com/Shopify/toxiproxy/v2 v2.11.0/go.mod h1:EPnGLFvhpcwVKCsbFZwyOq4PxnGg9cFbhMrVT3ROBEo= +github.com/Shopify/toxiproxy/v2 v2.12.0 h1:d1x++lYZg/zijXPPcv7PH0MvHMzEI5aX/YuUi/Sw+yg= +github.com/Shopify/toxiproxy/v2 v2.12.0/go.mod h1:R9Z38Pw6k2cGZWXHe7tbxjGW9azmY1KbDQJ1kd+h7Tk= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -90,14 +90,14 @@ github.com/aws/aws-sdk-go-v2 v1.36.3 h1:mJoei2CxPutQVxaATCzDUjcZEjVRdpsiiXi2o38y github.com/aws/aws-sdk-go-v2 v1.36.3/go.mod h1:LLXuLpgzEbD766Z5ECcRmi8AzSwfZItDtmABVkRLGzg= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 h1:zAybnyUQXIZ5mok5Jqwlf58/TFE7uvd3IAsa1aF9cXs= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10/go.mod h1:qqvMj6gHLR/EXWZw4ZbqlPbQUyenf4h82UQUlKc+l14= -github.com/aws/aws-sdk-go-v2/config v1.29.9 h1:Kg+fAYNaJeGXp1vmjtidss8O2uXIsXwaRqsQJKXVr+0= -github.com/aws/aws-sdk-go-v2/config v1.29.9/go.mod h1:oU3jj2O53kgOU4TXq/yipt6ryiooYjlkqqVaZk7gY/U= -github.com/aws/aws-sdk-go-v2/credentials v1.17.62 h1:fvtQY3zFzYJ9CfixuAQ96IxDrBajbBWGqjNTCa79ocU= -github.com/aws/aws-sdk-go-v2/credentials v1.17.62/go.mod h1:ElETBxIQqcxej++Cs8GyPBbgMys5DgQPTwo7cUPDKt8= +github.com/aws/aws-sdk-go-v2/config v1.29.14 h1:f+eEi/2cKCg9pqKBoAIwRGzVb70MRKqWX4dg1BDcSJM= +github.com/aws/aws-sdk-go-v2/config v1.29.14/go.mod h1:wVPHWcIFv3WO89w0rE10gzf17ZYy+UVS1Geq8Iei34g= +github.com/aws/aws-sdk-go-v2/credentials v1.17.67 h1:9KxtdcIA/5xPNQyZRgUSpYOE6j9Bc4+D7nZua0KGYOM= +github.com/aws/aws-sdk-go-v2/credentials v1.17.67/go.mod h1:p3C44m+cfnbv763s52gCqrjaqyPikj9Sg47kUVaNZQQ= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 h1:x793wxmUWVDhshP8WW2mlnXuFrO4cOd3HLBroh1paFw= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30/go.mod h1:Jpne2tDnYiFascUEs2AWHJL9Yp7A5ZVy3TNyxaAjD6M= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.66 h1:MTLivtC3s89de7Fe3P8rzML/8XPNRfuyJhlRTsCEt0k= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.66/go.mod h1:NAuQ2s6gaFEsuTIb2+P5t6amB1w5MhvJFxppoezGWH0= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.75 h1:S61/E3N01oral6B3y9hZ2E1iFDqCZPPOBoBQretCnBI= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.75/go.mod h1:bDMQbkI1vJbNjnvJYpPTSNYBkI/VIv18ngWb/K84tkk= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 h1:ZK5jHhnrioRkUNOc+hOgQKlUL5JeC3S6JgLxtQ+Rm0Q= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34/go.mod h1:p4VfIceZokChbA9FzMbRGz5OV+lekcVtHlPKEO0gSZY= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 h1:SZwFm17ZUNNg5Np0ioo/gq8Mn6u9w19Mri8DnJ15Jf0= @@ -108,20 +108,20 @@ github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 h1:ZNTqv4nIdE/DiBfUUfXcLZ/Spcu github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34/go.mod h1:zf7Vcd1ViW7cPqYWEHLHJkS50X0JS2IKz9Cgaj6ugrs= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 h1:eAh2A4b5IzM/lum78bZ590jy36+d/aFLgKF/4Vd1xPE= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3/go.mod h1:0yKJC/kb8sAnmlYa6Zs3QVYqaC8ug2AbnNChv5Ox3uA= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.0 h1:lguz0bmOoGzozP9XfRJR1QIayEYo+2vP/No3OfLF0pU= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.0/go.mod h1:iu6FSzgt+M2/x3Dk8zhycdIcHjEFb36IS8HVUVFoMg0= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.1 h1:4nm2G6A4pV9rdlWzGMPv4BNtQp22v1hg3yrtkYpeLl8= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.1/go.mod h1:iu6FSzgt+M2/x3Dk8zhycdIcHjEFb36IS8HVUVFoMg0= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 h1:dM9/92u2F1JbDaGooxTq18wmmFzbJRfXfVfy96/1CXM= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15/go.mod h1:SwFBy2vjtA0vZbjjaFtfN045boopadnoVPhu4Fv66vY= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 h1:moLQUoVq91LiqT1nbvzDukyqAlCv89ZmwaHw/ZFlFZg= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15/go.mod h1:ZH34PJUc8ApjBIfgQCFvkWcUDBtl/WTD+uiYHjd8igA= -github.com/aws/aws-sdk-go-v2/service/s3 v1.78.2 h1:jIiopHEV22b4yQP2q36Y0OmwLbsxNWdWwfZRR5QRRO4= -github.com/aws/aws-sdk-go-v2/service/s3 v1.78.2/go.mod h1:U5SNqwhXB3Xe6F47kXvWihPl/ilGaEDe8HD/50Z9wxc= -github.com/aws/aws-sdk-go-v2/service/sso v1.25.1 h1:8JdC7Gr9NROg1Rusk25IcZeTO59zLxsKgE0gkh5O6h0= -github.com/aws/aws-sdk-go-v2/service/sso v1.25.1/go.mod h1:qs4a9T5EMLl/Cajiw2TcbNt2UNo/Hqlyp+GiuG4CFDI= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.29.1 h1:KwuLovgQPcdjNMfFt9OhUd9a2OwcOKhxfvF4glTzLuA= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.29.1/go.mod h1:MlYRNmYu/fGPoxBQVvBYr9nyr948aY/WLUvwBMBJubs= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.17 h1:PZV5W8yk4OtH1JAuhV2PXwwO9v5G5Aoj+eMCn4T+1Kc= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.17/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4= +github.com/aws/aws-sdk-go-v2/service/s3 v1.79.3 h1:BRXS0U76Z8wfF+bnkilA2QwpIch6URlm++yPUt9QPmQ= +github.com/aws/aws-sdk-go-v2/service/s3 v1.79.3/go.mod h1:bNXKFFyaiVvWuR6O16h/I1724+aXe/tAkA9/QS01t5k= +github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 h1:1Gw+9ajCV1jogloEv1RRnvfRFia2cL6c9cuKV2Ps+G8= +github.com/aws/aws-sdk-go-v2/service/sso v1.25.3/go.mod h1:qs4a9T5EMLl/Cajiw2TcbNt2UNo/Hqlyp+GiuG4CFDI= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 h1:hXmVKytPfTy5axZ+fYbR5d0cFmC3JvwLm5kM83luako= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1/go.mod h1:MlYRNmYu/fGPoxBQVvBYr9nyr948aY/WLUvwBMBJubs= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.19 h1:1XuUZ8mYJw9B6lzAkXhqHlJd/XvaX32evhproijJEZY= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.19/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4= github.com/aws/smithy-go v1.22.3 h1:Z//5NuZCSW6R4PhQ93hShNbyBbn8BWCmCVCt+Q8Io5k= github.com/aws/smithy-go v1.22.3/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -141,8 +141,8 @@ github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6D github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42 h1:Om6kYQYDUk5wWbT0t0q6pvyM49i9XZAv9dDrkDA7gjk= -github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 h1:aQ3y1lwWyqYPiWZThqv1aFbZMiM9vblcSArJRf2Irls= +github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/codegangsta/cli v1.20.0/go.mod h1:/qJNoX69yVSKu5o4jLyXAENLRyk1uhi7zkbQ3slBdOA= github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= @@ -150,8 +150,9 @@ github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8 github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/corpix/uarand v0.1.1 h1:RMr1TWc9F4n5jiPDzFHtmaUXLKLNUFK0SgCLo4BhX/U= github.com/corpix/uarand v0.1.1/go.mod h1:SFKZvkcRoLqVRFZ4u25xPmp6m9ktANfbpXZ7SJ0/FNU= -github.com/cpuguy83/go-md2man/v2 v2.0.6 h1:XJtiaUW6dEEqVuZiMTn1ldk455QWwEIsMIJlo5vtkx0= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo= +github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dave/jennifer v1.7.1 h1:B4jJJDHelWcDhlRQxWeo0Npa/pYKBLrirAQoTN45txo= github.com/dave/jennifer v1.7.1/go.mod h1:nXbxhEmQfOZhWml3D1cDK5M1FLnMSozpbFN/m3RmGZc= @@ -167,8 +168,8 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/eapache/queue/v2 v2.0.0-20230407133247-75960ed334e4 h1:8EXxF+tCLqaVk8AOC29zl2mnhQjwyLxxOTuhUazWRsg= github.com/eapache/queue/v2 v2.0.0-20230407133247-75960ed334e4/go.mod h1:I5sHm0Y0T1u5YjlyqC5GVArM7aNZRUYtTjmJ8mPJFds= -github.com/ebitengine/purego v0.8.2 h1:jPPGWs2sZ1UgOSgD2bClL0MJIqu58nOmIcBuXr62z1I= -github.com/ebitengine/purego v0.8.2/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= +github.com/ebitengine/purego v0.8.3 h1:K+0AjQp63JEZTEMZiwsI9g0+hAMNohwUOtY0RPGexmc= +github.com/ebitengine/purego v0.8.3/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -194,10 +195,12 @@ github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHk github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M= -github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= +github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/gammazero/deque v1.0.0 h1:LTmimT8H7bXkkCy6gZX7zNLtkbz4NdS2z8LZuor3j34= github.com/gammazero/deque v1.0.0/go.mod h1:iflpYvtGfM3U8S8j+sZEKIak3SAKYpA5/SQewgfXDKo= +github.com/go-jose/go-jose/v4 v4.1.0 h1:cYSYxd3pw5zd2FSXk2vGdn9igQU2PS8MuxrCOCl0FdY= +github.com/go-jose/go-jose/v4 v4.1.0/go.mod h1:GG/vqmYm3Von2nYiB2vGTXzdoNKE5tix5tuc6iAd+sw= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= @@ -213,13 +216,15 @@ github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrt github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss= +github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.2.4 h1:CNNw5U8lSiiBk7druxtSHHTsRWcxKoac6kZKm2peBBc= -github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= +github.com/golang/glog v1.2.5 h1:DrW6hGnjIhtvhOIiAKT6Psh/Kd/ldepEa81DKeiRJ5I= +github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -253,8 +258,8 @@ github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0= -github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd h1:gbpYu9NMq8jhDVbvlGkMFWCjLFlqqEZjEmObmhUy6Vo= -github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= +github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs= +github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= github.com/google/safehtml v0.1.0 h1:EwLKo8qawTKfsi0orxcQAZzu07cICaBeFMegAU9eaT8= @@ -266,8 +271,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU9uHLo7OnF5tL52HFAgMmyrf4= github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA= -github.com/googleapis/gax-go/v2 v2.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrkurSS/Q= -github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA= +github.com/googleapis/gax-go/v2 v2.14.2 h1:eBLnkZ9635krYIPD+ag1USrOAI0Nr0QYF3+/3GqO0k0= +github.com/googleapis/gax-go/v2 v2.14.2/go.mod h1:ON64QhlJkhVtSqp4v1uaK92VyZ2gmvDQsweuyLV+8+w= github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w= @@ -277,8 +282,8 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDa github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/hashicorp/consul/api v1.31.2 h1:NicObVJHcCmyOIl7Z9iHPvvFrocgTYo9cITSGg0/7pw= -github.com/hashicorp/consul/api v1.31.2/go.mod h1:Z8YgY0eVPukT/17ejW+l+C7zJmKwgPHtjU1q16v/Y40= +github.com/hashicorp/consul/api v1.32.1 h1:0+osr/3t/aZNAdJX558crU3PEjVrG4x6715aZHRgceE= +github.com/hashicorp/consul/api v1.32.1/go.mod h1:mXUWLnxftwTmDv4W3lzxYCPD199iNLLUyLfLGFJbtl4= github.com/hashicorp/consul/sdk v0.16.1 h1:V8TxTnImoPD5cj0U9Spl0TUxcytjcbbJeADFF07KdHg= github.com/hashicorp/consul/sdk v0.16.1/go.mod h1:fSXvwxB2hmh1FMZCNl6PwX0Q/1wdWtHJcZ7Ea5tns0s= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -316,8 +321,6 @@ github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09 github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.1-vault-7 h1:ag5OxFVy3QYTFTJODRzTKVZ6xvdfLLCA1cy/Y6xGI0I= -github.com/hashicorp/hcl v1.0.1-vault-7/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= github.com/hashicorp/memberlist v0.5.2 h1:rJoNPWZ0juJBgqn48gjy59K5H4rNgvUoM1kUD7bXiuI= github.com/hashicorp/memberlist v0.5.2/go.mod h1:Ri9p/tRShbjYnpNf4FFPXG7wxEGY4Nrcn6E7jrVa//4= github.com/hashicorp/serf v0.10.2 h1:m5IORhuNSjaxeljg5DeQVDlQyVkhRIjJDimbkCa8aAc= @@ -356,8 +359,6 @@ github.com/krishicks/yaml-patch v0.0.10 h1:H4FcHpnNwVmw8u0MjPRjWyIXtco6zM2F78t+5 github.com/krishicks/yaml-patch v0.0.10/go.mod h1:Sm5TchwZS6sm7RJoyg87tzxm2ZcKzdRE4Q7TjNhPrME= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM= -github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= @@ -409,8 +410,8 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.23.0 h1:/oxKu9c2HVap+F3PfKort2Hw5DEU+HGlW8n+tguWsys= github.com/onsi/gomega v1.23.0/go.mod h1:Z/NWtiqwBrwUt4/2loMmHL63EDLnYHmVbuBpDr2vQAg= -github.com/opentracing-contrib/go-grpc v0.1.1 h1:Ws7IN1zyiL1DFqKQPhRXuKe5pLYzMfdxnC1qtajE2PE= -github.com/opentracing-contrib/go-grpc v0.1.1/go.mod h1:Nu6sz+4zzgxXu8rvKfnwjBEmHsuhTigxRwV2RhELrS8= +github.com/opentracing-contrib/go-grpc v0.1.2 h1:MP16Ozc59kqqwn1v18aQxpeGZhsBanJ2iurZYaQSZ+g= +github.com/opentracing-contrib/go-grpc v0.1.2/go.mod h1:glU6rl1Fhfp9aXUHkE36K2mR4ht8vih0ekOVlWKEUHM= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= @@ -420,14 +421,14 @@ github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0Mw github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= -github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= -github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= +github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= +github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c h1:dAMKvw0MlJT1GshSTtih8C2gDs04w8dReiOGXrGLNoY= github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM= github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pires/go-proxyproto v0.8.0 h1:5unRmEAPbHXHuLjDg01CxJWf91cw3lKHc/0xzKpXEe0= -github.com/pires/go-proxyproto v0.8.0/go.mod h1:iknsfgnH8EkjrMeMyvfKByp9TiBZCKZM0jx2xmKqnVY= +github.com/pires/go-proxyproto v0.8.1 h1:9KEixbdJfhrbtjpz/ZwCdWDD2Xem0NZ38qMYaASJgp0= +github.com/pires/go-proxyproto v0.8.1/go.mod h1:ZKAAyp3cgy5Y5Mo4n9AlScrkCZwUy0g3Jf+slqQVcuU= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -445,14 +446,14 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.21.1 h1:DOvXXTqVzvkIewV/CDPFdejpMCGeMcbGCQ8YOmu+Ibk= -github.com/prometheus/client_golang v1.21.1/go.mod h1:U9NM32ykUErtVBxdvD3zfi+EuFkkaBvMb09mIfe0Zgg= +github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= +github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= -github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= +github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= @@ -464,8 +465,8 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= -github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= +github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= +github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/richardartoul/molecule v1.0.1-0.20240531184615-7ca0df43c0b3 h1:4+LEVOB87y175cLJC/mbsgKmoDOjrBldtXvioEy96WY= @@ -480,10 +481,8 @@ github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= -github.com/sagikazarmark/locafero v0.7.0 h1:5MqpDsTGNDhY8sGp0Aowyf0qKsPrhewaLSsFaodPcyo= -github.com/sagikazarmark/locafero v0.7.0/go.mod h1:2za3Cg5rMaTMoG/2Ulr9AwtFaIppKXTRYnozin4aB5k= -github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= -github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= +github.com/sagikazarmark/locafero v0.9.0 h1:GbgQGNtTrEmddYDSAH9QLRyfAHY12md+8YFTqyMTC9k= +github.com/sagikazarmark/locafero v0.9.0/go.mod h1:UBUyz37V+EdMS3hDF3QWIiVr/2dPrx49OMO0Bn0hJqk= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/secure-systems-lab/go-securesystemslib v0.9.0 h1:rf1HIbL64nUpEIZnjLZ3mcNEL9NBPB0iuVjyxvq3LZc= @@ -502,18 +501,20 @@ github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9yS github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.12.0 h1:UcOPyRBYczmFn6yvphxkn9ZEOY65cpwGKb5mL36mrqs= -github.com/spf13/afero v1.12.0/go.mod h1:ZTlWwG4/ahT8W7T0WQ5uYmjI9duaLQGy3Q2OAl4sk/4= -github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= -github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA= +github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo= +github.com/spf13/cast v1.8.0 h1:gEN9K4b8Xws4EX0+a0reLmhq8moKn7ntRlQYgjPeCDk= +github.com/spf13/cast v1.8.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= -github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= +github.com/spf13/viper v1.20.1 h1:ZMi+z/lvLyPSCoNtFCpqjy0S4kPbirhpTMwl8BkW9X4= +github.com/spf13/viper v1.20.1/go.mod h1:P9Mdzt1zoHIG8m2eZQinpiBjo6kCmZSKBClNNqjJvu4= +github.com/spiffe/go-spiffe/v2 v2.5.0 h1:N2I01KCUkv1FAjZXJMwh95KK1ZIQLYbPfhaxw8WS0hE= +github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= @@ -542,8 +543,8 @@ github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JT github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tinylib/msgp v1.2.5 h1:WeQg1whrXRFiZusidTQqzETkRpGjFjcIhW6uqWH09po= -github.com/tinylib/msgp v1.2.5/go.mod h1:ykjzy2wzgrlvpDCRc4LA8UXy6D8bzMSuAF3WD57Gok0= +github.com/tinylib/msgp v1.3.0 h1:ULuf7GPooDaIlbyvgAxBV/FI7ynli6LZ1/nVUNu+0ww= +github.com/tinylib/msgp v1.3.0/go.mod h1:ykjzy2wzgrlvpDCRc4LA8UXy6D8bzMSuAF3WD57Gok0= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o= github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= @@ -558,12 +559,14 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/z-division/go-zookeeper v1.0.0 h1:ULsCj0nP6+U1liDFWe+2oEF6o4amixoDcDlwEUghVUY= github.com/z-division/go-zookeeper v1.0.0/go.mod h1:6X4UioQXpvyezJJl4J9NHAJKsoffCwy5wCaaTktXjOA= -go.etcd.io/etcd/api/v3 v3.5.19 h1:w3L6sQZGsWPuBxRQ4m6pPP3bVUtV8rjW033EGwlr0jw= -go.etcd.io/etcd/api/v3 v3.5.19/go.mod h1:QqKGViq4KTgOG43dr/uH0vmGWIaoJY3ggFi6ZH0TH/U= -go.etcd.io/etcd/client/pkg/v3 v3.5.19 h1:9VsyGhg0WQGjDWWlDI4VuaS9PZJGNbPkaHEIuLwtixk= -go.etcd.io/etcd/client/pkg/v3 v3.5.19/go.mod h1:qaOi1k4ZA9lVLejXNvyPABrVEe7VymMF2433yyRQ7O0= -go.etcd.io/etcd/client/v3 v3.5.19 h1:+4byIz6ti3QC28W0zB0cEZWwhpVHXdrKovyycJh1KNo= -go.etcd.io/etcd/client/v3 v3.5.19/go.mod h1:FNzyinmMIl0oVsty1zA3hFeUrxXI/JpEnz4sG+POzjU= +github.com/zeebo/errs v1.4.0 h1:XNdoD/RRMKP7HD0UhJnIzUy74ISdGGxURlYG8HSWSfM= +github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= +go.etcd.io/etcd/api/v3 v3.5.21 h1:A6O2/JDb3tvHhiIz3xf9nJ7REHvtEFJJ3veW3FbCnS8= +go.etcd.io/etcd/api/v3 v3.5.21/go.mod h1:c3aH5wcvXv/9dqIw2Y810LDXJfhSYdHQ0vxmP3CCHVY= +go.etcd.io/etcd/client/pkg/v3 v3.5.21 h1:lPBu71Y7osQmzlflM9OfeIV2JlmpBjqBNlLtcoBqUTc= +go.etcd.io/etcd/client/pkg/v3 v3.5.21/go.mod h1:BgqT/IXPjK9NkeSDjbzwsHySX3yIle2+ndz28nVsjUs= +go.etcd.io/etcd/client/v3 v3.5.21 h1:T6b1Ow6fNjOLOtM0xSoKNQt1ASPCLWrF9XMHcH9pEyY= +go.etcd.io/etcd/client/v3 v3.5.21/go.mod h1:mFYy67IOqmbRf/kRUvsHixzo3iG+1OF2W2+jVIQRAnU= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= go.opentelemetry.io/contrib/detectors/gcp v1.35.0 h1:bGvFt68+KTiAKFlacHW6AhA56GF2rS0bdD3aJYEnmzA= @@ -574,8 +577,8 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 h1:sbiXRND go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0/go.mod h1:69uWxva0WgAA/4bu2Yy70SLDBwZXuQ6PbBpbsa5iZrQ= go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ= go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0 h1:WDdP9acbMYjbKIyJUhTvtzj601sVJOqgWdUxSdR/Ysc= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0/go.mod h1:BLbf7zbNIONBLPwvFnwNHGj4zge8uTCM/UPIVW1Mq2I= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.35.0 h1:PB3Zrjs1sG1GBX51SXyTSoOTqcDglmsk7nT6tkKPb/k= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.35.0/go.mod h1:U2R3XyVPzn0WX7wOIypPuptulsMcPDPs/oiSVOMVnHY= go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M= go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE= go.opentelemetry.io/otel/sdk v1.35.0 h1:iPctf8iprVySXSKJffSS79eOjl9pvxV9ZqOWT0QejKY= @@ -606,11 +609,11 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8= +golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw= -golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM= +golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 h1:y5zboxd6LQAqYIhHnB48p0ByQ/GnQx2BE33L8BOHQkI= +golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6/go.mod h1:U6Lno4MTRCDY+Ba7aCcauB9T60gsv5s4ralQzP72ZoQ= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -639,12 +642,12 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= -golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY= +golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.28.0 h1:CrgCKl8PPAVtLnU3c+EDw6x11699EWlsDeWNWKdIOkc= -golang.org/x/oauth2 v0.28.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= +golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= +golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -653,8 +656,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ= +golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -689,17 +692,17 @@ golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= +golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= -golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= +golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg= +golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= +golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0= golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -713,8 +716,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU= -golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ= +golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc= +golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -723,26 +726,26 @@ golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhS golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= gonum.org/v1/gonum v0.15.1 h1:FNy7N6OUZVUaWG9pTiD+jlhdQ3lMP+/LcTpJ6+a8sQ0= gonum.org/v1/gonum v0.15.1/go.mod h1:eZTZuRFrzu5pcyjN5wJhcIhnUdNijYxX1T2IcrOGY0o= -google.golang.org/api v0.226.0 h1:9A29y1XUD+YRXfnHkO66KggxHBZWg9LsTGqm7TkUvtQ= -google.golang.org/api v0.226.0/go.mod h1:WP/0Xm4LVvMOCldfvOISnWquSRWbG2kArDZcg+W2DbY= +google.golang.org/api v0.233.0 h1:iGZfjXAJiUFSSaekVB7LzXl6tRfEKhUN7FkZN++07tI= +google.golang.org/api v0.233.0/go.mod h1:TCIVLLlcwunlMpZIhIp7Ltk77W+vUSdUKAAIlbxY44c= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20250313205543-e70fdf4c4cb4 h1:kCjWYliqPA8g5z87mbjnf/cdgQqMzBfp9xYre5qKu2A= -google.golang.org/genproto v0.0.0-20250313205543-e70fdf4c4cb4/go.mod h1:SqIx1NV9hcvqdLHo7uNZDS5lrUJybQ3evo3+z/WBfA0= -google.golang.org/genproto/googleapis/api v0.0.0-20250313205543-e70fdf4c4cb4 h1:IFnXJq3UPB3oBREOodn1v1aGQeZYQclEmvWRMN0PSsY= -google.golang.org/genproto/googleapis/api v0.0.0-20250313205543-e70fdf4c4cb4/go.mod h1:c8q6Z6OCqnfVIqUFJkCzKcrj8eCvUrz+K4KRzSTuANg= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4 h1:iK2jbkWL86DXjEx0qiHcRE9dE4/Ahua5k6V8OWFb//c= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I= +google.golang.org/genproto v0.0.0-20250512202823-5a2f75b736a9 h1:0DnDgelxbooHLt0nyiPeCP0zrH/RL+UG558i1oNU1xE= +google.golang.org/genproto v0.0.0-20250512202823-5a2f75b736a9/go.mod h1:IuQRZAKkz+Mhos3ZZ0+hcGaTmLuuTuGw344uzwztGl8= +google.golang.org/genproto/googleapis/api v0.0.0-20250512202823-5a2f75b736a9 h1:WvBuA5rjZx9SNIzgcU53OohgZy6lKSus++uY4xLaWKc= +google.golang.org/genproto/googleapis/api v0.0.0-20250512202823-5a2f75b736a9/go.mod h1:W3S/3np0/dPWsWLi1h/UymYctGXaGBM2StwzD0y140U= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250512202823-5a2f75b736a9 h1:IkAfh6J/yllPtpYFU0zZN1hUPYdT0ogkBT/9hMxHjvg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250512202823-5a2f75b736a9/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg= -google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= +google.golang.org/grpc v1.72.1 h1:HR03wO6eyZ7lknl75XlxABNVLLFc2PAb6mHlYh756mA= +google.golang.org/grpc v1.72.1/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 h1:F29+wU6Ee6qgu9TddPgooOdaqsxTMunOoj8KA5yuS5A= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1/go.mod h1:5KF+wpkbTSbGcR9zteSqZV6fqFOWBl4Yde8En8MryZA= google.golang.org/grpc/examples v0.0.0-20250204041003-947e2a4be2ba h1:w92RAwwmP8PEc4O6JrGzSoUrL/eE53n2wIG7NAcedM8= @@ -754,8 +757,8 @@ google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miE google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= -google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= +google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= gopkg.in/DataDog/dd-trace-go.v1 v1.69.1 h1:grTElrPaCfxUsrJjyPLHlVPbmlKVzWMxVdcBrGZSzEk= gopkg.in/DataDog/dd-trace-go.v1 v1.69.1/go.mod h1:U9AOeBHNAL95JXcd/SPf4a7O5GNeF/yD13sJtli/yaU= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= @@ -788,26 +791,26 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -modernc.org/cc/v4 v4.24.4 h1:TFkx1s6dCkQpd6dKurBNmpo+G8Zl4Sq/ztJ+2+DEsh0= -modernc.org/cc/v4 v4.24.4/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= -modernc.org/ccgo/v4 v4.23.16 h1:Z2N+kk38b7SfySC1ZkpGLN2vthNJP1+ZzGZIlH7uBxo= -modernc.org/ccgo/v4 v4.23.16/go.mod h1:nNma8goMTY7aQZQNTyN9AIoJfxav4nvTnvKThAeMDdo= -modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE= -modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ= -modernc.org/gc/v2 v2.6.3 h1:aJVhcqAte49LF+mGveZ5KPlsp4tdGdAOT4sipJXADjw= -modernc.org/gc/v2 v2.6.3/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= -modernc.org/libc v1.61.13 h1:3LRd6ZO1ezsFiX1y+bHd1ipyEHIJKvuprv0sLTBwLW8= -modernc.org/libc v1.61.13/go.mod h1:8F/uJWL/3nNil0Lgt1Dpz+GgkApWh04N3el3hxJcA6E= +modernc.org/cc/v4 v4.26.1 h1:+X5NtzVBn0KgsBCBe+xkDC7twLb/jNVj9FPgiwSQO3s= +modernc.org/cc/v4 v4.26.1/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= +modernc.org/ccgo/v4 v4.28.0 h1:rjznn6WWehKq7dG4JtLRKxb52Ecv8OUGah8+Z/SfpNU= +modernc.org/ccgo/v4 v4.28.0/go.mod h1:JygV3+9AV6SmPhDasu4JgquwU81XAKLd3OKTUDNOiKE= +modernc.org/fileutil v1.3.1 h1:8vq5fe7jdtEvoCf3Zf9Nm0Q05sH6kGx0Op2CPx1wTC8= +modernc.org/fileutil v1.3.1/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc= +modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= +modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= +modernc.org/libc v1.65.6 h1:OhJUhmuJ6MVZdqL5qmnd0/my46DKGFhSX4WOR7ijfyE= +modernc.org/libc v1.65.6/go.mod h1:MOiGAM9lrMBT9L8xT1nO41qYl5eg9gCp9/kWhz5L7WA= modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= -modernc.org/memory v1.8.2 h1:cL9L4bcoAObu4NkxOlKWBWtNHIsnnACGF/TbqQ6sbcI= -modernc.org/memory v1.8.2/go.mod h1:ZbjSvMO5NQ1A2i3bWeDiVMxIorXwdClKE/0SZ+BMotU= +modernc.org/memory v1.10.0 h1:fzumd51yQ1DxcOxSO+S6X7+QTuVU+n8/Aj7swYjFfC4= +modernc.org/memory v1.10.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8= modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= -modernc.org/sqlite v1.36.1 h1:bDa8BJUH4lg6EGkLbahKe/8QqoF8p9gArSc6fTqYhyQ= -modernc.org/sqlite v1.36.1/go.mod h1:7MPwH7Z6bREicF9ZVUR78P1IKuxfZ8mRIDHD0iD+8TU= +modernc.org/sqlite v1.37.0 h1:s1TMe7T3Q3ovQiK2Ouz4Jwh7dw4ZDqbebSDTlSJdfjI= +modernc.org/sqlite v1.37.0/go.mod h1:5YiWv+YviqGMuGw4V+PNplcyaJ5v+vQd7TQOgkACoJM= modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= diff --git a/go/acl/acl.go b/go/acl/acl.go index 9f98a82c688..eb68a188472 100644 --- a/go/acl/acl.go +++ b/go/acl/acl.go @@ -23,7 +23,7 @@ limitations under the License. // own policy as a package that calls RegisterPolicy(), and compile it into all // Vitess binaries that you use. // -// By default (when no security_policy is specified), everyone is allowed to do +// By default (when no security-policy is specified), everyone is allowed to do // anything. // // For convenience, there are two other built-in policies that also do NOT do @@ -43,6 +43,7 @@ import ( "github.com/spf13/pflag" "vitess.io/vitess/go/vt/log" + "vitess.io/vitess/go/vt/utils" ) // This is a list of predefined roles. Applications are free @@ -70,7 +71,7 @@ type Policy interface { } func RegisterFlags(fs *pflag.FlagSet) { - fs.StringVar(&securityPolicy, "security_policy", securityPolicy, "the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only)") + utils.SetFlagStringVar(fs, &securityPolicy, "security-policy", securityPolicy, "the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only)") } // RegisterPolicy registers a security policy. This function must be called @@ -94,7 +95,7 @@ func savePolicy() { currentPolicy = policy return } - log.Warningf("security_policy %q not found; using fallback policy (deny-all)", securityPolicy) + log.Warningf("security-policy %q not found; using fallback policy (deny-all)", securityPolicy) currentPolicy = denyAllPolicy{} } diff --git a/go/acl/acl_test.go b/go/acl/acl_test.go index 0b5bc8ab015..e0b613f0fc9 100644 --- a/go/acl/acl_test.go +++ b/go/acl/acl_test.go @@ -106,8 +106,8 @@ func TestRegisterFlags(t *testing.T) { RegisterFlags(testFs) - securityPolicyFlag := testFs.Lookup("security_policy") - assert.NotNil(t, securityPolicyFlag, "no security_policy flag is registered") + securityPolicyFlag := testFs.Lookup("security-policy") + assert.NotNil(t, securityPolicyFlag, "no security-policy flag is registered") // Check the default value of the flag want := "test" diff --git a/go/acl/deny_all_policy.go b/go/acl/deny_all_policy.go index 37d1d51eea3..79a9a0f7d65 100644 --- a/go/acl/deny_all_policy.go +++ b/go/acl/deny_all_policy.go @@ -21,7 +21,7 @@ import ( "net/http" ) -var errDenyAll = errors.New("not allowed: deny-all security_policy enforced") +var errDenyAll = errors.New("not allowed: deny-all security-policy enforced") // denyAllPolicy rejects all access. type denyAllPolicy struct{} diff --git a/go/acl/read_only_policy.go b/go/acl/read_only_policy.go index 05b4817ec61..d60064a22cc 100644 --- a/go/acl/read_only_policy.go +++ b/go/acl/read_only_policy.go @@ -21,7 +21,7 @@ import ( "net/http" ) -var errReadOnly = errors.New("not allowed: read-only security_policy enforced") +var errReadOnly = errors.New("not allowed: read-only security-policy enforced") // readOnlyPolicy allows DEBUGGING and MONITORING roles for everyone, // while denying any other roles (e.g. ADMIN) for everyone. diff --git a/go/cmd/internal/docgen/_index.md b/go/cmd/internal/docgen/_index.md new file mode 100644 index 00000000000..123c61c86c5 --- /dev/null +++ b/go/cmd/internal/docgen/_index.md @@ -0,0 +1,14 @@ +--- +title: +series: +--- +## + + + +### Options + +``` + -h, --help help for this command +``` + diff --git a/go/cmd/mysqlctl/command/init.go b/go/cmd/mysqlctl/command/init.go index afaf1c566df..eac1c87ff4e 100644 --- a/go/cmd/mysqlctl/command/init.go +++ b/go/cmd/mysqlctl/command/init.go @@ -33,8 +33,8 @@ var Init = &cobra.Command{ "The MySQL version and flavor will be auto-detected, with a minimal configuration file applied.", Example: `mysqlctl \ --alsologtostderr \ - --tablet_uid 101 \ - --mysql_port 12345 \ + --tablet-uid 101 \ + --mysql-port 12345 \ init`, Args: cobra.NoArgs, RunE: commandInit, diff --git a/go/cmd/mysqlctl/command/init_config.go b/go/cmd/mysqlctl/command/init_config.go index 36687482e08..39594f93f14 100644 --- a/go/cmd/mysqlctl/command/init_config.go +++ b/go/cmd/mysqlctl/command/init_config.go @@ -31,8 +31,8 @@ var InitConfig = &cobra.Command{ "This command is the same as `init` except the `mysqld` server will not be started.", Example: `mysqlctl \ --alsologtostderr \ - --tablet_uid 101 \ - --mysql_port 12345 \ + --tablet-uid 101 \ + --mysql-port 12345 \ init_config`, Args: cobra.NoArgs, RunE: commandInitConfig, diff --git a/go/cmd/mysqlctl/command/reinit_config.go b/go/cmd/mysqlctl/command/reinit_config.go index fd7523c0411..cf718979adf 100644 --- a/go/cmd/mysqlctl/command/reinit_config.go +++ b/go/cmd/mysqlctl/command/reinit_config.go @@ -32,8 +32,8 @@ var ReinitConfig = &cobra.Command{ "This could be helpful to revert configuration changes, or to pick up changes made to the bundled config in newer Vitess versions.", Example: `mysqlctl \ --alsologtostderr \ - --tablet_uid 101 \ - --mysql_port 12345 \ + --tablet-uid 101 \ + --mysql-port 12345 \ reinit_config`, Args: cobra.NoArgs, RunE: commandReinitConfig, diff --git a/go/cmd/mysqlctl/command/root.go b/go/cmd/mysqlctl/command/root.go index 78b3a623666..192c9f0ee1c 100644 --- a/go/cmd/mysqlctl/command/root.go +++ b/go/cmd/mysqlctl/command/root.go @@ -27,6 +27,7 @@ import ( "vitess.io/vitess/go/vt/dbconfigs" "vitess.io/vitess/go/vt/logutil" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" ) var ( @@ -70,9 +71,9 @@ func init() { servenv.MovePersistentFlagsToCobraCommand(Root) - Root.PersistentFlags().IntVar(&mysqlPort, "mysql_port", mysqlPort, "MySQL port.") - Root.PersistentFlags().Uint32Var(&tabletUID, "tablet_uid", tabletUID, "Tablet UID.") - Root.PersistentFlags().StringVar(&mysqlSocket, "mysql_socket", mysqlSocket, "Path to the mysqld socket file.") + utils.SetFlagIntVar(Root.PersistentFlags(), &mysqlPort, "mysql-port", mysqlPort, "MySQL port.") + utils.SetFlagUint32Var(Root.PersistentFlags(), &tabletUID, "tablet-uid", tabletUID, "Tablet UID.") + utils.SetFlagStringVar(Root.PersistentFlags(), &mysqlSocket, "mysql-socket", mysqlSocket, "Path to the mysqld socket file.") acl.RegisterFlags(Root.PersistentFlags()) diff --git a/go/cmd/mysqlctl/command/shutdown.go b/go/cmd/mysqlctl/command/shutdown.go index 30e0c8c0f8e..725fc061b88 100644 --- a/go/cmd/mysqlctl/command/shutdown.go +++ b/go/cmd/mysqlctl/command/shutdown.go @@ -31,7 +31,7 @@ var Shutdown = &cobra.Command{ Short: "Shuts down mysqld, without removing any files.", Long: "Stop a `mysqld` instance that was previously started with `init` or `start`.\n\n" + "For large `mysqld` instances, you may need to extend the `wait_time` to shutdown cleanly.", - Example: `mysqlctl --tablet_uid 101 --alsologtostderr shutdown`, + Example: `mysqlctl --tablet-uid 101 --alsologtostderr shutdown`, Args: cobra.NoArgs, RunE: commandShutdown, } diff --git a/go/cmd/mysqlctl/command/start.go b/go/cmd/mysqlctl/command/start.go index aff8d723a8b..662a110c8cd 100644 --- a/go/cmd/mysqlctl/command/start.go +++ b/go/cmd/mysqlctl/command/start.go @@ -31,7 +31,7 @@ var Start = &cobra.Command{ Use: "start", Short: "Starts mysqld on an already 'init'-ed directory.", Long: "Resume an existing `mysqld` instance that was previously bootstrapped with `init` or `init_config`", - Example: `mysqlctl --tablet_uid 101 --alsologtostderr start`, + Example: `mysqlctl --tablet-uid 101 --alsologtostderr start`, Args: cobra.NoArgs, RunE: commandStart, } diff --git a/go/cmd/mysqlctl/command/teardown.go b/go/cmd/mysqlctl/command/teardown.go index 3e7e7bfd0ef..77a653bd030 100644 --- a/go/cmd/mysqlctl/command/teardown.go +++ b/go/cmd/mysqlctl/command/teardown.go @@ -33,7 +33,7 @@ var Teardown = &cobra.Command{ "This is a destructive operation.\n" + "{{}}\n\n" + "Shuts down a `mysqld` instance and removes its data directory.", - Example: `mysqlctl --tablet_uid 101 --alsologtostderr teardown`, + Example: `mysqlctl --tablet-uid 101 --alsologtostderr teardown`, Args: cobra.NoArgs, RunE: commandTeardown, } diff --git a/go/cmd/mysqlctld/cli/mysqlctld.go b/go/cmd/mysqlctld/cli/mysqlctld.go index ee3fe241440..94861edf27c 100644 --- a/go/cmd/mysqlctld/cli/mysqlctld.go +++ b/go/cmd/mysqlctld/cli/mysqlctld.go @@ -34,6 +34,7 @@ import ( "vitess.io/vitess/go/vt/logutil" "vitess.io/vitess/go/vt/mysqlctl" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" ) var ( @@ -63,8 +64,8 @@ var ( "To enable communication with a `vttablet`, the server must be configured to receive gRPC messages on a unix domain socket.", Example: `mysqlctld \ --log_dir=${VTDATAROOT}/logs \ - --tablet_uid=100 \ - --mysql_port=17100 \ + --tablet-uid=100 \ + --mysql-port=17100 \ --socket_file=/path/to/socket_file`, Args: cobra.NoArgs, Version: servenv.AppVersion.String(), @@ -91,9 +92,9 @@ func init() { servenv.MoveFlagsToCobraCommand(Main) - Main.Flags().IntVar(&mysqlPort, "mysql_port", mysqlPort, "MySQL port") - Main.Flags().Uint32Var(&tabletUID, "tablet_uid", tabletUID, "Tablet UID") - Main.Flags().StringVar(&mysqlSocket, "mysql_socket", mysqlSocket, "Path to the mysqld socket file") + utils.SetFlagIntVar(Main.Flags(), &mysqlPort, "mysql-port", mysqlPort, "MySQL port") + utils.SetFlagUint32Var(Main.Flags(), &tabletUID, "tablet-uid", tabletUID, "Tablet UID") + utils.SetFlagStringVar(Main.Flags(), &mysqlSocket, "mysql-socket", mysqlSocket, "Path to the mysqld socket file") Main.Flags().DurationVar(&waitTime, "wait_time", waitTime, "How long to wait for mysqld startup") Main.Flags().StringVar(&initDBSQLFile, "init_db_sql_file", initDBSQLFile, "Path to .sql file to run after mysqld initialization") Main.Flags().DurationVar(&shutdownWaitTime, "shutdown-wait-time", shutdownWaitTime, "How long to wait for mysqld shutdown") diff --git a/go/cmd/vtadmin/main.go b/go/cmd/vtadmin/main.go index ad93d058c00..4666c968f9c 100644 --- a/go/cmd/vtadmin/main.go +++ b/go/cmd/vtadmin/main.go @@ -28,6 +28,7 @@ import ( "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/logutil" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtadmin" "vitess.io/vitess/go/vt/vtadmin/cache" "vitess.io/vitess/go/vt/vtadmin/cluster" @@ -173,7 +174,7 @@ func main() { // Tracing flags trace.RegisterFlags(rootCmd.Flags()) // defined in go/vt/trace - rootCmd.Flags().BoolVar(&opts.EnableTracing, "grpc-tracing", false, "whether to enable tracing on the gRPC server") + utils.SetFlagBoolVar(rootCmd.Flags(), &opts.EnableTracing, "grpc-tracing", false, "whether to enable tracing on the gRPC server") rootCmd.Flags().BoolVar(&httpOpts.EnableTracing, "http-tracing", false, "whether to enable tracing on the HTTP server") // gRPC server flags diff --git a/go/cmd/vtbackup/cli/vtbackup.go b/go/cmd/vtbackup/cli/vtbackup.go index 3dd82801d45..a4e7fba9798 100644 --- a/go/cmd/vtbackup/cli/vtbackup.go +++ b/go/cmd/vtbackup/cli/vtbackup.go @@ -46,6 +46,7 @@ import ( "vitess.io/vitess/go/vt/servenv" "vitess.io/vitess/go/vt/topo" "vitess.io/vitess/go/vt/topo/topoproto" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vterrors" _ "vitess.io/vitess/go/vt/vttablet/grpctmclient" "vitess.io/vitess/go/vt/vttablet/tmclient" @@ -209,15 +210,15 @@ func init() { Main.Flags().BoolVar(&upgradeSafe, "upgrade-safe", upgradeSafe, "Whether to use innodb_fast_shutdown=0 for the backup so it is safe to use for MySQL upgrades.") // vttablet-like flags - Main.Flags().StringVar(&initDbNameOverride, "init_db_name_override", initDbNameOverride, "(init parameter) override the name of the db used by vttablet") - Main.Flags().StringVar(&initKeyspace, "init_keyspace", initKeyspace, "(init parameter) keyspace to use for this tablet") - Main.Flags().StringVar(&initShard, "init_shard", initShard, "(init parameter) shard to use for this tablet") + utils.SetFlagStringVar(Main.Flags(), &initDbNameOverride, "init-db-name-override", initDbNameOverride, "(init parameter) override the name of the db used by vttablet") + utils.SetFlagStringVar(Main.Flags(), &initKeyspace, "init-keyspace", initKeyspace, "(init parameter) keyspace to use for this tablet") + utils.SetFlagStringVar(Main.Flags(), &initShard, "init-shard", initShard, "(init parameter) shard to use for this tablet") Main.Flags().IntVar(&concurrency, "concurrency", concurrency, "(init restore parameter) how many concurrent files to restore at once") Main.Flags().StringVar(&incrementalFromPos, "incremental_from_pos", incrementalFromPos, "Position, or name of backup from which to create an incremental backup. Default: empty. If given, then this backup becomes an incremental backup from given position or given backup. If value is 'auto', this backup will be taken from the last successful backup position.") // mysqlctld-like flags - Main.Flags().IntVar(&mysqlPort, "mysql_port", mysqlPort, "mysql port") - Main.Flags().StringVar(&mysqlSocket, "mysql_socket", mysqlSocket, "path to the mysql socket") + utils.SetFlagIntVar(Main.Flags(), &mysqlPort, "mysql-port", mysqlPort, "MySQL port") + utils.SetFlagStringVar(Main.Flags(), &mysqlSocket, "mysql-socket", mysqlSocket, "Path to the mysqld socket file") Main.Flags().DurationVar(&mysqlTimeout, "mysql_timeout", mysqlTimeout, "how long to wait for mysqld startup") Main.Flags().DurationVar(&mysqlShutdownTimeout, "mysql-shutdown-timeout", mysqlShutdownTimeout, "how long to wait for mysqld shutdown") Main.Flags().StringVar(&initDBSQLFile, "init_db_sql_file", initDBSQLFile, "path to .sql file to run after mysql_install_db") diff --git a/go/cmd/vtcombo/cli/main.go b/go/cmd/vtcombo/cli/main.go index 52e29044268..8baf51c5dcb 100644 --- a/go/cmd/vtcombo/cli/main.go +++ b/go/cmd/vtcombo/cli/main.go @@ -44,6 +44,7 @@ import ( "vitess.io/vitess/go/vt/topo/memorytopo" "vitess.io/vitess/go/vt/topo/topoproto" "vitess.io/vitess/go/vt/topotools" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtcombo" "vitess.io/vitess/go/vt/vtctld" "vitess.io/vitess/go/vt/vtenv" @@ -106,25 +107,25 @@ func init() { Main.Flags().StringVar(&schemaDir, "schema_dir", schemaDir, "Schema base directory. Should contain one directory per keyspace, with a vschema.json file if necessary.") Main.Flags().BoolVar(&startMysql, "start_mysql", startMysql, "Should vtcombo also start mysql") - Main.Flags().IntVar(&mysqlPort, "mysql_port", mysqlPort, "mysql port") - Main.Flags().BoolVar(&externalTopoServer, "external_topo_server", externalTopoServer, "Should vtcombo use an external topology server instead of starting its own in-memory topology server. "+ + utils.SetFlagIntVar(Main.Flags(), &mysqlPort, "mysql-port", mysqlPort, "mysql port") + utils.SetFlagBoolVar(Main.Flags(), &externalTopoServer, "external-topo-server", externalTopoServer, "Should vtcombo use an external topology server instead of starting its own in-memory topology server. "+ "If true, vtcombo will use the flags defined in topo/server.go to open topo server") Main.Flags().StringVar(&plannerName, "planner-version", plannerName, "Sets the default planner to use when the session has not changed it. Valid values are: Gen4, Gen4Greedy, Gen4Left2Right") Main.Flags().StringVar(&vschemaPersistenceDir, "vschema-persistence-dir", vschemaPersistenceDir, "If set, per-keyspace vschema will be persisted in this directory "+ "and reloaded into the in-memory topology server across restarts. Bookkeeping is performed using a simple watcher goroutine. "+ "This is useful when running vtcombo as an application development container (e.g. vttestserver) where you want to keep the same "+ "vschema even if developer's machine reboots. This works in tandem with vttestserver's --persistent_mode flag. Needless to say, "+ - "this is neither a perfect nor a production solution for vschema persistence. Consider using the --external_topo_server flag if "+ - "you require a more complete solution. This flag is ignored if --external_topo_server is set.") + "this is neither a perfect nor a production solution for vschema persistence. Consider using the --external-topo-server flag if "+ + "you require a more complete solution. This flag is ignored if --external-topo-server is set.") - Main.Flags().Var(vttest.TextTopoData(&tpb), "proto_topo", "vttest proto definition of the topology, encoded in compact text format. See vttest.proto for more information.") - Main.Flags().Var(vttest.JSONTopoData(&tpb), "json_topo", "vttest proto definition of the topology, encoded in json format. See vttest.proto for more information.") + utils.SetFlagVar(Main.Flags(), vttest.TextTopoData(&tpb), "proto-topo", "vttest proto definition of the topology, encoded in compact text format. See vttest.proto for more information.") + utils.SetFlagVar(Main.Flags(), vttest.JSONTopoData(&tpb), "json-topo", "vttest proto definition of the topology, encoded in json format. See vttest.proto for more information.") - Main.Flags().Var((*topoproto.TabletTypeListFlag)(&tabletTypesToWait), "tablet_types_to_wait", "Wait till connected for specified tablet types during Gateway initialization. Should be provided as a comma-separated set of tablet types.") + utils.SetFlagVar(Main.Flags(), (*topoproto.TabletTypeListFlag)(&tabletTypesToWait), "tablet-types-to-wait", "Wait till connected for specified tablet types during Gateway initialization. Should be provided as a comma-separated set of tablet types.") // We're going to force the value later, so don't even bother letting the // user know about this flag. - Main.Flags().MarkHidden("tablet_protocol") + Main.Flags().MarkHidden("tablet-protocol") srvTopoCounts = stats.NewCountersWithSingleLabel("ResilientSrvTopoServer", "Resilient srvtopo server operations", "type") } @@ -241,10 +242,11 @@ func run(cmd *cobra.Command, args []string) (err error) { // Tablet configuration and init. // Send mycnf as nil because vtcombo won't do backups and restores. // - // Also force the `--tablet_manager_protocol` and `--tablet_protocol` flags + // Also force the `--tablet-manager-protocol` and `--tablet-protocol` flags // to be the "internal" protocol that InitTabletMap registers. - cmd.Flags().Set("tablet_manager_protocol", "internal") - cmd.Flags().Set("tablet_protocol", "internal") + + cmd.Flags().Set("tablet-manager-protocol", "internal") + cmd.Flags().Set("tablet-protocol", "internal") uid, err := vtcombo.InitTabletMap(env, ts, &tpb, mysqld, &dbconfigs.GlobalDBConfigs, schemaDir, startMysql, srvTopoCounts) if err != nil { // ensure we start mysql in the event we fail here @@ -320,7 +322,7 @@ func run(cmd *cobra.Command, args []string) (err error) { } if len(tabletTypes) == 0 { - log.Exitf("tablet_types_to_wait should contain at least one serving tablet type") + log.Exitf("tablet-types-to-wait should contain at least one serving tablet type") } } else { tabletTypes = append(tabletTypes, topodatapb.TabletType_PRIMARY, topodatapb.TabletType_REPLICA, topodatapb.TabletType_RDONLY) diff --git a/go/cmd/vtctld/cli/cli.go b/go/cmd/vtctld/cli/cli.go index 8cf208a66f0..55176df21fc 100644 --- a/go/cmd/vtctld/cli/cli.go +++ b/go/cmd/vtctld/cli/cli.go @@ -37,17 +37,17 @@ It is usually the first Vitess component to be started after a valid global topo For the last several releases, vtctld has been transitioning to a newer gRPC service for well-typed cluster management requests. This is **required** to use programs such as vtadmin and vtctldclient, and The old API and service are deprecated and will be removed in a future release. -To enable this newer service, include "grpc-vtctld" in the --service_map argument. +To enable this newer service, include "grpc-vtctld" in the --service-map argument. This is demonstrated in the example usage below.`, Example: `vtctld \ - --topo_implementation etcd2 \ - --topo_global_server_address localhost:2379 \ - --topo_global_root /vitess/ \ - --service_map 'grpc-vtctl,grpc-vtctld' \ - --backup_storage_implementation file \ + --topo-implementation etcd2 \ + --topo-global-server-address localhost:2379 \ + --topo-global-root /vitess/ \ + --service-map 'grpc-vtctl,grpc-vtctld' \ + --backup-storage-implementation file \ --file_backup_storage_root $VTDATAROOT/backups \ --port 15000 \ - --grpc_port 15999`, + --grpc-port 15999`, Args: cobra.NoArgs, Version: servenv.AppVersion.String(), PreRunE: servenv.CobraPreRunE, diff --git a/go/cmd/vtctld/cli/schema.go b/go/cmd/vtctld/cli/schema.go index a330a23abe2..725bccd5f6e 100644 --- a/go/cmd/vtctld/cli/schema.go +++ b/go/cmd/vtctld/cli/schema.go @@ -25,6 +25,7 @@ import ( "vitess.io/vitess/go/vt/logutil" "vitess.io/vitess/go/vt/schemamanager" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtctl/grpcvtctldserver" "vitess.io/vitess/go/vt/vttablet/tmclient" "vitess.io/vitess/go/vt/wrangler" @@ -39,12 +40,12 @@ var ( ) func init() { - Main.Flags().StringVar(&schemaChangeDir, "schema_change_dir", schemaChangeDir, "Directory containing schema changes for all keyspaces. Each keyspace has its own directory, and schema changes are expected to live in '$KEYSPACE/input' dir. (e.g. 'test_keyspace/input/*sql'). Each sql file represents a schema change.") - Main.Flags().StringVar(&schemaChangeController, "schema_change_controller", schemaChangeController, "Schema change controller is responsible for finding schema changes and responding to schema change events.") - Main.Flags().StringVar(&schemaChangeUser, "schema_change_user", schemaChangeUser, "The user who schema changes are submitted on behalf of.") + utils.SetFlagStringVar(Main.Flags(), &schemaChangeDir, "schema-change-dir", schemaChangeDir, "Directory containing schema changes for all keyspaces. Each keyspace has its own directory, and schema changes are expected to live in '$KEYSPACE/input' dir. (e.g. 'test_keyspace/input/*sql'). Each sql file represents a schema change.") + utils.SetFlagStringVar(Main.Flags(), &schemaChangeController, "schema-change-controller", schemaChangeController, "Schema change controller is responsible for finding schema changes and responding to schema change events.") + utils.SetFlagStringVar(Main.Flags(), &schemaChangeUser, "schema-change-user", schemaChangeUser, "The user who schema changes are submitted on behalf of.") - Main.Flags().DurationVar(&schemaChangeCheckInterval, "schema_change_check_interval", schemaChangeCheckInterval, "How often the schema change dir is checked for schema changes. This value must be positive; if zero or lower, the default of 1m is used.") - Main.Flags().DurationVar(&schemaChangeReplicasTimeout, "schema_change_replicas_timeout", schemaChangeReplicasTimeout, "How long to wait for replicas to receive a schema change.") + utils.SetFlagDurationVar(Main.Flags(), &schemaChangeCheckInterval, "schema-change-check-interval", schemaChangeCheckInterval, "How often the schema change dir is checked for schema changes. This value must be positive; if zero or lower, the default of 1m is used.") + utils.SetFlagDurationVar(Main.Flags(), &schemaChangeReplicasTimeout, "schema-change-replicas-timeout", schemaChangeReplicasTimeout, "How long to wait for replicas to receive a schema change.") } func initSchema(ctx context.Context) { diff --git a/go/cmd/vtctldclient/command/schema.go b/go/cmd/vtctldclient/command/schema.go index d714d75549f..14fb27e8e19 100644 --- a/go/cmd/vtctldclient/command/schema.go +++ b/go/cmd/vtctldclient/command/schema.go @@ -30,6 +30,7 @@ import ( "vitess.io/vitess/go/vt/logutil" "vitess.io/vitess/go/vt/schema" "vitess.io/vitess/go/vt/topo/topoproto" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtctl/grpcvtctldserver" topodatapb "vitess.io/vitess/go/vt/proto/topodata" @@ -440,7 +441,7 @@ func commandValidateSchemaShard(cmd *cobra.Command, args []string) error { } func init() { - ApplySchema.Flags().StringVar(&applySchemaOptions.DDLStrategy, "ddl-strategy", string(schema.DDLStrategyDirect), "Online DDL strategy, compatible with @@ddl_strategy session variable (examples: 'direct', 'mysql', 'vitess --postpone-completion'.") + utils.SetFlagStringVar(ApplySchema.Flags(), &applySchemaOptions.DDLStrategy, "ddl-strategy", string(schema.DDLStrategyDirect), "Online DDL strategy, compatible with @@ddl_strategy session variable (examples: 'direct', 'mysql', 'vitess --postpone-completion'.") ApplySchema.Flags().StringSliceVar(&applySchemaOptions.UUIDList, "uuid", nil, "Optional, comma-delimited, repeatable, explicit UUIDs for migration. If given, must match number of DDL changes.") ApplySchema.Flags().StringVar(&applySchemaOptions.MigrationContext, "migration-context", "", "For Online DDL, optionally supply a custom unique string used as context for the migration(s) in this command. By default a unique context is auto-generated by Vitess.") ApplySchema.Flags().DurationVar(&applySchemaOptions.WaitReplicasTimeout, "wait-replicas-timeout", grpcvtctldserver.DefaultWaitReplicasTimeout, "Amount of time to wait for replicas to receive the schema change via replication.") diff --git a/go/cmd/vtctldclient/command/vreplication/lookupvindex/lookupvindex.go b/go/cmd/vtctldclient/command/vreplication/lookupvindex/lookupvindex.go index 82b13cf70b3..d8a8ffed101 100644 --- a/go/cmd/vtctldclient/command/vreplication/lookupvindex/lookupvindex.go +++ b/go/cmd/vtctldclient/command/vreplication/lookupvindex/lookupvindex.go @@ -17,7 +17,9 @@ limitations under the License. package lookupvindex import ( + "encoding/json" "fmt" + "os" "strings" "github.com/spf13/cobra" @@ -31,6 +33,16 @@ import ( topoprotopb "vitess.io/vitess/go/vt/topo/topoproto" ) +// vindexParams is used to unmarshal content from params-file. +type vindexParams struct { + LookupVindexType string `json:"lookup_vindex_type"` + TableOwner string `json:"table_owner"` + TableOwnerColumns []string `json:"table_owner_columns"` + TableName string `json:"table_name"` + TableVindexType string `json:"table_vindex_type"` + IgnoreNulls bool `json:"ignore_nulls"` +} + var ( tabletTypesDefault = []topodatapb.TabletType{ topodatapb.TabletType_REPLICA, @@ -68,6 +80,7 @@ var ( TabletTypesInPreferenceOrder bool IgnoreNulls bool ContinueAfterCopyWithOwner bool + ParamsFile string }{} externalizeOptions = struct { @@ -84,6 +97,36 @@ var ( }{} parseAndValidateCreate = func(cmd *cobra.Command, args []string) error { + if createOptions.ParamsFile != "" { + if createOptions.TableOwner != "" { + return fmt.Errorf("cannot specify both table-owner and params-file") + } + if createOptions.Type != "" { + return fmt.Errorf("cannot specify both type and params-file") + } + if len(createOptions.TableOwnerColumns) != 0 { + return fmt.Errorf("cannot specify both table-owner-columns and params-file") + } + paramsFile, err := os.ReadFile(createOptions.ParamsFile) + if err != nil { + return err + } + createVindexParams := map[string]*vindexParams{} + err = json.Unmarshal(paramsFile, &createVindexParams) + if err != nil { + return err + } + return parseVindexParams(createVindexParams, cmd) + } + if createOptions.TableOwner == "" { + return fmt.Errorf("table-owner is a required flag") + } + if createOptions.Type == "" { + return fmt.Errorf("type is a required flag") + } + if len(createOptions.TableOwnerColumns) == 0 { + return fmt.Errorf("table-owner-columns is a required flag") + } if createOptions.TableName == "" { // Use vindex name createOptions.TableName = baseOptions.Name } @@ -139,6 +182,86 @@ var ( return nil } + parseVindexParams = func(params map[string]*vindexParams, cmd *cobra.Command) error { + if len(params) == 0 { + return fmt.Errorf("at least 1 vindex is required") + } + + vindexes := map[string]*vschemapb.Vindex{} + tables := map[string]*vschemapb.Table{} + for vindexName, vindex := range params { + if len(vindex.TableOwnerColumns) == 0 { + return fmt.Errorf("table owner columns found empty for '%s'", vindexName) + } + if vindex.TableOwner == "" { + return fmt.Errorf("table owner found empty for '%s'", vindexName) + } + if vindex.TableName == "" { + vindex.TableName = vindexName + } + + if !strings.Contains(vindex.LookupVindexType, "lookup") { + return fmt.Errorf("%s is not a lookup vindex type", vindex.LookupVindexType) + } + + vindexes[vindexName] = &vschemapb.Vindex{ + Type: vindex.LookupVindexType, + Params: map[string]string{ + "table": baseOptions.TableKeyspace + "." + vindex.TableName, + "from": strings.Join(vindex.TableOwnerColumns, ","), + "to": "keyspace_id", + "ignore_nulls": fmt.Sprintf("%t", vindex.IgnoreNulls), + }, + Owner: vindex.TableOwner, + } + + targetTableColumnVindex := &vschemapb.ColumnVindex{ + // If the vindex type is empty then we'll fill this later by + // choosing the most appropriate vindex type for the given column. + Name: vindex.TableVindexType, + Columns: vindex.TableOwnerColumns, + } + sourceTableColumnVindex := &vschemapb.ColumnVindex{ + Name: vindexName, + Columns: vindex.TableOwnerColumns, + } + + if table, ok := tables[vindex.TableName]; !ok { + tables[vindex.TableName] = &vschemapb.Table{ + ColumnVindexes: []*vschemapb.ColumnVindex{targetTableColumnVindex}, + } + } else { + table.ColumnVindexes = append(table.ColumnVindexes, targetTableColumnVindex) + } + + if table, ok := tables[vindex.TableOwner]; !ok { + tables[vindex.TableOwner] = &vschemapb.Table{ + ColumnVindexes: []*vschemapb.ColumnVindex{sourceTableColumnVindex}, + } + } else { + table.ColumnVindexes = append(table.ColumnVindexes, sourceTableColumnVindex) + } + } + + baseOptions.Vschema = &vschemapb.Keyspace{ + Vindexes: vindexes, + Tables: tables, + } + + // VReplication specific flags. + ttFlag := cmd.Flags().Lookup("tablet-types") + if ttFlag != nil && ttFlag.Changed { + createOptions.TabletTypes = tabletTypesDefault + } + cFlag := cmd.Flags().Lookup("cells") + if cFlag != nil && cFlag.Changed { + for i, cell := range createOptions.Cells { + createOptions.Cells[i] = strings.TrimSpace(cell) + } + } + return nil + } + // cancel makes a WorkflowDelete call to a vtctld. cancel = &cobra.Command{ Use: "cancel", @@ -166,7 +289,7 @@ var ( // create makes a LookupVindexCreate call to a vtctld. create = &cobra.Command{ Use: "create", - Short: "Create the Lookup Vindex in the specified keyspace and backfill it with a VReplication workflow.", + Short: "Create the Lookup Vindex(es) in the specified keyspace and backfill them with a VReplication workflow.", Example: `vtctldclient --server localhost:15999 LookupVindex --name corder_lookup_vdx --table-keyspace customer create --keyspace customer --type consistent_lookup_unique --table-owner corder --table-owner-columns sku --table-name corder_lookup_tbl --table-vindex-type unicode_loose_xxhash`, SilenceUsage: true, DisableFlagsInUseLine: true, @@ -359,7 +482,7 @@ func commandShow(cmd *cobra.Command, args []string) error { } func registerCommands(root *cobra.Command) { - base.PersistentFlags().StringVar(&baseOptions.Name, "name", "", "The name of the Lookup Vindex to create. This will also be the name of the VReplication workflow created to backfill the Lookup Vindex.") + base.PersistentFlags().StringVar(&baseOptions.Name, "name", "", "The name of the Lookup Vindex to create. This will also be the name of the VReplication workflow created to backfill the Lookup Vindex. This will be used only for the workflow name if params-file is used.") base.MarkPersistentFlagRequired("name") base.PersistentFlags().StringVar(&baseOptions.TableKeyspace, "table-keyspace", "", "The keyspace to create the lookup table in. This is also where the VReplication workflow is created to backfill the Lookup Vindex.") base.MarkPersistentFlagRequired("table-keyspace") @@ -370,15 +493,13 @@ func registerCommands(root *cobra.Command) { create.Flags().StringVar(&createOptions.Keyspace, "keyspace", "", "The keyspace to create the Lookup Vindex in. This is also where the table-owner must exist.") create.MarkFlagRequired("keyspace") create.Flags().StringVar(&createOptions.Type, "type", "", "The type of Lookup Vindex to create.") - create.MarkFlagRequired("type") create.Flags().StringVar(&createOptions.TableOwner, "table-owner", "", "The table holding the data which we should use to backfill the Lookup Vindex. This must exist in the same keyspace as the Lookup Vindex.") - create.MarkFlagRequired("table-owner") create.Flags().StringSliceVar(&createOptions.TableOwnerColumns, "table-owner-columns", nil, "The columns to read from the owner table. These will be used to build the hash which gets stored as the keyspace_id value in the lookup table.") - create.MarkFlagRequired("table-owner-columns") create.Flags().StringVar(&createOptions.TableName, "table-name", "", "The name of the lookup table. If not specified, then it will be created using the same name as the Lookup Vindex.") create.Flags().StringVar(&createOptions.TableVindexType, "table-vindex-type", "", "The primary vindex name/type to use for the lookup table, if the table-keyspace is sharded. If no value is provided then the default type will be used based on the table-owner-columns types.") create.Flags().BoolVar(&createOptions.IgnoreNulls, "ignore-nulls", false, "Do not add corresponding records in the lookup table if any of the owner table's 'from' fields are NULL.") create.Flags().BoolVar(&createOptions.ContinueAfterCopyWithOwner, "continue-after-copy-with-owner", true, "Vindex will continue materialization after the backfill completes when an owner is provided.") + create.Flags().StringVar(&createOptions.ParamsFile, "params-file", "", "JSON file containing lookup vindex parameters. Use this for creating multiple lookup vindexes.") // VReplication specific flags. create.Flags().StringSliceVar(&createOptions.Cells, "cells", nil, "Cells to look in for source tablets to replicate from.") create.Flags().Var((*topoprotopb.TabletTypeListFlag)(&createOptions.TabletTypes), "tablet-types", "Source tablet types to replicate from.") diff --git a/go/cmd/vtctldclient/command/vreplication/materialize/materialize.go b/go/cmd/vtctldclient/command/vreplication/materialize/materialize.go index cb595e6b7f7..7acaa66bfc6 100644 --- a/go/cmd/vtctldclient/command/vreplication/materialize/materialize.go +++ b/go/cmd/vtctldclient/command/vreplication/materialize/materialize.go @@ -18,15 +18,23 @@ package materialize import ( "fmt" + "strings" "github.com/spf13/cobra" "vitess.io/vitess/go/cmd/vtctldclient/command/vreplication/common" "vitess.io/vitess/go/mysql/config" "vitess.io/vitess/go/vt/topo/topoproto" + "vitess.io/vitess/go/vt/utils" + + vtctldatapb "vitess.io/vitess/go/vt/proto/vtctldata" ) var ( + updateOptions = struct { + AddReferenceTables []string + }{} + // base is the base command for all actions related to Materialize. base = &cobra.Command{ Use: "Materialize --workflow --target-keyspace [command] [command-flags]", @@ -35,8 +43,42 @@ var ( Aliases: []string{"materialize"}, Args: cobra.ExactArgs(1), } + + // update is the command for updating existing materialize workflow. + // This can be helpful if we plan to add other actions as well such as + // removing tables from workflow. + update = &cobra.Command{ + Use: "update --add-tables='table1,table2'", + Short: "Update existing materialize workflow.", + Aliases: []string{"Update"}, + Args: cobra.NoArgs, + RunE: commandUpdate, + } ) +func commandUpdate(cmd *cobra.Command, args []string) error { + tableSettings := []*vtctldatapb.TableMaterializeSettings{} + for _, table := range updateOptions.AddReferenceTables { + tableSettings = append(tableSettings, &vtctldatapb.TableMaterializeSettings{ + TargetTable: table, + }) + } + + _, err := common.GetClient().WorkflowAddTables(common.GetCommandCtx(), &vtctldatapb.WorkflowAddTablesRequest{ + Workflow: common.BaseOptions.Workflow, + Keyspace: common.BaseOptions.TargetKeyspace, + TableSettings: tableSettings, + MaterializationIntent: vtctldatapb.MaterializationIntent_REFERENCE, + }) + + if err != nil { + return err + } + fmt.Printf("Table(s) %s added to the workflow %s. Use show to view the status.\n", + strings.Join(updateOptions.AddReferenceTables, ", "), common.BaseOptions.Workflow) + return nil +} + func registerCommands(root *cobra.Command) { common.AddCommonFlags(base) root.AddCommand(base) @@ -48,12 +90,16 @@ func registerCommands(root *cobra.Command) { create.MarkFlagRequired("source-keyspace") create.Flags().Var(&createOptions.TableSettings, "table-settings", "A JSON array defining what tables to materialize using what select statements. See the --help output for more details.") create.Flags().BoolVar(&common.CreateOptions.StopAfterCopy, "stop-after-copy", false, "Stop the workflow after it's finished copying the existing rows and before it starts replicating changes.") - create.Flags().StringVar(&common.CreateOptions.MySQLServerVersion, "mysql_server_version", fmt.Sprintf("%s-Vitess", config.DefaultMySQLVersion), "Configure the MySQL version to use for example for the parser.") + utils.SetFlagStringVar(create.Flags(), &common.CreateOptions.MySQLServerVersion, "mysql-server-version", fmt.Sprintf("%s-Vitess", config.DefaultMySQLVersion), "Configure the MySQL version to use for example for the parser.") create.Flags().IntVar(&common.CreateOptions.TruncateUILen, "sql-max-length-ui", 512, "truncate queries in debug UIs to the given length (default 512)") create.Flags().IntVar(&common.CreateOptions.TruncateErrLen, "sql-max-length-errors", 0, "truncate queries in error logs to the given length (default unlimited)") create.Flags().StringSliceVarP(&common.CreateOptions.ReferenceTables, "reference-tables", "r", nil, "Used to specify the reference tables to materialize on every target shard.") base.AddCommand(create) + update.Flags().StringSliceVar(&updateOptions.AddReferenceTables, "add-reference-tables", nil, "Used to specify the reference tables to be added to the existing workflow") + update.MarkFlagRequired("add-reference-tables") + base.AddCommand(update) + // Generic workflow commands. opts := &common.SubCommandsOpts{ SubCommand: "Materialize", diff --git a/go/cmd/vtgate/cli/cli.go b/go/cmd/vtgate/cli/cli.go index e0040e2d880..3261e703fb3 100644 --- a/go/cmd/vtgate/cli/cli.go +++ b/go/cmd/vtgate/cli/cli.go @@ -31,6 +31,7 @@ import ( "vitess.io/vitess/go/vt/srvtopo" "vitess.io/vitess/go/vt/topo" "vitess.io/vitess/go/vt/topo/topoproto" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtenv" "vitess.io/vitess/go/vt/vterrors" "vitess.io/vitess/go/vt/vtgate" @@ -53,22 +54,22 @@ var ( ### Key Options ` + - "\n* `--srv_topo_cache_ttl`: There may be instances where you will need to increase the cached TTL from the default of 1 second to a higher number:\n" + + "\n* `--srv-topo-cache-ttl`: There may be instances where you will need to increase the cached TTL from the default of 1 second to a higher number:\n" + ` * You may want to increase this option if you see that your topo leader goes down and keeps your queries waiting for a few seconds.`, Example: `vtgate \ - --topo_implementation etcd2 \ - --topo_global_server_address localhost:2379 \ - --topo_global_root /vitess/global \ + --topo-implementation etcd2 \ + --topo-global-server-address localhost:2379 \ + --topo-global-root /vitess/global \ --log_dir $VTDATAROOT/tmp \ --port 15001 \ - --grpc_port 15991 \ - --mysql_server_port 15306 \ + --grpc-port 15991 \ + --mysql-server-port 15306 \ --cell test \ --cells_to_watch test \ - --tablet_types_to_wait PRIMARY,REPLICA \ - --service_map 'grpc-vtgateservice' \ - --pid_file $VTDATAROOT/tmp/vtgate.pid \ - --mysql_auth_server_impl none`, + --tablet-types-to-wait PRIMARY,REPLICA \ + --service-map 'grpc-vtgateservice' \ + --pid-file $VTDATAROOT/tmp/vtgate.pid \ + --mysql-auth-server-impl none`, Args: cobra.NoArgs, Version: servenv.AppVersion.String(), PreRunE: servenv.CobraPreRunE, @@ -162,7 +163,7 @@ func run(cmd *cobra.Command, args []string) error { } if len(tabletTypes) == 0 { - return fmt.Errorf("tablet_types_to_wait must contain at least one serving tablet type") + return fmt.Errorf("tablet-types-to-wait must contain at least one serving tablet type") } err := CheckCellFlags(ctx, resilientServer, cell, vtgate.CellsToWatch) @@ -208,8 +209,11 @@ func init() { acl.RegisterFlags(Main.Flags()) Main.Flags().StringVar(&cell, "cell", cell, "cell to use") - Main.Flags().Var((*topoproto.TabletTypeListFlag)(&tabletTypesToWait), "tablet_types_to_wait", "Wait till connected for specified tablet types during Gateway initialization. Should be provided as a comma-separated set of tablet types.") + utils.SetFlagVar(Main.Flags(), (*topoproto.TabletTypeListFlag)(&tabletTypesToWait), "tablet-types-to-wait", "Wait till connected for specified tablet types during Gateway initialization. Should be provided as a comma-separated set of tablet types.") Main.Flags().StringVar(&plannerName, "planner-version", plannerName, "Sets the default planner to use when the session has not changed it. Valid values are: Gen4, Gen4Greedy, Gen4Left2Right") - Main.MarkFlagRequired("tablet_types_to_wait") + // Support both variants until v25 + // Main.MarkFlagRequired("tablet-types-to-wait") + Main.MarkFlagsOneRequired("tablet-types-to-wait", "tablet_types_to_wait") + } diff --git a/go/cmd/vtgateclienttest/services/callerid.go b/go/cmd/vtgateclienttest/services/callerid.go index f66644d3996..6c708199056 100644 --- a/go/cmd/vtgateclienttest/services/callerid.go +++ b/go/cmd/vtgateclienttest/services/callerid.go @@ -29,6 +29,7 @@ import ( querypb "vitess.io/vitess/go/vt/proto/query" vtgatepb "vitess.io/vitess/go/vt/proto/vtgate" vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" + "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/vtgate/vtgateservice" ) @@ -104,3 +105,40 @@ func (c *callerIDClient) StreamExecute(ctx context.Context, mysqlCtx vtgateservi } return c.fallbackClient.StreamExecute(ctx, mysqlCtx, session, sql, bindVariables, callback) } + +// ExecuteMulti is part of the VTGateService interface +func (c *callerIDClient) ExecuteMulti(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sqlString string) (newSession *vtgatepb.Session, qrs []*sqltypes.Result, err error) { + queries, err := sqlparser.NewTestParser().SplitStatementToPieces(sqlString) + if err != nil { + return session, nil, err + } + var result *sqltypes.Result + for _, query := range queries { + session, result, err = c.Execute(ctx, mysqlCtx, session, query, nil, false) + if err != nil { + return session, qrs, err + } + qrs = append(qrs, result) + } + return session, qrs, nil +} + +// StreamExecuteMulti is part of the VTGateService interface +func (c *callerIDClient) StreamExecuteMulti(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sqlString string, callback func(qr sqltypes.QueryResponse, more bool, firstPacket bool) error) (*vtgatepb.Session, error) { + queries, err := sqlparser.NewTestParser().SplitStatementToPieces(sqlString) + if err != nil { + return session, err + } + for idx, query := range queries { + firstPacket := true + session, err = c.StreamExecute(ctx, mysqlCtx, session, query, nil, func(result *sqltypes.Result) error { + err = callback(sqltypes.QueryResponse{QueryResult: result}, idx < len(queries)-1, firstPacket) + firstPacket = false + return err + }) + if err != nil { + return session, err + } + } + return session, nil +} diff --git a/go/cmd/vtgateclienttest/services/echo.go b/go/cmd/vtgateclienttest/services/echo.go index 7ffe5b1cfd5..1f8b72c408b 100644 --- a/go/cmd/vtgateclienttest/services/echo.go +++ b/go/cmd/vtgateclienttest/services/echo.go @@ -130,6 +130,18 @@ func (c *echoClient) StreamExecute(ctx context.Context, mysqlCtx vtgateservice.M return c.fallbackClient.StreamExecute(ctx, mysqlCtx, session, sql, bindVariables, callback) } +// ExecuteMulti is part of the VTGateService interface +func (c *echoClient) ExecuteMulti(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sqlString string) (newSession *vtgatepb.Session, qrs []*sqltypes.Result, err error) { + // Look at https://github.com/vitessio/vitess/pull/18059 for details on how to implement this. + panic("unimplemented") +} + +// StreamExecuteMulti is part of the VTGateService interface +func (c *echoClient) StreamExecuteMulti(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sqlString string, callback func(qr sqltypes.QueryResponse, more bool, firstPacket bool) error) (*vtgatepb.Session, error) { + // Look at https://github.com/vitessio/vitess/pull/18059 for details on how to implement this. + panic("unimplemented") +} + func (c *echoClient) ExecuteBatch(ctx context.Context, session *vtgatepb.Session, sqlList []string, bindVariablesList []map[string]*querypb.BindVariable) (*vtgatepb.Session, []sqltypes.QueryResponse, error) { if len(sqlList) > 0 && strings.HasPrefix(sqlList[0], EchoPrefix) { var queryResponse []sqltypes.QueryResponse diff --git a/go/cmd/vtgateclienttest/services/errors.go b/go/cmd/vtgateclienttest/services/errors.go index f1438a105e4..39d4d0b1e2b 100644 --- a/go/cmd/vtgateclienttest/services/errors.go +++ b/go/cmd/vtgateclienttest/services/errors.go @@ -146,6 +146,18 @@ func (c *errorClient) StreamExecute(ctx context.Context, mysqlCtx vtgateservice. return c.fallbackClient.StreamExecute(ctx, mysqlCtx, session, sql, bindVariables, callback) } +// ExecuteMulti is part of the VTGateService interface +func (c *errorClient) ExecuteMulti(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sqlString string) (newSession *vtgatepb.Session, qrs []*sqltypes.Result, err error) { + // Look at https://github.com/vitessio/vitess/pull/18059 for details on how to implement this. + panic("unimplemented") +} + +// StreamExecuteMulti is part of the VTGateService interface +func (c *errorClient) StreamExecuteMulti(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sqlString string, callback func(qr sqltypes.QueryResponse, more bool, firstPacket bool) error) (*vtgatepb.Session, error) { + // Look at https://github.com/vitessio/vitess/pull/18059 for details on how to implement this. + panic("unimplemented") +} + func (c *errorClient) Prepare(ctx context.Context, session *vtgatepb.Session, sql string) (*vtgatepb.Session, []*querypb.Field, uint16, error) { if err := requestToPartialError(sql, session); err != nil { return session, nil, 0, err diff --git a/go/cmd/vtgateclienttest/services/fallback.go b/go/cmd/vtgateclienttest/services/fallback.go index 00ad33776df..085652bdeb0 100644 --- a/go/cmd/vtgateclienttest/services/fallback.go +++ b/go/cmd/vtgateclienttest/services/fallback.go @@ -59,6 +59,14 @@ func (c fallbackClient) StreamExecute(ctx context.Context, mysqlCtx vtgateservic return c.fallback.StreamExecute(ctx, mysqlCtx, session, sql, bindVariables, callback) } +func (c fallbackClient) ExecuteMulti(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sqlString string) (newSession *vtgatepb.Session, qrs []*sqltypes.Result, err error) { + return c.fallback.ExecuteMulti(ctx, mysqlCtx, session, sqlString) +} + +func (c fallbackClient) StreamExecuteMulti(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sqlString string, callback func(qr sqltypes.QueryResponse, more bool, firstPacket bool) error) (*vtgatepb.Session, error) { + return c.fallback.StreamExecuteMulti(ctx, mysqlCtx, session, sqlString, callback) +} + func (c fallbackClient) Prepare(ctx context.Context, session *vtgatepb.Session, sql string) (*vtgatepb.Session, []*querypb.Field, uint16, error) { return c.fallback.Prepare(ctx, session, sql) } diff --git a/go/cmd/vtgateclienttest/services/terminal.go b/go/cmd/vtgateclienttest/services/terminal.go index ad1937566f1..e6a853ae306 100644 --- a/go/cmd/vtgateclienttest/services/terminal.go +++ b/go/cmd/vtgateclienttest/services/terminal.go @@ -74,6 +74,14 @@ func (c *terminalClient) Prepare(ctx context.Context, session *vtgatepb.Session, return session, nil, 0, errTerminal } +func (c *terminalClient) ExecuteMulti(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sqlString string) (newSession *vtgatepb.Session, qrs []*sqltypes.Result, err error) { + return session, nil, errTerminal +} + +func (c *terminalClient) StreamExecuteMulti(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sqlString string, callback func(qr sqltypes.QueryResponse, more bool, firstPacket bool) error) (*vtgatepb.Session, error) { + return session, errTerminal +} + func (c *terminalClient) CloseSession(ctx context.Context, session *vtgatepb.Session) error { return errTerminal } diff --git a/go/cmd/vtorc/cli/cli.go b/go/cmd/vtorc/cli/cli.go index b79793c6492..9ff1fdb1f03 100644 --- a/go/cmd/vtorc/cli/cli.go +++ b/go/cmd/vtorc/cli/cli.go @@ -34,9 +34,9 @@ var ( Use: "vtorc", Short: "VTOrc is the automated fault detection and repair tool in Vitess.", Example: `vtorc \ - --topo_implementation etcd2 \ - --topo_global_server_address localhost:2379 \ - --topo_global_root /vitess/global \ + --topo-implementation etcd2 \ + --topo-global-server-address localhost:2379 \ + --topo-global-root /vitess/global \ --log_dir $VTDATAROOT/tmp \ --port 15000 \ --instance-poll-time "1s" \ diff --git a/go/cmd/vttablet/cli/cli.go b/go/cmd/vttablet/cli/cli.go index a953ed2b448..315900abecf 100644 --- a/go/cmd/vttablet/cli/cli.go +++ b/go/cmd/vttablet/cli/cli.go @@ -65,7 +65,7 @@ var ( * Managed MySQL (most common) * External MySQL -In addition to these deployment types, a partially managed VTTablet is also possible by setting ` + "`--disable_active_reparents`." + ` +In addition to these deployment types, a partially managed VTTablet is also possible by setting ` + "`--disable-active-reparents`." + ` ### Managed MySQL @@ -81,20 +81,20 @@ Even if a MySQL is external, you can still make vttablet perform some management ` + "* `--unmanaged`: This flag indicates that this tablet is running in unmanaged mode. In this mode, any reparent or replica commands are not allowed. These are InitShardPrimary, PlannedReparentShard, EmergencyReparentShard, and ReparentTablet. You should use the TabletExternallyReparented command to inform vitess of the current primary.\n" + - "* `--replication_connect_retry`: This value is give to mysql when it connects a replica to the primary as the retry duration parameter.\n" + - "* `--heartbeat_enable` and `--heartbeat_interval duration`: cause vttablet to write heartbeats to the sidecar database. This information is also used by the replication reporter to assess replica lag.\n", + "* `--replication-connect-retry`: This value is give to mysql when it connects a replica to the primary as the retry duration parameter.\n" + + "* `--heartbeat-enable` and `--heartbeat-interval duration`: cause vttablet to write heartbeats to the sidecar database. This information is also used by the replication reporter to assess replica lag.\n", Example: ` vttablet \ - --topo_implementation etcd2 \ - --topo_global_server_address localhost:2379 \ - --topo_global_root /vitess/ \ + --topo-implementation etcd2 \ + --topo-global-server-address localhost:2379 \ + --topo-global-root /vitess/ \ --tablet-path $alias \ - --init_keyspace $keyspace \ - --init_shard $shard \ - --init_tablet_type $tablet_type \ + --init-keyspace $keyspace \ + --init-shard $shard \ + --init-tablet-type $tablet_type \ --port $port \ - --grpc_port $grpc_port \ - --service_map 'grpc-queryservice,grpc-tabletmanager,grpc-updatestream'` + "\n\n`$alias` needs to be of the form: `-id`, and the cell should match one of the local cells that was created in the topology. The id can be left padded with zeroes: `cell-100` and `cell-000000100` are synonymous.", + --grpc-port $grpc_port \ + --service-map 'grpc-queryservice,grpc-tabletmanager,grpc-updatestream'` + "\n\n`$alias` needs to be of the form: `-id`, and the cell should match one of the local cells that was created in the topology. The id can be left padded with zeroes: `cell-100` and `cell-000000100` are synonymous.", Args: cobra.NoArgs, Version: servenv.AppVersion.String(), PreRunE: servenv.CobraPreRunE, diff --git a/go/cmd/vttablet/cli/cli_test.go b/go/cmd/vttablet/cli/cli_test.go index c88ebd1b8ae..f4685d9bc03 100644 --- a/go/cmd/vttablet/cli/cli_test.go +++ b/go/cmd/vttablet/cli/cli_test.go @@ -25,6 +25,7 @@ import ( "vitess.io/vitess/go/vt/topo" "vitess.io/vitess/go/vt/topo/memorytopo" + "vitess.io/vitess/go/vt/utils" ) // TestRunFailsToStartTabletManager tests the code path in 'run' where we fail to start the TabletManager @@ -42,13 +43,27 @@ func TestRunFailsToStartTabletManager(t *testing.T) { os.Args = append([]string{}, args...) }) - os.Args = []string{"vttablet", - "--topo_implementation", "test", "--topo_global_server_address", "localhost", "--topo_global_root", "cell", - "--db_host", "localhost", "--db_port", "3306", - "--tablet-path", "cell-1", "--init_keyspace", "ks", "--init_shard", "0", "--init_tablet_type", "replica", - "--restore_from_backup", + flags := make(map[string]string) + utils.SetFlagVariantsForTests(flags, "--topo-implementation", "test") + utils.SetFlagVariantsForTests(flags, "--topo-global-server-address", "localhost") + utils.SetFlagVariantsForTests(flags, "--topo-global-root", "cell") + utils.SetFlagVariantsForTests(flags, "--db-host", "localhost") + utils.SetFlagVariantsForTests(flags, "--db-port", "3306") + utils.SetFlagVariantsForTests(flags, "--init-keyspace", "ks") + utils.SetFlagVariantsForTests(flags, "--init-shard", "0") + utils.SetFlagVariantsForTests(flags, "--init-tablet-type", "replica") + + var flagArgs []string + for flag, value := range flags { + flagArgs = append(flagArgs, flag, value) } + flagArgs = append(flagArgs, + "--tablet-path", "cell-1", "--restore_from_backup", + ) + + os.Args = append([]string{"vttablet"}, flagArgs...) + // Creating and canceling the context so that pending tasks in tm_init gets canceled before we close the topo server ctx, cancel := context.WithCancel(context.Background()) defer cancel() diff --git a/go/cmd/vttestserver/cli/main.go b/go/cmd/vttestserver/cli/main.go index 479ea4441f8..9462fed4f25 100644 --- a/go/cmd/vttestserver/cli/main.go +++ b/go/cmd/vttestserver/cli/main.go @@ -34,6 +34,7 @@ import ( "vitess.io/vitess/go/acl" "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vttest" vttestpb "vitess.io/vitess/go/vt/proto/vttest" @@ -115,7 +116,7 @@ func New() (cmd *cobra.Command) { cmd.Flags().IntVar(&basePort, "port", 0, "Port to use for vtcombo. If this is 0, a random port will be chosen.") - cmd.Flags().StringVar(&protoTopo, "proto_topo", "", + cmd.Flags().StringVar(&protoTopo, "proto-topo", "", "Define the fake cluster topology as a compact text format encoded"+ " vttest proto. See vttest.proto for more information.") @@ -146,35 +147,35 @@ func New() (cmd *cobra.Command) { " when LocalCluster.TearDown() is called. This is useful for running"+ " vttestserver as a database container in local developer environments. Note"+ " that db migration files (--schema_dir option) and seeding of"+ - " random data (--initialize_with_random_data option) will only run during"+ + " random data (--initialize-with-random-data option) will only run during"+ " cluster startup if the data directory does not already exist. "+ " Changes to VSchema are persisted across cluster restarts using a simple"+ " watcher if the --data_dir argument is specified.") - cmd.Flags().BoolVar(&doSeed, "initialize_with_random_data", false, + utils.SetFlagBoolVar(cmd.Flags(), &doSeed, "initialize-with-random-data", false, "If this flag is each table-shard will be initialized"+ " with random data. See also the 'rng_seed' and 'min_shard_size'"+ " and 'max_shard_size' flags.") cmd.Flags().IntVar(&seed.RngSeed, "rng_seed", 123, "The random number generator seed to use when initializing"+ - " with random data (see also --initialize_with_random_data)."+ + " with random data (see also --initialize-with-random-data)."+ " Multiple runs with the same seed will result with the same"+ " initial data.") cmd.Flags().IntVar(&seed.MinSize, "min_table_shard_size", 1000, "The minimum number of initial rows in a table shard. Ignored if"+ - "--initialize_with_random_data is false. The actual number is chosen"+ + "--initialize-with-random-data is false. The actual number is chosen"+ " randomly.") cmd.Flags().IntVar(&seed.MaxSize, "max_table_shard_size", 10000, "The maximum number of initial rows in a table shard. Ignored if"+ - "--initialize_with_random_data is false. The actual number is chosen"+ + "--initialize-with-random-data is false. The actual number is chosen"+ " randomly") cmd.Flags().Float64Var(&seed.NullProbability, "null_probability", 0.1, "The probability to initialize a field with 'NULL' "+ - " if --initialize_with_random_data is true. Only applies to fields"+ + " if --initialize-with-random-data is true. Only applies to fields"+ " that can contain NULL values.") cmd.Flags().StringVar(&config.MySQLBindHost, "mysql_bind_host", "localhost", @@ -208,11 +209,11 @@ func New() (cmd *cobra.Command) { cmd.Flags().StringVar(&config.TransactionMode, "transaction_mode", "MULTI", "Transaction mode MULTI (default), SINGLE or TWOPC ") cmd.Flags().DurationVar(&config.TransactionTimeout, "queryserver-config-transaction-timeout", 30*time.Second, "query server transaction timeout, a transaction will be killed if it takes longer than this value") - cmd.Flags().StringVar(&config.TabletHostName, "tablet_hostname", "localhost", "The hostname to use for the tablet otherwise it will be derived from OS' hostname") + utils.SetFlagStringVar(cmd.Flags(), &config.TabletHostName, "tablet-hostname", "localhost", "The hostname to use for the tablet otherwise it will be derived from OS' hostname") cmd.Flags().StringVar(&config.VSchemaDDLAuthorizedUsers, "vschema_ddl_authorized_users", "", "Comma separated list of users authorized to execute vschema ddl operations via vtgate") - cmd.Flags().StringVar(&config.ForeignKeyMode, "foreign_key_mode", "allow", "This is to provide how to handle foreign key constraint in create/alter table. Valid values are: allow, disallow") + utils.SetFlagStringVar(cmd.Flags(), &config.ForeignKeyMode, "foreign-key-mode", "allow", "This is to provide how to handle foreign key constraint in create/alter table. Valid values are: allow, disallow") cmd.Flags().BoolVar(&config.EnableOnlineDDL, "enable_online_ddl", true, "Allow users to submit, review and control Online DDL") cmd.Flags().BoolVar(&config.EnableDirectDDL, "enable_direct_ddl", true, "Allow users to submit direct DDL statements") @@ -221,11 +222,11 @@ func New() (cmd *cobra.Command) { cmd.Flags().StringVar(&config.ExternalTopoGlobalServerAddress, "external_topo_global_server_address", "", "the address of the global topology server for vtcombo process") cmd.Flags().StringVar(&config.ExternalTopoGlobalRoot, "external_topo_global_root", "", "the path of the global topology data in the global topology server for vtcombo process") - cmd.Flags().DurationVar(&config.VtgateTabletRefreshInterval, "tablet_refresh_interval", 10*time.Second, "Interval at which vtgate refreshes tablet information from topology server.") + utils.SetFlagDurationVar(cmd.Flags(), &config.VtgateTabletRefreshInterval, "tablet-refresh-interval", 10*time.Second, "Interval at which vtgate refreshes tablet information from topology server.") cmd.Flags().BoolVar(&doCreateTCPUser, "initialize-with-vt-dba-tcp", false, "If this flag is enabled, MySQL will be initialized with an additional user named vt_dba_tcp, who will have access via TCP/IP connection.") - cmd.Flags().BoolVar(&config.NoScatter, "no_scatter", false, "when set to true, the planner will fail instead of producing a plan that includes scatter queries") + utils.SetFlagBoolVar(cmd.Flags(), &config.NoScatter, "no-scatter", false, "when set to true, the planner will fail instead of producing a plan that includes scatter queries") acl.RegisterFlags(cmd.Flags()) return cmd diff --git a/go/cmd/vttestserver/cli/main_test.go b/go/cmd/vttestserver/cli/main_test.go index d417b5c4190..417b2089a67 100644 --- a/go/cmd/vttestserver/cli/main_test.go +++ b/go/cmd/vttestserver/cli/main_test.go @@ -38,6 +38,7 @@ import ( "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/logutil" "vitess.io/vitess/go/vt/tlstest" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtctl/vtctlclient" "vitess.io/vitess/go/vt/vttest" @@ -136,7 +137,7 @@ func TestForeignKeysAndDDLModes(t *testing.T) { conf := config defer resetConfig(conf) - cluster, err := startCluster("--foreign_key_mode=allow", "--enable_online_ddl=true", "--enable_direct_ddl=true") + cluster, err := startCluster("--foreign-key-mode=allow", "--enable_online_ddl=true", "--enable_direct_ddl=true") require.NoError(t, err) defer cluster.TearDown() @@ -162,7 +163,7 @@ func TestForeignKeysAndDDLModes(t *testing.T) { assert.NoError(t, err) cluster.TearDown() - cluster, err = startCluster("--foreign_key_mode=disallow", "--enable_online_ddl=false", "--enable_direct_ddl=false") + cluster, err = startCluster("--foreign-key-mode=disallow", "--enable_online_ddl=false", "--enable_direct_ddl=false") require.NoError(t, err) defer cluster.TearDown() @@ -190,7 +191,7 @@ func TestNoScatter(t *testing.T) { conf := config defer resetConfig(conf) - cluster, err := startCluster("--no_scatter") + cluster, err := startCluster(utils.GetFlagVariantForTests("--no-scatter")) require.NoError(t, err) defer cluster.TearDown() @@ -302,14 +303,14 @@ func TestMtlsAuth(t *testing.T) { // When cluster starts it will apply SQL and VSchema migrations in the configured schema_dir folder // With mtls authorization enabled, the authorized CN must match the certificate's CN cluster, err := startCluster( - "--grpc_auth_mode=mtls", - fmt.Sprintf("--grpc_key=%s", key), - fmt.Sprintf("--grpc_cert=%s", cert), - fmt.Sprintf("--grpc_ca=%s", caCert), - fmt.Sprintf("--vtctld_grpc_key=%s", clientKey), - fmt.Sprintf("--vtctld_grpc_cert=%s", clientCert), - fmt.Sprintf("--vtctld_grpc_ca=%s", caCert), - fmt.Sprintf("--grpc_auth_mtls_allowed_substrings=%s", "CN=ClientApp")) + utils.GetFlagVariantForTests("--grpc-auth-mode")+"=mtls", + fmt.Sprintf("%s=%s", utils.GetFlagVariantForTests("--grpc-key"), key), + fmt.Sprintf("%s=%s", utils.GetFlagVariantForTests("--grpc-cert"), cert), + fmt.Sprintf("%s=%s", utils.GetFlagVariantForTests("--grpc-ca"), caCert), + fmt.Sprintf("%s=%s", utils.GetFlagVariantForTests("--vtctld-grpc-key"), clientKey), + fmt.Sprintf("%s=%s", utils.GetFlagVariantForTests("--vtctld-grpc-cert"), clientCert), + fmt.Sprintf("%s=%s", utils.GetFlagVariantForTests("--vtctld-grpc-ca"), caCert), + fmt.Sprintf("%s=%s", utils.GetFlagVariantForTests("--grpc-auth-mtls-allowed-substrings"), "CN=ClientApp")) require.NoError(t, err) defer func() { cluster.PersistentMode = false // Cleanup the tmpdir as we're done @@ -344,14 +345,14 @@ func TestMtlsAuthUnauthorizedFails(t *testing.T) { // For mtls authorization failure by providing a client certificate with different CN thant the // authorized in the configuration cluster, err := startCluster( - "--grpc_auth_mode=mtls", - fmt.Sprintf("--grpc_key=%s", key), - fmt.Sprintf("--grpc_cert=%s", cert), - fmt.Sprintf("--grpc_ca=%s", caCert), - fmt.Sprintf("--vtctld_grpc_key=%s", clientKey), - fmt.Sprintf("--vtctld_grpc_cert=%s", clientCert), - fmt.Sprintf("--vtctld_grpc_ca=%s", caCert), - fmt.Sprintf("--grpc_auth_mtls_allowed_substrings=%s", "CN=ClientApp")) + utils.GetFlagVariantForTests("--grpc-auth-mode")+"=mtls", + fmt.Sprintf("%s=%s", utils.GetFlagVariantForTests("--grpc-key"), key), + fmt.Sprintf("%s=%s", utils.GetFlagVariantForTests("--grpc-cert"), cert), + fmt.Sprintf("%s=%s", utils.GetFlagVariantForTests("--grpc-ca"), caCert), + fmt.Sprintf("%s=%s", utils.GetFlagVariantForTests("--vtctld-grpc-key"), clientKey), + fmt.Sprintf("%s=%s", utils.GetFlagVariantForTests("--vtctld-grpc-cert"), clientCert), + fmt.Sprintf("%s=%s", utils.GetFlagVariantForTests("--vtctld-grpc-ca"), caCert), + fmt.Sprintf("--grpc-auth-mtls-allowed-substrings=%s", "CN=ClientApp")) defer cluster.TearDown() require.Error(t, err) @@ -376,7 +377,7 @@ var clusterKeyspaces = []string{ func startCluster(flags ...string) (cluster vttest.LocalCluster, err error) { args := []string{"vttestserver"} schemaDirArg := "--schema_dir=data/schema" - tabletHostname := "--tablet_hostname=localhost" + tabletHostname := fmt.Sprintf("%s=localhost", utils.GetFlagVariantForTests("--tablet-hostname")) keyspaceArg := "--keyspaces=" + strings.Join(clusterKeyspaces, ",") numShardsArg := "--num_shards=2,2" vschemaDDLAuthorizedUsers := "--vschema_ddl_authorized_users=%" diff --git a/go/flags/endtoend/count_flags.sh b/go/flags/endtoend/count_flags.sh new file mode 100755 index 00000000000..81a833752b5 --- /dev/null +++ b/go/flags/endtoend/count_flags.sh @@ -0,0 +1,32 @@ +# !/bin/bash + +underscore_count=0 +dash_count=0 + +for file in *.txt; do + reading_flags=0 + + while IFS= read -r line; do + if [[ "$line" == "Flags:" || "$line" == "Usage of vtctlclient:" ]]; then + reading_flags=1 + continue + fi + + if [[ $reading_flags -eq 1 ]]; then + flag=$(echo "$line" | awk '{print $1}') + + if [[ "$flag" == --* ]]; then + flag_name="${flag:2}" + + [[ "$flag_name" == *_* ]] && ((underscore_count++)) + [[ "$flag_name" == *-* ]] && ((dash_count++)) + fi + fi + done < "$file" +done + +echo "-------------------------------------" +echo "Total Flags with underscores (_): $underscore_count" +echo "Total Flags with dashes (-): $dash_count" + + diff --git a/go/flags/endtoend/mysqlctl.txt b/go/flags/endtoend/mysqlctl.txt index f803b393a76..5921ff2a310 100644 --- a/go/flags/endtoend/mysqlctl.txt +++ b/go/flags/endtoend/mysqlctl.txt @@ -20,8 +20,8 @@ Available Commands: Flags: --alsologtostderr log to standard error as well as files - --app_idle_timeout duration Idle timeout for app connections (default 1m0s) - --app_pool_size int Size of the connection pool for app connections (default 40) + --app-idle-timeout duration Idle timeout for app connections (default 1m0s) + --app-pool-size int Size of the connection pool for app connections (default 40) --catch-sigpipe catch and ignore SIGPIPE on stdout and stderr if specified --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) @@ -29,6 +29,9 @@ Flags: --config-path strings Paths to search for config files in. (default [{{ .Workdir }}]) --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) --config-type string Config file type (omit to infer config type from file extension). + --db-charset string Character set/collation used for this tablet. Make sure to configure this to a charset/collation supported by the lowest MySQL version in your environment. (default "utf8mb4") + --db-conn-query-info enable parsing and processing of QUERY_OK info fields + --db-connect-timeout-ms int connection timeout to mysqld in milliseconds (0 for no timeout) --db-credentials-file string db credentials file; send SIGHUP to reload this file --db-credentials-server string db credentials server type ('file' - file implementation; 'vault' - HashiCorp Vault implementation) (default "file") --db-credentials-vault-addr string URL to Vault server @@ -40,57 +43,54 @@ Flags: --db-credentials-vault-tls-ca string Path to CA PEM for validating Vault server certificate --db-credentials-vault-tokenfile string Path to file containing Vault auth token; token can also be passed using VAULT_TOKEN environment variable --db-credentials-vault-ttl duration How long to cache DB credentials from the Vault server (default 30m0s) - --db_charset string Character set/collation used for this tablet. Make sure to configure this to a charset/collation supported by the lowest MySQL version in your environment. (default "utf8mb4") - --db_conn_query_info enable parsing and processing of QUERY_OK info fields - --db_connect_timeout_ms int connection timeout to mysqld in milliseconds (0 for no timeout) - --db_dba_password string db dba password - --db_dba_use_ssl Set this flag to false to make the dba connection to not use ssl (default true) - --db_dba_user string db dba user userKey (default "vt_dba") - --db_flags uint Flag values as defined by MySQL. - --db_flavor string Flavor overrid. Valid value is FilePos. - --db_host string The host name for the tcp connection. - --db_port int tcp port - --db_server_name string server name of the DB we are connecting to. - --db_socket string The unix socket to connect on. If this is specified, host and port will not be used. - --db_ssl_ca string connection ssl ca - --db_ssl_ca_path string connection ssl ca path - --db_ssl_cert string connection ssl certificate - --db_ssl_key string connection ssl key - --db_ssl_mode SslMode SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity. - --db_tls_min_version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. - --dba_idle_timeout duration Idle timeout for dba connections (default 1m0s) - --dba_pool_size int Size of the connection pool for dba connections (default 20) + --db-dba-password string db dba password + --db-dba-use-ssl Set this flag to false to make the dba connection to not use ssl (default true) + --db-dba-user string db dba user userKey (default "vt_dba") + --db-flags uint Flag values as defined by MySQL. + --db-flavor string Flavor overrid. Valid value is FilePos. + --db-host string The host name for the tcp connection. + --db-port int tcp port + --db-server-name string server name of the DB we are connecting to. + --db-socket string The unix socket to connect on. If this is specified, host and port will not be used. + --db-ssl-ca string connection ssl ca + --db-ssl-ca-path string connection ssl ca path + --db-ssl-cert string connection ssl certificate + --db-ssl-key string connection ssl key + --db-ssl-mode SslMode SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity. + --db-tls-min-version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. + --dba-idle-timeout duration Idle timeout for dba connections (default 1m0s) + --dba-pool-size int Size of the connection pool for dba connections (default 20) -h, --help help for mysqlctl - --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) - --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --keep-logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep-logs-by-mtime duration keep logs for this long (using mtime) (zero to keep forever) --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) + --log-err-stacks log stack traces for errors + --log-rotate-max-size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace --log_dir string If non-empty, write log files in this directory - --log_err_stacks log stack traces for errors - --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --logtostderr log to standard error instead of files --max-stack-size int configure the maximum stack size in bytes (default 67108864) - --mysql_port int MySQL port. (default 3306) - --mysql_server_version string MySQL server version to advertise. (default "8.0.40-Vitess") - --mysql_socket string Path to the mysqld socket file. + --mysql-port int MySQL port. (default 3306) + --mysql-server-version string MySQL server version to advertise. (default "8.0.40-Vitess") + --mysql-socket string Path to the mysqld socket file. + --mysqlctl-mycnf-template string template file to use for generating the my.cnf file during server init + --mysqlctl-socket string socket file to use for remote mysqlctl actions (empty for local actions) --mysqlctl_client_protocol string the protocol to use to talk to the mysqlctl server (default "grpc") - --mysqlctl_mycnf_template string template file to use for generating the my.cnf file during server init - --mysqlctl_socket string socket file to use for remote mysqlctl actions (empty for local actions) - --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) - --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) - --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. - --pool_hostname_resolve_interval duration if set force an update to all hostnames and reconnect if changed, defaults to 0 (disabled) + --onclose-timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm-timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) + --pid-file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --pool-hostname-resolve-interval duration if set force an update to all hostnames and reconnect if changed, defaults to 0 (disabled) --pprof strings enable profiling --pprof-http enable pprof http endpoints - --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) - --replication_connect_retry duration how long to wait in between replica reconnect attempts. Only precise to the second. (default 10s) - --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) - --service_map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice + --purge-logs-interval duration how often try to remove old logs (default 1h0m0s) + --replication-connect-retry duration how long to wait in between replica reconnect attempts. Only precise to the second. (default 10s) + --security-policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --service-map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice --socket_file string Local unix socket file to listen on --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class - --tablet_dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. - --tablet_uid uint32 Tablet UID. (default 41983) + --tablet-dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. + --tablet-uid uint32 Tablet UID. (default 41983) --v Level log level for V logs -v, --version print binary version --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging diff --git a/go/flags/endtoend/mysqlctld.txt b/go/flags/endtoend/mysqlctld.txt index 22c5f37d63f..ca46df89fb1 100644 --- a/go/flags/endtoend/mysqlctld.txt +++ b/go/flags/endtoend/mysqlctld.txt @@ -14,14 +14,14 @@ Usage: Examples: mysqlctld \ --log_dir=${VTDATAROOT}/logs \ - --tablet_uid=100 \ - --mysql_port=17100 \ + --tablet-uid=100 \ + --mysql-port=17100 \ --socket_file=/path/to/socket_file Flags: --alsologtostderr log to standard error as well as files - --app_idle_timeout duration Idle timeout for app connections (default 1m0s) - --app_pool_size int Size of the connection pool for app connections (default 40) + --app-idle-timeout duration Idle timeout for app connections (default 1m0s) + --app-pool-size int Size of the connection pool for app connections (default 40) --bind-address string Bind address for the server. If empty, the server will listen on all available unicast and anycast IP addresses of the local system. --catch-sigpipe catch and ignore SIGPIPE on stdout and stderr if specified --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. @@ -30,6 +30,9 @@ Flags: --config-path strings Paths to search for config files in. (default [{{ .Workdir }}]) --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) --config-type string Config file type (omit to infer config type from file extension). + --db-charset string Character set/collation used for this tablet. Make sure to configure this to a charset/collation supported by the lowest MySQL version in your environment. (default "utf8mb4") + --db-conn-query-info enable parsing and processing of QUERY_OK info fields + --db-connect-timeout-ms int connection timeout to mysqld in milliseconds (0 for no timeout) --db-credentials-file string db credentials file; send SIGHUP to reload this file --db-credentials-server string db credentials server type ('file' - file implementation; 'vault' - HashiCorp Vault implementation) (default "file") --db-credentials-vault-addr string URL to Vault server @@ -41,85 +44,82 @@ Flags: --db-credentials-vault-tls-ca string Path to CA PEM for validating Vault server certificate --db-credentials-vault-tokenfile string Path to file containing Vault auth token; token can also be passed using VAULT_TOKEN environment variable --db-credentials-vault-ttl duration How long to cache DB credentials from the Vault server (default 30m0s) - --db_charset string Character set/collation used for this tablet. Make sure to configure this to a charset/collation supported by the lowest MySQL version in your environment. (default "utf8mb4") - --db_conn_query_info enable parsing and processing of QUERY_OK info fields - --db_connect_timeout_ms int connection timeout to mysqld in milliseconds (0 for no timeout) - --db_dba_password string db dba password - --db_dba_use_ssl Set this flag to false to make the dba connection to not use ssl (default true) - --db_dba_user string db dba user userKey (default "vt_dba") - --db_flags uint Flag values as defined by MySQL. - --db_flavor string Flavor overrid. Valid value is FilePos. - --db_host string The host name for the tcp connection. - --db_port int tcp port - --db_server_name string server name of the DB we are connecting to. - --db_socket string The unix socket to connect on. If this is specified, host and port will not be used. - --db_ssl_ca string connection ssl ca - --db_ssl_ca_path string connection ssl ca path - --db_ssl_cert string connection ssl certificate - --db_ssl_key string connection ssl key - --db_ssl_mode SslMode SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity. - --db_tls_min_version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. - --dba_idle_timeout duration Idle timeout for dba connections (default 1m0s) - --dba_pool_size int Size of the connection pool for dba connections (default 20) + --db-dba-password string db dba password + --db-dba-use-ssl Set this flag to false to make the dba connection to not use ssl (default true) + --db-dba-user string db dba user userKey (default "vt_dba") + --db-flags uint Flag values as defined by MySQL. + --db-flavor string Flavor overrid. Valid value is FilePos. + --db-host string The host name for the tcp connection. + --db-port int tcp port + --db-server-name string server name of the DB we are connecting to. + --db-socket string The unix socket to connect on. If this is specified, host and port will not be used. + --db-ssl-ca string connection ssl ca + --db-ssl-ca-path string connection ssl ca path + --db-ssl-cert string connection ssl certificate + --db-ssl-key string connection ssl key + --db-ssl-mode SslMode SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity. + --db-tls-min-version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. + --dba-idle-timeout duration Idle timeout for dba connections (default 1m0s) + --dba-pool-size int Size of the connection pool for dba connections (default 20) + --grpc-auth-mode string Which auth plugin implementation to use (eg: static) + --grpc-auth-mtls-allowed-substrings string List of substrings of at least one of the client certificate names (separated by colon). + --grpc-auth-static-client-creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. + --grpc-auth-static-password-file string JSON File to read the users/passwords from. + --grpc-bind-address string Bind address for gRPC calls. If empty, listen on all addresses. + --grpc-ca string server CA to use for gRPC connections, requires TLS, and enforces client certificate check + --grpc-cert string server certificate to use for gRPC connections, requires grpc-key, enables TLS + --grpc-compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy + --grpc-crl string path to a certificate revocation list in PEM format, client certificates will be further verified against this file during TLS handshake --grpc-dial-concurrency-limit int Maximum concurrency of grpc dial operations. This should be less than the golang max thread limit of 10000. (default 1024) - --grpc_auth_mode string Which auth plugin implementation to use (eg: static) - --grpc_auth_mtls_allowed_substrings string List of substrings of at least one of the client certificate names (separated by colon). - --grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. - --grpc_auth_static_password_file string JSON File to read the users/passwords from. - --grpc_bind_address string Bind address for gRPC calls. If empty, listen on all addresses. - --grpc_ca string server CA to use for gRPC connections, requires TLS, and enforces client certificate check - --grpc_cert string server certificate to use for gRPC connections, requires grpc_key, enables TLS - --grpc_compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy - --grpc_crl string path to a certificate revocation list in PEM format, client certificates will be further verified against this file during TLS handshake - --grpc_enable_optional_tls enable optional TLS mode when a server accepts both TLS and plain-text connections on the same port - --grpc_initial_conn_window_size int gRPC initial connection window size - --grpc_initial_window_size int gRPC initial window size - --grpc_keepalive_time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) - --grpc_keepalive_timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) - --grpc_key string server private key to use for gRPC connections, requires grpc_cert, enables TLS - --grpc_max_connection_age duration Maximum age of a client connection before GoAway is sent. (default 2562047h47m16.854775807s) - --grpc_max_connection_age_grace duration Additional grace period after grpc_max_connection_age, after which connections are forcibly closed. (default 2562047h47m16.854775807s) - --grpc_port int Port to listen on for gRPC calls. If zero, do not listen. - --grpc_server_ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients - --grpc_server_initial_conn_window_size int gRPC server initial connection window size - --grpc_server_initial_window_size int gRPC server initial window size - --grpc_server_keepalive_enforcement_policy_min_time duration gRPC server minimum keepalive time (default 10s) - --grpc_server_keepalive_enforcement_policy_permit_without_stream gRPC server permit client keepalive pings even when there are no active streams (RPCs) - --grpc_server_keepalive_time duration After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive. (default 10s) - --grpc_server_keepalive_timeout duration After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc-enable-optional-tls enable optional TLS mode when a server accepts both TLS and plain-text connections on the same port + --grpc-initial-conn-window-size int gRPC initial connection window size + --grpc-initial-window-size int gRPC initial window size + --grpc-keepalive-time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) + --grpc-keepalive-timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc-key string server private key to use for gRPC connections, requires grpc-cert, enables TLS + --grpc-max-connection-age duration Maximum age of a client connection before GoAway is sent. (default 2562047h47m16.854775807s) + --grpc-max-connection-age-grace duration Additional grace period after grpc-max-connection-age, after which connections are forcibly closed. (default 2562047h47m16.854775807s) + --grpc-port int Port to listen on for gRPC calls. If zero, do not listen. + --grpc-server-ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients + --grpc-server-initial-conn-window-size int gRPC server initial connection window size + --grpc-server-initial-window-size int gRPC server initial window size + --grpc-server-keepalive-enforcement-policy-min-time duration gRPC server minimum keepalive time (default 10s) + --grpc-server-keepalive-enforcement-policy-permit-without-stream gRPC server permit client keepalive pings even when there are no active streams (RPCs) + --grpc-server-keepalive-time duration After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive. (default 10s) + --grpc-server-keepalive-timeout duration After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) -h, --help help for mysqlctld --init_db_sql_file string Path to .sql file to run after mysqld initialization - --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) - --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --keep-logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep-logs-by-mtime duration keep logs for this long (using mtime) (zero to keep forever) --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) + --log-err-stacks log stack traces for errors + --log-rotate-max-size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace --log_dir string If non-empty, write log files in this directory - --log_err_stacks log stack traces for errors - --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --logtostderr log to standard error instead of files --max-stack-size int configure the maximum stack size in bytes (default 67108864) - --mysql_port int MySQL port (default 3306) - --mysql_server_version string MySQL server version to advertise. (default "8.0.40-Vitess") - --mysql_socket string Path to the mysqld socket file - --mysqlctl_mycnf_template string template file to use for generating the my.cnf file during server init - --mysqlctl_socket string socket file to use for remote mysqlctl actions (empty for local actions) - --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) - --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 5m10s) - --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. - --pool_hostname_resolve_interval duration if set force an update to all hostnames and reconnect if changed, defaults to 0 (disabled) + --mysql-port int MySQL port (default 3306) + --mysql-server-version string MySQL server version to advertise. (default "8.0.40-Vitess") + --mysql-socket string Path to the mysqld socket file + --mysqlctl-mycnf-template string template file to use for generating the my.cnf file during server init + --mysqlctl-socket string socket file to use for remote mysqlctl actions (empty for local actions) + --onclose-timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm-timeout duration wait no more than this for OnTermSync handlers before stopping (default 5m10s) + --pid-file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --pool-hostname-resolve-interval duration if set force an update to all hostnames and reconnect if changed, defaults to 0 (disabled) --port int port for the server --pprof strings enable profiling --pprof-http enable pprof http endpoints - --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) - --replication_connect_retry duration how long to wait in between replica reconnect attempts. Only precise to the second. (default 10s) - --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) - --service_map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice + --purge-logs-interval duration how often try to remove old logs (default 1h0m0s) + --replication-connect-retry duration how long to wait in between replica reconnect attempts. Only precise to the second. (default 10s) + --security-policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --service-map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice --shutdown-wait-time duration How long to wait for mysqld shutdown (default 5m0s) --socket_file string Local unix socket file to listen on --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class - --tablet_dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. - --tablet_uid uint32 Tablet UID (default 41983) + --tablet-dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. + --tablet-uid uint32 Tablet UID (default 41983) --v Level log level for V logs -v, --version print binary version --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging diff --git a/go/flags/endtoend/topo2topo.txt b/go/flags/endtoend/topo2topo.txt index c003c3584f3..5e99c0a7d37 100644 --- a/go/flags/endtoend/topo2topo.txt +++ b/go/flags/endtoend/topo2topo.txt @@ -21,21 +21,21 @@ Flags: --from_implementation string topology implementation to copy data from --from_root string topology server root to copy data from --from_server string topology server address to copy data from - --grpc_enable_tracing Enable gRPC tracing. - --grpc_max_message_size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) - --grpc_prometheus Enable gRPC monitoring with Prometheus. + --grpc-enable-tracing Enable gRPC tracing. + --grpc-max-message-size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) + --grpc-prometheus Enable gRPC monitoring with Prometheus. -h, --help help for topo2topo - --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) - --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --keep-logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep-logs-by-mtime duration keep logs for this long (using mtime) (zero to keep forever) + --log-err-stacks log stack traces for errors + --log-rotate-max-size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace --log_dir string If non-empty, write log files in this directory - --log_err_stacks log stack traces for errors - --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --logtostderr log to standard error instead of files --pprof strings enable profiling --pprof-http enable pprof http endpoints - --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) - --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --purge-logs-interval duration how often try to remove old logs (default 1h0m0s) + --security-policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) --to_implementation string topology implementation to copy data to --to_root string topology server root to copy data to diff --git a/go/flags/endtoend/vtaclcheck.txt b/go/flags/endtoend/vtaclcheck.txt index 8917df63c66..9253aec9b01 100644 --- a/go/flags/endtoend/vtaclcheck.txt +++ b/go/flags/endtoend/vtaclcheck.txt @@ -13,17 +13,17 @@ Flags: --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) --config-type string Config file type (omit to infer config type from file extension). -h, --help help for vtaclcheck - --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) - --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --keep-logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep-logs-by-mtime duration keep logs for this long (using mtime) (zero to keep forever) + --log-err-stacks log stack traces for errors + --log-rotate-max-size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace --log_dir string If non-empty, write log files in this directory - --log_err_stacks log stack traces for errors - --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --logtostderr log to standard error instead of files --pprof strings enable profiling --pprof-http enable pprof http endpoints - --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) - --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --purge-logs-interval duration how often try to remove old logs (default 1h0m0s) + --security-policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) --static-auth-file string The path of the auth_server_static JSON file to check --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) --v Level log level for V logs diff --git a/go/flags/endtoend/vtbackup.txt b/go/flags/endtoend/vtbackup.txt index a274e881092..654c6cfc784 100644 --- a/go/flags/endtoend/vtbackup.txt +++ b/go/flags/endtoend/vtbackup.txt @@ -50,24 +50,24 @@ Usage: Flags: --allow_first_backup Allow this job to take the first backup of an existing shard. --alsologtostderr log to standard error as well as files - --azblob_backup_account_key_file string Path to a file containing the Azure Storage account key; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_KEY will be used as the key itself (NOT a file path). - --azblob_backup_account_name string Azure Storage Account name for backups; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_NAME will be used. - --azblob_backup_buffer_size int The memory buffer size to use in bytes, per file or stripe, when streaming to Azure Blob Service. (default 104857600) - --azblob_backup_container_name string Azure Blob Container Name. - --azblob_backup_parallelism int Azure Blob operation parallelism (requires extra memory when increased -- a multiple of azblob_backup_buffer_size). (default 1) - --azblob_backup_storage_root string Root prefix for all backup-related Azure Blobs; this should exclude both initial and trailing '/' (e.g. just 'a/b' not '/a/b/'). - --backup_engine_implementation string Specifies which implementation to use for creating new backups (builtin or xtrabackup). Restores will always be done with whichever engine created a given backup. (default "builtin") - --backup_storage_block_size int if backup_storage_compress is true, backup_storage_block_size sets the byte size for each block while compressing (default is 250000). (default 250000) - --backup_storage_compress if set, the backup files will be compressed. (default true) - --backup_storage_implementation string Which backup storage implementation to use for creating and restoring backups. - --backup_storage_number_blocks int if backup_storage_compress is true, backup_storage_number_blocks sets the number of blocks that can be processed, in parallel, before the writer blocks, during compression (default is 2). It should be equal to the number of CPUs available for compression. (default 2) + --azblob-backup-account-key-file string Path to a file containing the Azure Storage account key; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_KEY will be used as the key itself (NOT a file path). + --azblob-backup-account-name string Azure Storage Account name for backups; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_NAME will be used. + --azblob-backup-buffer-size int The memory buffer size to use in bytes, per file or stripe, when streaming to Azure Blob Service. (default 104857600) + --azblob-backup-container-name string Azure Blob Container Name. + --azblob-backup-parallelism int Azure Blob operation parallelism (requires extra memory when increased -- a multiple of azblob-backup-buffer-size). (default 1) + --azblob-backup-storage-root string Root prefix for all backup-related Azure Blobs; this should exclude both initial and trailing '/' (e.g. just 'a/b' not '/a/b/'). + --backup-engine-implementation string Specifies which implementation to use for creating new backups (builtin or xtrabackup). Restores will always be done with whichever engine created a given backup. (default "builtin") + --backup-storage-block-size int if backup-storage-compress is true, backup-storage-block-size sets the byte size for each block while compressing (default is 250000). (default 250000) + --backup-storage-compress if set, the backup files will be compressed. (default true) + --backup-storage-implementation string Which backup storage implementation to use for creating and restoring backups. + --backup-storage-number-blocks int if backup-storage-compress is true, backup-storage-number-blocks sets the number of blocks that can be processed, in parallel, before the writer blocks, during compression (default is 2). It should be equal to the number of CPUs available for compression. (default 2) --bind-address string Bind address for the server. If empty, the server will listen on all available unicast and anycast IP addresses of the local system. --builtinbackup-file-read-buffer-size uint read files using an IO buffer of this many bytes. Golang defaults are used when set to 0. --builtinbackup-file-write-buffer-size uint write files using an IO buffer of this many bytes. Golang defaults are used when set to 0. (default 2097152) --builtinbackup-incremental-restore-path string the directory where incremental restore files, namely binlog files, are extracted to. In k8s environments, this should be set to a directory that is shared between the vttablet and mysqld pods. The path should exist. When empty, the default OS temp dir is assumed. - --builtinbackup_mysqld_timeout duration how long to wait for mysqld to shutdown at the start of the backup. (default 10m0s) - --builtinbackup_progress duration how often to send progress updates when backing up large files. (default 5s) - --ceph_backup_storage_config string Path to JSON config file for ceph backup storage. (default "ceph_backup_config.json") + --builtinbackup-mysqld-timeout duration how long to wait for mysqld to shutdown at the start of the backup. (default 10m0s) + --builtinbackup-progress duration how often to send progress updates when backing up large files. (default 5s) + --ceph-backup-storage-config string Path to JSON config file for ceph backup storage. (default "ceph_backup_config.json") --compression-engine-name string compressor engine used for compression. (default "pargzip") --compression-level int what level to pass to the compressor. (default 1) --concurrency int (init restore parameter) how many concurrent files to restore at once (default 4) @@ -77,7 +77,19 @@ Flags: --config-path strings Paths to search for config files in. (default [{{ .Workdir }}]) --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) --config-type string Config file type (omit to infer config type from file extension). - --consul_auth_static_file string JSON File to read the topos/tokens from. + --consul-auth-static-file string JSON File to read the topos/tokens from. + --db-allprivs-password string db allprivs password + --db-allprivs-use-ssl Set this flag to false to make the allprivs connection to not use ssl (default true) + --db-allprivs-user string db allprivs user userKey (default "vt_allprivs") + --db-app-password string db app password + --db-app-use-ssl Set this flag to false to make the app connection to not use ssl (default true) + --db-app-user string db app user userKey (default "vt_app") + --db-appdebug-password string db appdebug password + --db-appdebug-use-ssl Set this flag to false to make the appdebug connection to not use ssl (default true) + --db-appdebug-user string db appdebug user userKey (default "vt_appdebug") + --db-charset string Character set/collation used for this tablet. Make sure to configure this to a charset/collation supported by the lowest MySQL version in your environment. (default "utf8mb4") + --db-conn-query-info enable parsing and processing of QUERY_OK info fields + --db-connect-timeout-ms int connection timeout to mysqld in milliseconds (0 for no timeout) --db-credentials-file string db credentials file; send SIGHUP to reload this file --db-credentials-server string db credentials server type ('file' - file implementation; 'vault' - HashiCorp Vault implementation) (default "file") --db-credentials-vault-addr string URL to Vault server @@ -89,99 +101,89 @@ Flags: --db-credentials-vault-tls-ca string Path to CA PEM for validating Vault server certificate --db-credentials-vault-tokenfile string Path to file containing Vault auth token; token can also be passed using VAULT_TOKEN environment variable --db-credentials-vault-ttl duration How long to cache DB credentials from the Vault server (default 30m0s) - --db_allprivs_password string db allprivs password - --db_allprivs_use_ssl Set this flag to false to make the allprivs connection to not use ssl (default true) - --db_allprivs_user string db allprivs user userKey (default "vt_allprivs") - --db_app_password string db app password - --db_app_use_ssl Set this flag to false to make the app connection to not use ssl (default true) - --db_app_user string db app user userKey (default "vt_app") - --db_appdebug_password string db appdebug password - --db_appdebug_use_ssl Set this flag to false to make the appdebug connection to not use ssl (default true) - --db_appdebug_user string db appdebug user userKey (default "vt_appdebug") - --db_charset string Character set/collation used for this tablet. Make sure to configure this to a charset/collation supported by the lowest MySQL version in your environment. (default "utf8mb4") - --db_conn_query_info enable parsing and processing of QUERY_OK info fields - --db_connect_timeout_ms int connection timeout to mysqld in milliseconds (0 for no timeout) - --db_dba_password string db dba password - --db_dba_use_ssl Set this flag to false to make the dba connection to not use ssl (default true) - --db_dba_user string db dba user userKey (default "vt_dba") - --db_erepl_password string db erepl password - --db_erepl_use_ssl Set this flag to false to make the erepl connection to not use ssl (default true) - --db_erepl_user string db erepl user userKey (default "vt_erepl") - --db_filtered_password string db filtered password - --db_filtered_use_ssl Set this flag to false to make the filtered connection to not use ssl (default true) - --db_filtered_user string db filtered user userKey (default "vt_filtered") - --db_flags uint Flag values as defined by MySQL. - --db_flavor string Flavor overrid. Valid value is FilePos. - --db_host string The host name for the tcp connection. - --db_port int tcp port - --db_repl_password string db repl password - --db_repl_use_ssl Set this flag to false to make the repl connection to not use ssl (default true) - --db_repl_user string db repl user userKey (default "vt_repl") - --db_server_name string server name of the DB we are connecting to. - --db_socket string The unix socket to connect on. If this is specified, host and port will not be used. - --db_ssl_ca string connection ssl ca - --db_ssl_ca_path string connection ssl ca path - --db_ssl_cert string connection ssl certificate - --db_ssl_key string connection ssl key - --db_ssl_mode SslMode SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity. - --db_tls_min_version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. + --db-dba-password string db dba password + --db-dba-use-ssl Set this flag to false to make the dba connection to not use ssl (default true) + --db-dba-user string db dba user userKey (default "vt_dba") + --db-erepl-password string db erepl password + --db-erepl-use-ssl Set this flag to false to make the erepl connection to not use ssl (default true) + --db-erepl-user string db erepl user userKey (default "vt_erepl") + --db-filtered-password string db filtered password + --db-filtered-use-ssl Set this flag to false to make the filtered connection to not use ssl (default true) + --db-filtered-user string db filtered user userKey (default "vt_filtered") + --db-flags uint Flag values as defined by MySQL. + --db-flavor string Flavor overrid. Valid value is FilePos. + --db-host string The host name for the tcp connection. + --db-port int tcp port + --db-repl-password string db repl password + --db-repl-use-ssl Set this flag to false to make the repl connection to not use ssl (default true) + --db-repl-user string db repl user userKey (default "vt_repl") + --db-server-name string server name of the DB we are connecting to. + --db-socket string The unix socket to connect on. If this is specified, host and port will not be used. + --db-ssl-ca string connection ssl ca + --db-ssl-ca-path string connection ssl ca path + --db-ssl-cert string connection ssl certificate + --db-ssl-key string connection ssl key + --db-ssl-mode SslMode SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity. + --db-tls-min-version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. --detach detached mode - run backups detached from the terminal --disable-redo-log Disable InnoDB redo log during replication-from-primary phase of backup. - --emit_stats If set, emit stats to push-based monitoring and stats backends + --emit-stats If set, emit stats to push-based monitoring and stats backends --external-compressor string command with arguments to use when compressing a backup. --external-compressor-extension string extension to use when using an external compressor. --external-decompressor string command with arguments to use when decompressing a backup. --file_backup_storage_root string Root directory for the file backup storage. - --gcs_backup_storage_bucket string Google Cloud Storage bucket to use for backups. - --gcs_backup_storage_root string Root prefix for all backup-related object names. + --gcs-backup-storage-bucket string Google Cloud Storage bucket to use for backups. + --gcs-backup-storage-root string Root prefix for all backup-related object names. + --grpc-auth-static-client-creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. + --grpc-compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy --grpc-dial-concurrency-limit int Maximum concurrency of grpc dial operations. This should be less than the golang max thread limit of 10000. (default 1024) - --grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. - --grpc_compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy - --grpc_enable_tracing Enable gRPC tracing. - --grpc_initial_conn_window_size int gRPC initial connection window size - --grpc_initial_window_size int gRPC initial window size - --grpc_keepalive_time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) - --grpc_keepalive_timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) - --grpc_max_message_size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) - --grpc_prometheus Enable gRPC monitoring with Prometheus. + --grpc-enable-tracing Enable gRPC tracing. + --grpc-initial-conn-window-size int gRPC initial connection window size + --grpc-initial-window-size int gRPC initial window size + --grpc-keepalive-time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) + --grpc-keepalive-timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc-max-message-size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) + --grpc-prometheus Enable gRPC monitoring with Prometheus. -h, --help help for vtbackup --incremental_from_pos string Position, or name of backup from which to create an incremental backup. Default: empty. If given, then this backup becomes an incremental backup from given position or given backup. If value is 'auto', this backup will be taken from the last successful backup position. - --init_db_name_override string (init parameter) override the name of the db used by vttablet + --init-db-name-override string (init parameter) override the name of the db used by vttablet + --init-keyspace string (init parameter) keyspace to use for this tablet + --init-shard string (init parameter) shard to use for this tablet --init_db_sql_file string path to .sql file to run after mysql_install_db - --init_keyspace string (init parameter) keyspace to use for this tablet - --init_shard string (init parameter) shard to use for this tablet --initial_backup Instead of restoring from backup, initialize an empty database with the provided init_db_sql_file and upload a backup of that for the shard, if the shard has no backups yet. This can be used to seed a brand new shard with an initial, empty backup. If any backups already exist for the shard, this will be considered a successful no-op. This can only be done before the shard exists in topology (i.e. before any tablets are deployed). --keep-alive-timeout duration Wait until timeout elapses after a successful backup before shutting down. - --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) - --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --keep-logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep-logs-by-mtime duration keep logs for this long (using mtime) (zero to keep forever) --lock-timeout duration Maximum time to wait when attempting to acquire a lock from the topo server (default 45s) + --log-err-stacks log stack traces for errors + --log-rotate-max-size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace --log_dir string If non-empty, write log files in this directory - --log_err_stacks log stack traces for errors - --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --logtostderr log to standard error instead of files --manifest-external-decompressor string command with arguments to store in the backup manifest when compressing a backup with an external compression engine. --min_backup_interval duration Only take a new backup if it's been at least this long since the most recent backup. --min_retention_count int Always keep at least this many of the most recent backups in this backup storage location, even if some are older than the min_retention_time. This must be at least 1 since a backup must always exist to allow new backups to be made (default 1) --min_retention_time duration Keep each old backup for at least this long before removing it. Set to 0 to disable pruning of old backups. + --mycnf-bin-log-path string mysql binlog path + --mycnf-data-dir string data directory for mysql + --mycnf-error-log-path string mysql error log path --mycnf-file string path to my.cnf, if reading all config params from there - --mycnf_bin_log_path string mysql binlog path - --mycnf_data_dir string data directory for mysql - --mycnf_error_log_path string mysql error log path - --mycnf_general_log_path string mysql general log path - --mycnf_innodb_data_home_dir string Innodb data home directory - --mycnf_innodb_log_group_home_dir string Innodb log group home directory - --mycnf_master_info_file string mysql master.info file - --mycnf_mysql_port int port mysql is listening on - --mycnf_pid_file string mysql pid file - --mycnf_relay_log_index_path string mysql relay log index path - --mycnf_relay_log_info_path string mysql relay log info path - --mycnf_relay_log_path string mysql relay log path - --mycnf_secure_file_priv string mysql path for loading secure files - --mycnf_server_id int mysql server id of the server (if specified, mycnf-file will be ignored) - --mycnf_slow_log_path string mysql slow query log path - --mycnf_socket_file string mysql socket file - --mycnf_tmp_dir string mysql tmp directory + --mycnf-general-log-path string mysql general log path + --mycnf-innodb-data-home-dir string Innodb data home directory + --mycnf-innodb-log-group-home-dir string Innodb log group home directory + --mycnf-master-info-file string mysql master.info file + --mycnf-mysql-port int port mysql is listening on + --mycnf-pid-file string mysql pid file + --mycnf-relay-log-index-path string mysql relay log index path + --mycnf-relay-log-info-path string mysql relay log info path + --mycnf-relay-log-path string mysql relay log path + --mycnf-secure-file-priv string mysql path for loading secure files + --mycnf-server-id int mysql server id of the server (if specified, mycnf-file will be ignored) + --mycnf-slow-log-path string mysql slow query log path + --mycnf-socket-file string mysql socket file + --mycnf-tmp-dir string mysql tmp directory + --mysql-port int MySQL port (default 3306) + --mysql-server-version string MySQL server version to advertise. (default "8.0.40-Vitess") --mysql-shell-backup-location string location where the backup will be stored --mysql-shell-dump-flags string flags to pass to mysql shell dump utility. This should be a JSON string and will be saved in the MANIFEST (default "{\"threads\": 4}") --mysql-shell-flags string execution flags to pass to mysqlsh binary to be used during dump/load (default "--defaults-file=/dev/null --js -h localhost") @@ -189,71 +191,69 @@ Flags: --mysql-shell-should-drain decide if we should drain while taking a backup or continue to serving traffic --mysql-shell-speedup-restore speed up restore by disabling redo logging and double write buffer during the restore process --mysql-shutdown-timeout duration how long to wait for mysqld shutdown (default 5m0s) - --mysql_port int mysql port (default 3306) - --mysql_server_version string MySQL server version to advertise. (default "8.0.40-Vitess") - --mysql_socket string path to the mysql socket + --mysql-socket string Path to the mysqld socket file --mysql_timeout duration how long to wait for mysqld startup (default 5m0s) - --opentsdb_uri string URI of opentsdb /api/put method + --opentsdb-uri string URI of opentsdb /api/put method --port int port for the server --pprof strings enable profiling --pprof-http enable pprof http endpoints - --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) - --remote_operation_timeout duration time to wait for a remote operation (default 15s) + --purge-logs-interval duration how often try to remove old logs (default 1h0m0s) + --remote-operation-timeout duration time to wait for a remote operation (default 15s) --restart_before_backup Perform a mysqld clean/full restart after applying binlogs, but before taking the backup. Only makes sense to work around xtrabackup bugs. - --s3_backup_aws_endpoint string endpoint of the S3 backend (region must be provided). - --s3_backup_aws_min_partsize int Minimum part size to use, defaults to 5MiB but can be increased due to the dataset size. (default 5242880) - --s3_backup_aws_region string AWS region to use. (default "us-east-1") - --s3_backup_aws_retries int AWS request retries. (default -1) - --s3_backup_force_path_style force the s3 path style. - --s3_backup_log_level string determine the S3 loglevel to use from LogOff, LogDebug, LogDebugWithSigning, LogDebugWithHTTPBody, LogDebugWithRequestRetries, LogDebugWithRequestErrors. (default "LogOff") - --s3_backup_server_side_encryption string server-side encryption algorithm (e.g., AES256, aws:kms, sse_c:/path/to/key/file). - --s3_backup_storage_bucket string S3 bucket to use for backups. - --s3_backup_storage_root string root prefix for all backup-related object names. - --s3_backup_tls_skip_verify_cert skip the 'certificate is valid' check for SSL connections. - --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --s3-backup-aws-endpoint string endpoint of the S3 backend (region must be provided). + --s3-backup-aws-min-partsize int Minimum part size to use, defaults to 5MiB but can be increased due to the dataset size. (default 5242880) + --s3-backup-aws-region string AWS region to use. (default "us-east-1") + --s3-backup-aws-retries int AWS request retries. (default -1) + --s3-backup-force-path-style force the s3 path style. + --s3-backup-log-level string determine the S3 loglevel to use from LogOff, LogDebug, LogDebugWithSigning, LogDebugWithHTTPBody, LogDebugWithRequestRetries, LogDebugWithRequestErrors. (default "LogOff") + --s3-backup-server-side-encryption string server-side encryption algorithm (e.g., AES256, aws:kms, sse_c:/path/to/key/file). + --s3-backup-storage-bucket string S3 bucket to use for backups. + --s3-backup-storage-root string root prefix for all backup-related object names. + --s3-backup-tls-skip-verify-cert skip the 'certificate is valid' check for SSL connections. + --security-policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) --sql-max-length-errors int truncate queries in error logs to the given length (default unlimited) --sql-max-length-ui int truncate queries in debug UIs to the given length (default 512) (default 512) - --stats_backend string The name of the registered push-based monitoring/stats backend to use - --stats_combine_dimensions string List of dimensions to be combined into a single "all" value in exported stats vars - --stats_common_tags strings Comma-separated list of common tags for the stats backend. It provides both label and values. Example: label1:value1,label2:value2 - --stats_drop_variables string Variables to be dropped from the list of exported variables. - --stats_emit_period duration Interval between emitting stats to all registered backends (default 1m0s) + --stats-backend string The name of the registered push-based monitoring/stats backend to use + --stats-combine-dimensions string List of dimensions to be combined into a single "all" value in exported stats vars + --stats-common-tags strings Comma-separated list of common tags for the stats backend. It provides both label and values. Example: label1:value1,label2:value2 + --stats-drop-variables string Variables to be dropped from the list of exported variables. + --stats-emit-period duration Interval between emitting stats to all registered backends (default 1m0s) --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) - --tablet_manager_grpc_ca string the server ca to use to validate servers when connecting - --tablet_manager_grpc_cert string the cert to use to connect - --tablet_manager_grpc_concurrency int concurrency to use to talk to a vttablet server for performance-sensitive RPCs (like ExecuteFetchAs{Dba,App}, CheckThrottler and FullStatus) (default 8) - --tablet_manager_grpc_connpool_size int number of tablets to keep tmclient connections open to (default 100) - --tablet_manager_grpc_crl string the server crl to use to validate server certificates when connecting - --tablet_manager_grpc_key string the key to use to connect - --tablet_manager_grpc_server_name string the server name to use to validate server certificate - --tablet_manager_protocol string Protocol to use to make tabletmanager RPCs to vttablets. (default "grpc") - --topo_consul_lock_delay duration LockDelay for consul session. (default 15s) - --topo_consul_lock_session_checks string List of checks for consul session. (default "serfHealth") - --topo_consul_lock_session_ttl string TTL for consul session. - --topo_consul_watch_poll_duration duration time of the long poll for watch queries. (default 30s) - --topo_etcd_lease_ttl int Lease TTL for locks and leader election. The client will use KeepAlive to keep the lease going. (default 30) - --topo_etcd_tls_ca string path to the ca to use to validate the server cert when connecting to the etcd topo server - --topo_etcd_tls_cert string path to the client cert to use to connect to the etcd topo server, requires topo_etcd_tls_key, enables TLS - --topo_etcd_tls_key string path to the client key to use to connect to the etcd topo server, enables TLS - --topo_global_root string the path of the global topology data in the global topology server - --topo_global_server_address string the address of the global topology server - --topo_implementation string the topology implementation to use - --topo_read_concurrency int Maximum concurrency of topo reads per global or local cell. (default 32) - --topo_zk_auth_file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass - --topo_zk_base_timeout duration zk base timeout (see zk.Connect) (default 30s) - --topo_zk_max_concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64) - --topo_zk_tls_ca string the server ca to use to validate servers when connecting to the zk topo server - --topo_zk_tls_cert string the cert to use to connect to the zk topo server, requires topo_zk_tls_key, enables TLS - --topo_zk_tls_key string the key to use to connect to the zk topo server, enables TLS + --tablet-manager-grpc-ca string the server ca to use to validate servers when connecting + --tablet-manager-grpc-cert string the cert to use to connect + --tablet-manager-grpc-concurrency int concurrency to use to talk to a vttablet server for performance-sensitive RPCs (like ExecuteFetchAs{Dba,App}, CheckThrottler and FullStatus) (default 8) + --tablet-manager-grpc-connpool-size int number of tablets to keep tmclient connections open to (default 100) + --tablet-manager-grpc-crl string the server crl to use to validate server certificates when connecting + --tablet-manager-grpc-key string the key to use to connect + --tablet-manager-grpc-server-name string the server name to use to validate server certificate + --tablet-manager-protocol string Protocol to use to make tabletmanager RPCs to vttablets. (default "grpc") + --topo-consul-lock-delay duration LockDelay for consul session. (default 15s) + --topo-consul-lock-session-checks string List of checks for consul session. (default "serfHealth") + --topo-consul-lock-session-ttl string TTL for consul session. + --topo-consul-watch-poll-duration duration time of the long poll for watch queries. (default 30s) + --topo-etcd-lease-ttl int Lease TTL for locks and leader election. The client will use KeepAlive to keep the lease going. (default 30) + --topo-etcd-tls-ca string path to the ca to use to validate the server cert when connecting to the etcd topo server + --topo-etcd-tls-cert string path to the client cert to use to connect to the etcd topo server, requires topo-etcd-tls-key, enables TLS + --topo-etcd-tls-key string path to the client key to use to connect to the etcd topo server, enables TLS + --topo-global-root string the path of the global topology data in the global topology server + --topo-global-server-address string the address of the global topology server + --topo-implementation string the topology implementation to use + --topo-read-concurrency int Maximum concurrency of topo reads per global or local cell. (default 32) + --topo-zk-auth-file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass + --topo-zk-base-timeout duration zk base timeout (see zk.Connect) (default 30s) + --topo-zk-max-concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64) + --topo-zk-tls-ca string the server ca to use to validate servers when connecting to the zk topo server + --topo-zk-tls-cert string the cert to use to connect to the zk topo server, requires topo-zk-tls-key, enables TLS + --topo-zk-tls-key string the key to use to connect to the zk topo server, enables TLS --upgrade-safe Whether to use innodb_fast_shutdown=0 for the backup so it is safe to use for MySQL upgrades. --v Level log level for V logs -v, --version print binary version --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging - --xbstream_restore_flags string Flags to pass to xbstream command during restore. These should be space separated and will be added to the end of the command. These need to match the ones used for backup e.g. --compress / --decompress, --encrypt / --decrypt - --xtrabackup_backup_flags string Flags to pass to backup command. These should be space separated and will be added to the end of the command - --xtrabackup_prepare_flags string Flags to pass to prepare command. These should be space separated and will be added to the end of the command - --xtrabackup_root_path string Directory location of the xtrabackup and xbstream executables, e.g., /usr/bin - --xtrabackup_stream_mode string Which mode to use if streaming, valid values are tar and xbstream. Please note that tar is not supported in XtraBackup 8.0 (default "tar") - --xtrabackup_stripe_block_size uint Size in bytes of each block that gets sent to a given stripe before rotating to the next stripe (default 102400) - --xtrabackup_stripes uint If greater than 0, use data striping across this many destination files to parallelize data transfer and decompression - --xtrabackup_user string User that xtrabackup will use to connect to the database server. This user must have all necessary privileges. For details, please refer to xtrabackup documentation. + --xbstream-restore-flags string Flags to pass to xbstream command during restore. These should be space separated and will be added to the end of the command. These need to match the ones used for backup e.g. --compress / --decompress, --encrypt / --decrypt + --xtrabackup-backup-flags string Flags to pass to backup command. These should be space separated and will be added to the end of the command + --xtrabackup-prepare-flags string Flags to pass to prepare command. These should be space separated and will be added to the end of the command + --xtrabackup-root-path string Directory location of the xtrabackup and xbstream executables, e.g., /usr/bin + --xtrabackup-stream-mode string Which mode to use if streaming, valid values are tar and xbstream. Please note that tar is not supported in XtraBackup 8.0 (default "tar") + --xtrabackup-stripe-block-size uint Size in bytes of each block that gets sent to a given stripe before rotating to the next stripe (default 102400) + --xtrabackup-stripes uint If greater than 0, use data striping across this many destination files to parallelize data transfer and decompression + --xtrabackup-user string User that xtrabackup will use to connect to the database server. This user must have all necessary privileges. For details, please refer to xtrabackup documentation. diff --git a/go/flags/endtoend/vtbench.txt b/go/flags/endtoend/vtbench.txt index 7b0d72af429..ecaa3b1b00f 100644 --- a/go/flags/endtoend/vtbench.txt +++ b/go/flags/endtoend/vtbench.txt @@ -51,48 +51,49 @@ Flags: --count int Number of queries per thread (default 1000) --db string Database name to use when connecting / running the queries (e.g. @replica, keyspace, keyspace/shard etc) --deadline duration Maximum duration for the test run (default 5 minutes) (default 5m0s) - --grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. - --grpc_compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy - --grpc_enable_tracing Enable gRPC tracing. - --grpc_initial_conn_window_size int gRPC initial connection window size - --grpc_initial_window_size int gRPC initial window size - --grpc_keepalive_time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) - --grpc_keepalive_timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) - --grpc_max_message_size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) - --grpc_prometheus Enable gRPC monitoring with Prometheus. + --grpc-auth-static-client-creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. + --grpc-compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy + --grpc-dial-concurrency-limit int Maximum concurrency of grpc dial operations. This should be less than the golang max thread limit of 10000. (default 1024) + --grpc-enable-tracing Enable gRPC tracing. + --grpc-initial-conn-window-size int gRPC initial connection window size + --grpc-initial-window-size int gRPC initial window size + --grpc-keepalive-time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) + --grpc-keepalive-timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc-max-message-size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) + --grpc-prometheus Enable gRPC monitoring with Prometheus. -h, --help help for vtbench --host string VTGate host(s) in the form 'host1,host2,...' - --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) - --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --keep-logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep-logs-by-mtime duration keep logs for this long (using mtime) (zero to keep forever) --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace --log_dir string If non-empty, write log files in this directory - --log_err_stacks log stack traces for errors - --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --log-err-stacks log stack traces for errors + --log-rotate-max-size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --logtostderr log to standard error instead of files - --mysql_server_version string MySQL server version to advertise. (default "8.0.40-Vitess") + --mysql-server-version string MySQL server version to advertise. (default "8.0.40-Vitess") --port int VTGate port --pprof strings enable profiling --pprof-http enable pprof http endpoints --protocol string Client protocol, either mysql (default), grpc-vtgate, or grpc-vttablet (default "mysql") - --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) - --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --purge-logs-interval duration how often try to remove old logs (default 1h0m0s) + --security-policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) --sql string SQL statement to execute --sql-max-length-errors int truncate queries in error logs to the given length (default unlimited) --sql-max-length-ui int truncate queries in debug UIs to the given length (default 512) (default 512) --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) - --tablet_grpc_ca string the server ca to use to validate servers when connecting - --tablet_grpc_cert string the cert to use to connect - --tablet_grpc_crl string the server crl to use to validate server certificates when connecting - --tablet_grpc_key string the key to use to connect - --tablet_grpc_server_name string the server name to use to validate server certificate + --tablet-grpc-ca string the server ca to use to validate servers when connecting + --tablet-grpc-cert string the cert to use to connect + --tablet-grpc-crl string the server crl to use to validate server certificates when connecting + --tablet-grpc-key string the key to use to connect + --tablet-grpc-server-name string the server name to use to validate server certificate --threads int Number of parallel threads to run (default 2) --unix_socket string VTGate unix socket --user string Username to connect using mysql (password comes from the db-credentials-file) --v Level log level for V logs -v, --version print binary version --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging - --vtgate_grpc_ca string the server ca to use to validate servers when connecting - --vtgate_grpc_cert string the cert to use to connect - --vtgate_grpc_crl string the server crl to use to validate server certificates when connecting - --vtgate_grpc_key string the key to use to connect - --vtgate_grpc_server_name string the server name to use to validate server certificate + --vtgate-grpc-ca string the server ca to use to validate servers when connecting + --vtgate-grpc-cert string the cert to use to connect + --vtgate-grpc-crl string the server crl to use to validate server certificates when connecting + --vtgate-grpc-key string the key to use to connect + --vtgate-grpc-server-name string the server name to use to validate server certificate diff --git a/go/flags/endtoend/vtclient.txt b/go/flags/endtoend/vtclient.txt index 6c0a87d6551..5fb043362e7 100644 --- a/go/flags/endtoend/vtclient.txt +++ b/go/flags/endtoend/vtclient.txt @@ -21,33 +21,53 @@ Flags: --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) --config-type string Config file type (omit to infer config type from file extension). --count int DMLs only: Number of times each thread executes the query. Useful for simple, sustained load testing. (default 1) - --grpc_enable_tracing Enable gRPC tracing. - --grpc_max_message_size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) - --grpc_prometheus Enable gRPC monitoring with Prometheus. + --datadog-agent-host string host to send spans to. if empty, no tracing will be done + --datadog-agent-port string port to send spans to. if empty, no tracing will be done + --grpc-auth-static-client-creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. + --grpc-compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy + --grpc-dial-concurrency-limit int Maximum concurrency of grpc dial operations. This should be less than the golang max thread limit of 10000. (default 1024) + --grpc-enable-tracing Enable gRPC tracing. + --grpc-initial-conn-window-size int gRPC initial connection window size + --grpc-initial-window-size int gRPC initial window size + --grpc-keepalive-time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) + --grpc-keepalive-timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc-max-message-size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) + --grpc-prometheus Enable gRPC monitoring with Prometheus. -h, --help help for vtclient + --jaeger-agent-host string host and port to send spans to. if empty, no tracing will be done --json Output JSON instead of human-readable table - --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) - --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --keep-logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep-logs-by-mtime duration keep logs for this long (using mtime) (zero to keep forever) + --log-err-stacks log stack traces for errors + --log-rotate-max-size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace --log_dir string If non-empty, write log files in this directory - --log_err_stacks log stack traces for errors - --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --logtostderr log to standard error instead of files --max_sequence_id int max sequence ID. --min_sequence_id int min sequence ID to generate. When max_sequence_id > min_sequence_id, for each query, a number is generated in [min_sequence_id, max_sequence_id) and attached to the end of the bind variables. - --mysql_server_version string MySQL server version to advertise. (default "8.0.40-Vitess") + --mysql-server-version string MySQL server version to advertise. (default "8.0.40-Vitess") --parallel int DMLs only: Number of threads executing the same query in parallel. Useful for simple load testing. (default 1) --pprof strings enable profiling --pprof-http enable pprof http endpoints - --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --purge-logs-interval duration how often try to remove old logs (default 1h0m0s) --qps int queries per second to throttle each thread at. - --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --security-policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) --server string vtgate server to connect to --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) --streaming use a streaming query --target string keyspace:shard@tablet_type --timeout duration timeout for queries (default 30s) + --tracer string tracing service to use (default "noop") + --tracing-enable-logging whether to enable logging in the tracing service + --tracing-sampling-rate float sampling rate for the probabilistic jaeger sampler (default 0.1) + --tracing-sampling-type string sampling strategy to use for jaeger. possible values are 'const', 'probabilistic', 'rateLimiting', or 'remote' (default "const") --use_random_sequence use random sequence for generating [min_sequence_id, max_sequence_id) --v Level log level for V logs -v, --version print binary version --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging + --vtgate-grpc-ca string the server ca to use to validate servers when connecting + --vtgate-grpc-cert string the cert to use to connect + --vtgate-grpc-crl string the server crl to use to validate server certificates when connecting + --vtgate-grpc-key string the key to use to connect + --vtgate-grpc-server-name string the server name to use to validate server certificate + --vtgate_protocol string how to talk to vtgate (default "grpc") diff --git a/go/flags/endtoend/vtcombo.txt b/go/flags/endtoend/vtcombo.txt index 9bb706b42b7..2bbfa69e0dc 100644 --- a/go/flags/endtoend/vtcombo.txt +++ b/go/flags/endtoend/vtcombo.txt @@ -12,28 +12,28 @@ Usage: Flags: --action_timeout duration time to wait for an action before resorting to force (default 1m0s) --allow-kill-statement Allows the execution of kill statement - --allowed_tablet_types strings Specifies the tablet types this vtgate is allowed to route queries to. Should be provided as a comma-separated set of tablet types. + --allowed-tablet-types strings Specifies the tablet types this vtgate is allowed to route queries to. Should be provided as a comma-separated set of tablet types. --alsologtostderr log to standard error as well as files - --app_idle_timeout duration Idle timeout for app connections (default 1m0s) - --app_pool_size int Size of the connection pool for app connections (default 40) - --backup_engine_implementation string Specifies which implementation to use for creating new backups (builtin or xtrabackup). Restores will always be done with whichever engine created a given backup. (default "builtin") - --backup_storage_block_size int if backup_storage_compress is true, backup_storage_block_size sets the byte size for each block while compressing (default is 250000). (default 250000) - --backup_storage_compress if set, the backup files will be compressed. (default true) - --backup_storage_number_blocks int if backup_storage_compress is true, backup_storage_number_blocks sets the number of blocks that can be processed, in parallel, before the writer blocks, during compression (default is 2). It should be equal to the number of CPUs available for compression. (default 2) + --app-idle-timeout duration Idle timeout for app connections (default 1m0s) + --app-pool-size int Size of the connection pool for app connections (default 40) + --backup-engine-implementation string Specifies which implementation to use for creating new backups (builtin or xtrabackup). Restores will always be done with whichever engine created a given backup. (default "builtin") + --backup-storage-block-size int if backup-storage-compress is true, backup-storage-block-size sets the byte size for each block while compressing (default is 250000). (default 250000) + --backup-storage-compress if set, the backup files will be compressed. (default true) + --backup-storage-number-blocks int if backup-storage-compress is true, backup-storage-number-blocks sets the number of blocks that can be processed, in parallel, before the writer blocks, during compression (default is 2). It should be equal to the number of CPUs available for compression. (default 2) --bind-address string Bind address for the server. If empty, the server will listen on all available unicast and anycast IP addresses of the local system. --binlog-in-memory-decompressor-max-size uint This value sets the uncompressed transaction payload size at which we switch from in-memory buffer based decompression to the slower streaming mode. (default 134217728) - --binlog_player_protocol string the protocol to download binlogs from a vttablet (default "grpc") - --buffer_drain_concurrency int Maximum number of requests retried simultaneously. More concurrency will increase the load on the PRIMARY vttablet when draining the buffer. (default 1) - --buffer_keyspace_shards string If not empty, limit buffering to these entries (comma separated). Entry format: keyspace or keyspace/shard. Requires --enable_buffer=true. - --buffer_max_failover_duration duration Stop buffering completely if a failover takes longer than this duration. (default 20s) - --buffer_min_time_between_failovers duration Minimum time between the end of a failover and the start of the next one (tracked per shard). Faster consecutive failovers will not trigger buffering. (default 1m0s) - --buffer_size int Maximum number of buffered requests in flight (across all ongoing failovers). (default 1000) - --buffer_window duration Duration for how long a request should be buffered at most. (default 10s) + --binlog-player-protocol string the protocol to download binlogs from a vttablet (default "grpc") + --buffer-drain-concurrency int Maximum number of requests retried simultaneously. More concurrency will increase the load on the PRIMARY vttablet when draining the buffer. (default 1) + --buffer-keyspace-shards string If not empty, limit buffering to these entries (comma separated). Entry format: keyspace or keyspace/shard. Requires --enable_buffer=true. + --buffer-max-failover-duration duration Stop buffering completely if a failover takes longer than this duration. (default 20s) + --buffer-min-time-between-failovers duration Minimum time between the end of a failover and the start of the next one (tracked per shard). Faster consecutive failovers will not trigger buffering. (default 1m0s) + --buffer-size int Maximum number of buffered requests in flight (across all ongoing failovers). (default 1000) + --buffer-window duration Duration for how long a request should be buffered at most. (default 10s) --builtinbackup-file-read-buffer-size uint read files using an IO buffer of this many bytes. Golang defaults are used when set to 0. --builtinbackup-file-write-buffer-size uint write files using an IO buffer of this many bytes. Golang defaults are used when set to 0. (default 2097152) --builtinbackup-incremental-restore-path string the directory where incremental restore files, namely binlog files, are extracted to. In k8s environments, this should be set to a directory that is shared between the vttablet and mysqld pods. The path should exist. When empty, the default OS temp dir is assumed. - --builtinbackup_mysqld_timeout duration how long to wait for mysqld to shutdown at the start of the backup. (default 10m0s) - --builtinbackup_progress duration how often to send progress updates when backing up large files. (default 5s) + --builtinbackup-mysqld-timeout duration how long to wait for mysqld to shutdown at the start of the backup. (default 10m0s) + --builtinbackup-progress duration how often to send progress updates when backing up large files. (default 5s) --catch-sigpipe catch and ignore SIGPIPE on stdout and stderr if specified --cell string cell to use --compression-engine-name string compressor engine used for compression. (default "pargzip") @@ -47,9 +47,21 @@ Flags: --consolidator-query-waiter-cap int Configure the maximum number of clients allowed to wait on the consolidator. --consolidator-stream-query-size int Configure the stream consolidator query size in bytes. Setting to 0 disables the stream consolidator. (default 2097152) --consolidator-stream-total-size int Configure the stream consolidator total size in bytes. Setting to 0 disables the stream consolidator. (default 134217728) - --consul_auth_static_file string JSON File to read the topos/tokens from. + --consul-auth-static-file string JSON File to read the topos/tokens from. --datadog-agent-host string host to send spans to. if empty, no tracing will be done --datadog-agent-port string port to send spans to. if empty, no tracing will be done + --db-allprivs-password string db allprivs password + --db-allprivs-use-ssl Set this flag to false to make the allprivs connection to not use ssl (default true) + --db-allprivs-user string db allprivs user userKey (default "vt_allprivs") + --db-app-password string db app password + --db-app-use-ssl Set this flag to false to make the app connection to not use ssl (default true) + --db-app-user string db app user userKey (default "vt_app") + --db-appdebug-password string db appdebug password + --db-appdebug-use-ssl Set this flag to false to make the appdebug connection to not use ssl (default true) + --db-appdebug-user string db appdebug user userKey (default "vt_appdebug") + --db-charset string Character set/collation used for this tablet. Make sure to configure this to a charset/collation supported by the lowest MySQL version in your environment. (default "utf8mb4") + --db-conn-query-info enable parsing and processing of QUERY_OK info fields + --db-connect-timeout-ms int connection timeout to mysqld in milliseconds (0 for no timeout) --db-credentials-file string db credentials file; send SIGHUP to reload this file --db-credentials-server string db credentials server type ('file' - file implementation; 'vault' - HashiCorp Vault implementation) (default "file") --db-credentials-vault-addr string URL to Vault server @@ -61,165 +73,170 @@ Flags: --db-credentials-vault-tls-ca string Path to CA PEM for validating Vault server certificate --db-credentials-vault-tokenfile string Path to file containing Vault auth token; token can also be passed using VAULT_TOKEN environment variable --db-credentials-vault-ttl duration How long to cache DB credentials from the Vault server (default 30m0s) - --db_allprivs_password string db allprivs password - --db_allprivs_use_ssl Set this flag to false to make the allprivs connection to not use ssl (default true) - --db_allprivs_user string db allprivs user userKey (default "vt_allprivs") - --db_app_password string db app password - --db_app_use_ssl Set this flag to false to make the app connection to not use ssl (default true) - --db_app_user string db app user userKey (default "vt_app") - --db_appdebug_password string db appdebug password - --db_appdebug_use_ssl Set this flag to false to make the appdebug connection to not use ssl (default true) - --db_appdebug_user string db appdebug user userKey (default "vt_appdebug") - --db_charset string Character set/collation used for this tablet. Make sure to configure this to a charset/collation supported by the lowest MySQL version in your environment. (default "utf8mb4") - --db_conn_query_info enable parsing and processing of QUERY_OK info fields - --db_connect_timeout_ms int connection timeout to mysqld in milliseconds (0 for no timeout) - --db_dba_password string db dba password - --db_dba_use_ssl Set this flag to false to make the dba connection to not use ssl (default true) - --db_dba_user string db dba user userKey (default "vt_dba") - --db_erepl_password string db erepl password - --db_erepl_use_ssl Set this flag to false to make the erepl connection to not use ssl (default true) - --db_erepl_user string db erepl user userKey (default "vt_erepl") - --db_filtered_password string db filtered password - --db_filtered_use_ssl Set this flag to false to make the filtered connection to not use ssl (default true) - --db_filtered_user string db filtered user userKey (default "vt_filtered") - --db_flags uint Flag values as defined by MySQL. - --db_flavor string Flavor overrid. Valid value is FilePos. - --db_host string The host name for the tcp connection. - --db_port int tcp port - --db_repl_password string db repl password - --db_repl_use_ssl Set this flag to false to make the repl connection to not use ssl (default true) - --db_repl_user string db repl user userKey (default "vt_repl") - --db_server_name string server name of the DB we are connecting to. - --db_socket string The unix socket to connect on. If this is specified, host and port will not be used. - --db_ssl_ca string connection ssl ca - --db_ssl_ca_path string connection ssl ca path - --db_ssl_cert string connection ssl certificate - --db_ssl_key string connection ssl key - --db_ssl_mode SslMode SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity. - --db_tls_min_version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. - --dba_idle_timeout duration Idle timeout for dba connections (default 1m0s) - --dba_pool_size int Size of the connection pool for dba connections (default 20) - --dbddl_plugin string controls how to handle CREATE/DROP DATABASE. use it if you are using your own database provisioning service (default "fail") - --ddl_strategy string Set default strategy for DDL statements. Override with @@ddl_strategy session variable (default "direct") + --db-dba-password string db dba password + --db-dba-use-ssl Set this flag to false to make the dba connection to not use ssl (default true) + --db-dba-user string db dba user userKey (default "vt_dba") + --db-erepl-password string db erepl password + --db-erepl-use-ssl Set this flag to false to make the erepl connection to not use ssl (default true) + --db-erepl-user string db erepl user userKey (default "vt_erepl") + --db-filtered-password string db filtered password + --db-filtered-use-ssl Set this flag to false to make the filtered connection to not use ssl (default true) + --db-filtered-user string db filtered user userKey (default "vt_filtered") + --db-flags uint Flag values as defined by MySQL. + --db-flavor string Flavor overrid. Valid value is FilePos. + --db-host string The host name for the tcp connection. + --db-port int tcp port + --db-repl-password string db repl password + --db-repl-use-ssl Set this flag to false to make the repl connection to not use ssl (default true) + --db-repl-user string db repl user userKey (default "vt_repl") + --db-server-name string server name of the DB we are connecting to. + --db-socket string The unix socket to connect on. If this is specified, host and port will not be used. + --db-ssl-ca string connection ssl ca + --db-ssl-ca-path string connection ssl ca path + --db-ssl-cert string connection ssl certificate + --db-ssl-key string connection ssl key + --db-ssl-mode SslMode SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity. + --db-tls-min-version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. + --dba-idle-timeout duration Idle timeout for dba connections (default 1m0s) + --dba-pool-size int Size of the connection pool for dba connections (default 20) + --dbddl-plugin string controls how to handle CREATE/DROP DATABASE. use it if you are using your own database provisioning service (default "fail") + --ddl-strategy string Set default strategy for DDL statements. Override with @@ddl_strategy session variable (default "direct") --default_tablet_type topodatapb.TabletType The default tablet type to set for queries, when one is not explicitly selected. (default PRIMARY) - --degraded_threshold duration replication lag after which a replica is considered degraded (default 30s) + --degraded-threshold duration replication lag after which a replica is considered degraded (default 30s) --disk-write-dir string if provided, tablet will attempt to write a file to this directory to check if the disk is stalled --disk-write-interval duration how often to write to the disk to check whether it is stalled (default 5s) --disk-write-timeout duration if writes exceed this duration, the disk is considered stalled (default 30s) - --emit_stats If set, emit stats to push-based monitoring and stats backends - --enable-consolidator Synonym to -enable_consolidator (default true) - --enable-consolidator-replicas Synonym to -enable_consolidator_replicas + --emit-stats If set, emit stats to push-based monitoring and stats backends + --enable-buffer-dry-run Detect and log failover events, but do not actually buffer requests. + --enable-consolidator This option enables the query consolidator. (default true) + --enable-consolidator-replicas This option enables the query consolidator only on replicas. + --enable-hot-row-protection If true, incoming transactions for the same row (range) will be queued and cannot consume all txpool slots. + --enable-hot-row-protection-dry-run If true, hot row protection is not enforced but logs if transactions would have been queued. --enable-partial-keyspace-migration (Experimental) Follow shard routing rules: enable only while migrating a keyspace shard by shard. See documentation on Partial MoveTables for more. (default false) --enable-per-workload-table-metrics If true, query counts and query error metrics include a label that identifies the workload - --enable-tx-throttler Synonym to -enable_tx_throttler + --enable-replication-reporter Use polling to track replication lag. + --enable-set-var This will enable the use of MySQL's SET_VAR query hint for certain system variables instead of using reserved connections (default true) + --enable-transaction-limit If true, limit on number of transactions open at the same time will be enforced for all users. User trying to open a new transaction after exhausting their limit will receive an error immediately, regardless of whether there are available slots or not. + --enable-transaction-limit-dry-run If true, limit on number of transactions open at the same time will be tracked for all users, but not enforced. + --enable-tx-throttler If true replication-lag-based throttling on transactions will be enabled. --enable-views Enable views support in vtgate. (default true) --enable_buffer Enable buffering (stalling) of primary traffic during failovers. - --enable_buffer_dry_run Detect and log failover events, but do not actually buffer requests. - --enable_consolidator This option enables the query consolidator. (default true) - --enable_consolidator_replicas This option enables the query consolidator only on replicas. --enable_direct_ddl Allow users to submit direct DDL statements (default true) - --enable_hot_row_protection If true, incoming transactions for the same row (range) will be queued and cannot consume all txpool slots. - --enable_hot_row_protection_dry_run If true, hot row protection is not enforced but logs if transactions would have been queued. --enable_online_ddl Allow users to submit, review and control Online DDL (default true) - --enable_replication_reporter Use polling to track replication lag. - --enable_set_var This will enable the use of MySQL's SET_VAR query hint for certain system variables instead of using reserved connections (default true) --enable_system_settings This will enable the system settings to be changed per session at the database connection level (default true) - --enable_transaction_limit If true, limit on number of transactions open at the same time will be enforced for all users. User trying to open a new transaction after exhausting their limit will receive an error immediately, regardless of whether there are available slots or not. - --enable_transaction_limit_dry_run If true, limit on number of transactions open at the same time will be tracked for all users, but not enforced. - --enable_tx_throttler If true replication-lag-based throttling on transactions will be enabled. - --enforce_strict_trans_tables If true, vttablet requires MySQL to run with STRICT_TRANS_TABLES or STRICT_ALL_TABLES on. It is recommended to not turn this flag off. Otherwise MySQL may alter your supplied values before saving them to the database. (default true) + --enforce-strict-trans-tables If true, vttablet requires MySQL to run with STRICT_TRANS_TABLES or STRICT_ALL_TABLES on. It is recommended to not turn this flag off. Otherwise MySQL may alter your supplied values before saving them to the database. (default true) --external-compressor string command with arguments to use when compressing a backup. --external-compressor-extension string extension to use when using an external compressor. --external-decompressor string command with arguments to use when decompressing a backup. - --external_topo_server Should vtcombo use an external topology server instead of starting its own in-memory topology server. If true, vtcombo will use the flags defined in topo/server.go to open topo server - --foreign_key_mode string This is to provide how to handle foreign key constraint in create/alter table. Valid values are: allow, disallow (default "allow") - --gate_query_cache_memory int gate server query cache size in bytes, maximum amount of memory to be cached. vtgate analyzes every incoming query and generate a query plan, these plans are being cached in a lru cache. This config controls the capacity of the lru cache. (default 33554432) - --gc_check_interval duration Interval between garbage collection checks (default 1h0m0s) - --gc_purge_check_interval duration Interval between purge discovery checks (default 1m0s) + --external-topo-server Should vtcombo use an external topology server instead of starting its own in-memory topology server. If true, vtcombo will use the flags defined in topo/server.go to open topo server + --foreign-key-mode string This is to provide how to handle foreign key constraint in create/alter table. Valid values are: allow, disallow (default "allow") + --gate-query-cache-memory int gate server query cache size in bytes, maximum amount of memory to be cached. vtgate analyzes every incoming query and generate a query plan, these plans are being cached in a lru cache. This config controls the capacity of the lru cache. (default 33554432) + --gc-check-interval duration Interval between garbage collection checks (default 1h0m0s) + --gc-purge-check-interval duration Interval between purge discovery checks (default 1m0s) + --grpc-auth-mode string Which auth plugin implementation to use (eg: static) + --grpc-auth-mtls-allowed-substrings string List of substrings of at least one of the client certificate names (separated by colon). + --grpc-auth-static-password-file string JSON File to read the users/passwords from. + --grpc-bind-address string Bind address for gRPC calls. If empty, listen on all addresses. + --grpc-ca string server CA to use for gRPC connections, requires TLS, and enforces client certificate check + --grpc-cert string server certificate to use for gRPC connections, requires grpc-key, enables TLS + --grpc-crl string path to a certificate revocation list in PEM format, client certificates will be further verified against this file during TLS handshake + --grpc-enable-optional-tls enable optional TLS mode when a server accepts both TLS and plain-text connections on the same port + --grpc-enable-tracing Enable gRPC tracing. + --grpc-key string server private key to use for gRPC connections, requires grpc-cert, enables TLS + --grpc-max-connection-age duration Maximum age of a client connection before GoAway is sent. (default 2562047h47m16.854775807s) + --grpc-max-connection-age-grace duration Additional grace period after grpc-max-connection-age, after which connections are forcibly closed. (default 2562047h47m16.854775807s) + --grpc-max-message-size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) + --grpc-port int Port to listen on for gRPC calls. If zero, do not listen. + --grpc-prometheus Enable gRPC monitoring with Prometheus. + --grpc-server-ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients + --grpc-server-initial-conn-window-size int gRPC server initial connection window size + --grpc-server-initial-window-size int gRPC server initial window size + --grpc-server-keepalive-enforcement-policy-min-time duration gRPC server minimum keepalive time (default 10s) + --grpc-server-keepalive-enforcement-policy-permit-without-stream gRPC server permit client keepalive pings even when there are no active streams (RPCs) + --grpc-server-keepalive-time duration After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive. (default 10s) + --grpc-server-keepalive-timeout duration After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc-use-effective-callerid If set, and SSL is not used, will set the immediate caller id from the effective caller id's principal. --grpc-use-effective-groups If set, and SSL is not used, will set the immediate caller's security groups from the effective caller id's groups. --grpc-use-static-authentication-callerid If set, will set the immediate caller id to the username authenticated by the static auth plugin. - --grpc_auth_mode string Which auth plugin implementation to use (eg: static) - --grpc_auth_mtls_allowed_substrings string List of substrings of at least one of the client certificate names (separated by colon). - --grpc_auth_static_password_file string JSON File to read the users/passwords from. - --grpc_bind_address string Bind address for gRPC calls. If empty, listen on all addresses. - --grpc_ca string server CA to use for gRPC connections, requires TLS, and enforces client certificate check - --grpc_cert string server certificate to use for gRPC connections, requires grpc_key, enables TLS - --grpc_crl string path to a certificate revocation list in PEM format, client certificates will be further verified against this file during TLS handshake - --grpc_enable_optional_tls enable optional TLS mode when a server accepts both TLS and plain-text connections on the same port - --grpc_enable_tracing Enable gRPC tracing. - --grpc_key string server private key to use for gRPC connections, requires grpc_cert, enables TLS - --grpc_max_connection_age duration Maximum age of a client connection before GoAway is sent. (default 2562047h47m16.854775807s) - --grpc_max_connection_age_grace duration Additional grace period after grpc_max_connection_age, after which connections are forcibly closed. (default 2562047h47m16.854775807s) - --grpc_max_message_size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) - --grpc_port int Port to listen on for gRPC calls. If zero, do not listen. - --grpc_prometheus Enable gRPC monitoring with Prometheus. - --grpc_server_ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients - --grpc_server_initial_conn_window_size int gRPC server initial connection window size - --grpc_server_initial_window_size int gRPC server initial window size - --grpc_server_keepalive_enforcement_policy_min_time duration gRPC server minimum keepalive time (default 10s) - --grpc_server_keepalive_enforcement_policy_permit_without_stream gRPC server permit client keepalive pings even when there are no active streams (RPCs) - --grpc_server_keepalive_time duration After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive. (default 10s) - --grpc_server_keepalive_timeout duration After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) - --grpc_use_effective_callerid If set, and SSL is not used, will set the immediate caller id from the effective caller id's principal. - --health_check_interval duration Interval between health checks (default 20s) - --healthcheck_retry_delay duration health check retry delay (default 2ms) - --healthcheck_timeout duration the health check timeout period (default 1m0s) - --heartbeat_enable If true, vttablet records (if master) or checks (if replica) the current time of a replication heartbeat in the sidecar database's heartbeat table. The result is used to inform the serving state of the vttablet via healthchecks. - --heartbeat_interval duration How frequently to read and write replication heartbeat. (default 1s) - --heartbeat_on_demand_duration duration If non-zero, heartbeats are only written upon consumer request, and only run for up to given duration following the request. Frequent requests can keep the heartbeat running consistently; when requests are infrequent heartbeat may completely stop between requests + --health-check-interval duration Interval between health checks (default 20s) + --healthcheck-retry-delay duration health check retry delay (default 2ms) + --healthcheck-timeout duration the health check timeout period (default 1m0s) + --heartbeat-enable If true, vttablet records (if master) or checks (if replica) the current time of a replication heartbeat in the sidecar database's heartbeat table. The result is used to inform the serving state of the vttablet via healthchecks. + --heartbeat-interval duration How frequently to read and write replication heartbeat. (default 1s) + --heartbeat-on-demand-duration duration If non-zero, heartbeats are only written upon consumer request, and only run for up to given duration following the request. Frequent requests can keep the heartbeat running consistently; when requests are infrequent heartbeat may completely stop between requests -h, --help help for vtcombo - --hot_row_protection_concurrent_transactions int Number of concurrent transactions let through to the txpool/MySQL for the same hot row. Should be > 1 to have enough 'ready' transactions in MySQL and benefit from a pipelining effect. (default 5) - --hot_row_protection_max_global_queue_size int Global queue limit across all row (ranges). Useful to prevent that the queue can grow unbounded. (default 1000) - --hot_row_protection_max_queue_size int Maximum number of BeginExecute RPCs which will be queued for the same row (range). (default 20) - --init_db_name_override string (init parameter) override the name of the db used by vttablet. Without this flag, the db name defaults to vt_ - --init_keyspace string (init parameter) keyspace to use for this tablet - --init_shard string (init parameter) shard to use for this tablet - --init_tablet_type string (init parameter) the tablet type to use for this tablet. - --init_tags StringMap (init parameter) comma separated list of key:value pairs used to tag the tablet - --init_timeout duration (init parameter) timeout to use for the init phase. (default 1m0s) + --hot-row-protection-concurrent-transactions int Number of concurrent transactions let through to the txpool/MySQL for the same hot row. Should be > 1 to have enough 'ready' transactions in MySQL and benefit from a pipelining effect. (default 5) + --hot-row-protection-max-global-queue-size int Global queue limit across all row (ranges). Useful to prevent that the queue can grow unbounded. (default 1000) + --hot-row-protection-max-queue-size int Maximum number of BeginExecute RPCs which will be queued for the same row (range). (default 20) + --init-db-name-override string (init parameter) override the name of the db used by vttablet. Without this flag, the db name defaults to vt_ + --init-keyspace string (init parameter) keyspace to use for this tablet + --init-shard string (init parameter) shard to use for this tablet + --init-tablet-type string (init parameter) tablet type to use for this tablet. Valid values are: PRIMARY, REPLICA, SPARE, and RDONLY. The default is REPLICA. + --init-tags StringMap (init parameter) comma separated list of key:value pairs used to tag the tablet + --init-timeout duration (init parameter) timeout to use for the init phase. (default 1m0s) --jaeger-agent-host string host and port to send spans to. if empty, no tracing will be done - --json_topo vttest.TopoData vttest proto definition of the topology, encoded in json format. See vttest.proto for more information. - --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) - --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) - --keyspaces_to_watch strings Specifies which keyspaces this vtgate should have access to while routing queries or accessing the vschema. + --json-topo vttest.TopoData vttest proto definition of the topology, encoded in json format. See vttest.proto for more information. + --keep-logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep-logs-by-mtime duration keep logs for this long (using mtime) (zero to keep forever) + --keyspaces-to-watch strings Specifies which keyspaces this vtgate should have access to while routing queries or accessing the vschema. --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) + --lock-heartbeat-time duration If there is lock function used. This will keep the lock connection active by using this heartbeat (default 5s) + --lock-tables-timeout duration How long to keep the table locked before timing out (default 1m0s) --lock-timeout duration Maximum time to wait when attempting to acquire a lock from the topo server (default 45s) - --lock_heartbeat_time duration If there is lock function used. This will keep the lock connection active by using this heartbeat (default 5s) - --lock_tables_timeout duration How long to keep the table locked before timing out (default 1m0s) + --log-err-stacks log stack traces for errors + --log-queries-to-file string Enable query logging to the specified file + --log-rotate-max-size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace --log_dir string If non-empty, write log files in this directory - --log_err_stacks log stack traces for errors - --log_queries_to_file string Enable query logging to the specified file - --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --logtostderr log to standard error instead of files --manifest-external-decompressor string command with arguments to store in the backup manifest when compressing a backup with an external compression engine. + --max-concurrent-online-ddl int Maximum number of online DDL changes that may run concurrently (default 256) + --max-memory-rows int Maximum number of rows that will be held in memory for intermediate results as well as the final result. (default 300000) + --max-payload-size int The threshold for query payloads in bytes. A payload greater than this threshold will result in a failure to handle the query. --max-stack-size int configure the maximum stack size in bytes (default 67108864) - --max_concurrent_online_ddl int Maximum number of online DDL changes that may run concurrently (default 256) - --max_memory_rows int Maximum number of rows that will be held in memory for intermediate results as well as the final result. (default 300000) - --max_payload_size int The threshold for query payloads in bytes. A payload greater than this threshold will result in a failure to handle the query. - --message_stream_grace_period duration the amount of time to give for a vttablet to resume if it ends a message stream, usually because of a reparent. (default 30s) - --migration_check_interval duration Interval between migration checks (default 1m0s) + --message-stream-grace-period duration the amount of time to give for a vttablet to resume if it ends a message stream, usually because of a reparent. (default 30s) + --migration-check-interval duration Interval between migration checks (default 1m0s) + --mycnf-bin-log-path string mysql binlog path + --mycnf-data-dir string data directory for mysql + --mycnf-error-log-path string mysql error log path --mycnf-file string path to my.cnf, if reading all config params from there - --mycnf_bin_log_path string mysql binlog path - --mycnf_data_dir string data directory for mysql - --mycnf_error_log_path string mysql error log path - --mycnf_general_log_path string mysql general log path - --mycnf_innodb_data_home_dir string Innodb data home directory - --mycnf_innodb_log_group_home_dir string Innodb log group home directory - --mycnf_master_info_file string mysql master.info file - --mycnf_mysql_port int port mysql is listening on - --mycnf_pid_file string mysql pid file - --mycnf_relay_log_index_path string mysql relay log index path - --mycnf_relay_log_info_path string mysql relay log info path - --mycnf_relay_log_path string mysql relay log path - --mycnf_secure_file_priv string mysql path for loading secure files - --mycnf_server_id int mysql server id of the server (if specified, mycnf-file will be ignored) - --mycnf_slow_log_path string mysql slow query log path - --mycnf_socket_file string mysql socket file - --mycnf_tmp_dir string mysql tmp directory - --mysql-server-drain-onterm If set, the server waits for --onterm_timeout for already connected clients to complete their in flight work + --mycnf-general-log-path string mysql general log path + --mycnf-innodb-data-home-dir string Innodb data home directory + --mycnf-innodb-log-group-home-dir string Innodb log group home directory + --mycnf-master-info-file string mysql master.info file + --mycnf-mysql-port int port mysql is listening on + --mycnf-pid-file string mysql pid file + --mycnf-relay-log-index-path string mysql relay log index path + --mycnf-relay-log-info-path string mysql relay log info path + --mycnf-relay-log-path string mysql relay log path + --mycnf-secure-file-priv string mysql path for loading secure files + --mycnf-server-id int mysql server id of the server (if specified, mycnf-file will be ignored) + --mycnf-slow-log-path string mysql slow query log path + --mycnf-socket-file string mysql socket file + --mycnf-tmp-dir string mysql tmp directory + --mysql-allow-clear-text-without-tls If set, the server will allow the use of a clear text password over non-SSL connections. + --mysql-auth-server-impl string Which auth server implementation to use. Options: none, ldap, clientcert, static, vault. (default "static") + --mysql-default-workload string Default session workload (OLTP, OLAP, DBA) (default "OLTP") + --mysql-port int mysql port (default 3306) + --mysql-server-bind-address string Binds on this address when listening to MySQL binary protocol. Useful to restrict listening to 'localhost' only for instance. + --mysql-server-drain-onterm If set, the server waits for --onterm-timeout for already connected clients to complete their in flight work + --mysql-server-flush-delay duration Delay after which buffered response will be flushed to the client. (default 100ms) --mysql-server-keepalive-period duration TCP period between keep-alives + --mysql-server-multi-query-protocol If set, the server will use the new implementation of handling queries where-in multiple queries are sent together. --mysql-server-pool-conn-read-buffers If set, the server will pool incoming connection read buffers + --mysql-server-port int If set, also listen for MySQL binary protocol connections on this port. (default -1) + --mysql-server-query-timeout duration mysql query timeout + --mysql-server-read-timeout duration connection read timeout + --mysql-server-require-secure-transport Reject insecure connections but only if mysql-server-ssl-cert and mysql-server-ssl-key are provided + --mysql-server-socket-path string This option specifies the Unix socket file to use when listening for local connections. By default it will be empty and it won't listen to a unix socket + --mysql-server-ssl-ca string Path to ssl CA for mysql server plugin SSL. If specified, server will require and validate client certs. + --mysql-server-ssl-cert string Path to the ssl cert for mysql server plugin SSL + --mysql-server-ssl-crl string Path to ssl CRL for mysql server plugin SSL + --mysql-server-ssl-key string Path to ssl key for mysql server plugin SSL + --mysql-server-ssl-server-ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients + --mysql-server-tls-min-version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. + --mysql-server-version string MySQL server version to advertise. (default "8.0.40-Vitess") + --mysql-server-write-timeout duration connection write timeout --mysql-shell-backup-location string location where the backup will be stored --mysql-shell-dump-flags string flags to pass to mysql shell dump utility. This should be a JSON string and will be saved in the MANIFEST (default "{\"threads\": 4}") --mysql-shell-flags string execution flags to pass to mysqlsh binary to be used during dump/load (default "--defaults-file=/dev/null --js -h localhost") @@ -227,44 +244,25 @@ Flags: --mysql-shell-should-drain decide if we should drain while taking a backup or continue to serving traffic --mysql-shell-speedup-restore speed up restore by disabling redo logging and double write buffer during the restore process --mysql-shutdown-timeout duration Timeout to use when MySQL is being shut down. (default 5m0s) - --mysql_allow_clear_text_without_tls If set, the server will allow the use of a clear text password over non-SSL connections. - --mysql_auth_server_impl string Which auth server implementation to use. Options: none, ldap, clientcert, static, vault. (default "static") - --mysql_default_workload string Default session workload (OLTP, OLAP, DBA) (default "OLTP") - --mysql_port int mysql port (default 3306) - --mysql_server_bind_address string Binds on this address when listening to MySQL binary protocol. Useful to restrict listening to 'localhost' only for instance. - --mysql_server_flush_delay duration Delay after which buffered response will be flushed to the client. (default 100ms) - --mysql_server_port int If set, also listen for MySQL binary protocol connections on this port. (default -1) - --mysql_server_query_timeout duration mysql query timeout - --mysql_server_read_timeout duration connection read timeout - --mysql_server_require_secure_transport Reject insecure connections but only if mysql_server_ssl_cert and mysql_server_ssl_key are provided - --mysql_server_socket_path string This option specifies the Unix socket file to use when listening for local connections. By default it will be empty and it won't listen to a unix socket - --mysql_server_ssl_ca string Path to ssl CA for mysql server plugin SSL. If specified, server will require and validate client certs. - --mysql_server_ssl_cert string Path to the ssl cert for mysql server plugin SSL - --mysql_server_ssl_crl string Path to ssl CRL for mysql server plugin SSL - --mysql_server_ssl_key string Path to ssl key for mysql server plugin SSL - --mysql_server_ssl_server_ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients - --mysql_server_tls_min_version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. - --mysql_server_version string MySQL server version to advertise. (default "8.0.40-Vitess") - --mysql_server_write_timeout duration connection write timeout - --mysql_slow_connect_warn_threshold duration Warn if it takes more than the given threshold for a mysql connection to establish - --mysql_tcp_version string Select tcp, tcp4, or tcp6 to control the socket type. (default "tcp") - --mysqlctl_mycnf_template string template file to use for generating the my.cnf file during server init - --mysqlctl_socket string socket file to use for remote mysqlctl actions (empty for local actions) - --no_scatter when set to true, the planner will fail instead of producing a plan that includes scatter queries - --normalize_queries Rewrite queries with bind vars. Turn this off if the app itself sends normalized queries with bind vars. (default true) - --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) - --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) - --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --mysql-slow-connect-warn-threshold duration Warn if it takes more than the given threshold for a mysql connection to establish + --mysql-tcp-version string Select tcp, tcp4, or tcp6 to control the socket type. (default "tcp") + --mysqlctl-mycnf-template string template file to use for generating the my.cnf file during server init + --mysqlctl-socket string socket file to use for remote mysqlctl actions (empty for local actions) + --no-scatter when set to true, the planner will fail instead of producing a plan that includes scatter queries + --normalize-queries Rewrite queries with bind vars. Turn this off if the app itself sends normalized queries with bind vars. (default true) + --onclose-timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm-timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) + --pid-file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. --planner-version string Sets the default planner to use when the session has not changed it. Valid values are: Gen4, Gen4Greedy, Gen4Left2Right - --pool_hostname_resolve_interval duration if set force an update to all hostnames and reconnect if changed, defaults to 0 (disabled) + --pool-hostname-resolve-interval duration if set force an update to all hostnames and reconnect if changed, defaults to 0 (disabled) --port int port for the server --pprof strings enable profiling --pprof-http enable pprof http endpoints - --proto_topo vttest.TopoData vttest proto definition of the topology, encoded in compact text format. See vttest.proto for more information. - --proxy_protocol Enable HAProxy PROXY protocol on MySQL listener socket - --proxy_tablets Setting this true will make vtctld proxy the tablet status instead of redirecting to them - --publish_retry_interval duration how long vttablet waits to retry publishing the tablet record (default 30s) - --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --proto-topo vttest.TopoData vttest proto definition of the topology, encoded in compact text format. See vttest.proto for more information. + --proxy-protocol Enable HAProxy PROXY protocol on MySQL listener socket + --proxy-tablets Setting this true will make vtctld proxy the tablet status instead of redirecting to them + --publish-retry-interval duration how long vttablet waits to retry publishing the tablet record (default 30s) + --purge-logs-interval duration how often try to remove old logs (default 1h0m0s) --query-log-stream-handler string URL handler for streaming queries log (default "/debug/querylog") --query-timeout int Sets the default query timeout (in ms). Can be overridden by session variable (query_timeout) or comment directive (QUERY_TIMEOUT_MS) --querylog-buffer-size int Maximum number of buffered query logs before throttling log output (default 10) @@ -301,13 +299,13 @@ Flags: --queryserver-config-txpool-max-idle-count int query server transaction pool - maximum number of idle connections to retain in the pool. Use this to balance between faster response times during traffic bursts and resource efficiency during low-traffic periods. --queryserver-config-txpool-timeout duration query server transaction pool timeout, it is how long vttablet waits if tx pool is full (default 1s) --queryserver-config-warn-result-size int query server result size warning threshold, warn if number of rows returned from vttablet for non-streaming queries exceeds this + --queryserver-enable-online-ddl Enable online DDL. (default true) --queryserver-enable-views Enable views support in vttablet. - --queryserver_enable_online_ddl Enable online DDL. (default true) --redact-debug-ui-queries redact full queries and bind variables from debug UI --relay_log_max_items int Maximum number of rows for vreplication target buffering. (default 5000) --relay_log_max_size int Maximum buffer size (in bytes) for vreplication target buffering. If single rows are larger than this, a single row is buffered at a time. (default 250000) - --remote_operation_timeout duration time to wait for a remote operation (default 15s) - --replication_connect_retry duration how long to wait in between replica reconnect attempts. Only precise to the second. (default 10s) + --remote-operation-timeout duration time to wait for a remote operation (default 15s) + --replication-connect-retry duration how long to wait in between replica reconnect attempts. Only precise to the second. (default 10s) --restore-from-backup-allowed-engines strings (init restore parameter) if set, only backups taken with the specified engines are eligible to be restored --restore-to-pos string (init incremental restore parameter) if set, run a point in time recovery that ends with the given position. This will attempt to use one full backup followed by zero or more incremental backups --restore-to-timestamp string (init incremental restore parameter) if set, run a point in time recovery that restores up to the given timestamp, if possible. Given timestamp in RFC3339 format. Example: '2006-01-02T15:04:05Z07:00' @@ -320,76 +318,77 @@ Flags: --schema-version-max-age-seconds int max age of schema version records to kept in memory by the vreplication historian --schema_change_signal Enable the schema tracker; requires queryserver-config-schema-change-signal to be enabled on the underlying vttablets for this to work (default true) --schema_dir string Schema base directory. Should contain one directory per keyspace, with a vschema.json file if necessary. - --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --security-policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) --semi-sync-monitor-interval duration How frequently the semi-sync monitor checks if the primary is blocked on semi-sync ACKs (default 10s) - --service_map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice + --service-map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice --serving_state_grace_period duration how long to pause after broadcasting health to vtgate, before enforcing a new serving state --shard_sync_retry_delay duration delay between retries of updates to keep the tablet and its shard record in sync (default 30s) --shutdown_grace_period duration how long to wait for queries and transactions to complete during graceful shutdown. (default 3s) + --skip-user-metrics If true, user based stats are not recorded. --sql-max-length-errors int truncate queries in error logs to the given length (default unlimited) --sql-max-length-ui int truncate queries in debug UIs to the given length (default 512) (default 512) - --srv_topo_cache_refresh duration how frequently to refresh the topology for cached entries (default 1s) - --srv_topo_cache_ttl duration how long to use cached entries for topology (default 1s) - --srv_topo_timeout duration topo server timeout (default 5s) + --srv-topo-cache-refresh duration how frequently to refresh the topology for cached entries (default 1s) + --srv-topo-cache-ttl duration how long to use cached entries for topology (default 1s) + --srv-topo-timeout duration topo server timeout (default 5s) --start_mysql Should vtcombo also start mysql - --stats_backend string The name of the registered push-based monitoring/stats backend to use - --stats_combine_dimensions string List of dimensions to be combined into a single "all" value in exported stats vars - --stats_common_tags strings Comma-separated list of common tags for the stats backend. It provides both label and values. Example: label1:value1,label2:value2 - --stats_drop_variables string Variables to be dropped from the list of exported variables. - --stats_emit_period duration Interval between emitting stats to all registered backends (default 1m0s) + --stats-backend string The name of the registered push-based monitoring/stats backend to use + --stats-combine-dimensions string List of dimensions to be combined into a single "all" value in exported stats vars + --stats-common-tags strings Comma-separated list of common tags for the stats backend. It provides both label and values. Example: label1:value1,label2:value2 + --stats-drop-variables string Variables to be dropped from the list of exported variables. + --stats-emit-period duration Interval between emitting stats to all registered backends (default 1m0s) --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) --stream_buffer_size int the number of bytes sent from vtgate for each stream call. It's recommended to keep this value in sync with vttablet's query-server-config-stream-buffer-size. (default 32768) --stream_health_buffer_size uint max streaming health entries to buffer per streaming health client (default 20) --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class --table_gc_lifecycle string States for a DROP TABLE garbage collection cycle. Default is 'hold,purge,evac,drop', use any subset ('drop' implicitly always included) (default "hold,purge,evac,drop") + --tablet-dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. --tablet-filter-tags StringMap Specifies a comma-separated list of tablet tags (as key:value pairs) to filter the tablets to watch. - --tablet_dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. + --tablet-health-keep-alive duration close streaming tablet health connection if there are no requests for this long (default 5m0s) + --tablet-hostname string if not empty, this hostname will be assumed instead of trying to resolve it + --tablet-manager-grpc-ca string the server ca to use to validate servers when connecting + --tablet-manager-grpc-cert string the cert to use to connect + --tablet-manager-grpc-concurrency int concurrency to use to talk to a vttablet server for performance-sensitive RPCs (like ExecuteFetchAs{Dba,App}, CheckThrottler and FullStatus) (default 8) + --tablet-manager-grpc-connpool-size int number of tablets to keep tmclient connections open to (default 100) + --tablet-manager-grpc-crl string the server crl to use to validate server certificates when connecting + --tablet-manager-grpc-key string the key to use to connect + --tablet-manager-grpc-server-name string the server name to use to validate server certificate + --tablet-manager-protocol string Protocol to use to make tabletmanager RPCs to vttablets. (default "grpc") + --tablet-refresh-interval duration Tablet refresh interval. (default 1m0s) + --tablet-refresh-known-tablets Whether to reload the tablet's address/port map from topo in case they change. (default true) + --tablet-types-to-wait strings Wait till connected for specified tablet types during Gateway initialization. Should be provided as a comma-separated set of tablet types. + --tablet-url-template string Format string describing debug tablet url formatting. See getTabletDebugURL() for how to customize this. (default "http://{{ "{{.GetTabletHostPort}}" }}") --tablet_filters strings Specifies a comma-separated list of 'keyspace|shard_name or keyrange' values to filter the tablets to watch. - --tablet_health_keep_alive duration close streaming tablet health connection if there are no requests for this long (default 5m0s) - --tablet_hostname string if not empty, this hostname will be assumed instead of trying to resolve it - --tablet_manager_grpc_ca string the server ca to use to validate servers when connecting - --tablet_manager_grpc_cert string the cert to use to connect - --tablet_manager_grpc_concurrency int concurrency to use to talk to a vttablet server for performance-sensitive RPCs (like ExecuteFetchAs{Dba,App}, CheckThrottler and FullStatus) (default 8) - --tablet_manager_grpc_connpool_size int number of tablets to keep tmclient connections open to (default 100) - --tablet_manager_grpc_crl string the server crl to use to validate server certificates when connecting - --tablet_manager_grpc_key string the key to use to connect - --tablet_manager_grpc_server_name string the server name to use to validate server certificate - --tablet_manager_protocol string Protocol to use to make tabletmanager RPCs to vttablets. (default "grpc") - --tablet_refresh_interval duration Tablet refresh interval. (default 1m0s) - --tablet_refresh_known_tablets Whether to reload the tablet's address/port map from topo in case they change. (default true) - --tablet_types_to_wait strings Wait till connected for specified tablet types during Gateway initialization. Should be provided as a comma-separated set of tablet types. - --tablet_url_template string Format string describing debug tablet url formatting. See getTabletDebugURL() for how to customize this. (default "http://{{ "{{.GetTabletHostPort}}" }}") --throttle_tablet_types string Comma separated VTTablet types to be considered by the throttler. default: 'replica'. example: 'replica,rdonly'. 'replica' always implicitly included (default "replica") - --topo_consul_lock_delay duration LockDelay for consul session. (default 15s) - --topo_consul_lock_session_checks string List of checks for consul session. (default "serfHealth") - --topo_consul_lock_session_ttl string TTL for consul session. - --topo_consul_watch_poll_duration duration time of the long poll for watch queries. (default 30s) - --topo_etcd_lease_ttl int Lease TTL for locks and leader election. The client will use KeepAlive to keep the lease going. (default 30) - --topo_etcd_tls_ca string path to the ca to use to validate the server cert when connecting to the etcd topo server - --topo_etcd_tls_cert string path to the client cert to use to connect to the etcd topo server, requires topo_etcd_tls_key, enables TLS - --topo_etcd_tls_key string path to the client key to use to connect to the etcd topo server, enables TLS - --topo_global_root string the path of the global topology data in the global topology server - --topo_global_server_address string the address of the global topology server - --topo_implementation string the topology implementation to use - --topo_read_concurrency int Maximum concurrency of topo reads per global or local cell. (default 32) - --topo_zk_auth_file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass - --topo_zk_base_timeout duration zk base timeout (see zk.Connect) (default 30s) - --topo_zk_max_concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64) - --topo_zk_tls_ca string the server ca to use to validate servers when connecting to the zk topo server - --topo_zk_tls_cert string the cert to use to connect to the zk topo server, requires topo_zk_tls_key, enables TLS - --topo_zk_tls_key string the key to use to connect to the zk topo server, enables TLS + --topo-consul-lock-delay duration LockDelay for consul session. (default 15s) + --topo-consul-lock-session-checks string List of checks for consul session. (default "serfHealth") + --topo-consul-lock-session-ttl string TTL for consul session. + --topo-consul-watch-poll-duration duration time of the long poll for watch queries. (default 30s) + --topo-etcd-lease-ttl int Lease TTL for locks and leader election. The client will use KeepAlive to keep the lease going. (default 30) + --topo-etcd-tls-ca string path to the ca to use to validate the server cert when connecting to the etcd topo server + --topo-etcd-tls-cert string path to the client cert to use to connect to the etcd topo server, requires topo-etcd-tls-key, enables TLS + --topo-etcd-tls-key string path to the client key to use to connect to the etcd topo server, enables TLS + --topo-global-root string the path of the global topology data in the global topology server + --topo-global-server-address string the address of the global topology server + --topo-implementation string the topology implementation to use + --topo-read-concurrency int Maximum concurrency of topo reads per global or local cell. (default 32) + --topo-zk-auth-file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass + --topo-zk-base-timeout duration zk base timeout (see zk.Connect) (default 30s) + --topo-zk-max-concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64) + --topo-zk-tls-ca string the server ca to use to validate servers when connecting to the zk topo server + --topo-zk-tls-cert string the cert to use to connect to the zk topo server, requires topo-zk-tls-key, enables TLS + --topo-zk-tls-key string the key to use to connect to the zk topo server, enables TLS --tracer string tracing service to use (default "noop") --tracing-enable-logging whether to enable logging in the tracing service --tracing-sampling-rate float sampling rate for the probabilistic jaeger sampler (default 0.1) --tracing-sampling-type string sampling strategy to use for jaeger. possible values are 'const', 'probabilistic', 'rateLimiting', or 'remote' (default "const") --track-udfs Track UDFs in vtgate. --track_schema_versions When enabled, vttablet will store versions of schemas at each position that a DDL is applied and allow retrieval of the schema corresponding to a position + --transaction-limit-by-component Include CallerID.component when considering who the user is for the purpose of transaction limit. + --transaction-limit-by-principal Include CallerID.principal when considering who the user is for the purpose of transaction limit. (default true) + --transaction-limit-by-subcomponent Include CallerID.subcomponent when considering who the user is for the purpose of transaction limit. + --transaction-limit-by-username Include VTGateCallerID.username when considering who the user is for the purpose of transaction limit. (default true) + --transaction-limit-per-user float Maximum number of transactions a single user is allowed to use at any time, represented as fraction of -transaction_cap. (default 0.4) --transaction-log-stream-handler string URL handler for streaming transactions log (default "/debug/txlog") - --transaction_limit_by_component Include CallerID.component when considering who the user is for the purpose of transaction limit. - --transaction_limit_by_principal Include CallerID.principal when considering who the user is for the purpose of transaction limit. (default true) - --transaction_limit_by_subcomponent Include CallerID.subcomponent when considering who the user is for the purpose of transaction limit. - --transaction_limit_by_username Include VTGateCallerID.username when considering who the user is for the purpose of transaction limit. (default true) - --transaction_limit_per_user float Maximum number of transactions a single user is allowed to use at any time, represented as fraction of -transaction_cap. (default 0.4) --transaction_mode string SINGLE: disallow multi-db transactions, MULTI: allow multi-db transactions with best effort commit, TWOPC: allow multi-db transactions with 2pc commit (default "MULTI") --truncate-error-len int truncate errors sent to client if they are longer than this value (0 means do not truncate) --twopc_abandon_age time.Duration Any unresolved transaction older than this time will be sent to the coordinator to be resolved. NOTE: Providing time as seconds (float64) is deprecated. Use time.Duration format (e.g., '1s', '2m', '1h'). (default 15m0s) @@ -406,45 +405,45 @@ Flags: --v Level log level for V logs -v, --version print binary version --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging + --vreplication-copy-phase-duration duration Duration for each copy phase loop (before running the next catchup: default 1h) (default 1h0m0s) + --vreplication-copy-phase-max-innodb-history-list-length int The maximum InnoDB transaction history that can exist on a vstreamer (source) before starting another round of copying rows. This helps to limit the impact on the source tablet. (default 1000000) + --vreplication-copy-phase-max-mysql-replication-lag int The maximum MySQL replication lag (in seconds) that can exist on a vstreamer (source) before starting another round of copying rows. This helps to limit the impact on the source tablet. (default 43200) --vreplication-enable-http-log Enable the /debug/vrlog HTTP endpoint, which will produce a log of the events replicated on primary tablets in the target keyspace by all VReplication workflows that are in the running/replicating phase. + --vreplication-experimental-flags int (Bitmask) of experimental features in vreplication to enable (default 7) + --vreplication-heartbeat-update-interval int Frequency (in seconds, default 1, max 60) at which the time_updated column of a vreplication stream when idling (default 1) + --vreplication-max-time-to-retry-on-error duration stop automatically retrying when we've had consecutive failures with the same error for this long after the first occurrence + --vreplication-net-read-timeout int Session value of net_read_timeout for vreplication, in seconds (default 300) + --vreplication-net-write-timeout int Session value of net_write_timeout for vreplication, in seconds (default 600) --vreplication-parallel-insert-workers int Number of parallel insertion workers to use during copy phase. Set <= 1 to disable parallelism, or > 1 to enable concurrent insertion during copy phase. (default 1) - --vreplication_copy_phase_duration duration Duration for each copy phase loop (before running the next catchup: default 1h) (default 1h0m0s) - --vreplication_copy_phase_max_innodb_history_list_length int The maximum InnoDB transaction history that can exist on a vstreamer (source) before starting another round of copying rows. This helps to limit the impact on the source tablet. (default 1000000) - --vreplication_copy_phase_max_mysql_replication_lag int The maximum MySQL replication lag (in seconds) that can exist on a vstreamer (source) before starting another round of copying rows. This helps to limit the impact on the source tablet. (default 43200) - --vreplication_experimental_flags int (Bitmask) of experimental features in vreplication to enable (default 7) - --vreplication_heartbeat_update_interval int Frequency (in seconds, default 1, max 60) at which the time_updated column of a vreplication stream when idling (default 1) - --vreplication_max_time_to_retry_on_error duration stop automatically retrying when we've had consecutive failures with the same error for this long after the first occurrence - --vreplication_net_read_timeout int Session value of net_read_timeout for vreplication, in seconds (default 300) - --vreplication_net_write_timeout int Session value of net_write_timeout for vreplication, in seconds (default 600) - --vreplication_replica_lag_tolerance duration Replica lag threshold duration: once lag is below this we switch from copy phase to the replication (streaming) phase (default 1m0s) - --vreplication_retry_delay duration delay before retrying a failed workflow event in the replication phase (default 5s) - --vreplication_store_compressed_gtid Store compressed gtids in the pos column of the sidecar database's vreplication table - --vschema-persistence-dir string If set, per-keyspace vschema will be persisted in this directory and reloaded into the in-memory topology server across restarts. Bookkeeping is performed using a simple watcher goroutine. This is useful when running vtcombo as an application development container (e.g. vttestserver) where you want to keep the same vschema even if developer's machine reboots. This works in tandem with vttestserver's --persistent_mode flag. Needless to say, this is neither a perfect nor a production solution for vschema persistence. Consider using the --external_topo_server flag if you require a more complete solution. This flag is ignored if --external_topo_server is set. + --vreplication-replica-lag-tolerance duration Replica lag threshold duration: once lag is below this we switch from copy phase to the replication (streaming) phase (default 1m0s) + --vreplication-retry-delay duration delay before retrying a failed workflow event in the replication phase (default 5s) + --vreplication-store-compressed-gtid Store compressed gtids in the pos column of the sidecar database's vreplication table + --vschema-persistence-dir string If set, per-keyspace vschema will be persisted in this directory and reloaded into the in-memory topology server across restarts. Bookkeeping is performed using a simple watcher goroutine. This is useful when running vtcombo as an application development container (e.g. vttestserver) where you want to keep the same vschema even if developer's machine reboots. This works in tandem with vttestserver's --persistent_mode flag. Needless to say, this is neither a perfect nor a production solution for vschema persistence. Consider using the --external-topo-server flag if you require a more complete solution. This flag is ignored if --external-topo-server is set. --vschema_ddl_authorized_users string List of users authorized to execute vschema ddl operations, or '%' to allow all users. --vstream-binlog-rotation-threshold int Byte size at which a VStreamer will attempt to rotate the source's open binary log before starting a GTID snapshot based stream (e.g. a ResultStreamer or RowStreamer) (default 67108864) - --vstream_dynamic_packet_size Enable dynamic packet sizing for VReplication. This will adjust the packet size during replication to improve performance. (default true) - --vstream_packet_size int Suggested packet size for VReplication streamer. This is used only as a recommendation. The actual packet size may be more or less than this amount. (default 250000) - --vtctld_sanitize_log_messages When true, vtctld sanitizes logging. + --vstream-dynamic-packet-size Enable dynamic packet sizing for vstreamers. This will adjust the packet size in vreplication workflows to improve performance. (default true) + --vstream-packet-size int Suggested packet size for vstreamers. The actual packet size may be more or less than this amount. (default 250000) + --vtctld-sanitize-log-messages When true, vtctld sanitizes logging. --vtgate-config-terse-errors prevent bind vars from escaping in returned errors - --vtgate_grpc_ca string the server ca to use to validate servers when connecting - --vtgate_grpc_cert string the cert to use to connect - --vtgate_grpc_crl string the server crl to use to validate server certificates when connecting - --vtgate_grpc_key string the key to use to connect - --vtgate_grpc_server_name string the server name to use to validate server certificate - --vttablet_skip_buildinfo_tags string comma-separated list of buildinfo tags to skip from merging with --init_tags. each tag is either an exact match or a regular expression of the form '/regexp/'. (default "/.*/") - --wait_for_backup_interval duration (init restore parameter) if this is greater than 0, instead of starting up empty when no backups are found, keep checking at this interval for a backup to appear + --vtgate-grpc-ca string the server ca to use to validate servers when connecting + --vtgate-grpc-cert string the cert to use to connect + --vtgate-grpc-crl string the server crl to use to validate server certificates when connecting + --vtgate-grpc-key string the key to use to connect + --vtgate-grpc-server-name string the server name to use to validate server certificate + --vttablet-skip-buildinfo-tags string comma-separated list of buildinfo tags to skip from merging with --init-tags. each tag is either an exact match or a regular expression of the form '/regexp/'. (default "/.*/") + --wait-for-backup-interval duration (init restore parameter) if this is greater than 0, instead of starting up empty when no backups are found, keep checking at this interval for a backup to appear --warming-reads-concurrency int Number of concurrent warming reads allowed (default 500) --warming-reads-percent int Percentage of reads on the primary to forward to replicas. Useful for keeping buffer pools warm --warming-reads-query-timeout duration Timeout of warming read queries (default 5s) - --warn_memory_rows int Warning threshold for in-memory results. A row count higher than this amount will cause the VtGateWarnings.ResultsExceeded counter to be incremented. (default 30000) - --warn_payload_size int The warning threshold for query payloads in bytes. A payload greater than this threshold will cause the VtGateWarnings.WarnPayloadSizeExceeded counter to be incremented. - --warn_sharded_only If any features that are only available in unsharded mode are used, query execution warnings will be added to the session - --watch_replication_stream When enabled, vttablet will stream the MySQL replication stream from the local server, and use it to update schema when it sees a DDL. - --xbstream_restore_flags string Flags to pass to xbstream command during restore. These should be space separated and will be added to the end of the command. These need to match the ones used for backup e.g. --compress / --decompress, --encrypt / --decrypt - --xtrabackup_backup_flags string Flags to pass to backup command. These should be space separated and will be added to the end of the command - --xtrabackup_prepare_flags string Flags to pass to prepare command. These should be space separated and will be added to the end of the command - --xtrabackup_root_path string Directory location of the xtrabackup and xbstream executables, e.g., /usr/bin - --xtrabackup_stream_mode string Which mode to use if streaming, valid values are tar and xbstream. Please note that tar is not supported in XtraBackup 8.0 (default "tar") - --xtrabackup_stripe_block_size uint Size in bytes of each block that gets sent to a given stripe before rotating to the next stripe (default 102400) - --xtrabackup_stripes uint If greater than 0, use data striping across this many destination files to parallelize data transfer and decompression - --xtrabackup_user string User that xtrabackup will use to connect to the database server. This user must have all necessary privileges. For details, please refer to xtrabackup documentation. + --warn-memory-rows int Warning threshold for in-memory results. A row count higher than this amount will cause the VtGateWarnings.ResultsExceeded counter to be incremented. (default 30000) + --warn-payload-size int The warning threshold for query payloads in bytes. A payload greater than this threshold will cause the VtGateWarnings.WarnPayloadSizeExceeded counter to be incremented. + --warn-sharded-only If any features that are only available in unsharded mode are used, query execution warnings will be added to the session + --watch-replication-stream When enabled, vttablet will stream the MySQL replication stream from the local server, and use it to update schema when it sees a DDL. + --xbstream-restore-flags string Flags to pass to xbstream command during restore. These should be space separated and will be added to the end of the command. These need to match the ones used for backup e.g. --compress / --decompress, --encrypt / --decrypt + --xtrabackup-backup-flags string Flags to pass to backup command. These should be space separated and will be added to the end of the command + --xtrabackup-prepare-flags string Flags to pass to prepare command. These should be space separated and will be added to the end of the command + --xtrabackup-root-path string Directory location of the xtrabackup and xbstream executables, e.g., /usr/bin + --xtrabackup-stream-mode string Which mode to use if streaming, valid values are tar and xbstream. Please note that tar is not supported in XtraBackup 8.0 (default "tar") + --xtrabackup-stripe-block-size uint Size in bytes of each block that gets sent to a given stripe before rotating to the next stripe (default 102400) + --xtrabackup-stripes uint If greater than 0, use data striping across this many destination files to parallelize data transfer and decompression + --xtrabackup-user string User that xtrabackup will use to connect to the database server. This user must have all necessary privileges. For details, please refer to xtrabackup documentation. diff --git a/go/flags/endtoend/vtctlclient.txt b/go/flags/endtoend/vtctlclient.txt index e7402c0eefd..8341f535f27 100644 --- a/go/flags/endtoend/vtctlclient.txt +++ b/go/flags/endtoend/vtctlclient.txt @@ -9,31 +9,31 @@ Usage of vtctlclient: --config-type string Config file type (omit to infer config type from file extension). --datadog-agent-host string host to send spans to. if empty, no tracing will be done --datadog-agent-port string port to send spans to. if empty, no tracing will be done + --grpc-auth-static-client-creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. + --grpc-compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy --grpc-dial-concurrency-limit int Maximum concurrency of grpc dial operations. This should be less than the golang max thread limit of 10000. (default 1024) - --grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. - --grpc_compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy - --grpc_enable_tracing Enable gRPC tracing. - --grpc_initial_conn_window_size int gRPC initial connection window size - --grpc_initial_window_size int gRPC initial window size - --grpc_keepalive_time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) - --grpc_keepalive_timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) - --grpc_max_message_size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) - --grpc_prometheus Enable gRPC monitoring with Prometheus. + --grpc-enable-tracing Enable gRPC tracing. + --grpc-initial-conn-window-size int gRPC initial connection window size + --grpc-initial-window-size int gRPC initial window size + --grpc-keepalive-time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) + --grpc-keepalive-timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc-max-message-size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) + --grpc-prometheus Enable gRPC monitoring with Prometheus. -h, --help display usage and exit --jaeger-agent-host string host and port to send spans to. if empty, no tracing will be done - --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) - --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --keep-logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep-logs-by-mtime duration keep logs for this long (using mtime) (zero to keep forever) + --log-err-stacks log stack traces for errors + --log-rotate-max-size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace --log_dir string If non-empty, write log files in this directory - --log_err_stacks log stack traces for errors --log_link string If non-empty, add symbolic links in this directory to the log files - --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --logbuflevel int Buffer log messages logged at this level or lower (-1 means don't buffer; 0 means buffer INFO only; ...). Has limited applicability on non-prod platforms. --logtostderr log to standard error instead of files --pprof strings enable profiling --pprof-http enable pprof http endpoints - --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) - --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --purge-logs-interval duration how often try to remove old logs (default 1h0m0s) + --security-policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) --server string server to use for connection --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) --tracer string tracing service to use (default "noop") @@ -43,9 +43,9 @@ Usage of vtctlclient: --v Level log level for V logs -v, --version print binary version --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging - --vtctl_client_protocol string Protocol to use to talk to the vtctl server. (default "grpc") - --vtctld_grpc_ca string the server ca to use to validate servers when connecting - --vtctld_grpc_cert string the cert to use to connect - --vtctld_grpc_crl string the server crl to use to validate server certificates when connecting - --vtctld_grpc_key string the key to use to connect - --vtctld_grpc_server_name string the server name to use to validate server certificate + --vtctl-client-protocol string Protocol to use to talk to the vtctl server. (default "grpc") + --vtctld-grpc-ca string the server ca to use to validate servers when connecting + --vtctld-grpc-cert string the cert to use to connect + --vtctld-grpc-crl string the server crl to use to validate server certificates when connecting + --vtctld-grpc-key string the key to use to connect + --vtctld-grpc-server-name string the server name to use to validate server certificate diff --git a/go/flags/endtoend/vtctld.txt b/go/flags/endtoend/vtctld.txt index 764c07a9d69..93fb1a86de0 100644 --- a/go/flags/endtoend/vtctld.txt +++ b/go/flags/endtoend/vtctld.txt @@ -3,7 +3,7 @@ It is usually the first Vitess component to be started after a valid global topo For the last several releases, vtctld has been transitioning to a newer gRPC service for well-typed cluster management requests. This is **required** to use programs such as vtadmin and vtctldclient, and The old API and service are deprecated and will be removed in a future release. -To enable this newer service, include "grpc-vtctld" in the --service_map argument. +To enable this newer service, include "grpc-vtctld" in the --service-map argument. This is demonstrated in the example usage below. Usage: @@ -11,167 +11,167 @@ Usage: Examples: vtctld \ - --topo_implementation etcd2 \ - --topo_global_server_address localhost:2379 \ - --topo_global_root /vitess/ \ - --service_map 'grpc-vtctl,grpc-vtctld' \ - --backup_storage_implementation file \ + --topo-implementation etcd2 \ + --topo-global-server-address localhost:2379 \ + --topo-global-root /vitess/ \ + --service-map 'grpc-vtctl,grpc-vtctld' \ + --backup-storage-implementation file \ --file_backup_storage_root $VTDATAROOT/backups \ --port 15000 \ - --grpc_port 15999 + --grpc-port 15999 Flags: --action_timeout duration time to wait for an action before resorting to force (default 1m0s) --alsologtostderr log to standard error as well as files - --azblob_backup_account_key_file string Path to a file containing the Azure Storage account key; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_KEY will be used as the key itself (NOT a file path). - --azblob_backup_account_name string Azure Storage Account name for backups; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_NAME will be used. - --azblob_backup_buffer_size int The memory buffer size to use in bytes, per file or stripe, when streaming to Azure Blob Service. (default 104857600) - --azblob_backup_container_name string Azure Blob Container Name. - --azblob_backup_parallelism int Azure Blob operation parallelism (requires extra memory when increased -- a multiple of azblob_backup_buffer_size). (default 1) - --azblob_backup_storage_root string Root prefix for all backup-related Azure Blobs; this should exclude both initial and trailing '/' (e.g. just 'a/b' not '/a/b/'). - --backup_engine_implementation string Specifies which implementation to use for creating new backups (builtin or xtrabackup). Restores will always be done with whichever engine created a given backup. (default "builtin") - --backup_storage_block_size int if backup_storage_compress is true, backup_storage_block_size sets the byte size for each block while compressing (default is 250000). (default 250000) - --backup_storage_compress if set, the backup files will be compressed. (default true) - --backup_storage_implementation string Which backup storage implementation to use for creating and restoring backups. - --backup_storage_number_blocks int if backup_storage_compress is true, backup_storage_number_blocks sets the number of blocks that can be processed, in parallel, before the writer blocks, during compression (default is 2). It should be equal to the number of CPUs available for compression. (default 2) + --azblob-backup-account-key-file string Path to a file containing the Azure Storage account key; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_KEY will be used as the key itself (NOT a file path). + --azblob-backup-account-name string Azure Storage Account name for backups; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_NAME will be used. + --azblob-backup-buffer-size int The memory buffer size to use in bytes, per file or stripe, when streaming to Azure Blob Service. (default 104857600) + --azblob-backup-container-name string Azure Blob Container Name. + --azblob-backup-parallelism int Azure Blob operation parallelism (requires extra memory when increased -- a multiple of azblob-backup-buffer-size). (default 1) + --azblob-backup-storage-root string Root prefix for all backup-related Azure Blobs; this should exclude both initial and trailing '/' (e.g. just 'a/b' not '/a/b/'). + --backup-engine-implementation string Specifies which implementation to use for creating new backups (builtin or xtrabackup). Restores will always be done with whichever engine created a given backup. (default "builtin") + --backup-storage-block-size int if backup-storage-compress is true, backup-storage-block-size sets the byte size for each block while compressing (default is 250000). (default 250000) + --backup-storage-compress if set, the backup files will be compressed. (default true) + --backup-storage-implementation string Which backup storage implementation to use for creating and restoring backups. + --backup-storage-number-blocks int if backup-storage-compress is true, backup-storage-number-blocks sets the number of blocks that can be processed, in parallel, before the writer blocks, during compression (default is 2). It should be equal to the number of CPUs available for compression. (default 2) --bind-address string Bind address for the server. If empty, the server will listen on all available unicast and anycast IP addresses of the local system. --builtinbackup-file-read-buffer-size uint read files using an IO buffer of this many bytes. Golang defaults are used when set to 0. --builtinbackup-file-write-buffer-size uint write files using an IO buffer of this many bytes. Golang defaults are used when set to 0. (default 2097152) --builtinbackup-incremental-restore-path string the directory where incremental restore files, namely binlog files, are extracted to. In k8s environments, this should be set to a directory that is shared between the vttablet and mysqld pods. The path should exist. When empty, the default OS temp dir is assumed. - --builtinbackup_mysqld_timeout duration how long to wait for mysqld to shutdown at the start of the backup. (default 10m0s) - --builtinbackup_progress duration how often to send progress updates when backing up large files. (default 5s) + --builtinbackup-mysqld-timeout duration how long to wait for mysqld to shutdown at the start of the backup. (default 10m0s) + --builtinbackup-progress duration how often to send progress updates when backing up large files. (default 5s) --catch-sigpipe catch and ignore SIGPIPE on stdout and stderr if specified --cell string cell to use - --ceph_backup_storage_config string Path to JSON config file for ceph backup storage. (default "ceph_backup_config.json") + --ceph-backup-storage-config string Path to JSON config file for ceph backup storage. (default "ceph_backup_config.json") --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) --config-name string Name of the config file (without extension) to search for. (default "vtconfig") --config-path strings Paths to search for config files in. (default [{{ .Workdir }}]) --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) --config-type string Config file type (omit to infer config type from file extension). - --consul_auth_static_file string JSON File to read the topos/tokens from. + --consul-auth-static-file string JSON File to read the topos/tokens from. --datadog-agent-host string host to send spans to. if empty, no tracing will be done --datadog-agent-port string port to send spans to. if empty, no tracing will be done - --disable_active_reparents if set, do not allow active reparents. Use this to protect a cluster using external reparents. - --emit_stats If set, emit stats to push-based monitoring and stats backends + --disable-active-reparents if set, do not allow active reparents. Use this to protect a cluster using external reparents. + --emit-stats If set, emit stats to push-based monitoring and stats backends --file_backup_storage_root string Root directory for the file backup storage. - --gcs_backup_storage_bucket string Google Cloud Storage bucket to use for backups. - --gcs_backup_storage_root string Root prefix for all backup-related object names. + --gcs-backup-storage-bucket string Google Cloud Storage bucket to use for backups. + --gcs-backup-storage-root string Root prefix for all backup-related object names. + --grpc-auth-mode string Which auth plugin implementation to use (eg: static) + --grpc-auth-mtls-allowed-substrings string List of substrings of at least one of the client certificate names (separated by colon). + --grpc-auth-static-client-creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. + --grpc-auth-static-password-file string JSON File to read the users/passwords from. + --grpc-bind-address string Bind address for gRPC calls. If empty, listen on all addresses. + --grpc-ca string server CA to use for gRPC connections, requires TLS, and enforces client certificate check + --grpc-cert string server certificate to use for gRPC connections, requires grpc-key, enables TLS + --grpc-compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy + --grpc-crl string path to a certificate revocation list in PEM format, client certificates will be further verified against this file during TLS handshake --grpc-dial-concurrency-limit int Maximum concurrency of grpc dial operations. This should be less than the golang max thread limit of 10000. (default 1024) - --grpc_auth_mode string Which auth plugin implementation to use (eg: static) - --grpc_auth_mtls_allowed_substrings string List of substrings of at least one of the client certificate names (separated by colon). - --grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. - --grpc_auth_static_password_file string JSON File to read the users/passwords from. - --grpc_bind_address string Bind address for gRPC calls. If empty, listen on all addresses. - --grpc_ca string server CA to use for gRPC connections, requires TLS, and enforces client certificate check - --grpc_cert string server certificate to use for gRPC connections, requires grpc_key, enables TLS - --grpc_compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy - --grpc_crl string path to a certificate revocation list in PEM format, client certificates will be further verified against this file during TLS handshake - --grpc_enable_optional_tls enable optional TLS mode when a server accepts both TLS and plain-text connections on the same port - --grpc_enable_tracing Enable gRPC tracing. - --grpc_initial_conn_window_size int gRPC initial connection window size - --grpc_initial_window_size int gRPC initial window size - --grpc_keepalive_time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) - --grpc_keepalive_timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) - --grpc_key string server private key to use for gRPC connections, requires grpc_cert, enables TLS - --grpc_max_connection_age duration Maximum age of a client connection before GoAway is sent. (default 2562047h47m16.854775807s) - --grpc_max_connection_age_grace duration Additional grace period after grpc_max_connection_age, after which connections are forcibly closed. (default 2562047h47m16.854775807s) - --grpc_max_message_size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) - --grpc_port int Port to listen on for gRPC calls. If zero, do not listen. - --grpc_prometheus Enable gRPC monitoring with Prometheus. - --grpc_server_ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients - --grpc_server_initial_conn_window_size int gRPC server initial connection window size - --grpc_server_initial_window_size int gRPC server initial window size - --grpc_server_keepalive_enforcement_policy_min_time duration gRPC server minimum keepalive time (default 10s) - --grpc_server_keepalive_enforcement_policy_permit_without_stream gRPC server permit client keepalive pings even when there are no active streams (RPCs) - --grpc_server_keepalive_time duration After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive. (default 10s) - --grpc_server_keepalive_timeout duration After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc-enable-optional-tls enable optional TLS mode when a server accepts both TLS and plain-text connections on the same port + --grpc-enable-tracing Enable gRPC tracing. + --grpc-initial-conn-window-size int gRPC initial connection window size + --grpc-initial-window-size int gRPC initial window size + --grpc-keepalive-time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) + --grpc-keepalive-timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc-key string server private key to use for gRPC connections, requires grpc-cert, enables TLS + --grpc-max-connection-age duration Maximum age of a client connection before GoAway is sent. (default 2562047h47m16.854775807s) + --grpc-max-connection-age-grace duration Additional grace period after grpc-max-connection-age, after which connections are forcibly closed. (default 2562047h47m16.854775807s) + --grpc-max-message-size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) + --grpc-port int Port to listen on for gRPC calls. If zero, do not listen. + --grpc-prometheus Enable gRPC monitoring with Prometheus. + --grpc-server-ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients + --grpc-server-initial-conn-window-size int gRPC server initial connection window size + --grpc-server-initial-window-size int gRPC server initial window size + --grpc-server-keepalive-enforcement-policy-min-time duration gRPC server minimum keepalive time (default 10s) + --grpc-server-keepalive-enforcement-policy-permit-without-stream gRPC server permit client keepalive pings even when there are no active streams (RPCs) + --grpc-server-keepalive-time duration After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive. (default 10s) + --grpc-server-keepalive-timeout duration After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) -h, --help help for vtctld --jaeger-agent-host string host and port to send spans to. if empty, no tracing will be done - --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) - --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --keep-logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep-logs-by-mtime duration keep logs for this long (using mtime) (zero to keep forever) --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) --lock-timeout duration Maximum time to wait when attempting to acquire a lock from the topo server (default 45s) + --log-err-stacks log stack traces for errors + --log-rotate-max-size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace --log_dir string If non-empty, write log files in this directory - --log_err_stacks log stack traces for errors - --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --logtostderr log to standard error instead of files --max-stack-size int configure the maximum stack size in bytes (default 67108864) - --mysql_server_version string MySQL server version to advertise. (default "8.0.40-Vitess") - --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) - --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) - --opentsdb_uri string URI of opentsdb /api/put method - --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --mysql-server-version string MySQL server version to advertise. (default "8.0.40-Vitess") + --onclose-timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm-timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) + --opentsdb-uri string URI of opentsdb /api/put method + --pid-file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. --port int port for the server --pprof strings enable profiling --pprof-http enable pprof http endpoints - --proxy_tablets Setting this true will make vtctld proxy the tablet status instead of redirecting to them - --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) - --remote_operation_timeout duration time to wait for a remote operation (default 15s) - --s3_backup_aws_endpoint string endpoint of the S3 backend (region must be provided). - --s3_backup_aws_min_partsize int Minimum part size to use, defaults to 5MiB but can be increased due to the dataset size. (default 5242880) - --s3_backup_aws_region string AWS region to use. (default "us-east-1") - --s3_backup_aws_retries int AWS request retries. (default -1) - --s3_backup_force_path_style force the s3 path style. - --s3_backup_log_level string determine the S3 loglevel to use from LogOff, LogDebug, LogDebugWithSigning, LogDebugWithHTTPBody, LogDebugWithRequestRetries, LogDebugWithRequestErrors. (default "LogOff") - --s3_backup_server_side_encryption string server-side encryption algorithm (e.g., AES256, aws:kms, sse_c:/path/to/key/file). - --s3_backup_storage_bucket string S3 bucket to use for backups. - --s3_backup_storage_root string root prefix for all backup-related object names. - --s3_backup_tls_skip_verify_cert skip the 'certificate is valid' check for SSL connections. - --schema_change_check_interval duration How often the schema change dir is checked for schema changes. This value must be positive; if zero or lower, the default of 1m is used. (default 1m0s) - --schema_change_controller string Schema change controller is responsible for finding schema changes and responding to schema change events. - --schema_change_dir string Directory containing schema changes for all keyspaces. Each keyspace has its own directory, and schema changes are expected to live in '$KEYSPACE/input' dir. (e.g. 'test_keyspace/input/*sql'). Each sql file represents a schema change. - --schema_change_replicas_timeout duration How long to wait for replicas to receive a schema change. (default 10s) - --schema_change_user string The user who schema changes are submitted on behalf of. - --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) - --service_map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice + --proxy-tablets Setting this true will make vtctld proxy the tablet status instead of redirecting to them + --purge-logs-interval duration how often try to remove old logs (default 1h0m0s) + --remote-operation-timeout duration time to wait for a remote operation (default 15s) + --s3-backup-aws-endpoint string endpoint of the S3 backend (region must be provided). + --s3-backup-aws-min-partsize int Minimum part size to use, defaults to 5MiB but can be increased due to the dataset size. (default 5242880) + --s3-backup-aws-region string AWS region to use. (default "us-east-1") + --s3-backup-aws-retries int AWS request retries. (default -1) + --s3-backup-force-path-style force the s3 path style. + --s3-backup-log-level string determine the S3 loglevel to use from LogOff, LogDebug, LogDebugWithSigning, LogDebugWithHTTPBody, LogDebugWithRequestRetries, LogDebugWithRequestErrors. (default "LogOff") + --s3-backup-server-side-encryption string server-side encryption algorithm (e.g., AES256, aws:kms, sse_c:/path/to/key/file). + --s3-backup-storage-bucket string S3 bucket to use for backups. + --s3-backup-storage-root string root prefix for all backup-related object names. + --s3-backup-tls-skip-verify-cert skip the 'certificate is valid' check for SSL connections. + --schema-change-check-interval duration How often the schema change dir is checked for schema changes. This value must be positive; if zero or lower, the default of 1m is used. (default 1m0s) + --schema-change-controller string Schema change controller is responsible for finding schema changes and responding to schema change events. + --schema-change-dir string Directory containing schema changes for all keyspaces. Each keyspace has its own directory, and schema changes are expected to live in '$KEYSPACE/input' dir. (e.g. 'test_keyspace/input/*sql'). Each sql file represents a schema change. + --schema-change-replicas-timeout duration How long to wait for replicas to receive a schema change. (default 10s) + --schema-change-user string The user who schema changes are submitted on behalf of. + --security-policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --service-map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice --sql-max-length-errors int truncate queries in error logs to the given length (default unlimited) --sql-max-length-ui int truncate queries in debug UIs to the given length (default 512) (default 512) - --stats_backend string The name of the registered push-based monitoring/stats backend to use - --stats_combine_dimensions string List of dimensions to be combined into a single "all" value in exported stats vars - --stats_common_tags strings Comma-separated list of common tags for the stats backend. It provides both label and values. Example: label1:value1,label2:value2 - --stats_drop_variables string Variables to be dropped from the list of exported variables. - --stats_emit_period duration Interval between emitting stats to all registered backends (default 1m0s) + --stats-backend string The name of the registered push-based monitoring/stats backend to use + --stats-combine-dimensions string List of dimensions to be combined into a single "all" value in exported stats vars + --stats-common-tags strings Comma-separated list of common tags for the stats backend. It provides both label and values. Example: label1:value1,label2:value2 + --stats-drop-variables string Variables to be dropped from the list of exported variables. + --stats-emit-period duration Interval between emitting stats to all registered backends (default 1m0s) --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class - --tablet_dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. - --tablet_grpc_ca string the server ca to use to validate servers when connecting - --tablet_grpc_cert string the cert to use to connect - --tablet_grpc_crl string the server crl to use to validate server certificates when connecting - --tablet_grpc_key string the key to use to connect - --tablet_grpc_server_name string the server name to use to validate server certificate - --tablet_health_keep_alive duration close streaming tablet health connection if there are no requests for this long (default 5m0s) - --tablet_manager_grpc_ca string the server ca to use to validate servers when connecting - --tablet_manager_grpc_cert string the cert to use to connect - --tablet_manager_grpc_concurrency int concurrency to use to talk to a vttablet server for performance-sensitive RPCs (like ExecuteFetchAs{Dba,App}, CheckThrottler and FullStatus) (default 8) - --tablet_manager_grpc_connpool_size int number of tablets to keep tmclient connections open to (default 100) - --tablet_manager_grpc_crl string the server crl to use to validate server certificates when connecting - --tablet_manager_grpc_key string the key to use to connect - --tablet_manager_grpc_server_name string the server name to use to validate server certificate - --tablet_manager_protocol string Protocol to use to make tabletmanager RPCs to vttablets. (default "grpc") - --tablet_protocol string Protocol to use to make queryservice RPCs to vttablets. (default "grpc") - --tablet_refresh_interval duration Tablet refresh interval. (default 1m0s) - --tablet_refresh_known_tablets Whether to reload the tablet's address/port map from topo in case they change. (default true) - --tablet_url_template string Format string describing debug tablet url formatting. See getTabletDebugURL() for how to customize this. (default "http://{{ "{{.GetTabletHostPort}}" }}") - --topo_consul_lock_delay duration LockDelay for consul session. (default 15s) - --topo_consul_lock_session_checks string List of checks for consul session. (default "serfHealth") - --topo_consul_lock_session_ttl string TTL for consul session. - --topo_consul_watch_poll_duration duration time of the long poll for watch queries. (default 30s) - --topo_etcd_lease_ttl int Lease TTL for locks and leader election. The client will use KeepAlive to keep the lease going. (default 30) - --topo_etcd_tls_ca string path to the ca to use to validate the server cert when connecting to the etcd topo server - --topo_etcd_tls_cert string path to the client cert to use to connect to the etcd topo server, requires topo_etcd_tls_key, enables TLS - --topo_etcd_tls_key string path to the client key to use to connect to the etcd topo server, enables TLS - --topo_global_root string the path of the global topology data in the global topology server - --topo_global_server_address string the address of the global topology server - --topo_implementation string the topology implementation to use - --topo_read_concurrency int Maximum concurrency of topo reads per global or local cell. (default 32) - --topo_zk_auth_file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass - --topo_zk_base_timeout duration zk base timeout (see zk.Connect) (default 30s) - --topo_zk_max_concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64) - --topo_zk_tls_ca string the server ca to use to validate servers when connecting to the zk topo server - --topo_zk_tls_cert string the cert to use to connect to the zk topo server, requires topo_zk_tls_key, enables TLS - --topo_zk_tls_key string the key to use to connect to the zk topo server, enables TLS + --tablet-dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. + --tablet-grpc-ca string the server ca to use to validate servers when connecting + --tablet-grpc-cert string the cert to use to connect + --tablet-grpc-crl string the server crl to use to validate server certificates when connecting + --tablet-grpc-key string the key to use to connect + --tablet-grpc-server-name string the server name to use to validate server certificate + --tablet-health-keep-alive duration close streaming tablet health connection if there are no requests for this long (default 5m0s) + --tablet-manager-grpc-ca string the server ca to use to validate servers when connecting + --tablet-manager-grpc-cert string the cert to use to connect + --tablet-manager-grpc-concurrency int concurrency to use to talk to a vttablet server for performance-sensitive RPCs (like ExecuteFetchAs{Dba,App}, CheckThrottler and FullStatus) (default 8) + --tablet-manager-grpc-connpool-size int number of tablets to keep tmclient connections open to (default 100) + --tablet-manager-grpc-crl string the server crl to use to validate server certificates when connecting + --tablet-manager-grpc-key string the key to use to connect + --tablet-manager-grpc-server-name string the server name to use to validate server certificate + --tablet-manager-protocol string Protocol to use to make tabletmanager RPCs to vttablets. (default "grpc") + --tablet-protocol string Protocol to use to make queryservice RPCs to vttablets. (default "grpc") + --tablet-refresh-interval duration Tablet refresh interval. (default 1m0s) + --tablet-refresh-known-tablets Whether to reload the tablet's address/port map from topo in case they change. (default true) + --tablet-url-template string Format string describing debug tablet url formatting. See getTabletDebugURL() for how to customize this. (default "http://{{ "{{.GetTabletHostPort}}" }}") + --topo-consul-lock-delay duration LockDelay for consul session. (default 15s) + --topo-consul-lock-session-checks string List of checks for consul session. (default "serfHealth") + --topo-consul-lock-session-ttl string TTL for consul session. + --topo-consul-watch-poll-duration duration time of the long poll for watch queries. (default 30s) + --topo-etcd-lease-ttl int Lease TTL for locks and leader election. The client will use KeepAlive to keep the lease going. (default 30) + --topo-etcd-tls-ca string path to the ca to use to validate the server cert when connecting to the etcd topo server + --topo-etcd-tls-cert string path to the client cert to use to connect to the etcd topo server, requires topo-etcd-tls-key, enables TLS + --topo-etcd-tls-key string path to the client key to use to connect to the etcd topo server, enables TLS + --topo-global-root string the path of the global topology data in the global topology server + --topo-global-server-address string the address of the global topology server + --topo-implementation string the topology implementation to use + --topo-read-concurrency int Maximum concurrency of topo reads per global or local cell. (default 32) + --topo-zk-auth-file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass + --topo-zk-base-timeout duration zk base timeout (see zk.Connect) (default 30s) + --topo-zk-max-concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64) + --topo-zk-tls-ca string the server ca to use to validate servers when connecting to the zk topo server + --topo-zk-tls-cert string the cert to use to connect to the zk topo server, requires topo-zk-tls-key, enables TLS + --topo-zk-tls-key string the key to use to connect to the zk topo server, enables TLS --tracer string tracing service to use (default "noop") --tracing-enable-logging whether to enable logging in the tracing service --tracing-sampling-rate float sampling rate for the probabilistic jaeger sampler (default 0.1) @@ -179,4 +179,4 @@ Flags: --v Level log level for V logs -v, --version print binary version --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging - --vtctld_sanitize_log_messages When true, vtctld sanitizes logging. + --vtctld-sanitize-log-messages When true, vtctld sanitizes logging. diff --git a/go/flags/endtoend/vtctldclient.txt b/go/flags/endtoend/vtctldclient.txt index 0e0c91fbf7d..86a1f3c80fa 100644 --- a/go/flags/endtoend/vtctldclient.txt +++ b/go/flags/endtoend/vtctldclient.txt @@ -121,47 +121,47 @@ Flags: --action_timeout duration timeout to use for the command (default 1h0m0s) --alsologtostderr log to standard error as well as files --compact use compact format for otherwise verbose outputs - --grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. - --grpc_compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy - --grpc_enable_tracing Enable gRPC tracing. - --grpc_initial_conn_window_size int gRPC initial connection window size - --grpc_initial_window_size int gRPC initial window size - --grpc_keepalive_time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) - --grpc_keepalive_timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) - --grpc_max_message_size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) - --grpc_prometheus Enable gRPC monitoring with Prometheus. + --grpc-auth-static-client-creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. + --grpc-compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy + --grpc-enable-tracing Enable gRPC tracing. + --grpc-initial-conn-window-size int gRPC initial connection window size + --grpc-initial-window-size int gRPC initial window size + --grpc-keepalive-time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) + --grpc-keepalive-timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc-max-message-size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) + --grpc-prometheus Enable gRPC monitoring with Prometheus. -h, --help help for vtctldclient - --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) - --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --keep-logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep-logs-by-mtime duration keep logs for this long (using mtime) (zero to keep forever) + --log-rotate-max-size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace --log_dir string If non-empty, write log files in this directory --log_link string If non-empty, add symbolic links in this directory to the log files - --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --logbuflevel int Buffer log messages logged at this level or lower (-1 means don't buffer; 0 means buffer INFO only; ...). Has limited applicability on non-prod platforms. --logtostderr log to standard error instead of files - --mysql_server_version string MySQL server version to advertise. (default "8.0.40-Vitess") - --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) - --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --mysql-server-version string MySQL server version to advertise. (default "8.0.40-Vitess") + --purge-logs-interval duration how often try to remove old logs (default 1h0m0s) + --security-policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) --server string server to use for the connection (required) --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) - --tablet_manager_grpc_ca string the server ca to use to validate servers when connecting - --tablet_manager_grpc_cert string the cert to use to connect - --tablet_manager_grpc_concurrency int concurrency to use to talk to a vttablet server for performance-sensitive RPCs (like ExecuteFetchAs{Dba,App}, CheckThrottler and FullStatus) (default 8) - --tablet_manager_grpc_crl string the server crl to use to validate server certificates when connecting - --tablet_manager_grpc_key string the key to use to connect - --tablet_manager_grpc_server_name string the server name to use to validate server certificate - --tablet_manager_protocol string Protocol to use to make tabletmanager RPCs to vttablets. (default "grpc") + --tablet-manager-grpc-ca string the server ca to use to validate servers when connecting + --tablet-manager-grpc-cert string the cert to use to connect + --tablet-manager-grpc-concurrency int concurrency to use to talk to a vttablet server for performance-sensitive RPCs (like ExecuteFetchAs{Dba,App}, CheckThrottler and FullStatus) (default 8) + --tablet-manager-grpc-crl string the server crl to use to validate server certificates when connecting + --tablet-manager-grpc-key string the key to use to connect + --tablet-manager-grpc-server-name string the server name to use to validate server certificate + --tablet-manager-protocol string Protocol to use to make tabletmanager RPCs to vttablets. (default "grpc") --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) --topo-implementation string the topology implementation to use (default "etcd2") -v, --v Level log level for V logs --version version for vtctldclient --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging - --vtctl_client_protocol string Protocol to use to talk to the vtctl server. (default "grpc") - --vtctld_grpc_ca string the server ca to use to validate servers when connecting - --vtctld_grpc_cert string the cert to use to connect - --vtctld_grpc_crl string the server crl to use to validate server certificates when connecting - --vtctld_grpc_key string the key to use to connect - --vtctld_grpc_server_name string the server name to use to validate server certificate + --vtctl-client-protocol string Protocol to use to talk to the vtctl server. (default "grpc") + --vtctld-grpc-ca string the server ca to use to validate servers when connecting + --vtctld-grpc-cert string the cert to use to connect + --vtctld-grpc-crl string the server crl to use to validate server certificates when connecting + --vtctld-grpc-key string the key to use to connect + --vtctld-grpc-server-name string the server name to use to validate server certificate Use "vtctldclient [command] --help" for more information about a command. diff --git a/go/flags/endtoend/vtexplain.txt b/go/flags/endtoend/vtexplain.txt index 90013fe1b98..3c423b9535c 100644 --- a/go/flags/endtoend/vtexplain.txt +++ b/go/flags/endtoend/vtexplain.txt @@ -50,26 +50,26 @@ Flags: --default_tablet_type topodatapb.TabletType The default tablet type to set for queries, when one is not explicitly selected. (default PRIMARY) --execution-mode string The execution mode to simulate -- must be set to multi, legacy-autocommit, or twopc (default "multi") -h, --help help for vtexplain - --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) - --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --keep-logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep-logs-by-mtime duration keep logs for this long (using mtime) (zero to keep forever) --ks-shard-map string JSON map of keyspace name -> shard name -> ShardReference object. The inner map is the same as the output of FindAllShardsInKeyspace --ks-shard-map-file string File containing json blob of keyspace name -> shard name -> ShardReference object + --log-err-stacks log stack traces for errors + --log-rotate-max-size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace --log_dir string If non-empty, write log files in this directory - --log_err_stacks log stack traces for errors - --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --logtostderr log to standard error instead of files - --mysql_server_version string MySQL server version to advertise. (default "8.0.40-Vitess") + --mysql-server-version string MySQL server version to advertise. (default "8.0.40-Vitess") --normalize Whether to enable vtgate normalization --output-mode string Output in human-friendly text or json (default "text") --planner-version string Sets the default planner to use. Valid values are: Gen4, Gen4Greedy, Gen4Left2Right --pprof strings enable profiling --pprof-http enable pprof http endpoints - --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --purge-logs-interval duration how often try to remove old logs (default 1h0m0s) --replication-mode string The replication mode to simulate -- must be set to either ROW or STATEMENT (default "ROW") --schema string The SQL table schema --schema-file string Identifies the file that contains the SQL table schema - --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --security-policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) --shards int Number of shards per keyspace. Passing --ks-shard-map/--ks-shard-map-file causes this flag to be ignored. (default 2) --sql string A list of semicolon-delimited SQL commands to analyze --sql-file string Identifies the file that contains the SQL commands to analyze diff --git a/go/flags/endtoend/vtgate.txt b/go/flags/endtoend/vtgate.txt index 1a4e6ace312..c033b74262d 100644 --- a/go/flags/endtoend/vtgate.txt +++ b/go/flags/endtoend/vtgate.txt @@ -2,7 +2,7 @@ VTGate is a stateless proxy responsible for accepting requests from applications ### Key Options -* `--srv_topo_cache_ttl`: There may be instances where you will need to increase the cached TTL from the default of 1 second to a higher number: +* `--srv-topo-cache-ttl`: There may be instances where you will need to increase the cached TTL from the default of 1 second to a higher number: * You may want to increase this option if you see that your topo leader goes down and keeps your queries waiting for a few seconds. Usage: @@ -10,33 +10,33 @@ Usage: Examples: vtgate \ - --topo_implementation etcd2 \ - --topo_global_server_address localhost:2379 \ - --topo_global_root /vitess/global \ + --topo-implementation etcd2 \ + --topo-global-server-address localhost:2379 \ + --topo-global-root /vitess/global \ --log_dir $VTDATAROOT/tmp \ --port 15001 \ - --grpc_port 15991 \ - --mysql_server_port 15306 \ + --grpc-port 15991 \ + --mysql-server-port 15306 \ --cell test \ --cells_to_watch test \ - --tablet_types_to_wait PRIMARY,REPLICA \ - --service_map 'grpc-vtgateservice' \ - --pid_file $VTDATAROOT/tmp/vtgate.pid \ - --mysql_auth_server_impl none + --tablet-types-to-wait PRIMARY,REPLICA \ + --service-map 'grpc-vtgateservice' \ + --pid-file $VTDATAROOT/tmp/vtgate.pid \ + --mysql-auth-server-impl none Flags: --allow-kill-statement Allows the execution of kill statement - --allowed_tablet_types strings Specifies the tablet types this vtgate is allowed to route queries to. Should be provided as a comma-separated set of tablet types. + --allowed-tablet-types strings Specifies the tablet types this vtgate is allowed to route queries to. Should be provided as a comma-separated set of tablet types. --alsologtostderr log to standard error as well as files --balancer-keyspaces strings When in balanced mode, a comma-separated list of keyspaces for which to use the balancer (optional) --balancer-vtgate-cells strings When in balanced mode, a comma-separated list of cells that contain vtgates (required) --bind-address string Bind address for the server. If empty, the server will listen on all available unicast and anycast IP addresses of the local system. - --buffer_drain_concurrency int Maximum number of requests retried simultaneously. More concurrency will increase the load on the PRIMARY vttablet when draining the buffer. (default 1) - --buffer_keyspace_shards string If not empty, limit buffering to these entries (comma separated). Entry format: keyspace or keyspace/shard. Requires --enable_buffer=true. - --buffer_max_failover_duration duration Stop buffering completely if a failover takes longer than this duration. (default 20s) - --buffer_min_time_between_failovers duration Minimum time between the end of a failover and the start of the next one (tracked per shard). Faster consecutive failovers will not trigger buffering. (default 1m0s) - --buffer_size int Maximum number of buffered requests in flight (across all ongoing failovers). (default 1000) - --buffer_window duration Duration for how long a request should be buffered at most. (default 10s) + --buffer-drain-concurrency int Maximum number of requests retried simultaneously. More concurrency will increase the load on the PRIMARY vttablet when draining the buffer. (default 1) + --buffer-keyspace-shards string If not empty, limit buffering to these entries (comma separated). Entry format: keyspace or keyspace/shard. Requires --enable_buffer=true. + --buffer-max-failover-duration duration Stop buffering completely if a failover takes longer than this duration. (default 20s) + --buffer-min-time-between-failovers duration Minimum time between the end of a failover and the start of the next one (tracked per shard). Faster consecutive failovers will not trigger buffering. (default 1m0s) + --buffer-size int Maximum number of buffered requests in flight (across all ongoing failovers). (default 1000) + --buffer-window duration Duration for how long a request should be buffered at most. (default 10s) --catch-sigpipe catch and ignore SIGPIPE on stdout and stderr if specified --cell string cell to use --cells_to_watch string comma-separated list of cells for watching tablets @@ -46,86 +46,105 @@ Flags: --config-path strings Paths to search for config files in. (default [{{ .Workdir }}]) --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) --config-type string Config file type (omit to infer config type from file extension). - --consul_auth_static_file string JSON File to read the topos/tokens from. + --consul-auth-static-file string JSON File to read the topos/tokens from. --datadog-agent-host string host to send spans to. if empty, no tracing will be done --datadog-agent-port string port to send spans to. if empty, no tracing will be done - --dbddl_plugin string controls how to handle CREATE/DROP DATABASE. use it if you are using your own database provisioning service (default "fail") - --ddl_strategy string Set default strategy for DDL statements. Override with @@ddl_strategy session variable (default "direct") + --dbddl-plugin string controls how to handle CREATE/DROP DATABASE. use it if you are using your own database provisioning service (default "fail") + --ddl-strategy string Set default strategy for DDL statements. Override with @@ddl_strategy session variable (default "direct") --default_tablet_type topodatapb.TabletType The default tablet type to set for queries, when one is not explicitly selected. (default PRIMARY) --discovery_high_replication_lag_minimum_serving duration Threshold above which replication lag is considered too high when applying the min_number_serving_vttablets flag. (default 2h0m0s) --discovery_low_replication_lag duration Threshold below which replication lag is considered low enough to be healthy. (default 30s) - --emit_stats If set, emit stats to push-based monitoring and stats backends + --emit-stats If set, emit stats to push-based monitoring and stats backends --enable-balancer Enable the tablet balancer to evenly spread query load for a given tablet type + --enable-buffer-dry-run Detect and log failover events, but do not actually buffer requests. --enable-partial-keyspace-migration (Experimental) Follow shard routing rules: enable only while migrating a keyspace shard by shard. See documentation on Partial MoveTables for more. (default false) + --enable-set-var This will enable the use of MySQL's SET_VAR query hint for certain system variables instead of using reserved connections (default true) --enable-views Enable views support in vtgate. (default true) --enable_buffer Enable buffering (stalling) of primary traffic during failovers. - --enable_buffer_dry_run Detect and log failover events, but do not actually buffer requests. --enable_direct_ddl Allow users to submit direct DDL statements (default true) --enable_online_ddl Allow users to submit, review and control Online DDL (default true) - --enable_set_var This will enable the use of MySQL's SET_VAR query hint for certain system variables instead of using reserved connections (default true) --enable_system_settings This will enable the system settings to be changed per session at the database connection level (default true) - --foreign_key_mode string This is to provide how to handle foreign key constraint in create/alter table. Valid values are: allow, disallow (default "allow") - --gate_query_cache_memory int gate server query cache size in bytes, maximum amount of memory to be cached. vtgate analyzes every incoming query and generate a query plan, these plans are being cached in a lru cache. This config controls the capacity of the lru cache. (default 33554432) + --foreign-key-mode string This is to provide how to handle foreign key constraint in create/alter table. Valid values are: allow, disallow (default "allow") + --gate-query-cache-memory int gate server query cache size in bytes, maximum amount of memory to be cached. vtgate analyzes every incoming query and generate a query plan, these plans are being cached in a lru cache. This config controls the capacity of the lru cache. (default 33554432) --gateway_initial_tablet_timeout duration At startup, the tabletGateway will wait up to this duration to get at least one tablet per keyspace/shard/tablet type (default 30s) + --grpc-auth-mode string Which auth plugin implementation to use (eg: static) + --grpc-auth-mtls-allowed-substrings string List of substrings of at least one of the client certificate names (separated by colon). + --grpc-auth-static-client-creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. + --grpc-auth-static-password-file string JSON File to read the users/passwords from. + --grpc-bind-address string Bind address for gRPC calls. If empty, listen on all addresses. + --grpc-ca string server CA to use for gRPC connections, requires TLS, and enforces client certificate check + --grpc-cert string server certificate to use for gRPC connections, requires grpc-key, enables TLS + --grpc-compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy + --grpc-crl string path to a certificate revocation list in PEM format, client certificates will be further verified against this file during TLS handshake --grpc-dial-concurrency-limit int Maximum concurrency of grpc dial operations. This should be less than the golang max thread limit of 10000. (default 1024) + --grpc-enable-optional-tls enable optional TLS mode when a server accepts both TLS and plain-text connections on the same port + --grpc-enable-tracing Enable gRPC tracing. + --grpc-initial-conn-window-size int gRPC initial connection window size + --grpc-initial-window-size int gRPC initial window size + --grpc-keepalive-time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) + --grpc-keepalive-timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc-key string server private key to use for gRPC connections, requires grpc-cert, enables TLS + --grpc-max-connection-age duration Maximum age of a client connection before GoAway is sent. (default 2562047h47m16.854775807s) + --grpc-max-connection-age-grace duration Additional grace period after grpc-max-connection-age, after which connections are forcibly closed. (default 2562047h47m16.854775807s) + --grpc-max-message-size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) + --grpc-port int Port to listen on for gRPC calls. If zero, do not listen. + --grpc-prometheus Enable gRPC monitoring with Prometheus. + --grpc-server-ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients + --grpc-server-initial-conn-window-size int gRPC server initial connection window size + --grpc-server-initial-window-size int gRPC server initial window size + --grpc-server-keepalive-enforcement-policy-min-time duration gRPC server minimum keepalive time (default 10s) + --grpc-server-keepalive-enforcement-policy-permit-without-stream gRPC server permit client keepalive pings even when there are no active streams (RPCs) + --grpc-server-keepalive-time duration After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive. (default 10s) + --grpc-server-keepalive-timeout duration After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc-use-effective-callerid If set, and SSL is not used, will set the immediate caller id from the effective caller id's principal. --grpc-use-effective-groups If set, and SSL is not used, will set the immediate caller's security groups from the effective caller id's groups. --grpc-use-static-authentication-callerid If set, will set the immediate caller id to the username authenticated by the static auth plugin. - --grpc_auth_mode string Which auth plugin implementation to use (eg: static) - --grpc_auth_mtls_allowed_substrings string List of substrings of at least one of the client certificate names (separated by colon). - --grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. - --grpc_auth_static_password_file string JSON File to read the users/passwords from. - --grpc_bind_address string Bind address for gRPC calls. If empty, listen on all addresses. - --grpc_ca string server CA to use for gRPC connections, requires TLS, and enforces client certificate check - --grpc_cert string server certificate to use for gRPC connections, requires grpc_key, enables TLS - --grpc_compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy - --grpc_crl string path to a certificate revocation list in PEM format, client certificates will be further verified against this file during TLS handshake - --grpc_enable_optional_tls enable optional TLS mode when a server accepts both TLS and plain-text connections on the same port - --grpc_enable_tracing Enable gRPC tracing. - --grpc_initial_conn_window_size int gRPC initial connection window size - --grpc_initial_window_size int gRPC initial window size - --grpc_keepalive_time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) - --grpc_keepalive_timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) - --grpc_key string server private key to use for gRPC connections, requires grpc_cert, enables TLS - --grpc_max_connection_age duration Maximum age of a client connection before GoAway is sent. (default 2562047h47m16.854775807s) - --grpc_max_connection_age_grace duration Additional grace period after grpc_max_connection_age, after which connections are forcibly closed. (default 2562047h47m16.854775807s) - --grpc_max_message_size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) - --grpc_port int Port to listen on for gRPC calls. If zero, do not listen. - --grpc_prometheus Enable gRPC monitoring with Prometheus. - --grpc_server_ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients - --grpc_server_initial_conn_window_size int gRPC server initial connection window size - --grpc_server_initial_window_size int gRPC server initial window size - --grpc_server_keepalive_enforcement_policy_min_time duration gRPC server minimum keepalive time (default 10s) - --grpc_server_keepalive_enforcement_policy_permit_without_stream gRPC server permit client keepalive pings even when there are no active streams (RPCs) - --grpc_server_keepalive_time duration After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive. (default 10s) - --grpc_server_keepalive_timeout duration After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) - --grpc_use_effective_callerid If set, and SSL is not used, will set the immediate caller id from the effective caller id's principal. - --healthcheck_retry_delay duration health check retry delay (default 2ms) - --healthcheck_timeout duration the health check timeout period (default 1m0s) + --healthcheck-retry-delay duration health check retry delay (default 2ms) + --healthcheck-timeout duration the health check timeout period (default 1m0s) -h, --help help for vtgate --jaeger-agent-host string host and port to send spans to. if empty, no tracing will be done - --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) - --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) - --keyspaces_to_watch strings Specifies which keyspaces this vtgate should have access to while routing queries or accessing the vschema. + --keep-logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep-logs-by-mtime duration keep logs for this long (using mtime) (zero to keep forever) + --keyspaces-to-watch strings Specifies which keyspaces this vtgate should have access to while routing queries or accessing the vschema. --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) --legacy_replication_lag_algorithm Use the legacy algorithm when selecting vttablets for serving. (default true) + --lock-heartbeat-time duration If there is lock function used. This will keep the lock connection active by using this heartbeat (default 5s) --lock-timeout duration Maximum time to wait when attempting to acquire a lock from the topo server (default 45s) - --lock_heartbeat_time duration If there is lock function used. This will keep the lock connection active by using this heartbeat (default 5s) + --log-err-stacks log stack traces for errors + --log-queries-to-file string Enable query logging to the specified file + --log-rotate-max-size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace --log_dir string If non-empty, write log files in this directory - --log_err_stacks log stack traces for errors - --log_queries_to_file string Enable query logging to the specified file - --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --logtostderr log to standard error instead of files + --max-memory-rows int Maximum number of rows that will be held in memory for intermediate results as well as the final result. (default 300000) + --max-payload-size int The threshold for query payloads in bytes. A payload greater than this threshold will result in a failure to handle the query. --max-stack-size int configure the maximum stack size in bytes (default 67108864) - --max_memory_rows int Maximum number of rows that will be held in memory for intermediate results as well as the final result. (default 300000) - --max_payload_size int The threshold for query payloads in bytes. A payload greater than this threshold will result in a failure to handle the query. - --message_stream_grace_period duration the amount of time to give for a vttablet to resume if it ends a message stream, usually because of a reparent. (default 30s) + --message-stream-grace-period duration the amount of time to give for a vttablet to resume if it ends a message stream, usually because of a reparent. (default 30s) --min_number_serving_vttablets int The minimum number of vttablets for each replicating tablet_type (e.g. replica, rdonly) that will be continue to be used even with replication lag above discovery_low_replication_lag, but still below discovery_high_replication_lag_minimum_serving. (default 2) - --mysql-server-drain-onterm If set, the server waits for --onterm_timeout for already connected clients to complete their in flight work + --mysql-allow-clear-text-without-tls If set, the server will allow the use of a clear text password over non-SSL connections. + --mysql-auth-server-impl string Which auth server implementation to use. Options: none, ldap, clientcert, static, vault. (default "static") + --mysql-default-workload string Default session workload (OLTP, OLAP, DBA) (default "OLTP") + --mysql-server-bind-address string Binds on this address when listening to MySQL binary protocol. Useful to restrict listening to 'localhost' only for instance. + --mysql-server-drain-onterm If set, the server waits for --onterm-timeout for already connected clients to complete their in flight work + --mysql-server-flush-delay duration Delay after which buffered response will be flushed to the client. (default 100ms) --mysql-server-keepalive-period duration TCP period between keep-alives + --mysql-server-multi-query-protocol If set, the server will use the new implementation of handling queries where-in multiple queries are sent together. --mysql-server-pool-conn-read-buffers If set, the server will pool incoming connection read buffers - --mysql_allow_clear_text_without_tls If set, the server will allow the use of a clear text password over non-SSL connections. - --mysql_auth_server_impl string Which auth server implementation to use. Options: none, ldap, clientcert, static, vault. (default "static") + --mysql-server-port int If set, also listen for MySQL binary protocol connections on this port. (default -1) + --mysql-server-query-timeout duration mysql query timeout + --mysql-server-read-timeout duration connection read timeout + --mysql-server-require-secure-transport Reject insecure connections but only if mysql-server-ssl-cert and mysql-server-ssl-key are provided + --mysql-server-socket-path string This option specifies the Unix socket file to use when listening for local connections. By default it will be empty and it won't listen to a unix socket + --mysql-server-ssl-ca string Path to ssl CA for mysql server plugin SSL. If specified, server will require and validate client certs. + --mysql-server-ssl-cert string Path to the ssl cert for mysql server plugin SSL + --mysql-server-ssl-crl string Path to ssl CRL for mysql server plugin SSL + --mysql-server-ssl-key string Path to ssl key for mysql server plugin SSL + --mysql-server-ssl-server-ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients + --mysql-server-tls-min-version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. + --mysql-server-version string MySQL server version to advertise. (default "8.0.40-Vitess") + --mysql-server-write-timeout duration connection write timeout + --mysql-slow-connect-warn-threshold duration Warn if it takes more than the given threshold for a mysql connection to establish + --mysql-tcp-version string Select tcp, tcp4, or tcp6 to control the socket type. (default "tcp") --mysql_auth_server_static_file string JSON File to read the users/passwords from. --mysql_auth_server_static_string string JSON representation of the users/passwords config. --mysql_auth_static_reload_interval duration Ticker to reload credentials @@ -139,39 +158,21 @@ Flags: --mysql_auth_vault_tokenfile string Path to file containing Vault auth token; token can also be passed using VAULT_TOKEN environment variable --mysql_auth_vault_ttl duration How long to cache vtgate credentials from the Vault server (default 30m0s) --mysql_clientcert_auth_method string client-side authentication method to use. Supported values: mysql_clear_password, dialog. (default "mysql_clear_password") - --mysql_default_workload string Default session workload (OLTP, OLAP, DBA) (default "OLTP") --mysql_ldap_auth_config_file string JSON File from which to read LDAP server config. --mysql_ldap_auth_config_string string JSON representation of LDAP server config. --mysql_ldap_auth_method string client-side authentication method to use. Supported values: mysql_clear_password, dialog. (default "mysql_clear_password") - --mysql_server_bind_address string Binds on this address when listening to MySQL binary protocol. Useful to restrict listening to 'localhost' only for instance. - --mysql_server_flush_delay duration Delay after which buffered response will be flushed to the client. (default 100ms) - --mysql_server_port int If set, also listen for MySQL binary protocol connections on this port. (default -1) - --mysql_server_query_timeout duration mysql query timeout - --mysql_server_read_timeout duration connection read timeout - --mysql_server_require_secure_transport Reject insecure connections but only if mysql_server_ssl_cert and mysql_server_ssl_key are provided - --mysql_server_socket_path string This option specifies the Unix socket file to use when listening for local connections. By default it will be empty and it won't listen to a unix socket - --mysql_server_ssl_ca string Path to ssl CA for mysql server plugin SSL. If specified, server will require and validate client certs. - --mysql_server_ssl_cert string Path to the ssl cert for mysql server plugin SSL - --mysql_server_ssl_crl string Path to ssl CRL for mysql server plugin SSL - --mysql_server_ssl_key string Path to ssl key for mysql server plugin SSL - --mysql_server_ssl_server_ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients - --mysql_server_tls_min_version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. - --mysql_server_version string MySQL server version to advertise. (default "8.0.40-Vitess") - --mysql_server_write_timeout duration connection write timeout - --mysql_slow_connect_warn_threshold duration Warn if it takes more than the given threshold for a mysql connection to establish - --mysql_tcp_version string Select tcp, tcp4, or tcp6 to control the socket type. (default "tcp") - --no_scatter when set to true, the planner will fail instead of producing a plan that includes scatter queries - --normalize_queries Rewrite queries with bind vars. Turn this off if the app itself sends normalized queries with bind vars. (default true) - --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) - --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) - --opentsdb_uri string URI of opentsdb /api/put method - --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --no-scatter when set to true, the planner will fail instead of producing a plan that includes scatter queries + --normalize-queries Rewrite queries with bind vars. Turn this off if the app itself sends normalized queries with bind vars. (default true) + --onclose-timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm-timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) + --opentsdb-uri string URI of opentsdb /api/put method + --pid-file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. --planner-version string Sets the default planner to use when the session has not changed it. Valid values are: Gen4, Gen4Greedy, Gen4Left2Right --port int port for the server --pprof strings enable profiling --pprof-http enable pprof http endpoints - --proxy_protocol Enable HAProxy PROXY protocol on MySQL listener socket - --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --proxy-protocol Enable HAProxy PROXY protocol on MySQL listener socket + --purge-logs-interval duration how often try to remove old logs (default 1h0m0s) --query-timeout int Sets the default query timeout (in ms). Can be overridden by session variable (query_timeout) or comment directive (QUERY_TIMEOUT_MS) --querylog-buffer-size int Maximum number of buffered query logs before throttling log output (default 10) --querylog-filter-tag string string that must be present in the query for it to be logged; if using a value as the tag, you need to disable query normalization @@ -180,56 +181,56 @@ Flags: --querylog-row-threshold uint Number of rows a query has to return or affect before being logged; not useful for streaming queries. 0 means all queries will be logged. --querylog-sample-rate float Sample rate for logging queries. Value must be between 0.0 (no logging) and 1.0 (all queries) --redact-debug-ui-queries redact full queries and bind variables from debug UI - --remote_operation_timeout duration time to wait for a remote operation (default 15s) + --remote-operation-timeout duration time to wait for a remote operation (default 15s) --retry-count int retry count (default 2) --schema_change_signal Enable the schema tracker; requires queryserver-config-schema-change-signal to be enabled on the underlying vttablets for this to work (default true) - --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) - --service_map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice + --security-policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --service-map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice --sql-max-length-errors int truncate queries in error logs to the given length (default unlimited) --sql-max-length-ui int truncate queries in debug UIs to the given length (default 512) (default 512) - --srv_topo_cache_refresh duration how frequently to refresh the topology for cached entries (default 1s) - --srv_topo_cache_ttl duration how long to use cached entries for topology (default 1s) - --srv_topo_timeout duration topo server timeout (default 5s) - --stats_backend string The name of the registered push-based monitoring/stats backend to use - --stats_combine_dimensions string List of dimensions to be combined into a single "all" value in exported stats vars - --stats_common_tags strings Comma-separated list of common tags for the stats backend. It provides both label and values. Example: label1:value1,label2:value2 - --stats_drop_variables string Variables to be dropped from the list of exported variables. - --stats_emit_period duration Interval between emitting stats to all registered backends (default 1m0s) + --srv-topo-cache-refresh duration how frequently to refresh the topology for cached entries (default 1s) + --srv-topo-cache-ttl duration how long to use cached entries for topology (default 1s) + --srv-topo-timeout duration topo server timeout (default 5s) + --stats-backend string The name of the registered push-based monitoring/stats backend to use + --stats-combine-dimensions string List of dimensions to be combined into a single "all" value in exported stats vars + --stats-common-tags strings Comma-separated list of common tags for the stats backend. It provides both label and values. Example: label1:value1,label2:value2 + --stats-drop-variables string Variables to be dropped from the list of exported variables. + --stats-emit-period duration Interval between emitting stats to all registered backends (default 1m0s) --statsd_address string Address for statsd client --statsd_sample_rate float Sample rate for statsd metrics (default 1) --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) --stream_buffer_size int the number of bytes sent from vtgate for each stream call. It's recommended to keep this value in sync with vttablet's query-server-config-stream-buffer-size. (default 32768) --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class --tablet-filter-tags StringMap Specifies a comma-separated list of tablet tags (as key:value pairs) to filter the tablets to watch. + --tablet-grpc-ca string the server ca to use to validate servers when connecting + --tablet-grpc-cert string the cert to use to connect + --tablet-grpc-crl string the server crl to use to validate server certificates when connecting + --tablet-grpc-key string the key to use to connect + --tablet-grpc-server-name string the server name to use to validate server certificate + --tablet-protocol string Protocol to use to make queryservice RPCs to vttablets. (default "grpc") + --tablet-refresh-interval duration Tablet refresh interval. (default 1m0s) + --tablet-refresh-known-tablets Whether to reload the tablet's address/port map from topo in case they change. (default true) + --tablet-types-to-wait strings Wait till connected for specified tablet types during Gateway initialization. Should be provided as a comma-separated set of tablet types. + --tablet-url-template string Format string describing debug tablet url formatting. See getTabletDebugURL() for how to customize this. (default "http://{{ "{{.GetTabletHostPort}}" }}") --tablet_filters strings Specifies a comma-separated list of 'keyspace|shard_name or keyrange' values to filter the tablets to watch. - --tablet_grpc_ca string the server ca to use to validate servers when connecting - --tablet_grpc_cert string the cert to use to connect - --tablet_grpc_crl string the server crl to use to validate server certificates when connecting - --tablet_grpc_key string the key to use to connect - --tablet_grpc_server_name string the server name to use to validate server certificate - --tablet_protocol string Protocol to use to make queryservice RPCs to vttablets. (default "grpc") - --tablet_refresh_interval duration Tablet refresh interval. (default 1m0s) - --tablet_refresh_known_tablets Whether to reload the tablet's address/port map from topo in case they change. (default true) - --tablet_types_to_wait strings Wait till connected for specified tablet types during Gateway initialization. Should be provided as a comma-separated set of tablet types. - --tablet_url_template string Format string describing debug tablet url formatting. See getTabletDebugURL() for how to customize this. (default "http://{{ "{{.GetTabletHostPort}}" }}") - --topo_consul_lock_delay duration LockDelay for consul session. (default 15s) - --topo_consul_lock_session_checks string List of checks for consul session. (default "serfHealth") - --topo_consul_lock_session_ttl string TTL for consul session. - --topo_consul_watch_poll_duration duration time of the long poll for watch queries. (default 30s) - --topo_etcd_lease_ttl int Lease TTL for locks and leader election. The client will use KeepAlive to keep the lease going. (default 30) - --topo_etcd_tls_ca string path to the ca to use to validate the server cert when connecting to the etcd topo server - --topo_etcd_tls_cert string path to the client cert to use to connect to the etcd topo server, requires topo_etcd_tls_key, enables TLS - --topo_etcd_tls_key string path to the client key to use to connect to the etcd topo server, enables TLS - --topo_global_root string the path of the global topology data in the global topology server - --topo_global_server_address string the address of the global topology server - --topo_implementation string the topology implementation to use - --topo_read_concurrency int Maximum concurrency of topo reads per global or local cell. (default 32) - --topo_zk_auth_file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass - --topo_zk_base_timeout duration zk base timeout (see zk.Connect) (default 30s) - --topo_zk_max_concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64) - --topo_zk_tls_ca string the server ca to use to validate servers when connecting to the zk topo server - --topo_zk_tls_cert string the cert to use to connect to the zk topo server, requires topo_zk_tls_key, enables TLS - --topo_zk_tls_key string the key to use to connect to the zk topo server, enables TLS + --topo-consul-lock-delay duration LockDelay for consul session. (default 15s) + --topo-consul-lock-session-checks string List of checks for consul session. (default "serfHealth") + --topo-consul-lock-session-ttl string TTL for consul session. + --topo-consul-watch-poll-duration duration time of the long poll for watch queries. (default 30s) + --topo-etcd-lease-ttl int Lease TTL for locks and leader election. The client will use KeepAlive to keep the lease going. (default 30) + --topo-etcd-tls-ca string path to the ca to use to validate the server cert when connecting to the etcd topo server + --topo-etcd-tls-cert string path to the client cert to use to connect to the etcd topo server, requires topo-etcd-tls-key, enables TLS + --topo-etcd-tls-key string path to the client key to use to connect to the etcd topo server, enables TLS + --topo-global-root string the path of the global topology data in the global topology server + --topo-global-server-address string the address of the global topology server + --topo-implementation string the topology implementation to use + --topo-read-concurrency int Maximum concurrency of topo reads per global or local cell. (default 32) + --topo-zk-auth-file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass + --topo-zk-base-timeout duration zk base timeout (see zk.Connect) (default 30s) + --topo-zk-max-concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64) + --topo-zk-tls-ca string the server ca to use to validate servers when connecting to the zk topo server + --topo-zk-tls-cert string the cert to use to connect to the zk topo server, requires topo-zk-tls-key, enables TLS + --topo-zk-tls-key string the key to use to connect to the zk topo server, enables TLS --tracer string tracing service to use (default "noop") --tracing-enable-logging whether to enable logging in the tracing service --tracing-sampling-rate float sampling rate for the probabilistic jaeger sampler (default 0.1) @@ -245,6 +246,6 @@ Flags: --warming-reads-concurrency int Number of concurrent warming reads allowed (default 500) --warming-reads-percent int Percentage of reads on the primary to forward to replicas. Useful for keeping buffer pools warm --warming-reads-query-timeout duration Timeout of warming read queries (default 5s) - --warn_memory_rows int Warning threshold for in-memory results. A row count higher than this amount will cause the VtGateWarnings.ResultsExceeded counter to be incremented. (default 30000) - --warn_payload_size int The warning threshold for query payloads in bytes. A payload greater than this threshold will cause the VtGateWarnings.WarnPayloadSizeExceeded counter to be incremented. - --warn_sharded_only If any features that are only available in unsharded mode are used, query execution warnings will be added to the session + --warn-memory-rows int Warning threshold for in-memory results. A row count higher than this amount will cause the VtGateWarnings.ResultsExceeded counter to be incremented. (default 30000) + --warn-payload-size int The warning threshold for query payloads in bytes. A payload greater than this threshold will cause the VtGateWarnings.WarnPayloadSizeExceeded counter to be incremented. + --warn-sharded-only If any features that are only available in unsharded mode are used, query execution warnings will be added to the session diff --git a/go/flags/endtoend/vtgateclienttest.txt b/go/flags/endtoend/vtgateclienttest.txt index d5b45e57b1e..326406686f8 100644 --- a/go/flags/endtoend/vtgateclienttest.txt +++ b/go/flags/endtoend/vtgateclienttest.txt @@ -14,55 +14,55 @@ Flags: --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) --config-type string Config file type (omit to infer config type from file extension). --default_tablet_type topodatapb.TabletType The default tablet type to set for queries, when one is not explicitly selected. (default PRIMARY) + --grpc-auth-mode string Which auth plugin implementation to use (eg: static) + --grpc-auth-mtls-allowed-substrings string List of substrings of at least one of the client certificate names (separated by colon). + --grpc-auth-static-client-creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. + --grpc-auth-static-password-file string JSON File to read the users/passwords from. + --grpc-bind-address string Bind address for gRPC calls. If empty, listen on all addresses. + --grpc-ca string server CA to use for gRPC connections, requires TLS, and enforces client certificate check + --grpc-cert string server certificate to use for gRPC connections, requires grpc-key, enables TLS + --grpc-compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy + --grpc-crl string path to a certificate revocation list in PEM format, client certificates will be further verified against this file during TLS handshake --grpc-dial-concurrency-limit int Maximum concurrency of grpc dial operations. This should be less than the golang max thread limit of 10000. (default 1024) - --grpc_auth_mode string Which auth plugin implementation to use (eg: static) - --grpc_auth_mtls_allowed_substrings string List of substrings of at least one of the client certificate names (separated by colon). - --grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. - --grpc_auth_static_password_file string JSON File to read the users/passwords from. - --grpc_bind_address string Bind address for gRPC calls. If empty, listen on all addresses. - --grpc_ca string server CA to use for gRPC connections, requires TLS, and enforces client certificate check - --grpc_cert string server certificate to use for gRPC connections, requires grpc_key, enables TLS - --grpc_compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy - --grpc_crl string path to a certificate revocation list in PEM format, client certificates will be further verified against this file during TLS handshake - --grpc_enable_optional_tls enable optional TLS mode when a server accepts both TLS and plain-text connections on the same port - --grpc_enable_tracing Enable gRPC tracing. - --grpc_initial_conn_window_size int gRPC initial connection window size - --grpc_initial_window_size int gRPC initial window size - --grpc_keepalive_time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) - --grpc_keepalive_timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) - --grpc_key string server private key to use for gRPC connections, requires grpc_cert, enables TLS - --grpc_max_connection_age duration Maximum age of a client connection before GoAway is sent. (default 2562047h47m16.854775807s) - --grpc_max_connection_age_grace duration Additional grace period after grpc_max_connection_age, after which connections are forcibly closed. (default 2562047h47m16.854775807s) - --grpc_max_message_size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) - --grpc_port int Port to listen on for gRPC calls. If zero, do not listen. - --grpc_prometheus Enable gRPC monitoring with Prometheus. - --grpc_server_ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients - --grpc_server_initial_conn_window_size int gRPC server initial connection window size - --grpc_server_initial_window_size int gRPC server initial window size - --grpc_server_keepalive_enforcement_policy_min_time duration gRPC server minimum keepalive time (default 10s) - --grpc_server_keepalive_enforcement_policy_permit_without_stream gRPC server permit client keepalive pings even when there are no active streams (RPCs) - --grpc_server_keepalive_time duration After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive. (default 10s) - --grpc_server_keepalive_timeout duration After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc-enable-optional-tls enable optional TLS mode when a server accepts both TLS and plain-text connections on the same port + --grpc-enable-tracing Enable gRPC tracing. + --grpc-initial-conn-window-size int gRPC initial connection window size + --grpc-initial-window-size int gRPC initial window size + --grpc-keepalive-time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) + --grpc-keepalive-timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc-key string server private key to use for gRPC connections, requires grpc-cert, enables TLS + --grpc-max-connection-age duration Maximum age of a client connection before GoAway is sent. (default 2562047h47m16.854775807s) + --grpc-max-connection-age-grace duration Additional grace period after grpc-max-connection-age, after which connections are forcibly closed. (default 2562047h47m16.854775807s) + --grpc-max-message-size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) + --grpc-port int Port to listen on for gRPC calls. If zero, do not listen. + --grpc-prometheus Enable gRPC monitoring with Prometheus. + --grpc-server-ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients + --grpc-server-initial-conn-window-size int gRPC server initial connection window size + --grpc-server-initial-window-size int gRPC server initial window size + --grpc-server-keepalive-enforcement-policy-min-time duration gRPC server minimum keepalive time (default 10s) + --grpc-server-keepalive-enforcement-policy-permit-without-stream gRPC server permit client keepalive pings even when there are no active streams (RPCs) + --grpc-server-keepalive-time duration After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive. (default 10s) + --grpc-server-keepalive-timeout duration After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) -h, --help help for vtgateclienttest - --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) - --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --keep-logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep-logs-by-mtime duration keep logs for this long (using mtime) (zero to keep forever) --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) + --log-err-stacks log stack traces for errors + --log-rotate-max-size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace --log_dir string If non-empty, write log files in this directory - --log_err_stacks log stack traces for errors - --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --logtostderr log to standard error instead of files --max-stack-size int configure the maximum stack size in bytes (default 67108864) - --mysql_server_version string MySQL server version to advertise. (default "8.0.40-Vitess") - --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) - --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) - --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --mysql-server-version string MySQL server version to advertise. (default "8.0.40-Vitess") + --onclose-timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm-timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) + --pid-file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. --port int port for the server --pprof strings enable profiling --pprof-http enable pprof http endpoints - --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) - --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) - --service_map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice + --purge-logs-interval duration how often try to remove old logs (default 1h0m0s) + --security-policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --service-map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class --v Level log level for V logs diff --git a/go/flags/endtoend/vtorc.txt b/go/flags/endtoend/vtorc.txt index 1179fe6ccb7..749dbfa6ea1 100644 --- a/go/flags/endtoend/vtorc.txt +++ b/go/flags/endtoend/vtorc.txt @@ -5,9 +5,9 @@ Usage: Examples: vtorc \ - --topo_implementation etcd2 \ - --topo_global_server_address localhost:2379 \ - --topo_global_root /vitess/global \ + --topo-implementation etcd2 \ + --topo-global-server-address localhost:2379 \ + --topo-global-root /vitess/global \ --log_dir $VTDATAROOT/tmp \ --port 15000 \ --instance-poll-time "1s" \ @@ -33,82 +33,82 @@ Flags: --config-path strings Paths to search for config files in. (default [{{ .Workdir }}]) --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) --config-type string Config file type (omit to infer config type from file extension). - --consul_auth_static_file string JSON File to read the topos/tokens from. + --consul-auth-static-file string JSON File to read the topos/tokens from. --discovery-workers int Number of workers used for tablet discovery (default 300) - --emit_stats If set, emit stats to push-based monitoring and stats backends + --emit-stats If set, emit stats to push-based monitoring and stats backends --enable-primary-disk-stalled-recovery Whether VTOrc should detect a stalled disk on the primary and failover + --grpc-auth-static-client-creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. + --grpc-compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy --grpc-dial-concurrency-limit int Maximum concurrency of grpc dial operations. This should be less than the golang max thread limit of 10000. (default 1024) - --grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. - --grpc_compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy - --grpc_enable_tracing Enable gRPC tracing. - --grpc_initial_conn_window_size int gRPC initial connection window size - --grpc_initial_window_size int gRPC initial window size - --grpc_keepalive_time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) - --grpc_keepalive_timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) - --grpc_max_message_size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) - --grpc_prometheus Enable gRPC monitoring with Prometheus. + --grpc-enable-tracing Enable gRPC tracing. + --grpc-initial-conn-window-size int gRPC initial connection window size + --grpc-initial-window-size int gRPC initial window size + --grpc-keepalive-time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) + --grpc-keepalive-timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc-max-message-size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) + --grpc-prometheus Enable gRPC monitoring with Prometheus. -h, --help help for vtorc --instance-poll-time duration Timer duration on which VTOrc refreshes MySQL information (default 5s) - --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) - --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --keep-logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep-logs-by-mtime duration keep logs for this long (using mtime) (zero to keep forever) --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) --lock-timeout duration Maximum time to wait when attempting to acquire a lock from the topo server (default 45s) + --log-err-stacks log stack traces for errors + --log-rotate-max-size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace --log_dir string If non-empty, write log files in this directory - --log_err_stacks log stack traces for errors - --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --logtostderr log to standard error instead of files --max-stack-size int configure the maximum stack size in bytes (default 67108864) - --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) - --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) - --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --onclose-timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm-timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) + --pid-file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. --port int port for the server --pprof strings enable profiling --pprof-http enable pprof http endpoints --prevent-cross-cell-failover Prevent VTOrc from promoting a primary in a different cell than the current primary in case of a failover - --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --purge-logs-interval duration how often try to remove old logs (default 1h0m0s) --reasonable-replication-lag duration Maximum replication lag on replicas which is deemed to be acceptable (default 10s) --recovery-poll-duration duration Timer duration on which VTOrc polls its database to run a recovery (default 1s) - --remote_operation_timeout duration time to wait for a remote operation (default 15s) - --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --remote-operation-timeout duration time to wait for a remote operation (default 15s) + --security-policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) --shutdown_wait_time duration Maximum time to wait for VTOrc to release all the locks that it is holding before shutting down on SIGTERM (default 30s) --snapshot-topology-interval duration Timer duration on which VTOrc takes a snapshot of the current MySQL information it has in the database. Should be in multiple of hours --sqlite-data-file string SQLite Datafile to use as VTOrc's database (default "file::memory:?mode=memory&cache=shared") - --stats_backend string The name of the registered push-based monitoring/stats backend to use - --stats_combine_dimensions string List of dimensions to be combined into a single "all" value in exported stats vars - --stats_common_tags strings Comma-separated list of common tags for the stats backend. It provides both label and values. Example: label1:value1,label2:value2 - --stats_drop_variables string Variables to be dropped from the list of exported variables. - --stats_emit_period duration Interval between emitting stats to all registered backends (default 1m0s) + --stats-backend string The name of the registered push-based monitoring/stats backend to use + --stats-combine-dimensions string List of dimensions to be combined into a single "all" value in exported stats vars + --stats-common-tags strings Comma-separated list of common tags for the stats backend. It provides both label and values. Example: label1:value1,label2:value2 + --stats-drop-variables string Variables to be dropped from the list of exported variables. + --stats-emit-period duration Interval between emitting stats to all registered backends (default 1m0s) --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class - --tablet_manager_grpc_ca string the server ca to use to validate servers when connecting - --tablet_manager_grpc_cert string the cert to use to connect - --tablet_manager_grpc_concurrency int concurrency to use to talk to a vttablet server for performance-sensitive RPCs (like ExecuteFetchAs{Dba,App}, CheckThrottler and FullStatus) (default 8) - --tablet_manager_grpc_connpool_size int number of tablets to keep tmclient connections open to (default 100) - --tablet_manager_grpc_crl string the server crl to use to validate server certificates when connecting - --tablet_manager_grpc_key string the key to use to connect - --tablet_manager_grpc_server_name string the server name to use to validate server certificate - --tablet_manager_protocol string Protocol to use to make tabletmanager RPCs to vttablets. (default "grpc") + --tablet-manager-grpc-ca string the server ca to use to validate servers when connecting + --tablet-manager-grpc-cert string the cert to use to connect + --tablet-manager-grpc-concurrency int concurrency to use to talk to a vttablet server for performance-sensitive RPCs (like ExecuteFetchAs{Dba,App}, CheckThrottler and FullStatus) (default 8) + --tablet-manager-grpc-connpool-size int number of tablets to keep tmclient connections open to (default 100) + --tablet-manager-grpc-crl string the server crl to use to validate server certificates when connecting + --tablet-manager-grpc-key string the key to use to connect + --tablet-manager-grpc-server-name string the server name to use to validate server certificate + --tablet-manager-protocol string Protocol to use to make tabletmanager RPCs to vttablets. (default "grpc") --tolerable-replication-lag duration Amount of replication lag that is considered acceptable for a tablet to be eligible for promotion when Vitess makes the choice of a new primary in PRS + --topo-consul-lock-delay duration LockDelay for consul session. (default 15s) + --topo-consul-lock-session-checks string List of checks for consul session. (default "serfHealth") + --topo-consul-lock-session-ttl string TTL for consul session. + --topo-consul-watch-poll-duration duration time of the long poll for watch queries. (default 30s) + --topo-etcd-lease-ttl int Lease TTL for locks and leader election. The client will use KeepAlive to keep the lease going. (default 30) + --topo-etcd-tls-ca string path to the ca to use to validate the server cert when connecting to the etcd topo server + --topo-etcd-tls-cert string path to the client cert to use to connect to the etcd topo server, requires topo-etcd-tls-key, enables TLS + --topo-etcd-tls-key string path to the client key to use to connect to the etcd topo server, enables TLS + --topo-global-root string the path of the global topology data in the global topology server + --topo-global-server-address string the address of the global topology server + --topo-implementation string the topology implementation to use --topo-information-refresh-duration duration Timer duration on which VTOrc refreshes the keyspace and vttablet records from the topology server (default 15s) - --topo_consul_lock_delay duration LockDelay for consul session. (default 15s) - --topo_consul_lock_session_checks string List of checks for consul session. (default "serfHealth") - --topo_consul_lock_session_ttl string TTL for consul session. - --topo_consul_watch_poll_duration duration time of the long poll for watch queries. (default 30s) - --topo_etcd_lease_ttl int Lease TTL for locks and leader election. The client will use KeepAlive to keep the lease going. (default 30) - --topo_etcd_tls_ca string path to the ca to use to validate the server cert when connecting to the etcd topo server - --topo_etcd_tls_cert string path to the client cert to use to connect to the etcd topo server, requires topo_etcd_tls_key, enables TLS - --topo_etcd_tls_key string path to the client key to use to connect to the etcd topo server, enables TLS - --topo_global_root string the path of the global topology data in the global topology server - --topo_global_server_address string the address of the global topology server - --topo_implementation string the topology implementation to use - --topo_read_concurrency int Maximum concurrency of topo reads per global or local cell. (default 32) - --topo_zk_auth_file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass - --topo_zk_base_timeout duration zk base timeout (see zk.Connect) (default 30s) - --topo_zk_max_concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64) - --topo_zk_tls_ca string the server ca to use to validate servers when connecting to the zk topo server - --topo_zk_tls_cert string the cert to use to connect to the zk topo server, requires topo_zk_tls_key, enables TLS - --topo_zk_tls_key string the key to use to connect to the zk topo server, enables TLS + --topo-read-concurrency int Maximum concurrency of topo reads per global or local cell. (default 32) + --topo-zk-auth-file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass + --topo-zk-base-timeout duration zk base timeout (see zk.Connect) (default 30s) + --topo-zk-max-concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64) + --topo-zk-tls-ca string the server ca to use to validate servers when connecting to the zk topo server + --topo-zk-tls-cert string the cert to use to connect to the zk topo server, requires topo-zk-tls-key, enables TLS + --topo-zk-tls-key string the key to use to connect to the zk topo server, enables TLS --v Level log level for V logs -v, --version print binary version --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging diff --git a/go/flags/endtoend/vttablet.txt b/go/flags/endtoend/vttablet.txt index 04eb16edc25..07ae79bf85d 100644 --- a/go/flags/endtoend/vttablet.txt +++ b/go/flags/endtoend/vttablet.txt @@ -3,7 +3,7 @@ The VTTablet server _controls_ a running MySQL server. VTTablet supports two pri * Managed MySQL (most common) * External MySQL -In addition to these deployment types, a partially managed VTTablet is also possible by setting `--disable_active_reparents`. +In addition to these deployment types, a partially managed VTTablet is also possible by setting `--disable-active-reparents`. ### Managed MySQL @@ -18,8 +18,8 @@ See "Unmanaged Tablet" for the full guide. Even if a MySQL is external, you can still make vttablet perform some management functions. They are as follows: * `--unmanaged`: This flag indicates that this tablet is running in unmanaged mode. In this mode, any reparent or replica commands are not allowed. These are InitShardPrimary, PlannedReparentShard, EmergencyReparentShard, and ReparentTablet. You should use the TabletExternallyReparented command to inform vitess of the current primary. -* `--replication_connect_retry`: This value is give to mysql when it connects a replica to the primary as the retry duration parameter. -* `--heartbeat_enable` and `--heartbeat_interval duration`: cause vttablet to write heartbeats to the sidecar database. This information is also used by the replication reporter to assess replica lag. +* `--replication-connect-retry`: This value is give to mysql when it connects a replica to the primary as the retry duration parameter. +* `--heartbeat-enable` and `--heartbeat-interval duration`: cause vttablet to write heartbeats to the sidecar database. This information is also used by the replication reporter to assess replica lag. Usage: vttablet [flags] @@ -27,49 +27,49 @@ Usage: Examples: vttablet \ - --topo_implementation etcd2 \ - --topo_global_server_address localhost:2379 \ - --topo_global_root /vitess/ \ + --topo-implementation etcd2 \ + --topo-global-server-address localhost:2379 \ + --topo-global-root /vitess/ \ --tablet-path $alias \ - --init_keyspace $keyspace \ - --init_shard $shard \ - --init_tablet_type $tablet_type \ + --init-keyspace $keyspace \ + --init-shard $shard \ + --init-tablet-type $tablet_type \ --port $port \ - --grpc_port $grpc_port \ - --service_map 'grpc-queryservice,grpc-tabletmanager,grpc-updatestream' + --grpc-port $grpc_port \ + --service-map 'grpc-queryservice,grpc-tabletmanager,grpc-updatestream' `$alias` needs to be of the form: `-id`, and the cell should match one of the local cells that was created in the topology. The id can be left padded with zeroes: `cell-100` and `cell-000000100` are synonymous. Flags: --alsologtostderr log to standard error as well as files - --app_idle_timeout duration Idle timeout for app connections (default 1m0s) - --app_pool_size int Size of the connection pool for app connections (default 40) - --azblob_backup_account_key_file string Path to a file containing the Azure Storage account key; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_KEY will be used as the key itself (NOT a file path). - --azblob_backup_account_name string Azure Storage Account name for backups; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_NAME will be used. - --azblob_backup_buffer_size int The memory buffer size to use in bytes, per file or stripe, when streaming to Azure Blob Service. (default 104857600) - --azblob_backup_container_name string Azure Blob Container Name. - --azblob_backup_parallelism int Azure Blob operation parallelism (requires extra memory when increased -- a multiple of azblob_backup_buffer_size). (default 1) - --azblob_backup_storage_root string Root prefix for all backup-related Azure Blobs; this should exclude both initial and trailing '/' (e.g. just 'a/b' not '/a/b/'). - --backup_engine_implementation string Specifies which implementation to use for creating new backups (builtin or xtrabackup). Restores will always be done with whichever engine created a given backup. (default "builtin") - --backup_storage_block_size int if backup_storage_compress is true, backup_storage_block_size sets the byte size for each block while compressing (default is 250000). (default 250000) - --backup_storage_compress if set, the backup files will be compressed. (default true) - --backup_storage_implementation string Which backup storage implementation to use for creating and restoring backups. - --backup_storage_number_blocks int if backup_storage_compress is true, backup_storage_number_blocks sets the number of blocks that can be processed, in parallel, before the writer blocks, during compression (default is 2). It should be equal to the number of CPUs available for compression. (default 2) + --app-idle-timeout duration Idle timeout for app connections (default 1m0s) + --app-pool-size int Size of the connection pool for app connections (default 40) + --azblob-backup-account-key-file string Path to a file containing the Azure Storage account key; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_KEY will be used as the key itself (NOT a file path). + --azblob-backup-account-name string Azure Storage Account name for backups; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_NAME will be used. + --azblob-backup-buffer-size int The memory buffer size to use in bytes, per file or stripe, when streaming to Azure Blob Service. (default 104857600) + --azblob-backup-container-name string Azure Blob Container Name. + --azblob-backup-parallelism int Azure Blob operation parallelism (requires extra memory when increased -- a multiple of azblob-backup-buffer-size). (default 1) + --azblob-backup-storage-root string Root prefix for all backup-related Azure Blobs; this should exclude both initial and trailing '/' (e.g. just 'a/b' not '/a/b/'). + --backup-engine-implementation string Specifies which implementation to use for creating new backups (builtin or xtrabackup). Restores will always be done with whichever engine created a given backup. (default "builtin") + --backup-storage-block-size int if backup-storage-compress is true, backup-storage-block-size sets the byte size for each block while compressing (default is 250000). (default 250000) + --backup-storage-compress if set, the backup files will be compressed. (default true) + --backup-storage-implementation string Which backup storage implementation to use for creating and restoring backups. + --backup-storage-number-blocks int if backup-storage-compress is true, backup-storage-number-blocks sets the number of blocks that can be processed, in parallel, before the writer blocks, during compression (default is 2). It should be equal to the number of CPUs available for compression. (default 2) --bind-address string Bind address for the server. If empty, the server will listen on all available unicast and anycast IP addresses of the local system. --binlog-in-memory-decompressor-max-size uint This value sets the uncompressed transaction payload size at which we switch from in-memory buffer based decompression to the slower streaming mode. (default 134217728) + --binlog-player-protocol string the protocol to download binlogs from a vttablet (default "grpc") --binlog_player_grpc_ca string the server ca to use to validate servers when connecting --binlog_player_grpc_cert string the cert to use to connect --binlog_player_grpc_crl string the server crl to use to validate server certificates when connecting --binlog_player_grpc_key string the key to use to connect --binlog_player_grpc_server_name string the server name to use to validate server certificate - --binlog_player_protocol string the protocol to download binlogs from a vttablet (default "grpc") --builtinbackup-file-read-buffer-size uint read files using an IO buffer of this many bytes. Golang defaults are used when set to 0. --builtinbackup-file-write-buffer-size uint write files using an IO buffer of this many bytes. Golang defaults are used when set to 0. (default 2097152) --builtinbackup-incremental-restore-path string the directory where incremental restore files, namely binlog files, are extracted to. In k8s environments, this should be set to a directory that is shared between the vttablet and mysqld pods. The path should exist. When empty, the default OS temp dir is assumed. - --builtinbackup_mysqld_timeout duration how long to wait for mysqld to shutdown at the start of the backup. (default 10m0s) - --builtinbackup_progress duration how often to send progress updates when backing up large files. (default 5s) + --builtinbackup-mysqld-timeout duration how long to wait for mysqld to shutdown at the start of the backup. (default 10m0s) + --builtinbackup-progress duration how often to send progress updates when backing up large files. (default 5s) --catch-sigpipe catch and ignore SIGPIPE on stdout and stderr if specified - --ceph_backup_storage_config string Path to JSON config file for ceph backup storage. (default "ceph_backup_config.json") + --ceph-backup-storage-config string Path to JSON config file for ceph backup storage. (default "ceph_backup_config.json") --compression-engine-name string compressor engine used for compression. (default "pargzip") --compression-level int what level to pass to the compressor. (default 1) --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. @@ -81,9 +81,21 @@ Flags: --consolidator-query-waiter-cap int Configure the maximum number of clients allowed to wait on the consolidator. --consolidator-stream-query-size int Configure the stream consolidator query size in bytes. Setting to 0 disables the stream consolidator. (default 2097152) --consolidator-stream-total-size int Configure the stream consolidator total size in bytes. Setting to 0 disables the stream consolidator. (default 134217728) - --consul_auth_static_file string JSON File to read the topos/tokens from. + --consul-auth-static-file string JSON File to read the topos/tokens from. --datadog-agent-host string host to send spans to. if empty, no tracing will be done --datadog-agent-port string port to send spans to. if empty, no tracing will be done + --db-allprivs-password string db allprivs password + --db-allprivs-use-ssl Set this flag to false to make the allprivs connection to not use ssl (default true) + --db-allprivs-user string db allprivs user userKey (default "vt_allprivs") + --db-app-password string db app password + --db-app-use-ssl Set this flag to false to make the app connection to not use ssl (default true) + --db-app-user string db app user userKey (default "vt_app") + --db-appdebug-password string db appdebug password + --db-appdebug-use-ssl Set this flag to false to make the appdebug connection to not use ssl (default true) + --db-appdebug-user string db appdebug user userKey (default "vt_appdebug") + --db-charset string Character set/collation used for this tablet. Make sure to configure this to a charset/collation supported by the lowest MySQL version in your environment. (default "utf8mb4") + --db-conn-query-info enable parsing and processing of QUERY_OK info fields + --db-connect-timeout-ms int connection timeout to mysqld in milliseconds (0 for no timeout) --db-credentials-file string db credentials file; send SIGHUP to reload this file --db-credentials-server string db credentials server type ('file' - file implementation; 'vault' - HashiCorp Vault implementation) (default "file") --db-credentials-vault-addr string URL to Vault server @@ -95,151 +107,137 @@ Flags: --db-credentials-vault-tls-ca string Path to CA PEM for validating Vault server certificate --db-credentials-vault-tokenfile string Path to file containing Vault auth token; token can also be passed using VAULT_TOKEN environment variable --db-credentials-vault-ttl duration How long to cache DB credentials from the Vault server (default 30m0s) - --db_allprivs_password string db allprivs password - --db_allprivs_use_ssl Set this flag to false to make the allprivs connection to not use ssl (default true) - --db_allprivs_user string db allprivs user userKey (default "vt_allprivs") - --db_app_password string db app password - --db_app_use_ssl Set this flag to false to make the app connection to not use ssl (default true) - --db_app_user string db app user userKey (default "vt_app") - --db_appdebug_password string db appdebug password - --db_appdebug_use_ssl Set this flag to false to make the appdebug connection to not use ssl (default true) - --db_appdebug_user string db appdebug user userKey (default "vt_appdebug") - --db_charset string Character set/collation used for this tablet. Make sure to configure this to a charset/collation supported by the lowest MySQL version in your environment. (default "utf8mb4") - --db_conn_query_info enable parsing and processing of QUERY_OK info fields - --db_connect_timeout_ms int connection timeout to mysqld in milliseconds (0 for no timeout) - --db_dba_password string db dba password - --db_dba_use_ssl Set this flag to false to make the dba connection to not use ssl (default true) - --db_dba_user string db dba user userKey (default "vt_dba") - --db_erepl_password string db erepl password - --db_erepl_use_ssl Set this flag to false to make the erepl connection to not use ssl (default true) - --db_erepl_user string db erepl user userKey (default "vt_erepl") - --db_filtered_password string db filtered password - --db_filtered_use_ssl Set this flag to false to make the filtered connection to not use ssl (default true) - --db_filtered_user string db filtered user userKey (default "vt_filtered") - --db_flags uint Flag values as defined by MySQL. - --db_flavor string Flavor overrid. Valid value is FilePos. - --db_host string The host name for the tcp connection. - --db_port int tcp port - --db_repl_password string db repl password - --db_repl_use_ssl Set this flag to false to make the repl connection to not use ssl (default true) - --db_repl_user string db repl user userKey (default "vt_repl") - --db_server_name string server name of the DB we are connecting to. - --db_socket string The unix socket to connect on. If this is specified, host and port will not be used. - --db_ssl_ca string connection ssl ca - --db_ssl_ca_path string connection ssl ca path - --db_ssl_cert string connection ssl certificate - --db_ssl_key string connection ssl key - --db_ssl_mode SslMode SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity. - --db_tls_min_version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. - --dba_idle_timeout duration Idle timeout for dba connections (default 1m0s) - --dba_pool_size int Size of the connection pool for dba connections (default 20) - --degraded_threshold duration replication lag after which a replica is considered degraded (default 30s) + --db-dba-password string db dba password + --db-dba-use-ssl Set this flag to false to make the dba connection to not use ssl (default true) + --db-dba-user string db dba user userKey (default "vt_dba") + --db-erepl-password string db erepl password + --db-erepl-use-ssl Set this flag to false to make the erepl connection to not use ssl (default true) + --db-erepl-user string db erepl user userKey (default "vt_erepl") + --db-filtered-password string db filtered password + --db-filtered-use-ssl Set this flag to false to make the filtered connection to not use ssl (default true) + --db-filtered-user string db filtered user userKey (default "vt_filtered") + --db-flags uint Flag values as defined by MySQL. + --db-flavor string Flavor overrid. Valid value is FilePos. + --db-host string The host name for the tcp connection. + --db-port int tcp port + --db-repl-password string db repl password + --db-repl-use-ssl Set this flag to false to make the repl connection to not use ssl (default true) + --db-repl-user string db repl user userKey (default "vt_repl") + --db-server-name string server name of the DB we are connecting to. + --db-socket string The unix socket to connect on. If this is specified, host and port will not be used. + --db-ssl-ca string connection ssl ca + --db-ssl-ca-path string connection ssl ca path + --db-ssl-cert string connection ssl certificate + --db-ssl-key string connection ssl key + --db-ssl-mode SslMode SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity. + --db-tls-min-version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. + --dba-idle-timeout duration Idle timeout for dba connections (default 1m0s) + --dba-pool-size int Size of the connection pool for dba connections (default 20) + --degraded-threshold duration replication lag after which a replica is considered degraded (default 30s) --disk-write-dir string if provided, tablet will attempt to write a file to this directory to check if the disk is stalled --disk-write-interval duration how often to write to the disk to check whether it is stalled (default 5s) --disk-write-timeout duration if writes exceed this duration, the disk is considered stalled (default 30s) - --emit_stats If set, emit stats to push-based monitoring and stats backends - --enable-consolidator Synonym to -enable_consolidator (default true) - --enable-consolidator-replicas Synonym to -enable_consolidator_replicas + --emit-stats If set, emit stats to push-based monitoring and stats backends + --enable-consolidator This option enables the query consolidator. (default true) + --enable-consolidator-replicas This option enables the query consolidator only on replicas. + --enable-hot-row-protection If true, incoming transactions for the same row (range) will be queued and cannot consume all txpool slots. + --enable-hot-row-protection-dry-run If true, hot row protection is not enforced but logs if transactions would have been queued. --enable-per-workload-table-metrics If true, query counts and query error metrics include a label that identifies the workload - --enable-tx-throttler Synonym to -enable_tx_throttler - --enable_consolidator This option enables the query consolidator. (default true) - --enable_consolidator_replicas This option enables the query consolidator only on replicas. - --enable_hot_row_protection If true, incoming transactions for the same row (range) will be queued and cannot consume all txpool slots. - --enable_hot_row_protection_dry_run If true, hot row protection is not enforced but logs if transactions would have been queued. - --enable_replication_reporter Use polling to track replication lag. - --enable_transaction_limit If true, limit on number of transactions open at the same time will be enforced for all users. User trying to open a new transaction after exhausting their limit will receive an error immediately, regardless of whether there are available slots or not. - --enable_transaction_limit_dry_run If true, limit on number of transactions open at the same time will be tracked for all users, but not enforced. - --enable_tx_throttler If true replication-lag-based throttling on transactions will be enabled. + --enable-replication-reporter Use polling to track replication lag. + --enable-transaction-limit If true, limit on number of transactions open at the same time will be enforced for all users. User trying to open a new transaction after exhausting their limit will receive an error immediately, regardless of whether there are available slots or not. + --enable-transaction-limit-dry-run If true, limit on number of transactions open at the same time will be tracked for all users, but not enforced. + --enable-tx-throttler If true replication-lag-based throttling on transactions will be enabled. + --enforce-strict-trans-tables If true, vttablet requires MySQL to run with STRICT_TRANS_TABLES or STRICT_ALL_TABLES on. It is recommended to not turn this flag off. Otherwise MySQL may alter your supplied values before saving them to the database. (default true) --enforce-tableacl-config if this flag is true, vttablet will fail to start if a valid tableacl config does not exist - --enforce_strict_trans_tables If true, vttablet requires MySQL to run with STRICT_TRANS_TABLES or STRICT_ALL_TABLES on. It is recommended to not turn this flag off. Otherwise MySQL may alter your supplied values before saving them to the database. (default true) --external-compressor string command with arguments to use when compressing a backup. --external-compressor-extension string extension to use when using an external compressor. --external-decompressor string command with arguments to use when decompressing a backup. --file_backup_storage_root string Root directory for the file backup storage. --filecustomrules string file based custom rule path --filecustomrules_watch set up a watch on the target file and reload query rules when it changes - --gc_check_interval duration Interval between garbage collection checks (default 1h0m0s) - --gc_purge_check_interval duration Interval between purge discovery checks (default 1m0s) - --gcs_backup_storage_bucket string Google Cloud Storage bucket to use for backups. - --gcs_backup_storage_root string Root prefix for all backup-related object names. + --gc-check-interval duration Interval between garbage collection checks (default 1h0m0s) + --gc-purge-check-interval duration Interval between purge discovery checks (default 1m0s) + --gcs-backup-storage-bucket string Google Cloud Storage bucket to use for backups. + --gcs-backup-storage-root string Root prefix for all backup-related object names. + --grpc-auth-mode string Which auth plugin implementation to use (eg: static) + --grpc-auth-mtls-allowed-substrings string List of substrings of at least one of the client certificate names (separated by colon). + --grpc-auth-static-client-creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. + --grpc-auth-static-password-file string JSON File to read the users/passwords from. + --grpc-bind-address string Bind address for gRPC calls. If empty, listen on all addresses. + --grpc-ca string server CA to use for gRPC connections, requires TLS, and enforces client certificate check + --grpc-cert string server certificate to use for gRPC connections, requires grpc-key, enables TLS + --grpc-compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy + --grpc-crl string path to a certificate revocation list in PEM format, client certificates will be further verified against this file during TLS handshake --grpc-dial-concurrency-limit int Maximum concurrency of grpc dial operations. This should be less than the golang max thread limit of 10000. (default 1024) - --grpc_auth_mode string Which auth plugin implementation to use (eg: static) - --grpc_auth_mtls_allowed_substrings string List of substrings of at least one of the client certificate names (separated by colon). - --grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. - --grpc_auth_static_password_file string JSON File to read the users/passwords from. - --grpc_bind_address string Bind address for gRPC calls. If empty, listen on all addresses. - --grpc_ca string server CA to use for gRPC connections, requires TLS, and enforces client certificate check - --grpc_cert string server certificate to use for gRPC connections, requires grpc_key, enables TLS - --grpc_compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy - --grpc_crl string path to a certificate revocation list in PEM format, client certificates will be further verified against this file during TLS handshake - --grpc_enable_optional_tls enable optional TLS mode when a server accepts both TLS and plain-text connections on the same port - --grpc_enable_tracing Enable gRPC tracing. - --grpc_initial_conn_window_size int gRPC initial connection window size - --grpc_initial_window_size int gRPC initial window size - --grpc_keepalive_time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) - --grpc_keepalive_timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) - --grpc_key string server private key to use for gRPC connections, requires grpc_cert, enables TLS - --grpc_max_connection_age duration Maximum age of a client connection before GoAway is sent. (default 2562047h47m16.854775807s) - --grpc_max_connection_age_grace duration Additional grace period after grpc_max_connection_age, after which connections are forcibly closed. (default 2562047h47m16.854775807s) - --grpc_max_message_size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) - --grpc_port int Port to listen on for gRPC calls. If zero, do not listen. - --grpc_prometheus Enable gRPC monitoring with Prometheus. - --grpc_server_ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients - --grpc_server_initial_conn_window_size int gRPC server initial connection window size - --grpc_server_initial_window_size int gRPC server initial window size - --grpc_server_keepalive_enforcement_policy_min_time duration gRPC server minimum keepalive time (default 10s) - --grpc_server_keepalive_enforcement_policy_permit_without_stream gRPC server permit client keepalive pings even when there are no active streams (RPCs) - --grpc_server_keepalive_time duration After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive. (default 10s) - --grpc_server_keepalive_timeout duration After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) - --health_check_interval duration Interval between health checks (default 20s) - --heartbeat_enable If true, vttablet records (if master) or checks (if replica) the current time of a replication heartbeat in the sidecar database's heartbeat table. The result is used to inform the serving state of the vttablet via healthchecks. - --heartbeat_interval duration How frequently to read and write replication heartbeat. (default 1s) - --heartbeat_on_demand_duration duration If non-zero, heartbeats are only written upon consumer request, and only run for up to given duration following the request. Frequent requests can keep the heartbeat running consistently; when requests are infrequent heartbeat may completely stop between requests + --grpc-enable-optional-tls enable optional TLS mode when a server accepts both TLS and plain-text connections on the same port + --grpc-enable-tracing Enable gRPC tracing. + --grpc-initial-conn-window-size int gRPC initial connection window size + --grpc-initial-window-size int gRPC initial window size + --grpc-keepalive-time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) + --grpc-keepalive-timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc-key string server private key to use for gRPC connections, requires grpc-cert, enables TLS + --grpc-max-connection-age duration Maximum age of a client connection before GoAway is sent. (default 2562047h47m16.854775807s) + --grpc-max-connection-age-grace duration Additional grace period after grpc-max-connection-age, after which connections are forcibly closed. (default 2562047h47m16.854775807s) + --grpc-max-message-size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) + --grpc-port int Port to listen on for gRPC calls. If zero, do not listen. + --grpc-prometheus Enable gRPC monitoring with Prometheus. + --grpc-server-ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients + --grpc-server-initial-conn-window-size int gRPC server initial connection window size + --grpc-server-initial-window-size int gRPC server initial window size + --grpc-server-keepalive-enforcement-policy-min-time duration gRPC server minimum keepalive time (default 10s) + --grpc-server-keepalive-enforcement-policy-permit-without-stream gRPC server permit client keepalive pings even when there are no active streams (RPCs) + --grpc-server-keepalive-time duration After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive. (default 10s) + --grpc-server-keepalive-timeout duration After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --health-check-interval duration Interval between health checks (default 20s) + --heartbeat-enable If true, vttablet records (if master) or checks (if replica) the current time of a replication heartbeat in the sidecar database's heartbeat table. The result is used to inform the serving state of the vttablet via healthchecks. + --heartbeat-interval duration How frequently to read and write replication heartbeat. (default 1s) + --heartbeat-on-demand-duration duration If non-zero, heartbeats are only written upon consumer request, and only run for up to given duration following the request. Frequent requests can keep the heartbeat running consistently; when requests are infrequent heartbeat may completely stop between requests -h, --help help for vttablet - --hot_row_protection_concurrent_transactions int Number of concurrent transactions let through to the txpool/MySQL for the same hot row. Should be > 1 to have enough 'ready' transactions in MySQL and benefit from a pipelining effect. (default 5) - --hot_row_protection_max_global_queue_size int Global queue limit across all row (ranges). Useful to prevent that the queue can grow unbounded. (default 1000) - --hot_row_protection_max_queue_size int Maximum number of BeginExecute RPCs which will be queued for the same row (range). (default 20) - --init_db_name_override string (init parameter) override the name of the db used by vttablet. Without this flag, the db name defaults to vt_ - --init_keyspace string (init parameter) keyspace to use for this tablet - --init_shard string (init parameter) shard to use for this tablet - --init_tablet_type string (init parameter) the tablet type to use for this tablet. - --init_tags StringMap (init parameter) comma separated list of key:value pairs used to tag the tablet - --init_timeout duration (init parameter) timeout to use for the init phase. (default 1m0s) + --hot-row-protection-concurrent-transactions int Number of concurrent transactions let through to the txpool/MySQL for the same hot row. Should be > 1 to have enough 'ready' transactions in MySQL and benefit from a pipelining effect. (default 5) + --hot-row-protection-max-global-queue-size int Global queue limit across all row (ranges). Useful to prevent that the queue can grow unbounded. (default 1000) + --hot-row-protection-max-queue-size int Maximum number of BeginExecute RPCs which will be queued for the same row (range). (default 20) + --init-db-name-override string (init parameter) override the name of the db used by vttablet. Without this flag, the db name defaults to vt_ + --init-keyspace string (init parameter) keyspace to use for this tablet + --init-shard string (init parameter) shard to use for this tablet + --init-tablet-type string (init parameter) tablet type to use for this tablet. Valid values are: PRIMARY, REPLICA, SPARE, and RDONLY. The default is REPLICA. + --init-tags StringMap (init parameter) comma separated list of key:value pairs used to tag the tablet + --init-timeout duration (init parameter) timeout to use for the init phase. (default 1m0s) --jaeger-agent-host string host and port to send spans to. if empty, no tracing will be done - --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) - --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --keep-logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep-logs-by-mtime duration keep logs for this long (using mtime) (zero to keep forever) --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) + --lock-tables-timeout duration How long to keep the table locked before timing out (default 1m0s) --lock-timeout duration Maximum time to wait when attempting to acquire a lock from the topo server (default 45s) - --lock_tables_timeout duration How long to keep the table locked before timing out (default 1m0s) + --log-err-stacks log stack traces for errors + --log-queries-to-file string Enable query logging to the specified file + --log-rotate-max-size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace --log_dir string If non-empty, write log files in this directory - --log_err_stacks log stack traces for errors --log_queries Enable query logging to syslog. - --log_queries_to_file string Enable query logging to the specified file - --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --logtostderr log to standard error instead of files --manifest-external-decompressor string command with arguments to store in the backup manifest when compressing a backup with an external compression engine. + --max-concurrent-online-ddl int Maximum number of online DDL changes that may run concurrently (default 256) --max-stack-size int configure the maximum stack size in bytes (default 67108864) - --max_concurrent_online_ddl int Maximum number of online DDL changes that may run concurrently (default 256) - --migration_check_interval duration Interval between migration checks (default 1m0s) + --migration-check-interval duration Interval between migration checks (default 1m0s) + --mycnf-bin-log-path string mysql binlog path + --mycnf-data-dir string data directory for mysql + --mycnf-error-log-path string mysql error log path --mycnf-file string path to my.cnf, if reading all config params from there - --mycnf_bin_log_path string mysql binlog path - --mycnf_data_dir string data directory for mysql - --mycnf_error_log_path string mysql error log path - --mycnf_general_log_path string mysql general log path - --mycnf_innodb_data_home_dir string Innodb data home directory - --mycnf_innodb_log_group_home_dir string Innodb log group home directory - --mycnf_master_info_file string mysql master.info file - --mycnf_mysql_port int port mysql is listening on - --mycnf_pid_file string mysql pid file - --mycnf_relay_log_index_path string mysql relay log index path - --mycnf_relay_log_info_path string mysql relay log info path - --mycnf_relay_log_path string mysql relay log path - --mycnf_secure_file_priv string mysql path for loading secure files - --mycnf_server_id int mysql server id of the server (if specified, mycnf-file will be ignored) - --mycnf_slow_log_path string mysql slow query log path - --mycnf_socket_file string mysql socket file - --mycnf_tmp_dir string mysql tmp directory + --mycnf-general-log-path string mysql general log path + --mycnf-innodb-data-home-dir string Innodb data home directory + --mycnf-innodb-log-group-home-dir string Innodb log group home directory + --mycnf-master-info-file string mysql master.info file + --mycnf-mysql-port int port mysql is listening on + --mycnf-pid-file string mysql pid file + --mycnf-relay-log-index-path string mysql relay log index path + --mycnf-relay-log-info-path string mysql relay log info path + --mycnf-relay-log-path string mysql relay log path + --mycnf-secure-file-priv string mysql path for loading secure files + --mycnf-server-id int mysql server id of the server (if specified, mycnf-file will be ignored) + --mycnf-slow-log-path string mysql slow query log path + --mycnf-socket-file string mysql socket file + --mycnf-tmp-dir string mysql tmp directory + --mysql-server-version string MySQL server version to advertise. (default "8.0.40-Vitess") --mysql-shell-backup-location string location where the backup will be stored --mysql-shell-dump-flags string flags to pass to mysql shell dump utility. This should be a JSON string and will be saved in the MANIFEST (default "{\"threads\": 4}") --mysql-shell-flags string execution flags to pass to mysqlsh binary to be used during dump/load (default "--defaults-file=/dev/null --js -h localhost") @@ -247,19 +245,18 @@ Flags: --mysql-shell-should-drain decide if we should drain while taking a backup or continue to serving traffic --mysql-shell-speedup-restore speed up restore by disabling redo logging and double write buffer during the restore process --mysql-shutdown-timeout duration Timeout to use when MySQL is being shut down. (default 5m0s) - --mysql_server_version string MySQL server version to advertise. (default "8.0.40-Vitess") - --mysqlctl_mycnf_template string template file to use for generating the my.cnf file during server init - --mysqlctl_socket string socket file to use for remote mysqlctl actions (empty for local actions) - --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) - --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) - --opentsdb_uri string URI of opentsdb /api/put method - --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. - --pool_hostname_resolve_interval duration if set force an update to all hostnames and reconnect if changed, defaults to 0 (disabled) + --mysqlctl-mycnf-template string template file to use for generating the my.cnf file during server init + --mysqlctl-socket string socket file to use for remote mysqlctl actions (empty for local actions) + --onclose-timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm-timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) + --opentsdb-uri string URI of opentsdb /api/put method + --pid-file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --pool-hostname-resolve-interval duration if set force an update to all hostnames and reconnect if changed, defaults to 0 (disabled) --port int port for the server --pprof strings enable profiling --pprof-http enable pprof http endpoints - --publish_retry_interval duration how long vttablet waits to retry publishing the tablet record (default 30s) - --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --publish-retry-interval duration how long vttablet waits to retry publishing the tablet record (default 30s) + --purge-logs-interval duration how often try to remove old logs (default 1h0m0s) --query-log-stream-handler string URL handler for streaming queries log (default "/debug/querylog") --querylog-filter-tag string string that must be present in the query for it to be logged; if using a value as the tag, you need to disable query normalization --querylog-format string format for query logs ("text" or "json") (default "text") @@ -294,13 +291,13 @@ Flags: --queryserver-config-txpool-max-idle-count int query server transaction pool - maximum number of idle connections to retain in the pool. Use this to balance between faster response times during traffic bursts and resource efficiency during low-traffic periods. --queryserver-config-txpool-timeout duration query server transaction pool timeout, it is how long vttablet waits if tx pool is full (default 1s) --queryserver-config-warn-result-size int query server result size warning threshold, warn if number of rows returned from vttablet for non-streaming queries exceeds this + --queryserver-enable-online-ddl Enable online DDL. (default true) --queryserver-enable-views Enable views support in vttablet. - --queryserver_enable_online_ddl Enable online DDL. (default true) --redact-debug-ui-queries redact full queries and bind variables from debug UI --relay_log_max_items int Maximum number of rows for vreplication target buffering. (default 5000) --relay_log_max_size int Maximum buffer size (in bytes) for vreplication target buffering. If single rows are larger than this, a single row is buffered at a time. (default 250000) - --remote_operation_timeout duration time to wait for a remote operation (default 15s) - --replication_connect_retry duration how long to wait in between replica reconnect attempts. Only precise to the second. (default 10s) + --remote-operation-timeout duration time to wait for a remote operation (default 15s) + --replication-connect-retry duration how long to wait in between replica reconnect attempts. Only precise to the second. (default 10s) --restore-from-backup-allowed-engines strings (init restore parameter) if set, only backups taken with the specified engines are eligible to be restored --restore-to-pos string (init incremental restore parameter) if set, run a point in time recovery that ends with the given position. This will attempt to use one full backup followed by zero or more incremental backups --restore-to-timestamp string (init incremental restore parameter) if set, run a point in time recovery that restores up to the given timestamp, if possible. Given timestamp in RFC3339 format. Example: '2006-01-02T15:04:05Z07:00' @@ -308,35 +305,36 @@ Flags: --restore_from_backup (init restore parameter) will check BackupStorage for a recent backup at startup and start there --restore_from_backup_ts string (init restore parameter) if set, restore the latest backup taken at or before this timestamp. Example: '2021-04-29.133050' --retain_online_ddl_tables duration How long should vttablet keep an old migrated table before purging it (default 24h0m0s) - --s3_backup_aws_endpoint string endpoint of the S3 backend (region must be provided). - --s3_backup_aws_min_partsize int Minimum part size to use, defaults to 5MiB but can be increased due to the dataset size. (default 5242880) - --s3_backup_aws_region string AWS region to use. (default "us-east-1") - --s3_backup_aws_retries int AWS request retries. (default -1) - --s3_backup_force_path_style force the s3 path style. - --s3_backup_log_level string determine the S3 loglevel to use from LogOff, LogDebug, LogDebugWithSigning, LogDebugWithHTTPBody, LogDebugWithRequestRetries, LogDebugWithRequestErrors. (default "LogOff") - --s3_backup_server_side_encryption string server-side encryption algorithm (e.g., AES256, aws:kms, sse_c:/path/to/key/file). - --s3_backup_storage_bucket string S3 bucket to use for backups. - --s3_backup_storage_root string root prefix for all backup-related object names. - --s3_backup_tls_skip_verify_cert skip the 'certificate is valid' check for SSL connections. + --s3-backup-aws-endpoint string endpoint of the S3 backend (region must be provided). + --s3-backup-aws-min-partsize int Minimum part size to use, defaults to 5MiB but can be increased due to the dataset size. (default 5242880) + --s3-backup-aws-region string AWS region to use. (default "us-east-1") + --s3-backup-aws-retries int AWS request retries. (default -1) + --s3-backup-force-path-style force the s3 path style. + --s3-backup-log-level string determine the S3 loglevel to use from LogOff, LogDebug, LogDebugWithSigning, LogDebugWithHTTPBody, LogDebugWithRequestRetries, LogDebugWithRequestErrors. (default "LogOff") + --s3-backup-server-side-encryption string server-side encryption algorithm (e.g., AES256, aws:kms, sse_c:/path/to/key/file). + --s3-backup-storage-bucket string S3 bucket to use for backups. + --s3-backup-storage-root string root prefix for all backup-related object names. + --s3-backup-tls-skip-verify-cert skip the 'certificate is valid' check for SSL connections. --sanitize_log_messages Remove potentially sensitive information in tablet INFO, WARNING, and ERROR log messages such as query parameters. --schema-change-reload-timeout duration query server schema change reload timeout, this is how long to wait for the signaled schema reload operation to complete before giving up (default 30s) --schema-version-max-age-seconds int max age of schema version records to kept in memory by the vreplication historian - --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --security-policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) --semi-sync-monitor-interval duration How frequently the semi-sync monitor checks if the primary is blocked on semi-sync ACKs (default 10s) - --service_map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice + --service-map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice --serving_state_grace_period duration how long to pause after broadcasting health to vtgate, before enforcing a new serving state --shard_sync_retry_delay duration delay between retries of updates to keep the tablet and its shard record in sync (default 30s) --shutdown_grace_period duration how long to wait for queries and transactions to complete during graceful shutdown. (default 3s) + --skip-user-metrics If true, user based stats are not recorded. --sql-max-length-errors int truncate queries in error logs to the given length (default unlimited) --sql-max-length-ui int truncate queries in debug UIs to the given length (default 512) (default 512) - --srv_topo_cache_refresh duration how frequently to refresh the topology for cached entries (default 1s) - --srv_topo_cache_ttl duration how long to use cached entries for topology (default 1s) - --srv_topo_timeout duration topo server timeout (default 5s) - --stats_backend string The name of the registered push-based monitoring/stats backend to use - --stats_combine_dimensions string List of dimensions to be combined into a single "all" value in exported stats vars - --stats_common_tags strings Comma-separated list of common tags for the stats backend. It provides both label and values. Example: label1:value1,label2:value2 - --stats_drop_variables string Variables to be dropped from the list of exported variables. - --stats_emit_period duration Interval between emitting stats to all registered backends (default 1m0s) + --srv-topo-cache-refresh duration how frequently to refresh the topology for cached entries (default 1s) + --srv-topo-cache-ttl duration how long to use cached entries for topology (default 1s) + --srv-topo-timeout duration topo server timeout (default 5s) + --stats-backend string The name of the registered push-based monitoring/stats backend to use + --stats-combine-dimensions string List of dimensions to be combined into a single "all" value in exported stats vars + --stats-common-tags strings Comma-separated list of common tags for the stats backend. It provides both label and values. Example: label1:value1,label2:value2 + --stats-drop-variables string Variables to be dropped from the list of exported variables. + --stats-emit-period duration Interval between emitting stats to all registered backends (default 1m0s) --statsd_address string Address for statsd client --statsd_sample_rate float Sample rate for statsd metrics (default 1) --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) @@ -345,43 +343,43 @@ Flags: --table-acl-config-reload-interval duration Ticker to reload ACLs. Duration flag, format e.g.: 30s. Default: do not reload --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class --table_gc_lifecycle string States for a DROP TABLE garbage collection cycle. Default is 'hold,purge,evac,drop', use any subset ('drop' implicitly always included) (default "hold,purge,evac,drop") + --tablet-dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. + --tablet-grpc-ca string the server ca to use to validate servers when connecting + --tablet-grpc-cert string the cert to use to connect + --tablet-grpc-crl string the server crl to use to validate server certificates when connecting + --tablet-grpc-key string the key to use to connect + --tablet-grpc-server-name string the server name to use to validate server certificate + --tablet-hostname string if not empty, this hostname will be assumed instead of trying to resolve it + --tablet-manager-grpc-ca string the server ca to use to validate servers when connecting + --tablet-manager-grpc-cert string the cert to use to connect + --tablet-manager-grpc-concurrency int concurrency to use to talk to a vttablet server for performance-sensitive RPCs (like ExecuteFetchAs{Dba,App}, CheckThrottler and FullStatus) (default 8) + --tablet-manager-grpc-connpool-size int number of tablets to keep tmclient connections open to (default 100) + --tablet-manager-grpc-crl string the server crl to use to validate server certificates when connecting + --tablet-manager-grpc-key string the key to use to connect + --tablet-manager-grpc-server-name string the server name to use to validate server certificate + --tablet-manager-protocol string Protocol to use to make tabletmanager RPCs to vttablets. (default "grpc") --tablet-path string tablet alias + --tablet-protocol string Protocol to use to make queryservice RPCs to vttablets. (default "grpc") --tablet_config string YAML file config for tablet - --tablet_dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. - --tablet_grpc_ca string the server ca to use to validate servers when connecting - --tablet_grpc_cert string the cert to use to connect - --tablet_grpc_crl string the server crl to use to validate server certificates when connecting - --tablet_grpc_key string the key to use to connect - --tablet_grpc_server_name string the server name to use to validate server certificate - --tablet_hostname string if not empty, this hostname will be assumed instead of trying to resolve it - --tablet_manager_grpc_ca string the server ca to use to validate servers when connecting - --tablet_manager_grpc_cert string the cert to use to connect - --tablet_manager_grpc_concurrency int concurrency to use to talk to a vttablet server for performance-sensitive RPCs (like ExecuteFetchAs{Dba,App}, CheckThrottler and FullStatus) (default 8) - --tablet_manager_grpc_connpool_size int number of tablets to keep tmclient connections open to (default 100) - --tablet_manager_grpc_crl string the server crl to use to validate server certificates when connecting - --tablet_manager_grpc_key string the key to use to connect - --tablet_manager_grpc_server_name string the server name to use to validate server certificate - --tablet_manager_protocol string Protocol to use to make tabletmanager RPCs to vttablets. (default "grpc") - --tablet_protocol string Protocol to use to make queryservice RPCs to vttablets. (default "grpc") --throttle_tablet_types string Comma separated VTTablet types to be considered by the throttler. default: 'replica'. example: 'replica,rdonly'. 'replica' always implicitly included (default "replica") - --topo_consul_lock_delay duration LockDelay for consul session. (default 15s) - --topo_consul_lock_session_checks string List of checks for consul session. (default "serfHealth") - --topo_consul_lock_session_ttl string TTL for consul session. - --topo_consul_watch_poll_duration duration time of the long poll for watch queries. (default 30s) - --topo_etcd_lease_ttl int Lease TTL for locks and leader election. The client will use KeepAlive to keep the lease going. (default 30) - --topo_etcd_tls_ca string path to the ca to use to validate the server cert when connecting to the etcd topo server - --topo_etcd_tls_cert string path to the client cert to use to connect to the etcd topo server, requires topo_etcd_tls_key, enables TLS - --topo_etcd_tls_key string path to the client key to use to connect to the etcd topo server, enables TLS - --topo_global_root string the path of the global topology data in the global topology server - --topo_global_server_address string the address of the global topology server - --topo_implementation string the topology implementation to use - --topo_read_concurrency int Maximum concurrency of topo reads per global or local cell. (default 32) - --topo_zk_auth_file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass - --topo_zk_base_timeout duration zk base timeout (see zk.Connect) (default 30s) - --topo_zk_max_concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64) - --topo_zk_tls_ca string the server ca to use to validate servers when connecting to the zk topo server - --topo_zk_tls_cert string the cert to use to connect to the zk topo server, requires topo_zk_tls_key, enables TLS - --topo_zk_tls_key string the key to use to connect to the zk topo server, enables TLS + --topo-consul-lock-delay duration LockDelay for consul session. (default 15s) + --topo-consul-lock-session-checks string List of checks for consul session. (default "serfHealth") + --topo-consul-lock-session-ttl string TTL for consul session. + --topo-consul-watch-poll-duration duration time of the long poll for watch queries. (default 30s) + --topo-etcd-lease-ttl int Lease TTL for locks and leader election. The client will use KeepAlive to keep the lease going. (default 30) + --topo-etcd-tls-ca string path to the ca to use to validate the server cert when connecting to the etcd topo server + --topo-etcd-tls-cert string path to the client cert to use to connect to the etcd topo server, requires topo-etcd-tls-key, enables TLS + --topo-etcd-tls-key string path to the client key to use to connect to the etcd topo server, enables TLS + --topo-global-root string the path of the global topology data in the global topology server + --topo-global-server-address string the address of the global topology server + --topo-implementation string the topology implementation to use + --topo-read-concurrency int Maximum concurrency of topo reads per global or local cell. (default 32) + --topo-zk-auth-file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass + --topo-zk-base-timeout duration zk base timeout (see zk.Connect) (default 30s) + --topo-zk-max-concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64) + --topo-zk-tls-ca string the server ca to use to validate servers when connecting to the zk topo server + --topo-zk-tls-cert string the cert to use to connect to the zk topo server, requires topo-zk-tls-key, enables TLS + --topo-zk-tls-key string the key to use to connect to the zk topo server, enables TLS --topocustomrule_cell string topo cell for customrules file. (default "global") --topocustomrule_path string path for customrules file. Disabled if empty. --tracer string tracing service to use (default "noop") @@ -389,12 +387,12 @@ Flags: --tracing-sampling-rate float sampling rate for the probabilistic jaeger sampler (default 0.1) --tracing-sampling-type string sampling strategy to use for jaeger. possible values are 'const', 'probabilistic', 'rateLimiting', or 'remote' (default "const") --track_schema_versions When enabled, vttablet will store versions of schemas at each position that a DDL is applied and allow retrieval of the schema corresponding to a position + --transaction-limit-by-component Include CallerID.component when considering who the user is for the purpose of transaction limit. + --transaction-limit-by-principal Include CallerID.principal when considering who the user is for the purpose of transaction limit. (default true) + --transaction-limit-by-subcomponent Include CallerID.subcomponent when considering who the user is for the purpose of transaction limit. + --transaction-limit-by-username Include VTGateCallerID.username when considering who the user is for the purpose of transaction limit. (default true) + --transaction-limit-per-user float Maximum number of transactions a single user is allowed to use at any time, represented as fraction of -transaction_cap. (default 0.4) --transaction-log-stream-handler string URL handler for streaming transactions log (default "/debug/txlog") - --transaction_limit_by_component Include CallerID.component when considering who the user is for the purpose of transaction limit. - --transaction_limit_by_principal Include CallerID.principal when considering who the user is for the purpose of transaction limit. (default true) - --transaction_limit_by_subcomponent Include CallerID.subcomponent when considering who the user is for the purpose of transaction limit. - --transaction_limit_by_username Include VTGateCallerID.username when considering who the user is for the purpose of transaction limit. (default true) - --transaction_limit_per_user float Maximum number of transactions a single user is allowed to use at any time, represented as fraction of -transaction_cap. (default 0.4) --twopc_abandon_age time.Duration Any unresolved transaction older than this time will be sent to the coordinator to be resolved. NOTE: Providing time as seconds (float64) is deprecated. Use time.Duration format (e.g., '1s', '2m', '1h'). (default 15m0s) --tx-throttler-config string Synonym to -tx_throttler_config (default "target_replication_lag_sec:2 max_replication_lag_sec:10 initial_rate:100 max_increase:1 emergency_decrease:0.5 min_duration_between_increases_sec:40 max_duration_between_increases_sec:62 min_duration_between_decreases_sec:20 spread_backlog_across_sec:20 age_bad_rate_after_sec:180 bad_rate_increase:0.1 max_rate_approach_threshold:0.9") --tx-throttler-default-priority int Default priority assigned to queries that lack priority information (default 100) @@ -409,30 +407,30 @@ Flags: --v Level log level for V logs -v, --version print binary version --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging + --vreplication-copy-phase-duration duration Duration for each copy phase loop (before running the next catchup: default 1h) (default 1h0m0s) + --vreplication-copy-phase-max-innodb-history-list-length int The maximum InnoDB transaction history that can exist on a vstreamer (source) before starting another round of copying rows. This helps to limit the impact on the source tablet. (default 1000000) + --vreplication-copy-phase-max-mysql-replication-lag int The maximum MySQL replication lag (in seconds) that can exist on a vstreamer (source) before starting another round of copying rows. This helps to limit the impact on the source tablet. (default 43200) --vreplication-enable-http-log Enable the /debug/vrlog HTTP endpoint, which will produce a log of the events replicated on primary tablets in the target keyspace by all VReplication workflows that are in the running/replicating phase. + --vreplication-experimental-flags int (Bitmask) of experimental features in vreplication to enable (default 7) + --vreplication-heartbeat-update-interval int Frequency (in seconds, default 1, max 60) at which the time_updated column of a vreplication stream when idling (default 1) + --vreplication-max-time-to-retry-on-error duration stop automatically retrying when we've had consecutive failures with the same error for this long after the first occurrence + --vreplication-net-read-timeout int Session value of net_read_timeout for vreplication, in seconds (default 300) + --vreplication-net-write-timeout int Session value of net_write_timeout for vreplication, in seconds (default 600) --vreplication-parallel-insert-workers int Number of parallel insertion workers to use during copy phase. Set <= 1 to disable parallelism, or > 1 to enable concurrent insertion during copy phase. (default 1) - --vreplication_copy_phase_duration duration Duration for each copy phase loop (before running the next catchup: default 1h) (default 1h0m0s) - --vreplication_copy_phase_max_innodb_history_list_length int The maximum InnoDB transaction history that can exist on a vstreamer (source) before starting another round of copying rows. This helps to limit the impact on the source tablet. (default 1000000) - --vreplication_copy_phase_max_mysql_replication_lag int The maximum MySQL replication lag (in seconds) that can exist on a vstreamer (source) before starting another round of copying rows. This helps to limit the impact on the source tablet. (default 43200) - --vreplication_experimental_flags int (Bitmask) of experimental features in vreplication to enable (default 7) - --vreplication_heartbeat_update_interval int Frequency (in seconds, default 1, max 60) at which the time_updated column of a vreplication stream when idling (default 1) - --vreplication_max_time_to_retry_on_error duration stop automatically retrying when we've had consecutive failures with the same error for this long after the first occurrence - --vreplication_net_read_timeout int Session value of net_read_timeout for vreplication, in seconds (default 300) - --vreplication_net_write_timeout int Session value of net_write_timeout for vreplication, in seconds (default 600) - --vreplication_replica_lag_tolerance duration Replica lag threshold duration: once lag is below this we switch from copy phase to the replication (streaming) phase (default 1m0s) - --vreplication_retry_delay duration delay before retrying a failed workflow event in the replication phase (default 5s) - --vreplication_store_compressed_gtid Store compressed gtids in the pos column of the sidecar database's vreplication table + --vreplication-replica-lag-tolerance duration Replica lag threshold duration: once lag is below this we switch from copy phase to the replication (streaming) phase (default 1m0s) + --vreplication-retry-delay duration delay before retrying a failed workflow event in the replication phase (default 5s) + --vreplication-store-compressed-gtid Store compressed gtids in the pos column of the sidecar database's vreplication table --vstream-binlog-rotation-threshold int Byte size at which a VStreamer will attempt to rotate the source's open binary log before starting a GTID snapshot based stream (e.g. a ResultStreamer or RowStreamer) (default 67108864) - --vstream_dynamic_packet_size Enable dynamic packet sizing for VReplication. This will adjust the packet size during replication to improve performance. (default true) - --vstream_packet_size int Suggested packet size for VReplication streamer. This is used only as a recommendation. The actual packet size may be more or less than this amount. (default 250000) - --vttablet_skip_buildinfo_tags string comma-separated list of buildinfo tags to skip from merging with --init_tags. each tag is either an exact match or a regular expression of the form '/regexp/'. (default "/.*/") - --wait_for_backup_interval duration (init restore parameter) if this is greater than 0, instead of starting up empty when no backups are found, keep checking at this interval for a backup to appear - --watch_replication_stream When enabled, vttablet will stream the MySQL replication stream from the local server, and use it to update schema when it sees a DDL. - --xbstream_restore_flags string Flags to pass to xbstream command during restore. These should be space separated and will be added to the end of the command. These need to match the ones used for backup e.g. --compress / --decompress, --encrypt / --decrypt - --xtrabackup_backup_flags string Flags to pass to backup command. These should be space separated and will be added to the end of the command - --xtrabackup_prepare_flags string Flags to pass to prepare command. These should be space separated and will be added to the end of the command - --xtrabackup_root_path string Directory location of the xtrabackup and xbstream executables, e.g., /usr/bin - --xtrabackup_stream_mode string Which mode to use if streaming, valid values are tar and xbstream. Please note that tar is not supported in XtraBackup 8.0 (default "tar") - --xtrabackup_stripe_block_size uint Size in bytes of each block that gets sent to a given stripe before rotating to the next stripe (default 102400) - --xtrabackup_stripes uint If greater than 0, use data striping across this many destination files to parallelize data transfer and decompression - --xtrabackup_user string User that xtrabackup will use to connect to the database server. This user must have all necessary privileges. For details, please refer to xtrabackup documentation. + --vstream-dynamic-packet-size Enable dynamic packet sizing for vstreamers. This will adjust the packet size in vreplication workflows to improve performance. (default true) + --vstream-packet-size int Suggested packet size for vstreamers. The actual packet size may be more or less than this amount. (default 250000) + --vttablet-skip-buildinfo-tags string comma-separated list of buildinfo tags to skip from merging with --init-tags. each tag is either an exact match or a regular expression of the form '/regexp/'. (default "/.*/") + --wait-for-backup-interval duration (init restore parameter) if this is greater than 0, instead of starting up empty when no backups are found, keep checking at this interval for a backup to appear + --watch-replication-stream When enabled, vttablet will stream the MySQL replication stream from the local server, and use it to update schema when it sees a DDL. + --xbstream-restore-flags string Flags to pass to xbstream command during restore. These should be space separated and will be added to the end of the command. These need to match the ones used for backup e.g. --compress / --decompress, --encrypt / --decrypt + --xtrabackup-backup-flags string Flags to pass to backup command. These should be space separated and will be added to the end of the command + --xtrabackup-prepare-flags string Flags to pass to prepare command. These should be space separated and will be added to the end of the command + --xtrabackup-root-path string Directory location of the xtrabackup and xbstream executables, e.g., /usr/bin + --xtrabackup-stream-mode string Which mode to use if streaming, valid values are tar and xbstream. Please note that tar is not supported in XtraBackup 8.0 (default "tar") + --xtrabackup-stripe-block-size uint Size in bytes of each block that gets sent to a given stripe before rotating to the next stripe (default 102400) + --xtrabackup-stripes uint If greater than 0, use data striping across this many destination files to parallelize data transfer and decompression + --xtrabackup-user string User that xtrabackup will use to connect to the database server. This user must have all necessary privileges. For details, please refer to xtrabackup documentation. diff --git a/go/flags/endtoend/vttestserver.txt b/go/flags/endtoend/vttestserver.txt index 385b7194652..d7e074bd33d 100644 --- a/go/flags/endtoend/vttestserver.txt +++ b/go/flags/endtoend/vttestserver.txt @@ -5,17 +5,17 @@ Usage: Flags: --alsologtostderr log to standard error as well as files - --app_idle_timeout duration Idle timeout for app connections (default 1m0s) - --app_pool_size int Size of the connection pool for app connections (default 40) - --backup_engine_implementation string Specifies which implementation to use for creating new backups (builtin or xtrabackup). Restores will always be done with whichever engine created a given backup. (default "builtin") - --backup_storage_block_size int if backup_storage_compress is true, backup_storage_block_size sets the byte size for each block while compressing (default is 250000). (default 250000) - --backup_storage_compress if set, the backup files will be compressed. (default true) - --backup_storage_number_blocks int if backup_storage_compress is true, backup_storage_number_blocks sets the number of blocks that can be processed, in parallel, before the writer blocks, during compression (default is 2). It should be equal to the number of CPUs available for compression. (default 2) + --app-idle-timeout duration Idle timeout for app connections (default 1m0s) + --app-pool-size int Size of the connection pool for app connections (default 40) + --backup-engine-implementation string Specifies which implementation to use for creating new backups (builtin or xtrabackup). Restores will always be done with whichever engine created a given backup. (default "builtin") + --backup-storage-block-size int if backup-storage-compress is true, backup-storage-block-size sets the byte size for each block while compressing (default is 250000). (default 250000) + --backup-storage-compress if set, the backup files will be compressed. (default true) + --backup-storage-number-blocks int if backup-storage-compress is true, backup-storage-number-blocks sets the number of blocks that can be processed, in parallel, before the writer blocks, during compression (default is 2). It should be equal to the number of CPUs available for compression. (default 2) --builtinbackup-file-read-buffer-size uint read files using an IO buffer of this many bytes. Golang defaults are used when set to 0. --builtinbackup-file-write-buffer-size uint write files using an IO buffer of this many bytes. Golang defaults are used when set to 0. (default 2097152) --builtinbackup-incremental-restore-path string the directory where incremental restore files, namely binlog files, are extracted to. In k8s environments, this should be set to a directory that is shared between the vttablet and mysqld pods. The path should exist. When empty, the default OS temp dir is assumed. - --builtinbackup_mysqld_timeout duration how long to wait for mysqld to shutdown at the start of the backup. (default 10m0s) - --builtinbackup_progress duration how often to send progress updates when backing up large files. (default 5s) + --builtinbackup-mysqld-timeout duration how long to wait for mysqld to shutdown at the start of the backup. (default 10m0s) + --builtinbackup-progress duration how often to send progress updates when backing up large files. (default 5s) --catch-sigpipe catch and ignore SIGPIPE on stdout and stderr if specified --cells strings Comma separated list of cells (default [test]) --charset string MySQL charset (default "utf8mb4") @@ -27,10 +27,10 @@ Flags: --config-path strings Paths to search for config files in. (default [{{ .Workdir }}]) --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) --config-type string Config file type (omit to infer config type from file extension). - --consul_auth_static_file string JSON File to read the topos/tokens from. + --consul-auth-static-file string JSON File to read the topos/tokens from. --data_dir string Directory where the data files will be placed, defaults to a random directory under /vt/vtdataroot - --dba_idle_timeout duration Idle timeout for dba connections (default 1m0s) - --dba_pool_size int Size of the connection pool for dba connections (default 20) + --dba-idle-timeout duration Idle timeout for dba connections (default 1m0s) + --dba-pool-size int Size of the connection pool for dba connections (default 20) --default_schema_dir string Default directory for initial schema files. If no schema is found in schema_dir, default to this location. --enable_direct_ddl Allow users to submit direct DDL statements (default true) --enable_online_ddl Allow users to submit, review and control Online DDL (default true) @@ -42,52 +42,53 @@ Flags: --external_topo_global_server_address string the address of the global topology server for vtcombo process --external_topo_implementation string the topology implementation to use for vtcombo process --extra_my_cnf string extra files to add to the config, separated by ':' - --foreign_key_mode string This is to provide how to handle foreign key constraint in create/alter table. Valid values are: allow, disallow (default "allow") + --foreign-key-mode string This is to provide how to handle foreign key constraint in create/alter table. Valid values are: allow, disallow (default "allow") + --grpc-auth-mode string Which auth plugin implementation to use (eg: static) + --grpc-auth-mtls-allowed-substrings string List of substrings of at least one of the client certificate names (separated by colon). + --grpc-auth-static-client-creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. + --grpc-auth-static-password-file string JSON File to read the users/passwords from. + --grpc-bind-address string Bind address for gRPC calls. If empty, listen on all addresses. + --grpc-ca string server CA to use for gRPC connections, requires TLS, and enforces client certificate check + --grpc-cert string server certificate to use for gRPC connections, requires grpc-key, enables TLS + --grpc-compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy + --grpc-crl string path to a certificate revocation list in PEM format, client certificates will be further verified against this file during TLS handshake --grpc-dial-concurrency-limit int Maximum concurrency of grpc dial operations. This should be less than the golang max thread limit of 10000. (default 1024) - --grpc_auth_mode string Which auth plugin implementation to use (eg: static) - --grpc_auth_mtls_allowed_substrings string List of substrings of at least one of the client certificate names (separated by colon). - --grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. - --grpc_auth_static_password_file string JSON File to read the users/passwords from. - --grpc_bind_address string Bind address for gRPC calls. If empty, listen on all addresses. - --grpc_ca string server CA to use for gRPC connections, requires TLS, and enforces client certificate check - --grpc_cert string server certificate to use for gRPC connections, requires grpc_key, enables TLS - --grpc_compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy - --grpc_crl string path to a certificate revocation list in PEM format, client certificates will be further verified against this file during TLS handshake - --grpc_enable_optional_tls enable optional TLS mode when a server accepts both TLS and plain-text connections on the same port - --grpc_enable_tracing Enable gRPC tracing. - --grpc_initial_conn_window_size int gRPC initial connection window size - --grpc_initial_window_size int gRPC initial window size - --grpc_keepalive_time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) - --grpc_keepalive_timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) - --grpc_key string server private key to use for gRPC connections, requires grpc_cert, enables TLS - --grpc_max_connection_age duration Maximum age of a client connection before GoAway is sent. (default 2562047h47m16.854775807s) - --grpc_max_connection_age_grace duration Additional grace period after grpc_max_connection_age, after which connections are forcibly closed. (default 2562047h47m16.854775807s) - --grpc_max_message_size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) - --grpc_port int Port to listen on for gRPC calls. If zero, do not listen. - --grpc_prometheus Enable gRPC monitoring with Prometheus. - --grpc_server_ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients - --grpc_server_initial_conn_window_size int gRPC server initial connection window size - --grpc_server_initial_window_size int gRPC server initial window size - --grpc_server_keepalive_enforcement_policy_min_time duration gRPC server minimum keepalive time (default 10s) - --grpc_server_keepalive_enforcement_policy_permit_without_stream gRPC server permit client keepalive pings even when there are no active streams (RPCs) - --grpc_server_keepalive_time duration After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive. (default 10s) - --grpc_server_keepalive_timeout duration After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc-enable-optional-tls enable optional TLS mode when a server accepts both TLS and plain-text connections on the same port + --grpc-enable-tracing Enable gRPC tracing. + --grpc-initial-conn-window-size int gRPC initial connection window size + --grpc-initial-window-size int gRPC initial window size + --grpc-keepalive-time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) + --grpc-keepalive-timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc-key string server private key to use for gRPC connections, requires grpc-cert, enables TLS + --grpc-max-connection-age duration Maximum age of a client connection before GoAway is sent. (default 2562047h47m16.854775807s) + --grpc-max-connection-age-grace duration Additional grace period after grpc-max-connection-age, after which connections are forcibly closed. (default 2562047h47m16.854775807s) + --grpc-max-message-size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) + --grpc-port int Port to listen on for gRPC calls. If zero, do not listen. + --grpc-prometheus Enable gRPC monitoring with Prometheus. + --grpc-server-ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients + --grpc-server-initial-conn-window-size int gRPC server initial connection window size + --grpc-server-initial-window-size int gRPC server initial window size + --grpc-server-keepalive-enforcement-policy-min-time duration gRPC server minimum keepalive time (default 10s) + --grpc-server-keepalive-enforcement-policy-permit-without-stream gRPC server permit client keepalive pings even when there are no active streams (RPCs) + --grpc-server-keepalive-time duration After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive. (default 10s) + --grpc-server-keepalive-timeout duration After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) -h, --help help for vttestserver + --initialize-with-random-data If this flag is each table-shard will be initialized with random data. See also the 'rng_seed' and 'min_shard_size' and 'max_shard_size' flags. --initialize-with-vt-dba-tcp If this flag is enabled, MySQL will be initialized with an additional user named vt_dba_tcp, who will have access via TCP/IP connection. - --initialize_with_random_data If this flag is each table-shard will be initialized with random data. See also the 'rng_seed' and 'min_shard_size' and 'max_shard_size' flags. - --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) - --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --keep-logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep-logs-by-mtime duration keep logs for this long (using mtime) (zero to keep forever) --keyspaces strings Comma separated list of keyspaces (default [test_keyspace]) --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) + --log-err-stacks log stack traces for errors + --log-rotate-max-size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace --log_dir string If non-empty, write log files in this directory - --log_err_stacks log stack traces for errors - --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --logtostderr log to standard error instead of files --manifest-external-decompressor string command with arguments to store in the backup manifest when compressing a backup with an external compression engine. --max-stack-size int configure the maximum stack size in bytes (default 67108864) - --max_table_shard_size int The maximum number of initial rows in a table shard. Ignored if--initialize_with_random_data is false. The actual number is chosen randomly (default 10000) - --min_table_shard_size int The minimum number of initial rows in a table shard. Ignored if--initialize_with_random_data is false. The actual number is chosen randomly. (default 1000) + --max_table_shard_size int The maximum number of initial rows in a table shard. Ignored if--initialize-with-random-data is false. The actual number is chosen randomly (default 10000) + --min_table_shard_size int The minimum number of initial rows in a table shard. Ignored if--initialize-with-random-data is false. The actual number is chosen randomly. (default 1000) + --mysql-server-version string MySQL server version to advertise. (default "8.0.40-Vitess") --mysql-shell-backup-location string location where the backup will be stored --mysql-shell-dump-flags string flags to pass to mysql shell dump utility. This should be a JSON string and will be saved in the MANIFEST (default "{\"threads\": 4}") --mysql-shell-flags string execution flags to pass to mysqlsh binary to be used during dump/load (default "--defaults-file=/dev/null --js -h localhost") @@ -96,79 +97,78 @@ Flags: --mysql-shell-speedup-restore speed up restore by disabling redo logging and double write buffer during the restore process --mysql_bind_host string which host to bind vtgate mysql listener to (default "localhost") --mysql_only If this flag is set only mysql is initialized. The rest of the vitess components are not started. Also, the output specifies the mysql unix socket instead of the vtgate port. - --mysql_server_version string MySQL server version to advertise. (default "8.0.40-Vitess") - --mysqlctl_mycnf_template string template file to use for generating the my.cnf file during server init - --mysqlctl_socket string socket file to use for remote mysqlctl actions (empty for local actions) - --no_scatter when set to true, the planner will fail instead of producing a plan that includes scatter queries - --null_probability float The probability to initialize a field with 'NULL' if --initialize_with_random_data is true. Only applies to fields that can contain NULL values. (default 0.1) + --mysqlctl-mycnf-template string template file to use for generating the my.cnf file during server init + --mysqlctl-socket string socket file to use for remote mysqlctl actions (empty for local actions) + --no-scatter when set to true, the planner will fail instead of producing a plan that includes scatter queries + --null_probability float The probability to initialize a field with 'NULL' if --initialize-with-random-data is true. Only applies to fields that can contain NULL values. (default 0.1) --num_shards strings Comma separated shard count (one per keyspace) (default [2]) - --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) - --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) - --persistent_mode If this flag is set, the MySQL data directory is not cleaned up when LocalCluster.TearDown() is called. This is useful for running vttestserver as a database container in local developer environments. Note that db migration files (--schema_dir option) and seeding of random data (--initialize_with_random_data option) will only run during cluster startup if the data directory does not already exist. Changes to VSchema are persisted across cluster restarts using a simple watcher if the --data_dir argument is specified. - --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --onclose-timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm-timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) + --persistent_mode If this flag is set, the MySQL data directory is not cleaned up when LocalCluster.TearDown() is called. This is useful for running vttestserver as a database container in local developer environments. Note that db migration files (--schema_dir option) and seeding of random data (--initialize-with-random-data option) will only run during cluster startup if the data directory does not already exist. Changes to VSchema are persisted across cluster restarts using a simple watcher if the --data_dir argument is specified. + --pid-file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. --planner-version string Sets the default planner to use when the session has not changed it. Valid values are: Gen4, Gen4Greedy, Gen4Left2Right - --pool_hostname_resolve_interval duration if set force an update to all hostnames and reconnect if changed, defaults to 0 (disabled) + --pool-hostname-resolve-interval duration if set force an update to all hostnames and reconnect if changed, defaults to 0 (disabled) --port int Port to use for vtcombo. If this is 0, a random port will be chosen. --pprof strings enable profiling --pprof-http enable pprof http endpoints - --proto_topo string Define the fake cluster topology as a compact text format encoded vttest proto. See vttest.proto for more information. - --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --proto-topo string Define the fake cluster topology as a compact text format encoded vttest proto. See vttest.proto for more information. + --purge-logs-interval duration how often try to remove old logs (default 1h0m0s) --queryserver-config-transaction-timeout duration query server transaction timeout, a transaction will be killed if it takes longer than this value (default 30s) --rdonly_count int Rdonly tablets per shard (default 1) --replica_count int Replica tablets per shard (includes primary) (default 2) - --replication_connect_retry duration how long to wait in between replica reconnect attempts. Only precise to the second. (default 10s) - --rng_seed int The random number generator seed to use when initializing with random data (see also --initialize_with_random_data). Multiple runs with the same seed will result with the same initial data. (default 123) + --replication-connect-retry duration how long to wait in between replica reconnect attempts. Only precise to the second. (default 10s) + --rng_seed int The random number generator seed to use when initializing with random data (see also --initialize-with-random-data). Multiple runs with the same seed will result with the same initial data. (default 123) --schema_dir string Directory for initial schema files. Within this dir, there should be a subdir for each keyspace. Within each keyspace dir, each file is executed as SQL after the database is created on each shard. If the directory contains a vschema.json file, it will be used as the vschema for the V3 API. - --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) - --service_map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice + --security-policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --service-map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice --snapshot_file string A MySQL DB snapshot file --sql-max-length-errors int truncate queries in error logs to the given length (default unlimited) --sql-max-length-ui int truncate queries in debug UIs to the given length (default 512) (default 512) --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class - --tablet_dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. - --tablet_hostname string The hostname to use for the tablet otherwise it will be derived from OS' hostname (default "localhost") - --tablet_manager_grpc_ca string the server ca to use to validate servers when connecting - --tablet_manager_grpc_cert string the cert to use to connect - --tablet_manager_grpc_concurrency int concurrency to use to talk to a vttablet server for performance-sensitive RPCs (like ExecuteFetchAs{Dba,App}, CheckThrottler and FullStatus) (default 8) - --tablet_manager_grpc_connpool_size int number of tablets to keep tmclient connections open to (default 100) - --tablet_manager_grpc_crl string the server crl to use to validate server certificates when connecting - --tablet_manager_grpc_key string the key to use to connect - --tablet_manager_grpc_server_name string the server name to use to validate server certificate - --tablet_manager_protocol string Protocol to use to make tabletmanager RPCs to vttablets. (default "grpc") - --tablet_refresh_interval duration Interval at which vtgate refreshes tablet information from topology server. (default 10s) - --topo_consul_lock_delay duration LockDelay for consul session. (default 15s) - --topo_consul_lock_session_checks string List of checks for consul session. (default "serfHealth") - --topo_consul_lock_session_ttl string TTL for consul session. - --topo_consul_watch_poll_duration duration time of the long poll for watch queries. (default 30s) - --topo_zk_auth_file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass - --topo_zk_base_timeout duration zk base timeout (see zk.Connect) (default 30s) - --topo_zk_max_concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64) - --topo_zk_tls_ca string the server ca to use to validate servers when connecting to the zk topo server - --topo_zk_tls_cert string the cert to use to connect to the zk topo server, requires topo_zk_tls_key, enables TLS - --topo_zk_tls_key string the key to use to connect to the zk topo server, enables TLS + --tablet-dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. + --tablet-hostname string The hostname to use for the tablet otherwise it will be derived from OS' hostname (default "localhost") + --tablet-manager-grpc-ca string the server ca to use to validate servers when connecting + --tablet-manager-grpc-cert string the cert to use to connect + --tablet-manager-grpc-concurrency int concurrency to use to talk to a vttablet server for performance-sensitive RPCs (like ExecuteFetchAs{Dba,App}, CheckThrottler and FullStatus) (default 8) + --tablet-manager-grpc-connpool-size int number of tablets to keep tmclient connections open to (default 100) + --tablet-manager-grpc-crl string the server crl to use to validate server certificates when connecting + --tablet-manager-grpc-key string the key to use to connect + --tablet-manager-grpc-server-name string the server name to use to validate server certificate + --tablet-manager-protocol string Protocol to use to make tabletmanager RPCs to vttablets. (default "grpc") + --tablet-refresh-interval duration Interval at which vtgate refreshes tablet information from topology server. (default 10s) + --topo-consul-lock-delay duration LockDelay for consul session. (default 15s) + --topo-consul-lock-session-checks string List of checks for consul session. (default "serfHealth") + --topo-consul-lock-session-ttl string TTL for consul session. + --topo-consul-watch-poll-duration duration time of the long poll for watch queries. (default 30s) + --topo-zk-auth-file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass + --topo-zk-base-timeout duration zk base timeout (see zk.Connect) (default 30s) + --topo-zk-max-concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64) + --topo-zk-tls-ca string the server ca to use to validate servers when connecting to the zk topo server + --topo-zk-tls-cert string the cert to use to connect to the zk topo server, requires topo-zk-tls-key, enables TLS + --topo-zk-tls-key string the key to use to connect to the zk topo server, enables TLS --transaction_mode string Transaction mode MULTI (default), SINGLE or TWOPC (default "MULTI") --v Level log level for V logs -v, --version print binary version --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging --vschema_ddl_authorized_users string Comma separated list of users authorized to execute vschema ddl operations via vtgate --vtcombo-bind-host string which host to bind vtcombo servenv listener to (default "localhost") - --vtctl_client_protocol string Protocol to use to talk to the vtctl server. (default "grpc") - --vtctld_grpc_ca string the server ca to use to validate servers when connecting - --vtctld_grpc_cert string the cert to use to connect - --vtctld_grpc_crl string the server crl to use to validate server certificates when connecting - --vtctld_grpc_key string the key to use to connect - --vtctld_grpc_server_name string the server name to use to validate server certificate - --vtgate_grpc_ca string the server ca to use to validate servers when connecting - --vtgate_grpc_cert string the cert to use to connect - --vtgate_grpc_crl string the server crl to use to validate server certificates when connecting - --vtgate_grpc_key string the key to use to connect - --vtgate_grpc_server_name string the server name to use to validate server certificate - --xbstream_restore_flags string Flags to pass to xbstream command during restore. These should be space separated and will be added to the end of the command. These need to match the ones used for backup e.g. --compress / --decompress, --encrypt / --decrypt - --xtrabackup_backup_flags string Flags to pass to backup command. These should be space separated and will be added to the end of the command - --xtrabackup_prepare_flags string Flags to pass to prepare command. These should be space separated and will be added to the end of the command - --xtrabackup_root_path string Directory location of the xtrabackup and xbstream executables, e.g., /usr/bin - --xtrabackup_stream_mode string Which mode to use if streaming, valid values are tar and xbstream. Please note that tar is not supported in XtraBackup 8.0 (default "tar") - --xtrabackup_stripe_block_size uint Size in bytes of each block that gets sent to a given stripe before rotating to the next stripe (default 102400) - --xtrabackup_stripes uint If greater than 0, use data striping across this many destination files to parallelize data transfer and decompression - --xtrabackup_user string User that xtrabackup will use to connect to the database server. This user must have all necessary privileges. For details, please refer to xtrabackup documentation. + --vtctl-client-protocol string Protocol to use to talk to the vtctl server. (default "grpc") + --vtctld-grpc-ca string the server ca to use to validate servers when connecting + --vtctld-grpc-cert string the cert to use to connect + --vtctld-grpc-crl string the server crl to use to validate server certificates when connecting + --vtctld-grpc-key string the key to use to connect + --vtctld-grpc-server-name string the server name to use to validate server certificate + --vtgate-grpc-ca string the server ca to use to validate servers when connecting + --vtgate-grpc-cert string the cert to use to connect + --vtgate-grpc-crl string the server crl to use to validate server certificates when connecting + --vtgate-grpc-key string the key to use to connect + --vtgate-grpc-server-name string the server name to use to validate server certificate + --xbstream-restore-flags string Flags to pass to xbstream command during restore. These should be space separated and will be added to the end of the command. These need to match the ones used for backup e.g. --compress / --decompress, --encrypt / --decrypt + --xtrabackup-backup-flags string Flags to pass to backup command. These should be space separated and will be added to the end of the command + --xtrabackup-prepare-flags string Flags to pass to prepare command. These should be space separated and will be added to the end of the command + --xtrabackup-root-path string Directory location of the xtrabackup and xbstream executables, e.g., /usr/bin + --xtrabackup-stream-mode string Which mode to use if streaming, valid values are tar and xbstream. Please note that tar is not supported in XtraBackup 8.0 (default "tar") + --xtrabackup-stripe-block-size uint Size in bytes of each block that gets sent to a given stripe before rotating to the next stripe (default 102400) + --xtrabackup-stripes uint If greater than 0, use data striping across this many destination files to parallelize data transfer and decompression + --xtrabackup-user string User that xtrabackup will use to connect to the database server. This user must have all necessary privileges. For details, please refer to xtrabackup documentation. diff --git a/go/flags/endtoend/zk.txt b/go/flags/endtoend/zk.txt index add1b6b6803..91d0c053f63 100644 --- a/go/flags/endtoend/zk.txt +++ b/go/flags/endtoend/zk.txt @@ -31,11 +31,11 @@ Available Commands: Flags: -h, --help help for zk - --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) - --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) - --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) - --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) - --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --keep-logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep-logs-by-mtime duration keep logs for this long (using mtime) (zero to keep forever) + --log-rotate-max-size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --purge-logs-interval duration how often try to remove old logs (default 1h0m0s) + --security-policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) --server string server(s) to connect to Use "zk [command] --help" for more information about a command. diff --git a/go/flags/endtoend/zkctl.txt b/go/flags/endtoend/zkctl.txt index b89528766d8..178d552fd8f 100644 --- a/go/flags/endtoend/zkctl.txt +++ b/go/flags/endtoend/zkctl.txt @@ -20,16 +20,16 @@ Flags: --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) --config-type string Config file type (omit to infer config type from file extension). -h, --help help for zkctl - --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) - --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --keep-logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep-logs-by-mtime duration keep logs for this long (using mtime) (zero to keep forever) + --log-err-stacks log stack traces for errors + --log-rotate-max-size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace --log_dir string If non-empty, write log files in this directory - --log_err_stacks log stack traces for errors - --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) --logtostderr log to standard error instead of files --pprof strings enable profiling --pprof-http enable pprof http endpoints - --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --purge-logs-interval duration how often try to remove old logs (default 1h0m0s) --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) --v Level log level for V logs -v, --version print binary version diff --git a/go/mysql/auth_server_clientcert.go b/go/mysql/auth_server_clientcert.go index bb0a4028683..5ad861814ce 100644 --- a/go/mysql/auth_server_clientcert.go +++ b/go/mysql/auth_server_clientcert.go @@ -33,8 +33,13 @@ type AuthServerClientCert struct { // InitAuthServerClientCert is public so it can be called from plugin_auth_clientcert.go (go/cmd/vtgate) func InitAuthServerClientCert(clientcertAuthMethod string) { - if pflag.CommandLine.Lookup("mysql_server_ssl_ca").Value.String() == "" { - log.Info("Not configuring AuthServerClientCert because mysql_server_ssl_ca is empty") + caValue := pflag.CommandLine.Lookup("mysql-server-ssl-ca").Value.String() + //TODO: This block can be removed in v25 when "mysql_server_ssl_ca" will be deprecated. + if caValue == "" { + caValue = pflag.CommandLine.Lookup("mysql_server_ssl_ca").Value.String() + } + if caValue == "" { + log.Info("Not configuring AuthServerClientCert because mysql-server-ssl-ca is empty") return } if clientcertAuthMethod != string(MysqlClearPassword) && clientcertAuthMethod != string(MysqlDialog) { diff --git a/go/mysql/conn.go b/go/mysql/conn.go index cfe65e07166..07960ec4146 100644 --- a/go/mysql/conn.go +++ b/go/mysql/conn.go @@ -30,6 +30,8 @@ import ( "sync/atomic" "time" + "github.com/spf13/pflag" + "vitess.io/vitess/go/bucketpool" "vitess.io/vitess/go/mysql/collations" "vitess.io/vitess/go/mysql/sqlerror" @@ -38,6 +40,7 @@ import ( "vitess.io/vitess/go/vt/log" querypb "vitess.io/vitess/go/vt/proto/query" vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" + "vitess.io/vitess/go/vt/servenv" "vitess.io/vitess/go/vt/vterrors" ) @@ -67,6 +70,19 @@ const ( ephemeralRead ) +var ( + mysqlMultiQuery = false +) + +func registerConnFlags(fs *pflag.FlagSet) { + fs.BoolVar(&mysqlMultiQuery, "mysql-server-multi-query-protocol", mysqlMultiQuery, "If set, the server will use the new implementation of handling queries where-in multiple queries are sent together.") +} + +func init() { + servenv.OnParseFor("vtgate", registerConnFlags) + servenv.OnParseFor("vtcombo", registerConnFlags) +} + // A Getter has a Get() type Getter interface { Get() *querypb.VTGateCallerID @@ -914,6 +930,9 @@ func (c *Conn) handleNextCommand(handler Handler) bool { res := c.execQuery("use "+sqlescape.EscapeID(db), handler, false) return res != connErr case ComQuery: + if mysqlMultiQuery { + return c.handleComQueryMulti(handler, data) + } return c.handleComQuery(handler, data) case ComPing: return c.handleComPing() @@ -1279,6 +1298,141 @@ func (c *Conn) handleComPing() bool { return true } +// handleComQueryMulti is a newer version of handleComQuery that uses +// the StreamExecuteMulti and ExecuteMulti RPC calls to push the splitting of statements +// down to Vtgate. +func (c *Conn) handleComQueryMulti(handler Handler, data []byte) (kontinue bool) { + c.startWriterBuffering() + defer func() { + if err := c.endWriterBuffering(); err != nil { + log.Errorf("conn %v: flush() failed: %v", c.ID(), err) + kontinue = false + } + }() + + queryStart := time.Now() + query := c.parseComQuery(data) + c.recycleReadPacket() + + res := c.execQueryMulti(query, handler) + if res != execSuccess { + return res != connErr + } + + timings.Record(queryTimingKey, queryStart) + return true +} + +// execQueryMulti is a newer version of execQuery that uses +// the StreamExecuteMulti and ExecuteMulti RPC calls to push the splitting of statements +// down to Vtgate. +func (c *Conn) execQueryMulti(query string, handler Handler) execResult { + // needsEndPacket signifies whether we have need to send the last packet to the client + // for a given query. This is used to determine whether we should send an + // end packet after the query is done or not. Initially we don't need to send an end packet + // so we initialize this value to false. + needsEndPacket := false + callbackCalled := false + var res = execSuccess + + err := handler.ComQueryMulti(c, query, func(qr sqltypes.QueryResponse, more bool, firstPacket bool) error { + callbackCalled = true + flag := c.StatusFlags + if more { + flag |= ServerMoreResultsExists + } + + // firstPacket tells us that this is the start of a new query result. + // If we haven't sent a last packet yet, we should send the end result packet. + if firstPacket && needsEndPacket { + if err := c.writeEndResult(true, 0, 0, handler.WarningCount(c)); err != nil { + log.Errorf("Error writing result to %s: %v", c, err) + return err + } + } + + // We receive execution errors in a query as part of the QueryResponse. + // We check for those errors and send a error packet. If we are unable + // to send the error packet, then there is a connection error too. + if qr.QueryError != nil { + res = execErr + if !c.writeErrorPacketFromErrorAndLog(qr.QueryError) { + res = connErr + } + return nil + } + + if firstPacket { + // The first packet signifies the start of a new query result. + // So we reset the needsEndPacket variable to signify we haven't sent the last + // packet for this query. + needsEndPacket = true + if len(qr.QueryResult.Fields) == 0 { + + // A successful callback with no fields means that this was a + // DML or other write-only operation. + // + // We should not send any more packets after this, but make sure + // to extract the affected rows and last insert id from the result + // struct here since clients expect it. + ok := PacketOK{ + affectedRows: qr.QueryResult.RowsAffected, + lastInsertID: qr.QueryResult.InsertID, + statusFlags: flag, + warnings: handler.WarningCount(c), + info: "", + sessionStateData: qr.QueryResult.SessionStateChanges, + } + needsEndPacket = false + return c.writeOKPacket(&ok) + } + + if err := c.writeFields(qr.QueryResult); err != nil { + return err + } + } + + return c.writeRows(qr.QueryResult) + }) + + // If callback was not called, we expect an error. + // It is possible that we don't get a callback if some condition checks + // fail before the query starts execution. In this case, we need to write some + // error back. + if !callbackCalled { + // This is just a failsafe. Should never happen. + if err == nil || err == io.EOF { + err = sqlerror.NewSQLErrorFromError(errors.New("unexpected: query ended without no results and no error")) + } + if !c.writeErrorPacketFromErrorAndLog(err) { + return connErr + } + return execErr + } + + if res != execSuccess { + // We failed during the stream itself. + return res + } + + if err != nil { + // We can't send an error in the middle of a stream. + // All we can do is abort the send, which will cause a 2013. + log.Errorf("Error in the middle of a stream to %s: %v", c, err) + return connErr + } + + // If we haven't sent the final packet for the last query, we should send that too. + if needsEndPacket { + if err := c.writeEndResult(false, 0, 0, handler.WarningCount(c)); err != nil { + log.Errorf("Error writing result to %s: %v", c, err) + return connErr + } + } + + return execSuccess +} + var errEmptyStatement = sqlerror.NewSQLError(sqlerror.EREmptyQuery, sqlerror.SSClientError, "Query was empty") func (c *Conn) handleComQuery(handler Handler, data []byte) (kontinue bool) { diff --git a/go/mysql/conn_params.go b/go/mysql/conn_params.go index 46e733f6021..b4087fa0ff3 100644 --- a/go/mysql/conn_params.go +++ b/go/mysql/conn_params.go @@ -38,7 +38,7 @@ type ConnParams struct { // The following SSL flags control the SSL behavior. // // Not setting this value implies preferred mode unless - // the CapabilityClientSSL bit is set in db_flags. In the + // the CapabilityClientSSL bit is set in db-flags. In the // flag is set, it ends up equivalent to verify_identity mode. SslMode vttls.SslMode SslCa string @@ -93,7 +93,7 @@ func (cp *ConnParams) EnableClientFoundRows() { // SslRequired returns whether the connection parameters // define that SSL is a requirement. If SslMode is set, it uses // that to determine this, if it's not set it falls back to -// the legacy db_flags behavior. +// the legacy db-flags behavior. func (cp *ConnParams) SslRequired() bool { mode := cp.EffectiveSslMode() return mode != vttls.Disabled && mode != vttls.Preferred @@ -101,7 +101,7 @@ func (cp *ConnParams) SslRequired() bool { // EffectiveSslMode computes the effective SslMode. If SslMode // is explicitly set, it uses that to determine this, if it's -// not set it falls back to the legacy db_flags behavior. +// not set it falls back to the legacy db-flags behavior. func (cp *ConnParams) EffectiveSslMode() vttls.SslMode { if cp.SslMode == "" { if (cp.Flags & CapabilityClientSSL) > 0 { diff --git a/go/mysql/conn_test.go b/go/mysql/conn_test.go index 7520493dbfc..96f707eec5e 100644 --- a/go/mysql/conn_test.go +++ b/go/mysql/conn_test.go @@ -40,6 +40,7 @@ import ( "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/test/utils" querypb "vitess.io/vitess/go/vt/proto/query" + "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/vtenv" ) @@ -803,104 +804,165 @@ func TestIsEOFPacket(t *testing.T) { } func TestMultiStatementStopsOnError(t *testing.T) { - listener, sConn, cConn := createSocketPair(t) - sConn.Capabilities |= CapabilityClientMultiStatements + origMysqlMultiQuery := mysqlMultiQuery defer func() { - listener.Close() - sConn.Close() - cConn.Close() + mysqlMultiQuery = origMysqlMultiQuery }() + for _, b := range []bool{true, false} { + t.Run(fmt.Sprintf("MultiQueryProtocol: %v", b), func(t *testing.T) { + mysqlMultiQuery = b + listener, sConn, cConn := createSocketPair(t) + sConn.Capabilities |= CapabilityClientMultiStatements + defer func() { + listener.Close() + sConn.Close() + cConn.Close() + }() + + err := cConn.WriteComQuery("error;select 2") + require.NoError(t, err) - err := cConn.WriteComQuery("error;select 2") - require.NoError(t, err) + // this handler will return results according to the query. In case the query contains "error" it will return an error + // panic if the query contains "panic" and it will return selectRowsResult in case of any other query + handler := &testRun{err: fmt.Errorf("execution failed")} + res := sConn.handleNextCommand(handler) + // Execution error will occur in this case because the query sent is error and testRun will throw an error. + // We should send an error packet but not close the connection. + require.True(t, res, "we should not break the connection because of execution errors") - // this handler will return results according to the query. In case the query contains "error" it will return an error - // panic if the query contains "panic" and it will return selectRowsResult in case of any other query - handler := &testRun{err: fmt.Errorf("execution failed")} - res := sConn.handleNextCommand(handler) - // Execution error will occur in this case because the query sent is error and testRun will throw an error. - // We should send an error packet but not close the connection. - require.True(t, res, "we should not break the connection because of execution errors") + data, err := cConn.ReadPacket() + require.NoError(t, err) + require.NotEmpty(t, data) + require.EqualValues(t, data[0], ErrPacket) // we should see the error here + }) + } +} - data, err := cConn.ReadPacket() - require.NoError(t, err) - require.NotEmpty(t, data) - require.EqualValues(t, data[0], ErrPacket) // we should see the error here +func TestEmptyQuery(t *testing.T) { + origMysqlMultiQuery := mysqlMultiQuery + defer func() { + mysqlMultiQuery = origMysqlMultiQuery + }() + for _, b := range []bool{true, false} { + t.Run(fmt.Sprintf("MultiQueryProtocol: %v", b), func(t *testing.T) { + mysqlMultiQuery = b + listener, sConn, cConn := createSocketPair(t) + sConn.Capabilities |= CapabilityClientMultiStatements + defer func() { + listener.Close() + sConn.Close() + cConn.Close() + }() + + err := cConn.WriteComQuery("") + require.NoError(t, err) + + // this handler will return results according to the query. In case the query contains "error" it will return an error + // panic if the query contains "panic" and it will return selectRowsResult in case of any other query + handler := &testRun{err: sqlerror.NewSQLError(sqlerror.CRMalformedPacket, sqlerror.SSUnknownSQLState, "cannot get column number")} + res := sConn.handleNextCommand(handler) + // The queries run will be an empty query; Even with the empty error, the connection should be fine + require.True(t, res, "we should not break the connection in case of no errors") + // Read the result and assert that we indeed see the error for empty query. + data, more, _, err := cConn.ReadQueryResult(100, true) + require.EqualError(t, err, "Query was empty (errno 1065) (sqlstate 42000)") + require.False(t, more) + require.Nil(t, data) + }) + } } func TestMultiStatement(t *testing.T) { - listener, sConn, cConn := createSocketPair(t) - sConn.Capabilities |= CapabilityClientMultiStatements + origMysqlMultiQuery := mysqlMultiQuery defer func() { - listener.Close() - sConn.Close() - cConn.Close() + mysqlMultiQuery = origMysqlMultiQuery }() + for _, b := range []bool{true, false} { + t.Run(fmt.Sprintf("MultiQueryProtocol: %v", b), func(t *testing.T) { + mysqlMultiQuery = b + listener, sConn, cConn := createSocketPair(t) + sConn.Capabilities |= CapabilityClientMultiStatements + defer func() { + listener.Close() + sConn.Close() + cConn.Close() + }() + + err := cConn.WriteComQuery("select 1;select 2") + require.NoError(t, err) - err := cConn.WriteComQuery("select 1;select 2") - require.NoError(t, err) - - // this handler will return results according to the query. In case the query contains "error" it will return an error - // panic if the query contains "panic" and it will return selectRowsResult in case of any other query - handler := &testRun{err: sqlerror.NewSQLError(sqlerror.CRMalformedPacket, sqlerror.SSUnknownSQLState, "cannot get column number")} - res := sConn.handleNextCommand(handler) - // The queries run will be select 1; and select 2; These queries do not return any errors, so the connection should still be open - require.True(t, res, "we should not break the connection in case of no errors") - // Read the result of the query and assert that it is indeed what we want. This will contain the result of the first query. - data, more, _, err := cConn.ReadQueryResult(100, true) - require.NoError(t, err) - // Since we executed 2 queries, there should be more results to be read - require.True(t, more) - require.True(t, data.Equal(selectRowsResult)) + // this handler will return results according to the query. In case the query contains "error" it will return an error + // panic if the query contains "panic" and it will return selectRowsResult in case of any other query + handler := &testRun{err: sqlerror.NewSQLError(sqlerror.CRMalformedPacket, sqlerror.SSUnknownSQLState, "cannot get column number")} + res := sConn.handleNextCommand(handler) + // The queries run will be select 1; and select 2; These queries do not return any errors, so the connection should still be open + require.True(t, res, "we should not break the connection in case of no errors") + // Read the result of the query and assert that it is indeed what we want. This will contain the result of the first query. + data, more, _, err := cConn.ReadQueryResult(100, true) + require.NoError(t, err) + // Since we executed 2 queries, there should be more results to be read + require.True(t, more) + require.True(t, data.Equal(selectRowsResult)) - // Read the results for the second query and verify the correctness - data, more, _, err = cConn.ReadQueryResult(100, true) - require.NoError(t, err) - // This was the final query run, so we expect that more should be false as there are no more queries. - require.False(t, more) - require.True(t, data.Equal(selectRowsResult)) + // Read the results for the second query and verify the correctness + data, more, _, err = cConn.ReadQueryResult(100, true) + require.NoError(t, err) + // This was the final query run, so we expect that more should be false as there are no more queries. + require.False(t, more) + require.True(t, data.Equal(selectRowsResult)) - // This time we run two queries fist of which will return an error - err = cConn.WriteComQuery("error;select 2") - require.NoError(t, err) + // This time we run two queries fist of which will return an error + err = cConn.WriteComQuery("error;select 2") + require.NoError(t, err) - res = sConn.handleNextCommand(handler) - // Even if the query returns an error we should not close the connection as it is an execution error - require.True(t, res, "we should not break the connection because of execution errors") + res = sConn.handleNextCommand(handler) + // Even if the query returns an error we should not close the connection as it is an execution error + require.True(t, res, "we should not break the connection because of execution errors") - // Read the result and assert that we indeed see the error that testRun throws. - data, more, _, err = cConn.ReadQueryResult(100, true) - require.EqualError(t, err, "cannot get column number (errno 2027) (sqlstate HY000)") - // In case of errors in a multi-statement, the following statements are not executed, therefore we want that more should be false - require.False(t, more) - require.Nil(t, data) + // Read the result and assert that we indeed see the error that testRun throws. + data, more, _, err = cConn.ReadQueryResult(100, true) + require.EqualError(t, err, "cannot get column number (errno 2027) (sqlstate HY000)") + // In case of errors in a multi-statement, the following statements are not executed, therefore we want that more should be false + require.False(t, more) + require.Nil(t, data) + }) + } } func TestMultiStatementOnSplitError(t *testing.T) { - listener, sConn, cConn := createSocketPair(t) - sConn.Capabilities |= CapabilityClientMultiStatements + origMysqlMultiQuery := mysqlMultiQuery defer func() { - listener.Close() - sConn.Close() - cConn.Close() + mysqlMultiQuery = origMysqlMultiQuery }() + for _, b := range []bool{true, false} { + t.Run(fmt.Sprintf("MultiQueryProtocol: %v", b), func(t *testing.T) { + mysqlMultiQuery = b + listener, sConn, cConn := createSocketPair(t) + sConn.Capabilities |= CapabilityClientMultiStatements + defer func() { + listener.Close() + sConn.Close() + cConn.Close() + }() + + err := cConn.WriteComQuery("broken>'query 1;parse'query 1;parse 5 { - t.Logf("Skipping xtrabackup tests with --xtrabackup_stream_mode=tar as tar is no longer a streaming option in XtraBackup 8.0") + t.Logf("Skipping xtrabackup tests with --xtrabackup-stream-mode=tar as tar is no longer a streaming option in XtraBackup 8.0") return nil } default: @@ -988,10 +989,10 @@ func restoreWaitForBackup(t *testing.T, tabletType string, cDetails *Compression replicaTabletArgs = updateCompressorArgs(replicaTabletArgs, cDetails) } if fakeImpl { - replicaTabletArgs = append(replicaTabletArgs, "--backup_engine_implementation", "fake_implementation") + replicaTabletArgs = append(replicaTabletArgs, vtutils.GetFlagVariantForTests("--backup-engine-implementation"), "fake_implementation") } - replicaTabletArgs = append(replicaTabletArgs, "--wait_for_backup_interval", "1s") - replicaTabletArgs = append(replicaTabletArgs, "--init_tablet_type", tabletType) + replicaTabletArgs = append(replicaTabletArgs, vtutils.GetFlagVariantForTests("--wait-for-backup-interval"), "1s") + replicaTabletArgs = append(replicaTabletArgs, vtutils.GetFlagVariantForTests("--init-tablet-type"), tabletType) replica2.VttabletProcess.ExtraArgs = replicaTabletArgs replica2.VttabletProcess.ServingStatus = "" err := replica2.VttabletProcess.Setup() @@ -1490,11 +1491,11 @@ func verifyTabletRestoreStats(t *testing.T, vars map[string]any) { func getDefaultCommonArgs() []string { return []string{ - "--vreplication_retry_delay", "1s", - "--degraded_threshold", "5s", - "--lock_tables_timeout", "5s", - "--watch_replication_stream", - "--enable_replication_reporter", + vtutils.GetFlagVariantForTests("--vreplication-retry-delay"), "1s", + vtutils.GetFlagVariantForTests("--degraded-threshold"), "5s", + vtutils.GetFlagVariantForTests("--lock-tables-timeout"), "5s", + vtutils.GetFlagVariantForTests("--watch-replication-stream"), + vtutils.GetFlagVariantForTests("--enable-replication-reporter"), "--serving_state_grace_period", "1s", } } diff --git a/go/test/endtoend/cellalias/cell_alias_test.go b/go/test/endtoend/cellalias/cell_alias_test.go index ef003754655..493a1d47302 100644 --- a/go/test/endtoend/cellalias/cell_alias_test.go +++ b/go/test/endtoend/cellalias/cell_alias_test.go @@ -35,6 +35,7 @@ import ( "vitess.io/vitess/go/test/endtoend/cluster" "vitess.io/vitess/go/vt/proto/topodata" + "vitess.io/vitess/go/vt/utils" ) var ( @@ -53,13 +54,13 @@ var ( ) Engine=InnoDB ` commonTabletArg = []string{ - "--vreplication_retry_delay", "1s", - "--degraded_threshold", "5s", - "--lock_tables_timeout", "5s", - "--watch_replication_stream", - "--enable_replication_reporter", + utils.GetFlagVariantForTests("--vreplication-retry-delay"), "1s", + utils.GetFlagVariantForTests("--degraded-threshold"), "5s", + utils.GetFlagVariantForTests("--lock-tables-timeout"), "5s", + utils.GetFlagVariantForTests("--watch-replication-stream"), + utils.GetFlagVariantForTests("--enable-replication-reporter"), "--serving_state_grace_period", "1s", - "--binlog_player_protocol", "grpc", + utils.GetFlagVariantForTests("--binlog-player-protocol"), "grpc", } vSchema = ` { diff --git a/go/test/endtoend/cluster/mysqlctl_process.go b/go/test/endtoend/cluster/mysqlctl_process.go index cfc4fc28088..397d0631788 100644 --- a/go/test/endtoend/cluster/mysqlctl_process.go +++ b/go/test/endtoend/cluster/mysqlctl_process.go @@ -54,6 +54,7 @@ type MysqlctlProcess struct { // InitDb executes mysqlctl command to add cell info func (mysqlctl *MysqlctlProcess) InitDb() (err error) { args := []string{"--log_dir", mysqlctl.LogDirectory, + //TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation "--tablet_uid", fmt.Sprintf("%d", mysqlctl.TabletUID), "--mysql_port", fmt.Sprintf("%d", mysqlctl.MySQLPort), "init", @@ -98,6 +99,7 @@ func (mysqlctl *MysqlctlProcess) StartProcess() (*exec.Cmd, error) { func (mysqlctl *MysqlctlProcess) startProcess(init bool) (*exec.Cmd, error) { tmpProcess := exec.Command( mysqlctl.Binary, + //TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation "--log_dir", mysqlctl.LogDirectory, "--tablet_uid", fmt.Sprintf("%d", mysqlctl.TabletUID), "--mysql_port", fmt.Sprintf("%d", mysqlctl.MySQLPort), @@ -227,6 +229,7 @@ func (mysqlctl *MysqlctlProcess) Stop() (err error) { func (mysqlctl *MysqlctlProcess) StopProcess() (*exec.Cmd, error) { tmpProcess := exec.Command( mysqlctl.Binary, + //TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation "--log_dir", mysqlctl.LogDirectory, "--tablet_uid", fmt.Sprintf("%d", mysqlctl.TabletUID), ) diff --git a/go/test/endtoend/cluster/mysqlctld_process.go b/go/test/endtoend/cluster/mysqlctld_process.go index 08409c1246d..003df184bb6 100644 --- a/go/test/endtoend/cluster/mysqlctld_process.go +++ b/go/test/endtoend/cluster/mysqlctld_process.go @@ -51,6 +51,7 @@ type MysqlctldProcess struct { // InitDb executes mysqlctld command to add cell info func (mysqlctld *MysqlctldProcess) InitDb() (err error) { args := []string{ + //TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation "--log_dir", mysqlctld.LogDirectory, "--tablet_uid", fmt.Sprintf("%d", mysqlctld.TabletUID), "--mysql_port", fmt.Sprintf("%d", mysqlctld.MySQLPort), @@ -73,6 +74,7 @@ func (mysqlctld *MysqlctldProcess) Start() error { } _ = createDirectory(mysqlctld.LogDirectory, 0700) args := []string{ + //TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation "--log_dir", mysqlctld.LogDirectory, "--tablet_uid", fmt.Sprintf("%d", mysqlctld.TabletUID), "--mysql_port", fmt.Sprintf("%d", mysqlctld.MySQLPort), @@ -160,6 +162,7 @@ func (mysqlctld *MysqlctldProcess) Stop() error { mysqlctld.exitSignalReceived = true tmpProcess := exec.Command( "mysqlctl", + //TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation "--tablet_uid", fmt.Sprintf("%d", mysqlctld.TabletUID), ) tmpProcess.Args = append(tmpProcess.Args, mysqlctld.ExtraArgs...) diff --git a/go/test/endtoend/cluster/vtbackup_process.go b/go/test/endtoend/cluster/vtbackup_process.go index ea12c8200d4..6e3e10a444b 100644 --- a/go/test/endtoend/cluster/vtbackup_process.go +++ b/go/test/endtoend/cluster/vtbackup_process.go @@ -26,6 +26,7 @@ import ( "time" "vitess.io/vitess/go/vt/log" + "vitess.io/vitess/go/vt/utils" ) // VtbackupProcess is a generic handle for a running Vtbackup. @@ -55,23 +56,36 @@ type VtbackupProcess struct { // Setup starts vtbackup process with required arguements func (vtbackup *VtbackupProcess) Setup() (err error) { - vtbackup.proc = exec.Command( - vtbackup.Binary, - "--topo_implementation", vtbackup.TopoImplementation, - "--topo_global_server_address", vtbackup.TopoGlobalAddress, - "--topo_global_root", vtbackup.TopoGlobalRoot, - "--log_dir", vtbackup.LogDir, + + flags := map[string]string{ + "--topo-implementation": vtbackup.TopoImplementation, + "--topo-global-server-address": vtbackup.TopoGlobalAddress, + "--topo-global-root": vtbackup.TopoGlobalRoot, + "--log_dir": vtbackup.LogDir, //initDBfile is required to run vtbackup - "--mysql_port", fmt.Sprintf("%d", vtbackup.MysqlPort), - "--init_db_sql_file", vtbackup.initDBfile, - "--init_keyspace", vtbackup.Keyspace, - "--init_shard", vtbackup.Shard, + "--mysql-port": fmt.Sprintf("%d", vtbackup.MysqlPort), + "--init_db_sql_file": vtbackup.initDBfile, + "--init-keyspace": vtbackup.Keyspace, + "--init-shard": vtbackup.Shard, //Backup Arguments are not optional - "--backup_storage_implementation", vtbackup.BackupStorageImplementation, - "--file_backup_storage_root", vtbackup.FileBackupStorageRoot, - ) + "--backup-storage-implementation": vtbackup.BackupStorageImplementation, + "--file_backup_storage_root": vtbackup.FileBackupStorageRoot, + } + + utils.SetFlagVariantsForTests(flags, "--topo-implementation", vtbackup.TopoImplementation) + utils.SetFlagVariantsForTests(flags, "--topo-global-server-address", vtbackup.TopoGlobalAddress) + utils.SetFlagVariantsForTests(flags, "--topo-global-root", vtbackup.TopoGlobalRoot) + utils.SetFlagVariantsForTests(flags, "--mysql-port", fmt.Sprintf("%d", vtbackup.MysqlPort)) + utils.SetFlagVariantsForTests(flags, "--init-keyspace", vtbackup.Keyspace) + utils.SetFlagVariantsForTests(flags, "--init-shard", vtbackup.Shard) + utils.SetFlagVariantsForTests(flags, "--backup-storage-implementation", vtbackup.BackupStorageImplementation) + + vtbackup.proc = exec.Command(vtbackup.Binary) + for k, v := range flags { + vtbackup.proc.Args = append(vtbackup.proc.Args, k, v) + } if vtbackup.initialBackup { vtbackup.proc.Args = append(vtbackup.proc.Args, "--initial_backup") diff --git a/go/test/endtoend/cluster/vtctld_process.go b/go/test/endtoend/cluster/vtctld_process.go index 831f5a23af7..cb46d51f9d9 100644 --- a/go/test/endtoend/cluster/vtctld_process.go +++ b/go/test/endtoend/cluster/vtctld_process.go @@ -53,6 +53,7 @@ func (vtctld *VtctldProcess) Setup(cell string, extraArgs ...string) (err error) _ = createDirectory(path.Join(vtctld.Directory, "backups"), 0700) vtctld.proc = exec.Command( vtctld.Binary, + //TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation "--topo_implementation", vtctld.TopoImplementation, "--topo_global_server_address", vtctld.TopoGlobalAddress, "--topo_global_root", vtctld.TopoGlobalRoot, diff --git a/go/test/endtoend/cluster/vtgate_process.go b/go/test/endtoend/cluster/vtgate_process.go index a0f67c38087..2946f5444f6 100644 --- a/go/test/endtoend/cluster/vtgate_process.go +++ b/go/test/endtoend/cluster/vtgate_process.go @@ -33,6 +33,7 @@ import ( "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/mysqlctl" + "vitess.io/vitess/go/vt/vtgate/planbuilder" "vitess.io/vitess/go/vt/vtgate/planbuilder/plancontext" ) @@ -148,6 +149,7 @@ const defaultVtGatePlannerVersion = planbuilder.Gen4 // Setup starts Vtgate process with required arguements func (vtgate *VtgateProcess) Setup() (err error) { args := []string{ + //TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation "--topo_implementation", vtgate.TopoImplementation, "--topo_global_server_address", vtgate.TopoGlobalAddress, "--topo_global_root", vtgate.TopoGlobalRoot, @@ -166,11 +168,13 @@ func (vtgate *VtgateProcess) Setup() (err error) { "--bind-address", "127.0.0.1", "--grpc_bind_address", "127.0.0.1", } + // If no explicit mysql_server_version has been specified then we autodetect // the MySQL version that will be used for the test and base the vtgate's // mysql server version on that. msvflag := false for _, f := range vtgate.ExtraArgs { + // TODO: Replace flag with dashed version in v25 if strings.Contains(f, "mysql_server_version") { msvflag = true break @@ -199,6 +203,7 @@ func (vtgate *VtgateProcess) Setup() (err error) { return err } mysqlvers := fmt.Sprintf("%d.%d.%d-vitess", vers.Major, vers.Minor, vers.Patch) + // TODO: Replace flag with dashed version in v25 args = append(args, "--mysql_server_version", mysqlvers) } if vtgate.PlannerVersion > 0 { diff --git a/go/test/endtoend/cluster/vtorc_process.go b/go/test/endtoend/cluster/vtorc_process.go index 4d726241756..ccbbdfd68d7 100644 --- a/go/test/endtoend/cluster/vtorc_process.go +++ b/go/test/endtoend/cluster/vtorc_process.go @@ -31,6 +31,7 @@ import ( "time" "vitess.io/vitess/go/vt/log" + "vitess.io/vitess/go/vt/utils" ) // VTOrcProcess is a test struct for running @@ -112,18 +113,27 @@ func (orc *VTOrcProcess) Setup() (err error) { } /* minimal command line arguments: - $ vtorc --topo_implementation etcd2 --topo_global_server_address localhost:2379 --topo_global_root /vitess/global + $ vtorc --topo-implementation etcd2 --topo-global-server-address localhost:2379 --topo-global-root /vitess/global --config config/vtorc/default.json --alsologtostderr */ - orc.proc = exec.Command( - orc.Binary, - "--topo_implementation", orc.TopoImplementation, - "--topo_global_server_address", orc.TopoGlobalAddress, - "--topo_global_root", orc.TopoGlobalRoot, - "--config-file", orc.ConfigPath, - "--port", fmt.Sprintf("%d", orc.Port), - "--bind-address", "127.0.0.1", - ) + flags := map[string]string{ + "--topo-implementation": orc.TopoImplementation, + "--topo-global-server-address": orc.TopoGlobalAddress, + "--topo-global-root": orc.TopoGlobalRoot, + "--config-file": orc.ConfigPath, + "--port": fmt.Sprintf("%d", orc.Port), + "--bind-address": "127.0.0.1", + } + + utils.SetFlagVariantsForTests(flags, "--topo-implementation", orc.TopoImplementation) + utils.SetFlagVariantsForTests(flags, "--topo-global-server-address", orc.TopoGlobalAddress) + utils.SetFlagVariantsForTests(flags, "--topo-global-root", orc.TopoGlobalRoot) + + orc.proc = exec.Command(orc.Binary) + for flag, value := range flags { + orc.proc.Args = append(orc.proc.Args, flag, value) + } + if !orc.NoOverride { orc.proc.Args = append(orc.proc.Args, // This parameter is overriden from the config file. This verifies that we indeed use the flag value over the config file. diff --git a/go/test/endtoend/cluster/vttablet_process.go b/go/test/endtoend/cluster/vttablet_process.go index 8fbe4be54d9..dc3625d82ec 100644 --- a/go/test/endtoend/cluster/vttablet_process.go +++ b/go/test/endtoend/cluster/vttablet_process.go @@ -94,6 +94,7 @@ type VttabletProcess struct { func (vttablet *VttabletProcess) Setup() (err error) { vttablet.proc = exec.Command( vttablet.Binary, + //TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation "--topo_implementation", vttablet.TopoImplementation, "--topo_global_server_address", vttablet.TopoGlobalAddress, "--topo_global_root", vttablet.TopoGlobalRoot, @@ -126,6 +127,7 @@ func (vttablet *VttabletProcess) Setup() (err error) { if vttablet.SupportsBackup { vttablet.proc.Args = append(vttablet.proc.Args, "--restore_from_backup") } + //TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation if vttablet.DbFlavor != "" { vttablet.proc.Args = append(vttablet.proc.Args, fmt.Sprintf("--db_flavor=%s", vttablet.DbFlavor)) } diff --git a/go/test/endtoend/encryption/encryptedreplication/encrypted_replication_test.go b/go/test/endtoend/encryption/encryptedreplication/encrypted_replication_test.go index 0d47f8fad4d..790b4570932 100644 --- a/go/test/endtoend/encryption/encryptedreplication/encrypted_replication_test.go +++ b/go/test/endtoend/encryption/encryptedreplication/encrypted_replication_test.go @@ -29,6 +29,7 @@ import ( "vitess.io/vitess/go/test/endtoend/cluster" "vitess.io/vitess/go/test/endtoend/encryption" "vitess.io/vitess/go/vt/log" + "vitess.io/vitess/go/vt/utils" ) var ( @@ -60,10 +61,11 @@ func testReplicationBase(t *testing.T, isClientCertPassed bool) { replicaTablet := *clusterInstance.Keyspaces[0].Shards[0].Vttablets[1] if isClientCertPassed { - replicaTablet.VttabletProcess.ExtraArgs = append(replicaTablet.VttabletProcess.ExtraArgs, "--db_flags", "2048", - "--db_ssl_ca", path.Join(certDirectory, "ca-cert.pem"), - "--db_ssl_cert", path.Join(certDirectory, "client-cert.pem"), - "--db_ssl_key", path.Join(certDirectory, "client-key.pem"), + replicaTablet.VttabletProcess.ExtraArgs = append(replicaTablet.VttabletProcess.ExtraArgs, + utils.GetFlagVariantForTests("--db-flags"), "2048", + utils.GetFlagVariantForTests("--db-ssl-ca"), path.Join(certDirectory, "ca-cert.pem"), + utils.GetFlagVariantForTests("--db-ssl-cert"), path.Join(certDirectory, "client-cert.pem"), + "--db-ssl-key", path.Join(certDirectory, "client-key.pem"), ) } diff --git a/go/test/endtoend/encryption/encryptedtransport/encrypted_transport_test.go b/go/test/endtoend/encryption/encryptedtransport/encrypted_transport_test.go index 3dc8b99555a..a0f3bc41ecc 100644 --- a/go/test/endtoend/encryption/encryptedtransport/encrypted_transport_test.go +++ b/go/test/endtoend/encryption/encryptedtransport/encrypted_transport_test.go @@ -67,6 +67,7 @@ import ( "vitess.io/vitess/go/test/endtoend/encryption" "vitess.io/vitess/go/vt/proto/vtrpc" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vterrors" "github.com/stretchr/testify/assert" @@ -201,7 +202,7 @@ func useEffectiveCallerID(ctx context.Context, t *testing.T) { // now restart vtgate in the mode where we don't use SSL // for client connections, but we copy effective caller id // into immediate caller id. - clusterInstance.VtGateExtraArgs = []string{"--grpc_use_effective_callerid"} + clusterInstance.VtGateExtraArgs = []string{utils.GetFlagVariantForTests("--grpc-use-effective-callerid")} clusterInstance.VtGateExtraArgs = append(clusterInstance.VtGateExtraArgs, tabletConnExtraArgs("vttablet-client-1")...) err := clusterInstance.RestartVtgate() require.NoError(t, err) @@ -250,7 +251,7 @@ func useEffectiveGroups(ctx context.Context, t *testing.T) { // now restart vtgate in the mode where we don't use SSL // for client connections, but we copy effective caller's groups // into immediate caller id. - clusterInstance.VtGateExtraArgs = []string{"--grpc_use_effective_callerid", "--grpc-use-effective-groups"} + clusterInstance.VtGateExtraArgs = []string{utils.GetFlagVariantForTests("--grpc-use-effective-callerid"), utils.GetFlagVariantForTests("--grpc-use-effective-groups")} clusterInstance.VtGateExtraArgs = append(clusterInstance.VtGateExtraArgs, tabletConnExtraArgs("vttablet-client-1")...) err := clusterInstance.RestartVtgate() require.NoError(t, err) @@ -422,27 +423,29 @@ func createSignedCert(ca string, serial string, name string, commonName string) } func serverExtraArguments(name string, ca string) []string { - args := []string{"--grpc_cert", certDirectory + "/" + name + "-cert.pem", - "--grpc_key", certDirectory + "/" + name + "-key.pem", - "--grpc_ca", certDirectory + "/" + ca + "-cert.pem"} + args := []string{ + utils.GetFlagVariantForTests("--grpc-cert"), certDirectory + "/" + name + "-cert.pem", + utils.GetFlagVariantForTests("--grpc-key"), certDirectory + "/" + name + "-key.pem", + utils.GetFlagVariantForTests("--grpc-ca"), certDirectory + "/" + ca + "-cert.pem", + } return args } func tmclientExtraArgs(name string) []string { ca := "vttablet-server" - var args = []string{"--tablet_manager_grpc_cert", certDirectory + "/" + name + "-cert.pem", - "--tablet_manager_grpc_key", certDirectory + "/" + name + "-key.pem", - "--tablet_manager_grpc_ca", certDirectory + "/" + ca + "-cert.pem", - "--tablet_manager_grpc_server_name", "vttablet server instance"} + var args = []string{"--tablet-manager-grpc-cert", certDirectory + "/" + name + "-cert.pem", + "--tablet-manager-grpc-key", certDirectory + "/" + name + "-key.pem", + "--tablet-manager-grpc-ca", certDirectory + "/" + ca + "-cert.pem", + "--tablet-manager-grpc-server-name", "vttablet server instance"} return args } func tabletConnExtraArgs(name string) []string { ca := "vttablet-server" - args := []string{"--tablet_grpc_cert", certDirectory + "/" + name + "-cert.pem", - "--tablet_grpc_key", certDirectory + "/" + name + "-key.pem", - "--tablet_grpc_ca", certDirectory + "/" + ca + "-cert.pem", - "--tablet_grpc_server_name", "vttablet server instance"} + args := []string{utils.GetFlagVariantForTests("--tablet-grpc-cert"), certDirectory + "/" + name + "-cert.pem", + utils.GetFlagVariantForTests("--tablet-grpc-key"), certDirectory + "/" + name + "-key.pem", + utils.GetFlagVariantForTests("--tablet-grpc-ca"), certDirectory + "/" + ca + "-cert.pem", + utils.GetFlagVariantForTests("--tablet-grpc-server-name"), "vttablet server instance"} return args } diff --git a/go/test/endtoend/messaging/message_test.go b/go/test/endtoend/messaging/message_test.go index 5939adfd0ea..de88cb902e2 100644 --- a/go/test/endtoend/messaging/message_test.go +++ b/go/test/endtoend/messaging/message_test.go @@ -403,7 +403,7 @@ func TestReparenting(t *testing.T) { // Verify connection has migrated. // The wait must be at least 6s which is how long vtgate will // wait before retrying: that is 30s/5 where 30s is the default - // message_stream_grace_period. + // message-stream-grace-period. time.Sleep(10 * time.Second) assertClientCount(t, 0, shard0Primary) assertClientCount(t, 1, shard0Replica) diff --git a/go/test/endtoend/mysqlserver/main_test.go b/go/test/endtoend/mysqlserver/main_test.go index 20da69e18e8..95a6f2afe99 100644 --- a/go/test/endtoend/mysqlserver/main_test.go +++ b/go/test/endtoend/mysqlserver/main_test.go @@ -25,6 +25,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/test/endtoend/cluster" + "vitess.io/vitess/go/vt/utils" ) var ( @@ -64,8 +65,8 @@ func TestMain(m *testing.M) { flag.Parse() // setting grpc max size - if os.Getenv("grpc_max_massage_size") == "" { - os.Setenv("grpc_max_message_size", strconv.FormatInt(16*1024*1024, 10)) + if os.Getenv("grpc-max-message-size") == "" { + os.Setenv("grpc-max-message-size", strconv.FormatInt(16*1024*1024, 10)) } exitcode, err := func() (int, error) { @@ -109,11 +110,11 @@ func TestMain(m *testing.M) { clusterInstance.VtGateExtraArgs = []string{ "--vschema_ddl_authorized_users=%", - "--mysql_server_query_timeout", "1s", - "--mysql_auth_server_impl", "static", + utils.GetFlagVariantForTests("--mysql-server-query-timeout"), "1s", + utils.GetFlagVariantForTests("--mysql-auth-server-impl"), "static", "--mysql_auth_server_static_file", clusterInstance.TmpDirectory + mysqlAuthServerStatic, - "--mysql_server_version", "8.0.16-7", - "--warn_sharded_only=true", + utils.GetFlagVariantForTests("--mysql-server-version"), "8.0.16-7", + utils.GetFlagVariantForTests("--warn-sharded-only") + "=true", } clusterInstance.VtTabletExtraArgs = []string{ diff --git a/go/test/endtoend/mysqlserver/mysql_server_test.go b/go/test/endtoend/mysqlserver/mysql_server_test.go index 3464a4d7712..9c6528edcd7 100644 --- a/go/test/endtoend/mysqlserver/mysql_server_test.go +++ b/go/test/endtoend/mysqlserver/mysql_server_test.go @@ -93,7 +93,7 @@ func TestInsertLargerThenGrpcLimit(t *testing.T) { require.Nilf(t, err, "unable to connect mysql: %v", err) defer conn.Close() - grpcLimit := os.Getenv("grpc_max_message_size") + grpcLimit := os.Getenv("grpc-max-message-size") limit, err := strconv.Atoi(grpcLimit) require.Nilf(t, err, "int parsing error: %v", err) diff --git a/go/test/endtoend/onlineddl/flow/onlineddl_flow_test.go b/go/test/endtoend/onlineddl/flow/onlineddl_flow_test.go index e794bbe9ab4..7a05ddc974e 100644 --- a/go/test/endtoend/onlineddl/flow/onlineddl_flow_test.go +++ b/go/test/endtoend/onlineddl/flow/onlineddl_flow_test.go @@ -132,12 +132,14 @@ func TestMain(m *testing.M) { } clusterInstance.VtctldExtraArgs = []string{ + // TODO: Replace flag with dashed version in v25 "--schema_change_dir", schemaChangeDirectory, "--schema_change_controller", "local", "--schema_change_check_interval", "1s", } clusterInstance.VtTabletExtraArgs = []string{ + // TODO: Replace flag with dashed version in v25 "--heartbeat_interval", "250ms", "--heartbeat_on_demand_duration", "5s", "--migration_check_interval", "2s", diff --git a/go/test/endtoend/onlineddl/revert/onlineddl_revert_test.go b/go/test/endtoend/onlineddl/revert/onlineddl_revert_test.go index 2d0782ed0a4..63eadedeed6 100644 --- a/go/test/endtoend/onlineddl/revert/onlineddl_revert_test.go +++ b/go/test/endtoend/onlineddl/revert/onlineddl_revert_test.go @@ -34,6 +34,7 @@ import ( "vitess.io/vitess/go/vt/log" tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata" "vitess.io/vitess/go/vt/schema" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vttablet/tabletserver/throttle/throttlerapp" "vitess.io/vitess/go/test/endtoend/cluster" @@ -150,19 +151,19 @@ func TestMain(m *testing.M) { } clusterInstance.VtctldExtraArgs = []string{ - "--schema_change_dir", schemaChangeDirectory, - "--schema_change_controller", "local", - "--schema_change_check_interval", "1s", + "--schema-change-dir", schemaChangeDirectory, + "--schema-change-controller", "local", + "--schema-change-check-interval", "1s", } clusterInstance.VtTabletExtraArgs = []string{ - "--heartbeat_interval", "250ms", - "--heartbeat_on_demand_duration", "5s", - "--migration_check_interval", "5s", - "--watch_replication_stream", + utils.GetFlagVariantForTests("--heartbeat-interval"), "250ms", + utils.GetFlagVariantForTests("--heartbeat-on-demand-duration"), "5s", + utils.GetFlagVariantForTests("--migration-check-interval"), "5s", + utils.GetFlagVariantForTests("--watch-replication-stream"), } clusterInstance.VtGateExtraArgs = []string{ - "--ddl_strategy", "online", + utils.GetFlagVariantForTests("--ddl-strategy"), "online", } if err := clusterInstance.StartTopo(); err != nil { diff --git a/go/test/endtoend/onlineddl/scheduler/onlineddl_scheduler_test.go b/go/test/endtoend/onlineddl/scheduler/onlineddl_scheduler_test.go index bbbeb3d6abf..ca814f86743 100644 --- a/go/test/endtoend/onlineddl/scheduler/onlineddl_scheduler_test.go +++ b/go/test/endtoend/onlineddl/scheduler/onlineddl_scheduler_test.go @@ -34,6 +34,7 @@ import ( "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/schema" "vitess.io/vitess/go/vt/sqlparser" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vttablet/tabletserver/throttle/throttlerapp" "vitess.io/vitess/go/test/endtoend/cluster" @@ -246,16 +247,16 @@ func TestMain(m *testing.M) { } clusterInstance.VtctldExtraArgs = []string{ - "--schema_change_dir", schemaChangeDirectory, - "--schema_change_controller", "local", - "--schema_change_check_interval", "1s", + "--schema-change-dir", schemaChangeDirectory, + "--schema-change-controller", "local", + "--schema-change-check-interval", "1s", } clusterInstance.VtTabletExtraArgs = []string{ - "--heartbeat_interval", "250ms", - "--heartbeat_on_demand_duration", "5s", - "--migration_check_interval", "2s", - "--watch_replication_stream", + utils.GetFlagVariantForTests("--heartbeat-interval"), "250ms", + utils.GetFlagVariantForTests("--heartbeat-on-demand-duration"), "5s", + utils.GetFlagVariantForTests("--migration-check-interval"), "2s", + utils.GetFlagVariantForTests("--watch-replication-stream"), } clusterInstance.VtGateExtraArgs = []string{} @@ -378,7 +379,10 @@ func testScheduler(t *testing.T) { ALTER TABLE t2_test ENGINE=InnoDB; ` instantAlterT1Statement = ` - ALTER TABLE t1_test ADD COLUMN i0 INT NOT NULL DEFAULT 0; + ALTER TABLE t1_test ADD COLUMN i0 INT NOT NULL DEFAULT 0 + ` + instantUndoAlterT1Statement = ` + ALTER TABLE t1_test DROP COLUMN i0 ` dropT1Statement = ` DROP TABLE IF EXISTS t1_test @@ -399,7 +403,7 @@ func testScheduler(t *testing.T) { ALTER TABLE nonexistent FORCE ` populateT1Statement = ` - insert into t1_test values (1, 'new_row') + insert ignore into t1_test values (1, 'new_row') ` ) @@ -600,6 +604,60 @@ func testScheduler(t *testing.T) { } }) }) + + t.Run("Delayed postpone completion ALTER", func(t *testing.T) { + onlineddl.ThrottleAllMigrations(t, &vtParams) + defer onlineddl.UnthrottleAllMigrations(t, &vtParams) + onlineddl.CheckThrottledApps(t, &vtParams, throttlerapp.OnlineDDLName, true) + + t1uuid = testOnlineDDLStatement(t, createParams(trivialAlterT1Statement, ddlStrategy, "vtgate", "", "", true)) // skip wait + + t.Run("wait for t1 running", func(t *testing.T) { + status := onlineddl.WaitForMigrationStatus(t, &vtParams, shards, t1uuid, normalWaitTime, schema.OnlineDDLStatusRunning) + fmt.Printf("# Migration status (for debug purposes): <%s>\n", status) + }) + + t.Run("check postpone_completion", func(t *testing.T) { + rs := onlineddl.ReadMigrations(t, &vtParams, t1uuid) + require.NotNil(t, rs) + for _, row := range rs.Named().Rows { + postponeCompletion := row.AsInt64("postpone_completion", 0) + assert.EqualValues(t, 0, postponeCompletion) + } + }) + t.Run("postpone", func(t *testing.T) { + onlineddl.CheckPostponeCompleteMigration(t, &vtParams, shards, t1uuid, true) + }) + t.Run("check postpone_completion set", func(t *testing.T) { + rs := onlineddl.ReadMigrations(t, &vtParams, t1uuid) + require.NotNil(t, rs) + for _, row := range rs.Named().Rows { + postponeCompletion := row.AsInt64("postpone_completion", 0) + assert.EqualValues(t, 1, postponeCompletion) + } + }) + onlineddl.UnthrottleAllMigrations(t, &vtParams) + onlineddl.CheckThrottledApps(t, &vtParams, throttlerapp.OnlineDDLName, false) + + t.Run("wait for ready_to_complete", func(t *testing.T) { + waitForReadyToComplete(t, t1uuid, true) + }) + t.Run("complete", func(t *testing.T) { + onlineddl.CheckCompleteMigration(t, &vtParams, shards, t1uuid, true) + status := onlineddl.WaitForMigrationStatus(t, &vtParams, shards, t1uuid, normalWaitTime, schema.OnlineDDLStatusComplete, schema.OnlineDDLStatusFailed) + fmt.Printf("# Migration status (for debug purposes): <%s>\n", status) + onlineddl.CheckMigrationStatus(t, &vtParams, shards, t1uuid, schema.OnlineDDLStatusComplete) + }) + t.Run("check no postpone_completion", func(t *testing.T) { + rs := onlineddl.ReadMigrations(t, &vtParams, t1uuid) + require.NotNil(t, rs) + for _, row := range rs.Named().Rows { + postponeCompletion := row.AsInt64("postpone_completion", 0) + assert.EqualValues(t, 0, postponeCompletion) + } + }) + }) + t.Run("show vitess_migrations in transaction", func(t *testing.T) { // The function validates there is no error rs := onlineddl.VtgateExecQueryInTransaction(t, &vtParams, "show vitess_migrations", "") @@ -792,6 +850,64 @@ func testScheduler(t *testing.T) { }) }) } + + if forceCutoverCapable { + t.Run("force_cutover_instant", func(t *testing.T) { + ctx, cancel := context.WithTimeout(context.Background(), extendedWaitTime*5) + defer cancel() + + t.Run("populate t1_test", func(t *testing.T) { + onlineddl.VtgateExecQuery(t, &vtParams, populateT1Statement, "") + }) + + commitTransactionChan := make(chan any) + transactionErrorChan := make(chan error) + t.Run("locking table rows", func(t *testing.T) { + go runInTransaction(t, ctx, primaryTablet, "select * from t1_test for update", commitTransactionChan, transactionErrorChan) + }) + + t.Run("execute migration", func(t *testing.T) { + t1uuid = testOnlineDDLStatement(t, createParams(instantAlterT1Statement, ddlStrategy+" --prefer-instant-ddl --force-cut-over-after=1ms", "vtgate", "", "", true)) // skip wait + }) + t.Run("expect completion", func(t *testing.T) { + status := onlineddl.WaitForMigrationStatus(t, &vtParams, shards, t1uuid, normalWaitTime, schema.OnlineDDLStatusComplete, schema.OnlineDDLStatusFailed) + fmt.Printf("# Migration status (for debug purposes): <%s>\n", status) + onlineddl.CheckMigrationStatus(t, &vtParams, shards, t1uuid, schema.OnlineDDLStatusComplete) + }) + t.Run("check special_plan", func(t *testing.T) { + rs := onlineddl.ReadMigrations(t, &vtParams, t1uuid) + require.NotNil(t, rs) + for _, row := range rs.Named().Rows { + specialPlan := row.AsString("special_plan", "") + assert.Contains(t, specialPlan, "instant-ddl") + } + }) + t.Run("expect transaction failure", func(t *testing.T) { + select { + case commitTransactionChan <- true: // good + case <-ctx.Done(): + assert.Fail(t, ctx.Err().Error()) + } + // Transaction will now attempt to commit. But we expect our "force_cutover" to have terminated + // the transaction's connection. + select { + case err := <-transactionErrorChan: + assert.ErrorContains(t, err, "broken pipe") + case <-ctx.Done(): + assert.Fail(t, ctx.Err().Error()) + } + }) + t.Run("cleanup: undo migration", func(t *testing.T) { + t1uuid = testOnlineDDLStatement(t, createParams(instantUndoAlterT1Statement, ddlStrategy+" --prefer-instant-ddl --force-cut-over-after=1ms", "vtgate", "", "", true)) // skip wait + }) + t.Run("cleanup: expect completion", func(t *testing.T) { + status := onlineddl.WaitForMigrationStatus(t, &vtParams, shards, t1uuid, normalWaitTime, schema.OnlineDDLStatusComplete, schema.OnlineDDLStatusFailed) + fmt.Printf("# Migration status (for debug purposes): <%s>\n", status) + onlineddl.CheckMigrationStatus(t, &vtParams, shards, t1uuid, schema.OnlineDDLStatusComplete) + }) + }) + } + t.Run("ALTER both tables non-concurrent", func(t *testing.T) { t1uuid = testOnlineDDLStatement(t, createParams(trivialAlterT1Statement, ddlStrategy, "vtgate", "", "", true)) // skip wait t2uuid = testOnlineDDLStatement(t, createParams(trivialAlterT2Statement, ddlStrategy, "vtgate", "", "", true)) // skip wait diff --git a/go/test/endtoend/onlineddl/vrepl/onlineddl_vrepl_test.go b/go/test/endtoend/onlineddl/vrepl/onlineddl_vrepl_test.go index a7c38527152..16c514a00ea 100644 --- a/go/test/endtoend/onlineddl/vrepl/onlineddl_vrepl_test.go +++ b/go/test/endtoend/onlineddl/vrepl/onlineddl_vrepl_test.go @@ -35,6 +35,7 @@ import ( "vitess.io/vitess/go/test/endtoend/onlineddl" "vitess.io/vitess/go/test/endtoend/throttler" "vitess.io/vitess/go/vt/schema" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vttablet/tabletserver/throttle/throttlerapp" binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" @@ -173,18 +174,18 @@ func TestMain(m *testing.M) { } clusterInstance.VtctldExtraArgs = []string{ - "--schema_change_dir", schemaChangeDirectory, - "--schema_change_controller", "local", - "--schema_change_check_interval", "1s", + "--schema-change-dir", schemaChangeDirectory, + "--schema-change-controller", "local", + "--schema-change-check-interval", "1s", } clusterInstance.VtTabletExtraArgs = []string{ - "--heartbeat_interval", "250ms", - "--migration_check_interval", "5s", - "--watch_replication_stream", + utils.GetFlagVariantForTests("--heartbeat-interval"), "250ms", + utils.GetFlagVariantForTests("--migration-check-interval"), "5s", + utils.GetFlagVariantForTests("--watch-replication-stream"), } clusterInstance.VtGateExtraArgs = []string{ - "--ddl_strategy", "online", + utils.GetFlagVariantForTests("--ddl-strategy"), "online", } if err := clusterInstance.StartTopo(); err != nil { diff --git a/go/test/endtoend/onlineddl/vrepl_stress/onlineddl_vrepl_mini_stress_test.go b/go/test/endtoend/onlineddl/vrepl_stress/onlineddl_vrepl_mini_stress_test.go index f7b222c175d..6218b317498 100644 --- a/go/test/endtoend/onlineddl/vrepl_stress/onlineddl_vrepl_mini_stress_test.go +++ b/go/test/endtoend/onlineddl/vrepl_stress/onlineddl_vrepl_mini_stress_test.go @@ -38,6 +38,7 @@ import ( "vitess.io/vitess/go/test/endtoend/throttler" "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/schema" + "vitess.io/vitess/go/vt/utils" ) type WriteMetrics struct { @@ -172,19 +173,19 @@ func TestMain(m *testing.M) { } clusterInstance.VtctldExtraArgs = []string{ - "--schema_change_dir", schemaChangeDirectory, - "--schema_change_controller", "local", - "--schema_change_check_interval", "1s", + "--schema-change-dir", schemaChangeDirectory, + "--schema-change-controller", "local", + "--schema-change-check-interval", "1s", } clusterInstance.VtTabletExtraArgs = []string{ - "--heartbeat_interval", "250ms", - "--heartbeat_on_demand_duration", "5s", - "--migration_check_interval", "5s", - "--watch_replication_stream", + utils.GetFlagVariantForTests("--heartbeat-interval"), "250ms", + utils.GetFlagVariantForTests("--heartbeat-on-demand-duration"), "5s", + utils.GetFlagVariantForTests("--migration-check-interval"), "5s", + utils.GetFlagVariantForTests("--watch-replication-stream"), } clusterInstance.VtGateExtraArgs = []string{ - "--ddl_strategy", "online", + utils.GetFlagVariantForTests("--ddl-strategy"), "online", } if err := clusterInstance.StartTopo(); err != nil { diff --git a/go/test/endtoend/onlineddl/vrepl_stress_suite/onlineddl_vrepl_stress_suite_test.go b/go/test/endtoend/onlineddl/vrepl_stress_suite/onlineddl_vrepl_stress_suite_test.go index 1e52db38bd0..c8e97e4f87d 100644 --- a/go/test/endtoend/onlineddl/vrepl_stress_suite/onlineddl_vrepl_stress_suite_test.go +++ b/go/test/endtoend/onlineddl/vrepl_stress_suite/onlineddl_vrepl_stress_suite_test.go @@ -51,6 +51,7 @@ import ( "vitess.io/vitess/go/timer" "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/schema" + "vitess.io/vitess/go/vt/utils" ) type testcase struct { @@ -420,23 +421,23 @@ func TestMain(m *testing.M) { } clusterInstance.VtctldExtraArgs = []string{ - "--schema_change_dir", schemaChangeDirectory, - "--schema_change_controller", "local", - "--schema_change_check_interval", "1s", + "--schema-change-dir", schemaChangeDirectory, + "--schema-change-controller", "local", + "--schema-change-check-interval", "1s", } // --vstream_packet_size is set to a small value that ensures we get multiple stream iterations, // thereby examining lastPK on vcopier side. We will be iterating tables using non-PK order throughout // this test suite, and so the low setting ensures we hit the more interesting code paths. clusterInstance.VtTabletExtraArgs = []string{ - "--heartbeat_interval", "250ms", - "--heartbeat_on_demand_duration", "5s", - "--migration_check_interval", "5s", - "--vstream_packet_size", "4096", // Keep this value small and below 10k to ensure multilple vstream iterations - "--watch_replication_stream", + utils.GetFlagVariantForTests("--heartbeat-interval"), "250ms", + utils.GetFlagVariantForTests("--heartbeat-on-demand-duration"), "5s", + utils.GetFlagVariantForTests("--migration-check-interval"), "5s", + "--vstream-packet-size", "4096", // Keep this value small and below 10k to ensure multilple vstream iterations + utils.GetFlagVariantForTests("--watch-replication-stream"), } clusterInstance.VtGateExtraArgs = []string{ - "--ddl_strategy", "online", + utils.GetFlagVariantForTests("--ddl-strategy"), "online", } if err := clusterInstance.StartTopo(); err != nil { diff --git a/go/test/endtoend/onlineddl/vrepl_suite/onlineddl_vrepl_suite_test.go b/go/test/endtoend/onlineddl/vrepl_suite/onlineddl_vrepl_suite_test.go index 4a2f7f1a3ce..a1bf634334a 100644 --- a/go/test/endtoend/onlineddl/vrepl_suite/onlineddl_vrepl_suite_test.go +++ b/go/test/endtoend/onlineddl/vrepl_suite/onlineddl_vrepl_suite_test.go @@ -82,12 +82,14 @@ func TestMain(m *testing.M) { } clusterInstance.VtctldExtraArgs = []string{ + // TODO: Replace flag with dashed version in v25 "--schema_change_dir", schemaChangeDirectory, "--schema_change_controller", "local", "--schema_change_check_interval", "1s", } clusterInstance.VtTabletExtraArgs = []string{ + // TODO: Replace flag with dashed version in v25 "--heartbeat_interval", "250ms", "--heartbeat_on_demand_duration", "5s", "--migration_check_interval", "5s", diff --git a/go/test/endtoend/onlineddl/vtgate_util.go b/go/test/endtoend/onlineddl/vtgate_util.go index ffb6423a346..d81bc64055e 100644 --- a/go/test/endtoend/onlineddl/vtgate_util.go +++ b/go/test/endtoend/onlineddl/vtgate_util.go @@ -179,6 +179,21 @@ func CheckCompleteMigration(t *testing.T, vtParams *mysql.ConnParams, shards []c } } +// CheckPostponeCompleteMigration attempts to postpone an existing migration, and expects success by counting affected rows +func CheckPostponeCompleteMigration(t *testing.T, vtParams *mysql.ConnParams, shards []cluster.Shard, uuid string, expectPotponePossible bool) { + query, err := sqlparser.ParseAndBind("alter vitess_migration %a postpone complete", + sqltypes.StringBindVariable(uuid), + ) + require.NoError(t, err) + r := VtgateExecQuery(t, vtParams, query, "") + + if expectPotponePossible { + assert.Equal(t, len(shards), int(r.RowsAffected)) + } else { + assert.Equal(t, int(0), int(r.RowsAffected)) + } +} + // CheckLaunchMigration attempts to launch a migration, and expects success by counting affected rows func CheckLaunchMigration(t *testing.T, vtParams *mysql.ConnParams, shards []cluster.Shard, uuid string, launchShards string, expectLaunchPossible bool) { query, err := sqlparser.ParseAndBind("alter vitess_migration %a launch vitess_shards %a", @@ -206,6 +221,17 @@ func CheckCompleteAllMigrations(t *testing.T, vtParams *mysql.ConnParams, expect } } +// CheckPostponeCompleteAllMigrations postpones all pending migrations and expect number of affected rows +// A negative value for expectCount indicates "don't care, no need to check" +func CheckPostponeCompleteAllMigrations(t *testing.T, vtParams *mysql.ConnParams, expectCount int) { + completeQuery := "alter vitess_migration postpone complete all" + r := VtgateExecQuery(t, vtParams, completeQuery, "") + + if expectCount >= 0 { + assert.Equal(t, expectCount, int(r.RowsAffected)) + } +} + // CheckCancelAllMigrations cancels all pending migrations and expect number of affected rows // A negative value for expectCount indicates "don't care, no need to check" func CheckCancelAllMigrations(t *testing.T, vtParams *mysql.ConnParams, expectCount int) { diff --git a/go/test/endtoend/preparestmt/main_test.go b/go/test/endtoend/preparestmt/main_test.go index dd0094fe825..53079ff081a 100644 --- a/go/test/endtoend/preparestmt/main_test.go +++ b/go/test/endtoend/preparestmt/main_test.go @@ -30,6 +30,7 @@ import ( "github.com/stretchr/testify/require" "vitess.io/vitess/go/test/endtoend/cluster" + "vitess.io/vitess/go/vt/utils" ) // tableData is a temporary structure to hold selected data. @@ -161,7 +162,7 @@ func TestMain(m *testing.M) { vtgateInstance.MySQLAuthServerImpl = "static" // add extra arguments vtgateInstance.ExtraArgs = []string{ - "--mysql_server_query_timeout", "1s", + utils.GetFlagVariantForTests("--mysql-server-query-timeout"), "1s", "--mysql_auth_server_static_file", clusterInstance.TmpDirectory + "/" + mysqlAuthServerStatic, "--pprof-http", "--schema_change_signal=false", diff --git a/go/test/endtoend/preparestmt/stmt_methods_test.go b/go/test/endtoend/preparestmt/stmt_methods_test.go index 38ee96b9272..00479632bf8 100644 --- a/go/test/endtoend/preparestmt/stmt_methods_test.go +++ b/go/test/endtoend/preparestmt/stmt_methods_test.go @@ -444,12 +444,34 @@ func TestBinaryColumn(t *testing.T) { require.NoError(t, err) } +// TestInsertTest inserts a row with empty json array. +func TestInsertTest(t *testing.T) { + dbo := Connect(t, "interpolateParams=false") + defer dbo.Close() + + stmt, err := dbo.Prepare(`insert into vt_prepare_stmt_test(id, keyspace_id, json_col) values( null, ?, ?)`) + require.NoError(t, err) + + res, err := stmt.Exec(1, "[]") + require.NoError(t, err) + + ra, err := res.RowsAffected() + require.NoError(t, err) + + assert.Equal(t, int64(1), ra) +} + // TestSpecializedPlan tests the specialized plan generation for the query. func TestSpecializedPlan(t *testing.T) { dbInfo.KeyspaceName = sks dbo := Connect(t, "interpolateParams=false") defer dbo.Close() + oMap := getVarValue[map[string]any](t, "OptimizedQueryExecutions", clusterInstance.VtgateProcess.GetVars) + initExecCount := getVarValue[float64](t, "Passthrough", func() map[string]any { + return oMap + }) + queries := []struct { query string args []any @@ -462,6 +484,9 @@ func TestSpecializedPlan(t *testing.T) { }, { query: `select 1 from t1 tbl1, t1 tbl2, t1 tbl3, t1 tbl4 where tbl1.id = ? and tbl2.id = ? and tbl3.id = ? and tbl4.id = ?`, args: []any{1, 1, 1, 1}, + }, { + query: `SELECT e.id, e.name, s.age, ROW_NUMBER() OVER (PARTITION BY e.age ORDER BY s.name DESC) AS age_rank FROM t1 e, t1 s where e.id = ? and s.id = ?`, + args: []any{1, 1}, }} for _, q := range queries { @@ -475,11 +500,27 @@ func TestSpecializedPlan(t *testing.T) { } require.NoError(t, stmt.Close()) } + oMap = getVarValue[map[string]any](t, "OptimizedQueryExecutions", clusterInstance.VtgateProcess.GetVars) + finalExecCount := getVarValue[float64](t, "Passthrough", func() map[string]any { + return oMap + }) + require.EqualValues(t, 20, finalExecCount-initExecCount) + + randomExec(t, dbo) - // Validate specialized plan. + // Validate Join Query specialized plan. p := getPlanWhenReady(t, queries[0].query, 100*time.Millisecond, clusterInstance.VtgateProcess.ReadQueryPlans) require.NotNil(t, p, "plan not found") + validateJoinSpecializedPlan(t, p) + + // Validate Window Function Query specialized plan with failing baseline plan. + p = getPlanWhenReady(t, queries[3].query, 100*time.Millisecond, clusterInstance.VtgateProcess.ReadQueryPlans) + require.NotNil(t, p, "plan not found") + validateBaselineErrSpecializedPlan(t, p) +} +func validateJoinSpecializedPlan(t *testing.T, p map[string]any) { + t.Helper() plan, exist := p["Instructions"] require.True(t, exist, "plan Instructions not found") @@ -494,6 +535,43 @@ func TestSpecializedPlan(t *testing.T) { require.Equal(t, "EqualUnique", pd.Inputs[1].Variant) } +func validateBaselineErrSpecializedPlan(t *testing.T, p map[string]any) { + t.Helper() + plan, exist := p["Instructions"] + require.True(t, exist, "plan Instructions not found") + + pm, ok := plan.(map[string]any) + require.True(t, ok, "plan is not of type map[string]any") + require.EqualValues(t, "PlanSwitcher", pm["OperatorType"]) + require.EqualValues(t, "VT12001: unsupported: OVER CLAUSE with sharded keyspace", pm["BaselineErr"]) + + pd, err := engine.PrimitiveDescriptionFromMap(plan.(map[string]any)) + require.NoError(t, err) + require.Equal(t, "PlanSwitcher", pd.OperatorType) + require.Len(t, pd.Inputs, 1, "Only Specialized plan should be available") + + require.Equal(t, "Optimized", pd.Inputs[0].InputName) + require.Equal(t, "Route", pd.Inputs[0].OperatorType) + require.Equal(t, "EqualUnique", pd.Inputs[0].Variant) +} + +// randomExec to make many plans so that plan cache is populated. +func randomExec(t *testing.T, dbo *sql.DB) { + t.Helper() + + for i := 1; i < 101; i++ { + // generate a random query + query := fmt.Sprintf("SELECT %d", i) + stmt, err := dbo.Prepare(query) + require.NoError(t, err) + + rows, err := stmt.Query() + require.NoError(t, err) + require.NoError(t, rows.Close()) + time.Sleep(5 * time.Millisecond) + } +} + // getPlanWhenReady polls for the query plan until it is ready or times out. func getPlanWhenReady(t *testing.T, sql string, timeout time.Duration, plansFunc func() (map[string]any, error)) map[string]any { t.Helper() @@ -519,3 +597,20 @@ func getPlanWhenReady(t *testing.T, sql string, timeout time.Duration, plansFunc } } } + +func getVarValue[T any](t *testing.T, key string, varFunc func() map[string]any) T { + t.Helper() + + vars := varFunc() + require.NotNil(t, vars) + + value, exists := vars[key] + if !exists { + return *new(T) + } + castValue, ok := value.(T) + if !ok { + t.Errorf("unexpected type, want: %T, got %T", new(T), value) + } + return castValue +} diff --git a/go/test/endtoend/recovery/recovery_util.go b/go/test/endtoend/recovery/recovery_util.go index bc182bf99c7..c965eb812b4 100644 --- a/go/test/endtoend/recovery/recovery_util.go +++ b/go/test/endtoend/recovery/recovery_util.go @@ -26,6 +26,7 @@ import ( "github.com/stretchr/testify/require" "vitess.io/vitess/go/test/endtoend/cluster" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtgate/vtgateconn" ) @@ -36,10 +37,10 @@ var ( UseXb = false // XbArgs are the arguments for specifying xtrabackup. XbArgs = []string{ - "--backup_engine_implementation", "xtrabackup", - "--xtrabackup_stream_mode=xbstream", - "--xtrabackup_user=vt_dba", - "--xtrabackup_backup_flags", fmt.Sprintf("--password=%s", dbPassword), + utils.GetFlagVariantForTests("--backup-engine-implementation"), "xtrabackup", + fmt.Sprintf("%s=xbstream", utils.GetFlagVariantForTests("--xtrabackup-stream-mode")), + fmt.Sprintf("%s=vt_dba", utils.GetFlagVariantForTests("--xtrabackup-user")), + utils.GetFlagVariantForTests("--xtrabackup-backup-flags"), fmt.Sprintf("--password=%s", dbPassword), } ) @@ -72,11 +73,11 @@ func RestoreTablet(t *testing.T, localCluster *cluster.LocalProcessCluster, tabl replicaTabletArgs = append(replicaTabletArgs, XbArgs...) } replicaTabletArgs = append(replicaTabletArgs, - "--enable_replication_reporter=false", - "--init_tablet_type", "replica", - "--init_keyspace", restoreKSName, - "--init_shard", shardName, - "--init_db_name_override", "vt_"+keyspaceName, + utils.GetFlagVariantForTests("--enable-replication-reporter")+"=false", + utils.GetFlagVariantForTests("--init-tablet-type"), "replica", + utils.GetFlagVariantForTests("--init-keyspace"), restoreKSName, + utils.GetFlagVariantForTests("--init-shard"), shardName, + utils.GetFlagVariantForTests("--init-db-name-override"), "vt_"+keyspaceName, ) tablet.VttabletProcess.SupportsBackup = true tablet.VttabletProcess.ExtraArgs = replicaTabletArgs diff --git a/go/test/endtoend/recovery/unshardedrecovery/recovery.go b/go/test/endtoend/recovery/unshardedrecovery/recovery.go index 0d3c38a50f7..4f6f7f565e9 100644 --- a/go/test/endtoend/recovery/unshardedrecovery/recovery.go +++ b/go/test/endtoend/recovery/unshardedrecovery/recovery.go @@ -33,6 +33,7 @@ import ( "vitess.io/vitess/go/test/endtoend/recovery" "vitess.io/vitess/go/test/endtoend/utils" "vitess.io/vitess/go/vt/log" + vtutils "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtgate/vtgateconn" ) @@ -51,10 +52,10 @@ var ( dbCredentialFile string shardName = "0" commonTabletArg = []string{ - "--vreplication_retry_delay", "1s", - "--degraded_threshold", "5s", - "--lock_tables_timeout", "5s", - "--watch_replication_stream", + "--vreplication-retry-delay", "1s", + vtutils.GetFlagVariantForTests("--degraded-threshold"), "5s", + vtutils.GetFlagVariantForTests("--lock-tables-timeout"), "5s", + vtutils.GetFlagVariantForTests("--watch-replication-stream"), "--serving_state_grace_period", "1s"} recoveryKS1 = "recovery_ks1" recoveryKS2 = "recovery_ks2" diff --git a/go/test/endtoend/reparent/emergencyreparent/ers_test.go b/go/test/endtoend/reparent/emergencyreparent/ers_test.go index f2febf9e27f..7473bf89c9e 100644 --- a/go/test/endtoend/reparent/emergencyreparent/ers_test.go +++ b/go/test/endtoend/reparent/emergencyreparent/ers_test.go @@ -388,6 +388,7 @@ func TestERSForInitialization(t *testing.T) { shard := &cluster.Shard{Name: utils.ShardName} shard.Vttablets = tablets clusterInstance.VtTabletExtraArgs = []string{ + //TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation "--lock_tables_timeout", "5s", "--track_schema_versions=true", } diff --git a/go/test/endtoend/reparent/newfeaturetest/reparent_test.go b/go/test/endtoend/reparent/newfeaturetest/reparent_test.go index 2db9d08d44d..6d4a5fb0f2b 100644 --- a/go/test/endtoend/reparent/newfeaturetest/reparent_test.go +++ b/go/test/endtoend/reparent/newfeaturetest/reparent_test.go @@ -40,7 +40,7 @@ import ( // even when there are multiple vttablet failures. In this test we use the semi_sync policy // to allow multiple failures to happen and still be recoverable. // The test takes down the vttablets of the primary and a rdonly tablet and runs ERS with the -// default values of remote_operation_timeout, lock-timeout flags and wait_replicas_timeout subflag. +// default values of remote-operation-timeout, lock-timeout flags and wait_replicas_timeout subflag. func TestRecoverWithMultipleVttabletFailures(t *testing.T) { clusterInstance := utils.SetupReparentCluster(t, policy.DurabilitySemiSync) defer utils.TeardownCluster(clusterInstance) diff --git a/go/test/endtoend/reparent/prscomplex/main_test.go b/go/test/endtoend/reparent/prscomplex/main_test.go index c2dafb8589f..849ac5a0392 100644 --- a/go/test/endtoend/reparent/prscomplex/main_test.go +++ b/go/test/endtoend/reparent/prscomplex/main_test.go @@ -31,6 +31,7 @@ import ( "vitess.io/vitess/go/test/endtoend/cluster" rutils "vitess.io/vitess/go/test/endtoend/reparent/utils" "vitess.io/vitess/go/test/endtoend/utils" + vtutils "vitess.io/vitess/go/vt/utils" ) var ( @@ -77,7 +78,7 @@ func TestMain(m *testing.M) { // Start vtgate clusterInstance.VtGateExtraArgs = append(clusterInstance.VtGateExtraArgs, "--planner-version=gen4", - "--mysql_default_workload=olap", + vtutils.GetFlagVariantForTests("--mysql-default-workload")+"=olap", "--schema_change_signal=false") err = clusterInstance.StartVtgate() if err != nil { diff --git a/go/test/endtoend/reparent/utils/utils.go b/go/test/endtoend/reparent/utils/utils.go index 08a97a91ed7..807bcb3ac28 100644 --- a/go/test/endtoend/reparent/utils/utils.go +++ b/go/test/endtoend/reparent/utils/utils.go @@ -32,6 +32,7 @@ import ( "github.com/stretchr/testify/require" querypb "vitess.io/vitess/go/vt/proto/query" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtctl/reparentutil/policy" "vitess.io/vitess/go/vt/vttablet/tabletconn" @@ -84,11 +85,11 @@ func SetupShardedReparentCluster(t *testing.T, durability string, extraVttabletF require.NoError(t, err) clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs, - "--lock_tables_timeout", "5s", + utils.GetFlagVariantForTests("--lock-tables-timeout"), "5s", // Fast health checks help find corner cases. - "--health_check_interval", "1s", + utils.GetFlagVariantForTests("--health-check-interval"), "1s", "--track_schema_versions=true", - "--queryserver_enable_online_ddl=false") + utils.GetFlagVariantForTests("--queryserver-enable-online-ddl")+"=false") if len(extraVttabletFlags) > 0 { clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs, extraVttabletFlags...) @@ -97,9 +98,9 @@ func SetupShardedReparentCluster(t *testing.T, durability string, extraVttabletF clusterInstance.VtGateExtraArgs = append(clusterInstance.VtGateExtraArgs, "--enable_buffer", // Long timeout in case failover is slow. - "--buffer_window", "10m", - "--buffer_max_failover_duration", "10m", - "--buffer_min_time_between_failovers", "20m", + utils.GetFlagVariantForTests("--buffer-window"), "10m", + utils.GetFlagVariantForTests("--buffer-max-failover-duration"), "10m", + utils.GetFlagVariantForTests("--buffer-min-time-between-failovers"), "20m", ) // Start keyspace @@ -187,6 +188,7 @@ func setupCluster(ctx context.Context, t *testing.T, shardName string, cells []s shard.Vttablets = tablets clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs, + //TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation "--lock_tables_timeout", "5s", "--track_schema_versions=true", // disabling online-ddl for reparent tests. This is done to reduce flakiness. @@ -195,7 +197,7 @@ func setupCluster(ctx context.Context, t *testing.T, shardName string, cells []s // In this case, the close method and initSchema method of the onlineDDL executor race. // If the initSchema acquires the lock, then it takes about 30 seconds for it to run during which time the // DemotePrimary rpc is stalled! - "--queryserver_enable_online_ddl=false") + "--queryserver_enable_online_ddl"+"=false") // Initialize Cluster err = clusterInstance.SetupCluster(keyspace, []cluster.Shard{*shard}) @@ -281,9 +283,10 @@ func StartNewVTTablet(t *testing.T, clusterInstance *cluster.LocalProcessCluster clusterInstance.Hostname, clusterInstance.TmpDirectory, []string{ + //TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation "--lock_tables_timeout", "5s", "--track_schema_versions=true", - "--queryserver_enable_online_ddl=false", + "--queryserver_enable_online_ddl" + "=false", }, clusterInstance.DefaultCharset) tablet.VttabletProcess.SupportsBackup = supportsBackup diff --git a/go/test/endtoend/schemadiff/vrepl/schemadiff_vrepl_suite_test.go b/go/test/endtoend/schemadiff/vrepl/schemadiff_vrepl_suite_test.go index c850e22945c..987030bec92 100644 --- a/go/test/endtoend/schemadiff/vrepl/schemadiff_vrepl_suite_test.go +++ b/go/test/endtoend/schemadiff/vrepl/schemadiff_vrepl_suite_test.go @@ -36,6 +36,7 @@ import ( "vitess.io/vitess/go/test/endtoend/throttler" "vitess.io/vitess/go/vt/schemadiff" "vitess.io/vitess/go/vt/sqlparser" + "vitess.io/vitess/go/vt/utils" ) var ( @@ -81,16 +82,16 @@ func TestMain(m *testing.M) { } clusterInstance.VtctldExtraArgs = []string{ - "--schema_change_dir", schemaChangeDirectory, - "--schema_change_controller", "local", - "--schema_change_check_interval", "1s", + "--schema-change-dir", schemaChangeDirectory, + "--schema-change-controller", "local", + "--schema-change-check-interval", "1s", } clusterInstance.VtTabletExtraArgs = []string{ - "--heartbeat_interval", "250ms", - "--heartbeat_on_demand_duration", "5s", - "--migration_check_interval", "5s", - "--watch_replication_stream", + utils.GetFlagVariantForTests("--heartbeat-interval"), "250ms", + utils.GetFlagVariantForTests("--heartbeat-on-demand-duration"), "5s", + utils.GetFlagVariantForTests("--migration-check-interval"), "5s", + utils.GetFlagVariantForTests("--watch-replication-stream"), } if err := clusterInstance.StartTopo(); err != nil { diff --git a/go/test/endtoend/tabletgateway/buffer/buffer_test_helpers.go b/go/test/endtoend/tabletgateway/buffer/buffer_test_helpers.go index 920e2193453..724484c1d18 100644 --- a/go/test/endtoend/tabletgateway/buffer/buffer_test_helpers.go +++ b/go/test/endtoend/tabletgateway/buffer/buffer_test_helpers.go @@ -48,6 +48,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/test/endtoend/cluster" + vtutils "vitess.io/vitess/go/vt/utils" ) const ( @@ -216,7 +217,7 @@ func (bt *BufferingTest) createCluster() (*cluster.LocalProcessCluster, int) { clusterInstance := cluster.NewCluster(cell, hostname) // Start topo server - clusterInstance.VtctldExtraArgs = []string{"--remote_operation_timeout", "30s", "--topo_etcd_lease_ttl", "40"} + clusterInstance.VtctldExtraArgs = []string{vtutils.GetFlagVariantForTests("--remote-operation-timeout"), "30s", "--topo-etcd-lease-ttl", "40"} if err := clusterInstance.StartTopo(); err != nil { return nil, 1 } @@ -228,7 +229,7 @@ func (bt *BufferingTest) createCluster() (*cluster.LocalProcessCluster, int) { VSchema: bt.VSchema, } clusterInstance.VtTabletExtraArgs = []string{ - "--health_check_interval", "1s", + vtutils.GetFlagVariantForTests("--health-check-interval"), "1s", "--queryserver-config-transaction-timeout", "20s", } if err := clusterInstance.StartUnshardedKeyspace(*keyspace, 1, false); err != nil { @@ -238,11 +239,11 @@ func (bt *BufferingTest) createCluster() (*cluster.LocalProcessCluster, int) { clusterInstance.VtGateExtraArgs = []string{ "--enable_buffer", // Long timeout in case failover is slow. - "--buffer_window", "10m", - "--buffer_max_failover_duration", "10m", - "--buffer_min_time_between_failovers", "20m", - "--tablet_refresh_interval", "1s", - "--buffer_drain_concurrency", "4", + vtutils.GetFlagVariantForTests("--buffer-window"), "10m", + vtutils.GetFlagVariantForTests("--buffer-max-failover-duration"), "10m", + vtutils.GetFlagVariantForTests("--buffer-min-time-between-failovers"), "20m", + vtutils.GetFlagVariantForTests("--tablet-refresh-interval"), "1s", + vtutils.GetFlagVariantForTests("--buffer-drain-concurrency"), "4", } clusterInstance.VtGateExtraArgs = append(clusterInstance.VtGateExtraArgs, bt.VtGateExtraArgs...) diff --git a/go/test/endtoend/tabletgateway/main_test.go b/go/test/endtoend/tabletgateway/main_test.go index cf179c49845..0fc5575a99e 100644 --- a/go/test/endtoend/tabletgateway/main_test.go +++ b/go/test/endtoend/tabletgateway/main_test.go @@ -24,6 +24,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/test/endtoend/cluster" + "vitess.io/vitess/go/vt/utils" ) var ( @@ -65,7 +66,7 @@ func TestMain(m *testing.M) { exitCode := func() int { clusterInstance = cluster.NewCluster(cell, "localhost") - clusterInstance.VtTabletExtraArgs = []string{"--health_check_interval", "1s", "--shutdown_grace_period", "3s"} + clusterInstance.VtTabletExtraArgs = []string{utils.GetFlagVariantForTests("--health-check-interval"), "1s", "--shutdown_grace_period", "3s"} defer clusterInstance.Teardown() // Start topo server diff --git a/go/test/endtoend/tabletmanager/main_test.go b/go/test/endtoend/tabletmanager/main_test.go index b613f061522..e4c680105fd 100644 --- a/go/test/endtoend/tabletmanager/main_test.go +++ b/go/test/endtoend/tabletmanager/main_test.go @@ -28,6 +28,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/test/endtoend/cluster" tabletpb "vitess.io/vitess/go/vt/proto/topodata" + "vitess.io/vitess/go/vt/utils" tmc "vitess.io/vitess/go/vt/vttablet/grpctmclient" ) @@ -99,10 +100,10 @@ func TestMain(m *testing.M) { } // Set extra tablet args for lock timeout clusterInstance.VtTabletExtraArgs = []string{ - "--lock_tables_timeout", "5s", - "--watch_replication_stream", - "--heartbeat_enable", - "--health_check_interval", tabletHealthcheckRefreshInterval.String(), + utils.GetFlagVariantForTests("--lock-tables-timeout"), "5s", + utils.GetFlagVariantForTests("--watch-replication-stream"), + utils.GetFlagVariantForTests("--heartbeat-enable"), + utils.GetFlagVariantForTests("--health-check-interval"), tabletHealthcheckRefreshInterval.String(), "--unhealthy_threshold", tabletUnhealthyThreshold.String(), "--twopc_abandon_age", "200", } diff --git a/go/test/endtoend/tabletmanager/primary/tablet_test.go b/go/test/endtoend/tabletmanager/primary/tablet_test.go index aaff0ff00a0..6280e8a90ac 100644 --- a/go/test/endtoend/tabletmanager/primary/tablet_test.go +++ b/go/test/endtoend/tabletmanager/primary/tablet_test.go @@ -29,6 +29,7 @@ import ( "vitess.io/vitess/go/test/endtoend/cluster" topodatapb "vitess.io/vitess/go/vt/proto/topodata" + "vitess.io/vitess/go/vt/utils" ) var ( @@ -83,9 +84,9 @@ func TestMain(m *testing.M) { // Set extra tablet args for lock timeout clusterInstance.VtTabletExtraArgs = []string{ - "--lock_tables_timeout", "5s", - "--watch_replication_stream", - "--enable_replication_reporter", + utils.GetFlagVariantForTests("--lock-tables-timeout"), "5s", + utils.GetFlagVariantForTests("--watch-replication-stream"), + utils.GetFlagVariantForTests("--enable-replication-reporter"), } // Start keyspace diff --git a/go/test/endtoend/tabletmanager/replication_manager/tablet_test.go b/go/test/endtoend/tabletmanager/replication_manager/tablet_test.go index 75c6e8d4cc8..9939caa3246 100644 --- a/go/test/endtoend/tabletmanager/replication_manager/tablet_test.go +++ b/go/test/endtoend/tabletmanager/replication_manager/tablet_test.go @@ -25,6 +25,7 @@ import ( "time" "vitess.io/vitess/go/vt/sidecardb" + "vitess.io/vitess/go/vt/utils" "github.com/stretchr/testify/require" @@ -129,8 +130,8 @@ func getTablet(tabletGrpcPort int) *tabletpb.Tablet { func resurrectTablet(t *testing.T, tab cluster.Vttablet) { // initialize config again to regenerate the my.cnf file which has the port to use _, err := tab.MysqlctlProcess.ExecuteCommandWithOutput("--log_dir", tab.MysqlctlProcess.LogDirectory, - "--tablet_uid", fmt.Sprintf("%d", tab.MysqlctlProcess.TabletUID), - "--mysql_port", fmt.Sprintf("%d", tab.MysqlctlProcess.MySQLPort), + utils.GetFlagVariantForTests("--tablet-uid"), fmt.Sprintf("%d", tab.MysqlctlProcess.TabletUID), + utils.GetFlagVariantForTests("--mysql-port"), fmt.Sprintf("%d", tab.MysqlctlProcess.MySQLPort), "init_config") require.NoError(t, err) diff --git a/go/test/endtoend/tabletmanager/tablegc/tablegc_test.go b/go/test/endtoend/tabletmanager/tablegc/tablegc_test.go index b1abec3a6b7..c0b6016cc0e 100644 --- a/go/test/endtoend/tabletmanager/tablegc/tablegc_test.go +++ b/go/test/endtoend/tabletmanager/tablegc/tablegc_test.go @@ -28,6 +28,7 @@ import ( "vitess.io/vitess/go/mysql/capabilities" "vitess.io/vitess/go/vt/schema" "vitess.io/vitess/go/vt/sqlparser" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vttablet/tabletserver/gc" "vitess.io/vitess/go/test/endtoend/cluster" @@ -97,12 +98,12 @@ func TestMain(m *testing.M) { // Set extra tablet args for lock timeout clusterInstance.VtTabletExtraArgs = []string{ - "--lock_tables_timeout", "5s", - "--watch_replication_stream", - "--enable_replication_reporter", - "--heartbeat_interval", "250ms", - "--gc_check_interval", gcCheckInterval.String(), - "--gc_purge_check_interval", gcPurgeCheckInterval.String(), + utils.GetFlagVariantForTests("--lock-tables-timeout"), "5s", + utils.GetFlagVariantForTests("--watch-replication-stream"), + utils.GetFlagVariantForTests("--enable-replication-reporter"), + utils.GetFlagVariantForTests("--heartbeat-interval"), "250ms", + utils.GetFlagVariantForTests("--gc-check-interval"), gcCheckInterval.String(), + utils.GetFlagVariantForTests("--gc-purge-check-interval"), gcPurgeCheckInterval.String(), "--table_gc_lifecycle", "hold,purge,evac,drop", } diff --git a/go/test/endtoend/tabletmanager/tablet_health_test.go b/go/test/endtoend/tabletmanager/tablet_health_test.go index a657159069f..34f3fde8343 100644 --- a/go/test/endtoend/tabletmanager/tablet_health_test.go +++ b/go/test/endtoend/tabletmanager/tablet_health_test.go @@ -35,6 +35,7 @@ import ( "vitess.io/vitess/go/test/endtoend/utils" querypb "vitess.io/vitess/go/vt/proto/query" topodatapb "vitess.io/vitess/go/vt/proto/topodata" + vtutils "vitess.io/vitess/go/vt/utils" ) // TabletReshuffle test if a vttablet can be pointed at an existing mysql @@ -57,15 +58,15 @@ func TestTabletReshuffle(t *testing.T) { // Create new tablet rTablet := clusterInstance.NewVttabletInstance("replica", 0, "") - // mycnf_server_id prevents vttablet from reading the mycnf + // mycnf-server-id prevents vttablet from reading the mycnf // Pointing to primaryTablet's socket file // We have to disable active reparenting to prevent the tablet from trying to fix replication. // We also have to disable replication reporting because we're pointed at the primary. clusterInstance.VtTabletExtraArgs = []string{ - "--lock_tables_timeout", "5s", - "--mycnf_server_id", fmt.Sprintf("%d", rTablet.TabletUID), - "--db_socket", fmt.Sprintf("%s/mysql.sock", primaryTablet.VttabletProcess.Directory), - "--enable_replication_reporter=false", + vtutils.GetFlagVariantForTests("--lock-tables-timeout"), "5s", + vtutils.GetFlagVariantForTests("--mycnf-server-id"), fmt.Sprintf("%d", rTablet.TabletUID), + vtutils.GetFlagVariantForTests("--db-socket"), fmt.Sprintf("%s/mysql.sock", primaryTablet.VttabletProcess.Directory), + vtutils.GetFlagVariantForTests("--enable-replication-reporter") + "=false", } defer func() { clusterInstance.VtTabletExtraArgs = []string{} }() diff --git a/go/test/endtoend/tabletmanager/tablet_security_policy_test.go b/go/test/endtoend/tabletmanager/tablet_security_policy_test.go index 90397a737ef..c0db2806fe0 100644 --- a/go/test/endtoend/tabletmanager/tablet_security_policy_test.go +++ b/go/test/endtoend/tabletmanager/tablet_security_policy_test.go @@ -26,6 +26,7 @@ import ( "github.com/stretchr/testify/require" "vitess.io/vitess/go/test/endtoend/cluster" + "vitess.io/vitess/go/vt/utils" ) func TestFallbackSecurityPolicy(t *testing.T) { @@ -36,8 +37,8 @@ func TestFallbackSecurityPolicy(t *testing.T) { err := cluster.StartMySQL(ctx, mTablet, username, clusterInstance.TmpDirectory) require.NoError(t, err) - // Requesting an unregistered security_policy should fallback to deny-all. - clusterInstance.VtTabletExtraArgs = []string{"--security_policy", "bogus"} + // Requesting an unregistered security-policy should fallback to deny-all. + clusterInstance.VtTabletExtraArgs = []string{utils.GetFlagVariantForTests("--security-policy"), "bogus"} err = clusterInstance.StartVttablet(mTablet, false, "SERVING", false, cell, keyspaceName, hostname, shardName) require.NoError(t, err) @@ -90,8 +91,8 @@ func TestDenyAllSecurityPolicy(t *testing.T) { err := cluster.StartMySQL(ctx, mTablet, username, clusterInstance.TmpDirectory) require.NoError(t, err) - // Requesting a deny-all security_policy. - clusterInstance.VtTabletExtraArgs = []string{"--security_policy", "deny-all"} + // Requesting a deny-all security-policy. + clusterInstance.VtTabletExtraArgs = []string{utils.GetFlagVariantForTests("--security-policy"), "deny-all"} err = clusterInstance.StartVttablet(mTablet, false, "SERVING", false, cell, keyspaceName, hostname, shardName) require.NoError(t, err) @@ -121,8 +122,8 @@ func TestReadOnlySecurityPolicy(t *testing.T) { err := cluster.StartMySQL(ctx, mTablet, username, clusterInstance.TmpDirectory) require.NoError(t, err) - // Requesting a read-only security_policy. - clusterInstance.VtTabletExtraArgs = []string{"--security_policy", "read-only"} + // Requesting a read-only security-policy. + clusterInstance.VtTabletExtraArgs = []string{utils.GetFlagVariantForTests("--security-policy"), "read-only"} err = clusterInstance.StartVttablet(mTablet, false, "SERVING", false, cell, keyspaceName, hostname, shardName) require.NoError(t, err) diff --git a/go/test/endtoend/tabletmanager/throttler_topo/throttler_test.go b/go/test/endtoend/tabletmanager/throttler_topo/throttler_test.go index f879af489d4..2d0c78a4501 100644 --- a/go/test/endtoend/tabletmanager/throttler_topo/throttler_test.go +++ b/go/test/endtoend/tabletmanager/throttler_topo/throttler_test.go @@ -32,6 +32,7 @@ import ( "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/test/endtoend/cluster" "vitess.io/vitess/go/test/endtoend/throttler" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vttablet/tabletserver/throttle" "vitess.io/vitess/go/vt/vttablet/tabletserver/throttle/base" "vitess.io/vitess/go/vt/vttablet/tabletserver/throttle/throttlerapp" @@ -104,11 +105,11 @@ func TestMain(m *testing.M) { // Set extra tablet args for lock timeout clusterInstance.VtTabletExtraArgs = []string{ - "--lock_tables_timeout", "5s", - "--watch_replication_stream", - "--enable_replication_reporter", - "--heartbeat_interval", "250ms", - "--heartbeat_on_demand_duration", onDemandHeartbeatDuration.String(), + utils.GetFlagVariantForTests("--lock-tables-timeout"), "5s", + utils.GetFlagVariantForTests("--watch-replication-stream"), + utils.GetFlagVariantForTests("--enable-replication-reporter"), + utils.GetFlagVariantForTests("--heartbeat-interval"), "250ms", + utils.GetFlagVariantForTests("--heartbeat-on-demand-duration"), onDemandHeartbeatDuration.String(), } // Start keyspace @@ -183,7 +184,7 @@ func throttleStatus(t *testing.T, tablet *cluster.Vttablet) *tabletmanagerdatapb } func warmUpHeartbeat(t *testing.T) tabletmanagerdatapb.CheckThrottlerResponseCode { - // because we run with -heartbeat_on_demand_duration=5s, the heartbeat is "cold" right now. + // because we run with -heartbeat-on-demand-duration=5s, the heartbeat is "cold" right now. // Let's warm it up. resp, err := throttleCheck(primaryTablet, false) require.NoError(t, err) diff --git a/go/test/endtoend/topoconncache/main_test.go b/go/test/endtoend/topoconncache/main_test.go index 512998a3769..5d9be8d4c85 100644 --- a/go/test/endtoend/topoconncache/main_test.go +++ b/go/test/endtoend/topoconncache/main_test.go @@ -30,6 +30,7 @@ import ( "testing" "vitess.io/vitess/go/test/endtoend/cluster" + "vitess.io/vitess/go/vt/utils" ) var ( @@ -48,13 +49,13 @@ var ( ) Engine=InnoDB ` commonTabletArg = []string{ - "--vreplication_retry_delay", "1s", - "--degraded_threshold", "5s", - "--lock_tables_timeout", "5s", - "--watch_replication_stream", - "--enable_replication_reporter", + utils.GetFlagVariantForTests("--vreplication-retry-delay"), "1s", + utils.GetFlagVariantForTests("--degraded-threshold"), "5s", + utils.GetFlagVariantForTests("--lock-tables-timeout"), "5s", + utils.GetFlagVariantForTests("--watch-replication-stream"), + utils.GetFlagVariantForTests("--enable-replication-reporter"), "--serving_state_grace_period", "1s", - "--binlog_player_protocol", "grpc", + utils.GetFlagVariantForTests("--binlog-player-protocol"), "grpc", } vSchema = ` { diff --git a/go/test/endtoend/transaction/restart/main_test.go b/go/test/endtoend/transaction/restart/main_test.go index caa3111ad49..f942cbc2b2a 100644 --- a/go/test/endtoend/transaction/restart/main_test.go +++ b/go/test/endtoend/transaction/restart/main_test.go @@ -28,6 +28,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/test/endtoend/cluster" "vitess.io/vitess/go/test/endtoend/utils" + vtutils "vitess.io/vitess/go/vt/utils" ) var ( @@ -69,7 +70,7 @@ func TestMain(m *testing.M) { // Start vtgate clusterInstance.VtGateExtraArgs = append(clusterInstance.VtGateExtraArgs, "--planner-version=gen4", - "--mysql_default_workload=olap") + vtutils.GetFlagVariantForTests("--mysql-default-workload")+"=olap") err = clusterInstance.StartVtgate() if err != nil { return 1 diff --git a/go/test/endtoend/transaction/rollback/txn_rollback_shutdown_test.go b/go/test/endtoend/transaction/rollback/txn_rollback_shutdown_test.go index c7bef098c05..0bb65c46c07 100644 --- a/go/test/endtoend/transaction/rollback/txn_rollback_shutdown_test.go +++ b/go/test/endtoend/transaction/rollback/txn_rollback_shutdown_test.go @@ -31,6 +31,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/test/endtoend/cluster" + vtutils "vitess.io/vitess/go/vt/utils" ) var ( @@ -74,7 +75,7 @@ func TestMain(m *testing.M) { } // Set a short onterm timeout so the test goes faster. - clusterInstance.VtGateExtraArgs = []string{"--onterm_timeout", "1s"} + clusterInstance.VtGateExtraArgs = []string{vtutils.GetFlagVariantForTests("--onterm-timeout"), "1s"} err = clusterInstance.StartVtgate() if err != nil { panic(err) diff --git a/go/test/endtoend/transaction/twopc/fuzz/main_test.go b/go/test/endtoend/transaction/twopc/fuzz/main_test.go index 3516bdefe05..53d54475045 100644 --- a/go/test/endtoend/transaction/twopc/fuzz/main_test.go +++ b/go/test/endtoend/transaction/twopc/fuzz/main_test.go @@ -29,6 +29,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/test/endtoend/cluster" "vitess.io/vitess/go/test/endtoend/transaction/twopc/utils" + vtutils "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtctl/reparentutil/policy" ) @@ -66,12 +67,12 @@ func TestMain(m *testing.M) { // Set extra args for twopc clusterInstance.VtGateExtraArgs = append(clusterInstance.VtGateExtraArgs, "--transaction_mode", "TWOPC", - "--grpc_use_effective_callerid", - "--tablet_refresh_interval", "2s", + vtutils.GetFlagVariantForTests("--grpc-use-effective-callerid"), + vtutils.GetFlagVariantForTests("--tablet-refresh-interval"), "2s", ) clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs, "--twopc_abandon_age", "1", - "--migration_check_interval", "2s", + vtutils.GetFlagVariantForTests("--migration-check-interval"), "2s", ) // Start keyspace diff --git a/go/test/endtoend/transaction/twopc/main_test.go b/go/test/endtoend/transaction/twopc/main_test.go index 7a2f7e8676e..ee6b5299c33 100644 --- a/go/test/endtoend/transaction/twopc/main_test.go +++ b/go/test/endtoend/transaction/twopc/main_test.go @@ -41,6 +41,7 @@ import ( binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" querypb "vitess.io/vitess/go/vt/proto/query" topodatapb "vitess.io/vitess/go/vt/proto/topodata" + vtutils "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtgate/vtgateconn" ) @@ -78,7 +79,7 @@ func TestMain(m *testing.M) { // Set extra args for twopc clusterInstance.VtGateExtraArgs = append(clusterInstance.VtGateExtraArgs, - "--grpc_use_effective_callerid", + vtutils.GetFlagVariantForTests("--grpc-use-effective-callerid"), ) clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs, "--twopc_abandon_age", "1", diff --git a/go/test/endtoend/transaction/twopc/metric/main_test.go b/go/test/endtoend/transaction/twopc/metric/main_test.go index 0018f5d45d8..f1866830266 100644 --- a/go/test/endtoend/transaction/twopc/metric/main_test.go +++ b/go/test/endtoend/transaction/twopc/metric/main_test.go @@ -29,6 +29,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/test/endtoend/cluster" twopcutil "vitess.io/vitess/go/test/endtoend/transaction/twopc/utils" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtctl/reparentutil/policy" ) @@ -66,7 +67,7 @@ func TestMain(m *testing.M) { // Set extra args for twopc clusterInstance.VtGateExtraArgs = append(clusterInstance.VtGateExtraArgs, "--transaction_mode", "TWOPC", - "--grpc_use_effective_callerid", + utils.GetFlagVariantForTests("--grpc-use-effective-callerid"), ) clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs, "--twopc_abandon_age", "1", diff --git a/go/test/endtoend/transaction/twopc/stress/main_test.go b/go/test/endtoend/transaction/twopc/stress/main_test.go index 977fa3f6fd6..890edd6796a 100644 --- a/go/test/endtoend/transaction/twopc/stress/main_test.go +++ b/go/test/endtoend/transaction/twopc/stress/main_test.go @@ -29,6 +29,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/test/endtoend/cluster" "vitess.io/vitess/go/test/endtoend/transaction/twopc/utils" + vtutils "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtctl/reparentutil/policy" ) @@ -66,14 +67,14 @@ func TestMain(m *testing.M) { // Set extra args for twopc clusterInstance.VtGateExtraArgs = append(clusterInstance.VtGateExtraArgs, "--transaction_mode", "TWOPC", - "--grpc_use_effective_callerid", - "--tablet_refresh_interval", "2s", + vtutils.GetFlagVariantForTests("--grpc-use-effective-callerid"), + vtutils.GetFlagVariantForTests("--tablet-refresh-interval"), "2s", ) clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs, "--twopc_abandon_age", "1", - "--migration_check_interval", "2s", - "--onterm_timeout", "1s", - "--onclose_timeout", "1s", + vtutils.GetFlagVariantForTests("--migration-check-interval"), "2s", + vtutils.GetFlagVariantForTests("--onterm-timeout"), "1s", + vtutils.GetFlagVariantForTests("--onclose-timeout"), "1s", ) // Start keyspace diff --git a/go/test/endtoend/utils/cmp.go b/go/test/endtoend/utils/cmp.go index b2e1eca03e9..05e65cc7fda 100644 --- a/go/test/endtoend/utils/cmp.go +++ b/go/test/endtoend/utils/cmp.go @@ -27,6 +27,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/sqltypes" + "vitess.io/vitess/go/vt/sqlparser" ) type TestingT interface { @@ -211,10 +212,85 @@ func (mcmp *MySQLCompare) Exec(query string) *sqltypes.Result { mysqlQr, err := mcmp.MySQLConn.ExecuteFetch(query, 1000, true) require.NoError(mcmp.t, err, "[MySQL Error] for query: "+query) - compareVitessAndMySQLResults(mcmp.t, query, mcmp.VtConn, vtQr, mysqlQr, CompareOptions{}) + CompareVitessAndMySQLResults(mcmp.t, query, mcmp.VtConn, vtQr, mysqlQr, CompareOptions{}) return vtQr } +// ExecMulti executes the given queries against both Vitess and MySQL and compares +// the result sets. If there is a mismatch, the difference will be printed and the +// test will fail. If the query produces an error in either Vitess or MySQL, the test +// will be marked as failed. +// The result sets of Vitess are returned to the caller. +func (mcmp *MySQLCompare) ExecMulti(sql string) []*sqltypes.Result { + mcmp.t.Helper() + stmts, err := sqlparser.NewTestParser().SplitStatementToPieces(sql) + require.NoError(mcmp.t, err) + vtQr, vtMore, err := mcmp.VtConn.ExecuteFetchMulti(sql, 1000, true) + require.NoError(mcmp.t, err, "[Vitess Error] for sql: "+sql) + + mysqlQr, mysqlMore, err := mcmp.MySQLConn.ExecuteFetchMulti(sql, 1000, true) + require.NoError(mcmp.t, err, "[MySQL Error] for sql: "+sql) + sql = stmts[0] + CompareVitessAndMySQLResults(mcmp.t, sql, mcmp.VtConn, vtQr, mysqlQr, CompareOptions{}) + if vtMore != mysqlMore { + mcmp.AsT().Errorf("Vitess and MySQL have different More flags: %v vs %v", vtMore, mysqlMore) + } + + results := []*sqltypes.Result{vtQr} + idx := 1 + for vtMore { + sql = stmts[idx] + idx++ + vtQr, vtMore, _, err = mcmp.VtConn.ReadQueryResult(1000, true) + require.NoError(mcmp.t, err, "[Vitess Error] for sql: "+sql) + + mysqlQr, mysqlMore, _, err = mcmp.MySQLConn.ReadQueryResult(1000, true) + require.NoError(mcmp.t, err, "[MySQL Error] for sql: "+sql) + CompareVitessAndMySQLResults(mcmp.t, sql, mcmp.VtConn, vtQr, mysqlQr, CompareOptions{}) + if vtMore != mysqlMore { + mcmp.AsT().Errorf("Vitess and MySQL have different More flags: %v vs %v", vtMore, mysqlMore) + } + results = append(results, vtQr) + } + + return results +} + +// ExecMultiAllowError executes the given queries against both Vitess and MySQL and compares +// the result sets and errors. +func (mcmp *MySQLCompare) ExecMultiAllowError(sql string) { + mcmp.t.Helper() + stmts, err := sqlparser.NewTestParser().SplitStatementToPieces(sql) + require.NoError(mcmp.t, err) + vtQr, vtMore, vtErr := mcmp.VtConn.ExecuteFetchMulti(sql, 1000, true) + + mysqlQr, mysqlMore, mysqlErr := mcmp.MySQLConn.ExecuteFetchMulti(sql, 1000, true) + sql = stmts[0] + compareVitessAndMySQLErrors(mcmp.t, vtErr, mysqlErr) + if vtErr == nil && mysqlErr == nil { + CompareVitessAndMySQLResults(mcmp.t, sql, mcmp.VtConn, vtQr, mysqlQr, CompareOptions{}) + } + if vtMore != mysqlMore { + mcmp.AsT().Errorf("Vitess and MySQL have different More flags: %v vs %v", vtMore, mysqlMore) + } + + idx := 1 + for vtMore { + sql = stmts[idx] + idx++ + vtQr, vtMore, _, vtErr = mcmp.VtConn.ReadQueryResult(1000, true) + + mysqlQr, mysqlMore, _, mysqlErr = mcmp.MySQLConn.ReadQueryResult(1000, true) + compareVitessAndMySQLErrors(mcmp.t, vtErr, mysqlErr) + if vtErr == nil && mysqlErr == nil { + CompareVitessAndMySQLResults(mcmp.t, sql, mcmp.VtConn, vtQr, mysqlQr, CompareOptions{}) + } + if vtMore != mysqlMore { + mcmp.AsT().Errorf("Vitess and MySQL have different More flags: %v vs %v", vtMore, mysqlMore) + } + } +} + // ExecVitessAndMySQLDifferentQueries executes Vitess and MySQL with the queries provided. func (mcmp *MySQLCompare) ExecVitessAndMySQLDifferentQueries(vtQ, mQ string) *sqltypes.Result { mcmp.t.Helper() @@ -223,7 +299,7 @@ func (mcmp *MySQLCompare) ExecVitessAndMySQLDifferentQueries(vtQ, mQ string) *sq mysqlQr, err := mcmp.MySQLConn.ExecuteFetch(mQ, 1000, true) require.NoError(mcmp.t, err, "[MySQL Error] for query: "+mQ) - compareVitessAndMySQLResults(mcmp.t, vtQ, mcmp.VtConn, vtQr, mysqlQr, CompareOptions{}) + CompareVitessAndMySQLResults(mcmp.t, vtQ, mcmp.VtConn, vtQr, mysqlQr, CompareOptions{}) return vtQr } @@ -235,7 +311,7 @@ func (mcmp *MySQLCompare) ExecAssert(query string) *sqltypes.Result { mysqlQr, err := mcmp.MySQLConn.ExecuteFetch(query, 1000, true) assert.NoError(mcmp.t, err, "[MySQL Error] for query: "+query) - compareVitessAndMySQLResults(mcmp.t, query, mcmp.VtConn, vtQr, mysqlQr, CompareOptions{}) + CompareVitessAndMySQLResults(mcmp.t, query, mcmp.VtConn, vtQr, mysqlQr, CompareOptions{}) return vtQr } @@ -262,7 +338,7 @@ func (mcmp *MySQLCompare) ExecWithColumnCompare(query string) *sqltypes.Result { mysqlQr, err := mcmp.MySQLConn.ExecuteFetch(query, 1000, true) require.NoError(mcmp.t, err, "[MySQL Error] for query: "+query) - compareVitessAndMySQLResults(mcmp.t, query, mcmp.VtConn, vtQr, mysqlQr, CompareOptions{CompareColumnNames: true}) + CompareVitessAndMySQLResults(mcmp.t, query, mcmp.VtConn, vtQr, mysqlQr, CompareOptions{CompareColumnNames: true}) return vtQr } @@ -283,7 +359,7 @@ func (mcmp *MySQLCompare) ExecAllowAndCompareError(query string, opts CompareOpt // Since we allow errors, we don't want to compare results if one of the client failed. // Vitess and MySQL should always be agreeing whether the query returns an error or not. if vtErr == nil && mysqlErr == nil { - vtErr = compareVitessAndMySQLResults(mcmp.t, query, mcmp.VtConn, vtQr, mysqlQr, opts) + vtErr = CompareVitessAndMySQLResults(mcmp.t, query, mcmp.VtConn, vtQr, mysqlQr, opts) } return vtQr, vtErr } @@ -321,7 +397,7 @@ func (mcmp *MySQLCompare) ExecAllowError(query string) (*sqltypes.Result, error) // Since we allow errors, we don't want to compare results if one of the client failed. // Vitess and MySQL should always be agreeing whether the query returns an error or not. if mysqlErr == nil { - vtErr = compareVitessAndMySQLResults(mcmp.t, query, mcmp.VtConn, vtQr, mysqlQr, CompareOptions{}) + vtErr = CompareVitessAndMySQLResults(mcmp.t, query, mcmp.VtConn, vtQr, mysqlQr, CompareOptions{}) } return vtQr, vtErr } diff --git a/go/test/endtoend/utils/mysql.go b/go/test/endtoend/utils/mysql.go index b512bf10294..9175faf5363 100644 --- a/go/test/endtoend/utils/mysql.go +++ b/go/test/endtoend/utils/mysql.go @@ -20,6 +20,7 @@ import ( "context" "errors" "fmt" + "math/rand/v2" "os" "path" "regexp" @@ -56,8 +57,8 @@ func NewMySQL(cluster *cluster.LocalProcessCluster, dbName string, schemaSQL ... } sqls = append(sqls, split...) } - mysqlParam, _, _, closer, error := NewMySQLWithMysqld(cluster.GetAndReservePort(), cluster.Hostname, dbName, sqls...) - return mysqlParam, closer, error + mysqlParam, _, _, closer, err := NewMySQLWithMysqld(cluster.GetAndReservePort(), cluster.Hostname, dbName, sqls...) + return mysqlParam, closer, err } // CreateMysqldAndMycnf returns a Mysqld and a Mycnf object to use for working with a MySQL @@ -78,7 +79,8 @@ func CreateMysqldAndMycnf(tabletUID uint32, mysqlSocket string, mysqlPort int) ( } func NewMySQLWithMysqld(port int, hostname, dbName string, schemaSQL ...string) (mysql.ConnParams, *mysqlctl.Mysqld, *mysqlctl.Mycnf, func(), error) { - mysqlDir, err := createMySQLDir() + uid := rand.Uint32() + mysqlDir, err := createMySQLDir(uid) if err != nil { return mysql.ConnParams{}, nil, nil, nil, err } @@ -88,7 +90,7 @@ func NewMySQLWithMysqld(port int, hostname, dbName string, schemaSQL ...string) } mysqlPort := port - mysqld, mycnf, err := CreateMysqldAndMycnf(0, "", mysqlPort) + mysqld, mycnf, err := CreateMysqldAndMycnf(uid, "", mysqlPort) if err != nil { return mysql.ConnParams{}, nil, nil, nil, err } @@ -115,8 +117,8 @@ func NewMySQLWithMysqld(port int, hostname, dbName string, schemaSQL ...string) }, nil } -func createMySQLDir() (string, error) { - mysqlDir := mysqlctl.TabletDir(0) +func createMySQLDir(portNo uint32) (string, error) { + mysqlDir := mysqlctl.TabletDir(portNo) err := os.Mkdir(mysqlDir, 0700) if err != nil { return "", err @@ -175,7 +177,7 @@ type CompareOptions struct { IgnoreRowsAffected bool } -func compareVitessAndMySQLResults(t TestingT, query string, vtConn *mysql.Conn, vtQr, mysqlQr *sqltypes.Result, opts CompareOptions) error { +func CompareVitessAndMySQLResults(t TestingT, query string, vtConn *mysql.Conn, vtQr, mysqlQr *sqltypes.Result, opts CompareOptions) error { t.Helper() if vtQr == nil && mysqlQr == nil { @@ -228,7 +230,7 @@ func compareVitessAndMySQLResults(t TestingT, query string, vtConn *mysql.Conn, mysqlQr.RowsAffected = 0 } - if (orderBy && sqltypes.ResultsEqual([]sqltypes.Result{*vtQr}, []sqltypes.Result{*mysqlQr})) || sqltypes.ResultsEqualUnordered([]sqltypes.Result{*vtQr}, []sqltypes.Result{*mysqlQr}) { + if (orderBy && sqltypes.ResultsEqual([]*sqltypes.Result{vtQr}, []*sqltypes.Result{mysqlQr})) || sqltypes.ResultsEqualUnordered([]sqltypes.Result{*vtQr}, []sqltypes.Result{*mysqlQr}) { return nil } diff --git a/go/test/endtoend/utils/utils.go b/go/test/endtoend/utils/utils.go index e58f5b133e0..b67b54dea33 100644 --- a/go/test/endtoend/utils/utils.go +++ b/go/test/endtoend/utils/utils.go @@ -207,7 +207,7 @@ func ExecCompareMySQL(t *testing.T, vtConn, mysqlConn *mysql.Conn, query string) mysqlQr, err := mysqlConn.ExecuteFetch(query, 1000, true) require.NoError(t, err, "[MySQL Error] for query: "+query) - compareVitessAndMySQLResults(t, query, vtConn, vtQr, mysqlQr, CompareOptions{}) + CompareVitessAndMySQLResults(t, query, vtConn, vtQr, mysqlQr, CompareOptions{}) return vtQr } diff --git a/go/test/endtoend/vault/vault_test.go b/go/test/endtoend/vault/vault_test.go index f1ffbf75357..0d8e46701ac 100644 --- a/go/test/endtoend/vault/vault_test.go +++ b/go/test/endtoend/vault/vault_test.go @@ -35,6 +35,7 @@ import ( "vitess.io/vitess/go/test/endtoend/cluster" "vitess.io/vitess/go/test/endtoend/utils" "vitess.io/vitess/go/vt/log" + vtutils "vitess.io/vitess/go/vt/utils" ) var ( @@ -56,10 +57,10 @@ var ( vtgateUser = "vtgate_user" vtgatePassword = "password123" commonTabletArg = []string{ - "--vreplication_retry_delay", "1s", - "--degraded_threshold", "5s", - "--lock_tables_timeout", "5s", - "--watch_replication_stream", + vtutils.GetFlagVariantForTests("--vreplication-retry-delay"), "1s", + vtutils.GetFlagVariantForTests("--degraded-threshold"), "5s", + vtutils.GetFlagVariantForTests("--lock-tables-timeout"), "5s", + vtutils.GetFlagVariantForTests("--watch-replication-stream"), // Frequently reload schema, generating some tablet traffic, // so we can speed up token refresh "--queryserver-config-schema-reload-time", "5s", @@ -79,7 +80,7 @@ var ( // Make this small, so we can get a renewal "--db-credentials-vault-ttl", "21s"} vaultVTGateArg = []string{ - "--mysql_auth_server_impl", "vault", + vtutils.GetFlagVariantForTests("--mysql-auth-server-impl"), "vault", "--mysql_auth_vault_timeout", "3s", "--mysql_auth_vault_path", "kv/prod/vtgatecreds", // This is overriden by our env VAULT_ADDR @@ -93,7 +94,7 @@ var ( // Make this small, so we can get a renewal "--mysql_auth_vault_ttl", "21s"} mysqlctlArg = []string{ - "--db_dba_password", mysqlPassword} + vtutils.GetFlagVariantForTests("--db-dba-password"), mysqlPassword} vttabletLogFileName = "vttablet.INFO" tokenRenewalString = "Vault client status: token renewed" ) diff --git a/go/test/endtoend/versionupgrade/upgrade_test.go b/go/test/endtoend/versionupgrade/upgrade_test.go index 48e552c3a7c..2d4cd972460 100644 --- a/go/test/endtoend/versionupgrade/upgrade_test.go +++ b/go/test/endtoend/versionupgrade/upgrade_test.go @@ -85,9 +85,9 @@ func TestMain(m *testing.M) { } clusterInstance.VtctldExtraArgs = []string{ - "--schema_change_dir", schemaChangeDirectory, - "--schema_change_controller", "local", - "--schema_change_check_interval", "1s", + "--schema-change-dir", schemaChangeDirectory, + "--schema-change-controller", "local", + "--schema-change-check-interval", "1s", } if err := clusterInstance.StartTopo(); err != nil { diff --git a/go/test/endtoend/vreplication/cluster_test.go b/go/test/endtoend/vreplication/cluster_test.go index a02d3d2be9d..a9321e1ac5f 100644 --- a/go/test/endtoend/vreplication/cluster_test.go +++ b/go/test/endtoend/vreplication/cluster_test.go @@ -38,6 +38,7 @@ import ( "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/mysqlctl" "vitess.io/vitess/go/vt/sqlparser" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtgate/planbuilder/plancontext" vtctldatapb "vitess.io/vitess/go/vt/proto/vtctldata" @@ -54,10 +55,10 @@ var ( sidecarDBIdentifier = sqlparser.String(sqlparser.NewIdentifierCS(sidecarDBName)) mainClusterConfig *ClusterConfig externalClusterConfig *ClusterConfig - extraVTGateArgs = []string{"--tablet_refresh_interval", "10ms", "--enable_buffer", "--buffer_window", loadTestBufferingWindowDuration.String(), - "--buffer_size", "250000", "--buffer_min_time_between_failovers", "1s", "--buffer_max_failover_duration", loadTestBufferingWindowDuration.String(), - "--buffer_drain_concurrency", "10"} - extraVtctldArgs = []string{"--remote_operation_timeout", "600s", "--topo_etcd_lease_ttl", "120"} + extraVTGateArgs = []string{utils.GetFlagVariantForTests("--tablet-refresh-interval"), "10ms", "--enable_buffer", utils.GetFlagVariantForTests("--buffer-window"), loadTestBufferingWindowDuration.String(), + utils.GetFlagVariantForTests("--buffer-size"), "250000", utils.GetFlagVariantForTests("--buffer-min-time-between-failovers"), "1s", utils.GetFlagVariantForTests("--buffer-max-failover-duration"), loadTestBufferingWindowDuration.String(), + utils.GetFlagVariantForTests("--buffer-drain-concurrency"), "10"} + extraVtctldArgs = []string{utils.GetFlagVariantForTests("--remote-operation-timeout"), "600s", "--topo-etcd-lease-ttl", "120"} // This variable can be used within specific tests to alter vttablet behavior. extraVTTabletArgs = []string{} @@ -465,12 +466,6 @@ func (vc *VitessCluster) AddKeyspace(t *testing.T, cells []*Cell, ksName string, cell.Keyspaces[ksName] = keyspace cellsToWatch = cellsToWatch + cell.Name } - for _, cell := range cells { - if len(cell.Vtgates) == 0 { - log.Infof("Starting vtgate") - vc.StartVtgate(t, cell, cellsToWatch) - } - } require.NoError(t, vc.AddShards(t, cells, keyspace, shards, numReplicas, numRdonly, tabletIDBase, opts)) if schema != "" { @@ -486,6 +481,14 @@ func (vc *VitessCluster) AddKeyspace(t *testing.T, cells []*Cell, ksName string, err = vc.VtctldClient.ExecuteCommand("RebuildKeyspaceGraph", ksName) require.NoError(t, err) + + for _, cell := range cells { + if len(cell.Vtgates) == 0 { + log.Infof("Starting vtgate") + vc.StartVtgate(t, cell, cellsToWatch) + } + } + return keyspace, nil } @@ -494,8 +497,8 @@ func (vc *VitessCluster) AddTablet(t testing.TB, cell *Cell, keyspace *Keyspace, tablet := &Tablet{} var options []string defaultHeartbeatOptions := []string{ - "--heartbeat_on_demand_duration", "5s", - "--heartbeat_interval", "250ms", + utils.GetFlagVariantForTests("--heartbeat-on-demand-duration"), "5s", + utils.GetFlagVariantForTests("--heartbeat-interval"), "250ms", } if !mainClusterConfig.overrideHeartbeatOptions { options = append(options, defaultHeartbeatOptions...) @@ -504,7 +507,7 @@ func (vc *VitessCluster) AddTablet(t testing.TB, cell *Cell, keyspace *Keyspace, options = append(options, extraVTTabletArgs...) if mainClusterConfig.vreplicationCompressGTID { - options = append(options, "--vreplication_store_compressed_gtid=true") + options = append(options, "--vreplication-store-compressed-gtid=true") } vttablet := cluster.VttabletProcessInstance( diff --git a/go/test/endtoend/vreplication/fk_ext_test.go b/go/test/endtoend/vreplication/fk_ext_test.go index 74aac2cbed2..4ecdf968693 100644 --- a/go/test/endtoend/vreplication/fk_ext_test.go +++ b/go/test/endtoend/vreplication/fk_ext_test.go @@ -28,6 +28,7 @@ import ( "vitess.io/vitess/go/test/endtoend/cluster" "vitess.io/vitess/go/vt/log" + "vitess.io/vitess/go/vt/utils" binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" ) @@ -154,7 +155,7 @@ func TestFKExt(t *testing.T) { } sqls := strings.Split(FKExtSourceSchema, "\n") for _, sql := range sqls { - output, err := vc.VtctldClient.ExecuteCommandWithOutput("ApplySchema", "--ddl-strategy=direct", "--sql", sql, keyspaceName) + output, err := vc.VtctldClient.ExecuteCommandWithOutput("ApplySchema", utils.GetFlagVariantForTests("--ddl-strategy")+"=direct", "--sql", sql, keyspaceName) require.NoErrorf(t, err, output) } doReshard(t, fkextConfig.target2KeyspaceName, "reshard2to3", "-80,80-", threeShards, tablets) @@ -167,7 +168,7 @@ func TestFKExt(t *testing.T) { tablets[shard] = vc.Cells[cellName].Keyspaces[keyspaceName].Shards[shard].Tablets[fmt.Sprintf("%s-%d", cellName, tabletID)].Vttablet sqls := strings.Split(FKExtSourceSchema, "\n") for _, sql := range sqls { - output, err := vc.VtctldClient.ExecuteCommandWithOutput("ApplySchema", "--ddl-strategy=direct", "--sql", sql, keyspaceName) + output, err := vc.VtctldClient.ExecuteCommandWithOutput("ApplySchema", utils.GetFlagVariantForTests("--ddl-strategy")+"=direct", "--sql", sql, keyspaceName) require.NoErrorf(t, err, output) } doReshard(t, fkextConfig.target2KeyspaceName, "reshard3to1", threeShards, "0", tablets) @@ -314,7 +315,7 @@ const fkExtMaterializeSpec = ` func materializeTables(t *testing.T) { wfName := "mat" - err := vc.VtctldClient.ExecuteCommand("ApplySchema", "--ddl-strategy=direct", "--sql", FKExtMaterializeSchema, fkextConfig.target1KeyspaceName) + err := vc.VtctldClient.ExecuteCommand("ApplySchema", utils.GetFlagVariantForTests("--ddl-strategy")+"=direct", "--sql", FKExtMaterializeSchema, fkextConfig.target1KeyspaceName) require.NoError(t, err, fmt.Sprintf("ApplySchema Error: %s", err)) materializeSpec := fmt.Sprintf(fkExtMaterializeSpec, "mat", fkextConfig.target2KeyspaceName, fkextConfig.target1KeyspaceName) materialize(t, materializeSpec) diff --git a/go/test/endtoend/vreplication/materialize_test.go b/go/test/endtoend/vreplication/materialize_test.go index 9434de9d356..62e7ba6a646 100644 --- a/go/test/endtoend/vreplication/materialize_test.go +++ b/go/test/endtoend/vreplication/materialize_test.go @@ -238,6 +238,16 @@ const ( id2 bigint not null, primary key (id) ) engine=InnoDB default charset=utf8mb4 collate=utf8mb4_unicode_ci; + create table ref3 ( + id bigint not null, + id2 bigint not null, + primary key (id) + ) engine=InnoDB default charset=utf8mb4 collate=utf8mb4_unicode_ci; + create table ref4 ( + id bigint not null, + id2 bigint not null, + primary key (id) + ) engine=InnoDB default charset=utf8mb4 collate=utf8mb4_unicode_ci; ` refSourceVSchema = ` { @@ -246,6 +256,12 @@ const ( "type": "reference" }, "ref2": { + "type": "reference" + }, + "ref3": { + "type": "reference" + }, + "ref4": { "type": "reference" } } @@ -261,12 +277,22 @@ const ( "ref2": { "type": "reference", "source": "ks1.ref2" + }, + "ref3": { + "type": "reference", + "source": "ks1.ref3" + }, + "ref4": { + "type": "reference", + "source": "ks1.ref4" } } } ` initRef1DataQuery = `insert into ks1.ref1(id, val) values (1, 'abc'), (2, 'def'), (3, 'ghi')` initRef2DataQuery = `insert into ks1.ref2(id, id2) values (1, 1), (2, 2), (3, 3)` + initRef3DataQuery = `insert into ks1.ref3(id, id2) values (1, 1), (2, 2), (3, 3), (4, 4)` + initRef4DataQuery = `insert into ks1.ref4(id, id2) values (1, 1), (2, 2), (3, 3)` ) // TestReferenceTableMaterialize tests materializing reference tables. @@ -287,6 +313,10 @@ func TestReferenceTableMaterialize(t *testing.T) { require.NoError(t, err) _, err = vtgateConn.ExecuteFetch(initRef2DataQuery, 0, false) require.NoError(t, err) + _, err = vtgateConn.ExecuteFetch(initRef3DataQuery, 0, false) + require.NoError(t, err) + _, err = vtgateConn.ExecuteFetch(initRef4DataQuery, 0, false) + require.NoError(t, err) err = vc.VtctldClient.ExecuteCommand("Materialize", "--target-keyspace", "ks2", "--workflow", "wf1", "create", "--source-keyspace", "ks1", "--reference-tables", "ref1,ref2") @@ -322,4 +352,41 @@ func TestReferenceTableMaterialize(t *testing.T) { waitForRowCount(t, vtgateConn, "ks2:"+shard, "ref2", 4) } vdiff(t, "ks2", "wf1", defaultCellName, nil) + + // Testing update with --add-reference-tables. + err = vc.VtctldClient.ExecuteCommand("Materialize", "--target-keyspace", "ks2", "--workflow", "wf1", "update", + "--add-reference-tables", "ref3,ref4") + require.NoError(t, err, "MaterializeAddTables") + + for _, shard := range shards { + tab := vc.getPrimaryTablet(t, "ks2", shard) + catchup(t, tab, "wf1", "Materialize") + } + + for _, shard := range shards { + waitForRowCount(t, vtgateConn, "ks2:"+shard, "ref3", 4) + waitForQueryResult(t, vtgateConn, "ks2:"+shard, "select id, id2 from ref3", + `[[INT64(1) INT64(1)] [INT64(2) INT64(2)] [INT64(3) INT64(3)] [INT64(4) INT64(4)]]`) + waitForRowCount(t, vtgateConn, "ks2:"+shard, "ref4", 3) + waitForQueryResult(t, vtgateConn, "ks2:"+shard, "select id, id2 from ref4", + `[[INT64(1) INT64(1)] [INT64(2) INT64(2)] [INT64(3) INT64(3)]]`) + } + vdiff(t, "ks2", "wf1", defaultCellName, nil) + + queries = []string{ + "update ks1.ref3 set id2=3 where id=2", + "update ks1.ref4 set id2=3 where id=2", + "delete from ks1.ref3 where id2=3", + "delete from ks1.ref4 where id2=3", + "insert into ks1.ref3(id, id2) values (3, 3)", + "insert into ks1.ref4(id, id2) values (3, 3), (4, 4)", + } + for _, query := range queries { + execVtgateQuery(t, vtgateConn, "ks1", query) + } + for _, shard := range shards { + waitForRowCount(t, vtgateConn, "ks2:"+shard, "ref3", 3) + waitForRowCount(t, vtgateConn, "ks2:"+shard, "ref4", 3) + } + vdiff(t, "ks2", "wf1", defaultCellName, nil) } diff --git a/go/test/endtoend/vreplication/resharding_workflows_v2_test.go b/go/test/endtoend/vreplication/resharding_workflows_v2_test.go index a8f1996d0d9..da25df5b5ed 100644 --- a/go/test/endtoend/vreplication/resharding_workflows_v2_test.go +++ b/go/test/endtoend/vreplication/resharding_workflows_v2_test.go @@ -37,6 +37,7 @@ import ( "vitess.io/vitess/go/test/endtoend/throttler" "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/topo/topoproto" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/wrangler" binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" @@ -1007,7 +1008,7 @@ func createAdditionalCustomerShards(t *testing.T, shards string) { } func tstApplySchemaOnlineDDL(t *testing.T, sql string, keyspace string) { - err := vc.VtctldClient.ExecuteCommand("ApplySchema", "--ddl-strategy=online", + err := vc.VtctldClient.ExecuteCommand("ApplySchema", utils.GetFlagVariantForTests("--ddl-strategy")+"=online", "--sql", sql, keyspace) require.NoError(t, err, fmt.Sprintf("ApplySchema Error: %s", err)) } diff --git a/go/test/endtoend/vreplication/vdiff_online_ddl_test.go b/go/test/endtoend/vreplication/vdiff_online_ddl_test.go index 0f3cda66ce6..76283ac551b 100644 --- a/go/test/endtoend/vreplication/vdiff_online_ddl_test.go +++ b/go/test/endtoend/vreplication/vdiff_online_ddl_test.go @@ -14,6 +14,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/proto/vtctldata" + "vitess.io/vitess/go/vt/utils" binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" ) @@ -87,7 +88,7 @@ func onlineDDLShow(t *testing.T, keyspace, uuid string) *vtctldata.GetSchemaMigr } func execOnlineDDL(t *testing.T, strategy, keyspace, query string) string { - output, err := vc.VtctldClient.ExecuteCommandWithOutput("ApplySchema", "--ddl-strategy", strategy, "--sql", query, keyspace) + output, err := vc.VtctldClient.ExecuteCommandWithOutput("ApplySchema", utils.GetFlagVariantForTests("--ddl-strategy"), strategy, "--sql", query, keyspace) require.NoError(t, err, output) uuid := strings.TrimSpace(output) if strategy != "direct" { diff --git a/go/test/endtoend/vreplication/vreplication_test.go b/go/test/endtoend/vreplication/vreplication_test.go index 5d2545ab88e..b6dabcf510b 100644 --- a/go/test/endtoend/vreplication/vreplication_test.go +++ b/go/test/endtoend/vreplication/vreplication_test.go @@ -52,6 +52,7 @@ import ( topodatapb "vitess.io/vitess/go/vt/proto/topodata" vschemapb "vitess.io/vitess/go/vt/proto/vschema" vtgatepb "vitess.io/vitess/go/vt/proto/vtgate" + vtutils "vitess.io/vitess/go/vt/utils" throttlebase "vitess.io/vitess/go/vt/vttablet/tabletserver/throttle/base" ) @@ -232,7 +233,7 @@ func TestVreplicationCopyThrottling(t *testing.T) { // We rely on holding open transactions to generate innodb history so extend the timeout // to avoid flakiness when the CI is very slow. fmt.Sprintf("--queryserver-config-transaction-timeout=%s", (defaultTimeout * 3).String()), - fmt.Sprintf("--vreplication_copy_phase_max_innodb_history_list_length=%d", maxSourceTrxHistory), + fmt.Sprintf("%s=%d", vtutils.GetFlagVariantForTests("--vreplication-copy-phase-max-innodb-history-list-length"), maxSourceTrxHistory), parallelInsertWorkers, } diff --git a/go/test/endtoend/vreplication/vreplication_vtctldclient_cli_test.go b/go/test/endtoend/vreplication/vreplication_vtctldclient_cli_test.go index 6378de9bdff..b52dbec19d6 100644 --- a/go/test/endtoend/vreplication/vreplication_vtctldclient_cli_test.go +++ b/go/test/endtoend/vreplication/vreplication_vtctldclient_cli_test.go @@ -154,10 +154,10 @@ func TestVtctldclientCLI(t *testing.T) { require.NotNil(t, targetReplicaTab1) overrides := map[string]string{ - "vreplication_copy_phase_duration": "10h11m12s", - "vreplication_experimental_flags": "7", + "vreplication-copy-phase-duration": "10h11m12s", + "vreplication-experimental-flags": "7", "vreplication-parallel-insert-workers": "4", - "vreplication_net_read_timeout": "6000", + "vreplication-net-read-timeout": "6000", "relay_log_max_items": "10000", } createFlags := []string{"--auto-start=false", "--defer-secondary-keys=false", @@ -224,7 +224,7 @@ func TestVtctldclientCLI(t *testing.T) { func testMoveTablesFlags1(t *testing.T, mt *iMoveTables, sourceKeyspace, targetKeyspace, workflowName string, targetTabs map[string]*cluster.VttabletProcess) { tables := "customer,customer2" overrides := map[string]string{ - "vreplication_net_read_timeout": "6000", + "vreplication-net-read-timeout": "6000", "relay_log_max_items": "10000", "vreplication-parallel-insert-workers": "10", } @@ -466,29 +466,29 @@ func testWorkflowUpdateConfig(t *testing.T, mt *iMoveTables, targetTabs map[stri { name: "one value", config: map[string]string{ - "vreplication_heartbeat_update_interval": "10", + "vreplication-heartbeat-update-interval": "10", }, }, { name: "two values", config: map[string]string{ - "vreplication_heartbeat_update_interval": "100", - "vreplication_store_compressed_gtid": "true", + "vreplication-heartbeat-update-interval": "100", + "vreplication-store-compressed-gtid": "true", }, }, { name: "invalid value", config: map[string]string{ - "vreplication_heartbeat_update_interval": "12s", - "vreplication_store_compressed_gtid": "true", + "vreplication-heartbeat-update-interval": "12s", + "vreplication-store-compressed-gtid": "true", }, needError: true, }, { name: "unknown flag", config: map[string]string{ - "vreplication_heartbeat_update_interval": "1", - "vreplication_store_compressed_gtid": "true", + "vreplication-heartbeat-update-interval": "1", + "vreplication-store-compressed-gtid": "true", "unknown": "value", }, needError: true, @@ -496,8 +496,8 @@ func testWorkflowUpdateConfig(t *testing.T, mt *iMoveTables, targetTabs map[stri { name: "clear flags", config: map[string]string{ - "vreplication_heartbeat_update_interval": "", - "vreplication_store_compressed_gtid": "", + "vreplication-heartbeat-update-interval": "", + "vreplication-store-compressed-gtid": "", }, clears: true, }, @@ -547,10 +547,10 @@ func createMoveTables(t *testing.T, sourceKeyspace, targetKeyspace, workflowName func splitShard(t *testing.T, keyspace, workflowName, sourceShards, targetShards string, targetTabs map[string]*cluster.VttabletProcess) { overrides := map[string]string{ - "vreplication_copy_phase_duration": "10h11m12s", - "vreplication_experimental_flags": "7", + "vreplication-copy-phase-duration": "10h11m12s", + "vreplication-experimental-flags": "7", "vreplication-parallel-insert-workers": "4", - "vreplication_net_read_timeout": "6000", + "vreplication-net-read-timeout": "6000", "relay_log_max_items": "10000", } createFlags := []string{"--auto-start=false", "--defer-secondary-keys=false", "--stop-after-copy", diff --git a/go/test/endtoend/vreplication/vstream_test.go b/go/test/endtoend/vreplication/vstream_test.go index f37ba1750f0..d9153667c13 100644 --- a/go/test/endtoend/vreplication/vstream_test.go +++ b/go/test/endtoend/vreplication/vstream_test.go @@ -26,9 +26,12 @@ import ( "testing" "time" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "vitess.io/vitess/go/sets" "vitess.io/vitess/go/vt/log" + "vitess.io/vitess/go/vt/utils" _ "vitess.io/vitess/go/vt/vtgate/grpcvtgateconn" "vitess.io/vitess/go/vt/vtgate/vtgateconn" @@ -37,6 +40,166 @@ import ( vtgatepb "vitess.io/vitess/go/vt/proto/vtgate" ) +func TestVStreamWithTablesToSkipCopyFlag(t *testing.T) { + vc = NewVitessCluster(t, nil) + defer vc.TearDown() + + require.NotNil(t, vc) + defaultReplicas = 2 + defaultRdonly = 0 + + defaultCell := vc.Cells[vc.CellNames[0]] + vc.AddKeyspace(t, []*Cell{defaultCell}, "product", "0", initialProductVSchema, initialProductSchema, defaultReplicas, defaultRdonly, 100, nil) + verifyClusterHealth(t, vc) + + ctx := context.Background() + vstreamConn, err := vtgateconn.Dial(ctx, fmt.Sprintf("%s:%d", vc.ClusterConfig.hostname, vc.ClusterConfig.vtgateGrpcPort)) + if err != nil { + log.Fatal(err) + } + defer vstreamConn.Close() + vgtid := &binlogdatapb.VGtid{ + ShardGtids: []*binlogdatapb.ShardGtid{{ + Keyspace: "product", + Shard: "0", + Gtid: "", + }}} + + filter := &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{ + { + Match: "customer", + Filter: "select * from customer", + }, { + Match: "product", + Filter: "select * from product", + }, { + Match: "merchant", + Filter: "select * from merchant", + }, + }, + } + flags := &vtgatepb.VStreamFlags{ + TablesToCopy: []string{"product", "customer"}, + } + id := 0 + vtgateConn := vc.GetVTGateConn(t) + defer vtgateConn.Close() + + // To test the copy phase, let's insert 10 rows intitally in each table + // present in the filter before running the VStream. + for range 10 { + id++ + execVtgateQuery(t, vtgateConn, "product", fmt.Sprintf("insert into customer (cid, name) values (%d, 'customer%d')", id+100, id)) + execVtgateQuery(t, vtgateConn, "product", fmt.Sprintf("insert into product (pid, description) values (%d, 'description%d')", id+100, id)) + execVtgateQuery(t, vtgateConn, "product", fmt.Sprintf("insert into merchant (mname, category) values ('mname%d', 'category%d')", id+100, id)) + } + + // Stream events from the VStream API + reader, err := vstreamConn.VStream(ctx, topodatapb.TabletType_PRIMARY, vgtid, filter, flags) + require.NoError(t, err) + var numRowEvents int64 + + copyPhaseCompleted := atomic.Bool{} + copyPhaseCompleted.Store(false) + + done := atomic.Bool{} + done.Store(false) + + copiedTables := make(sets.Set[string]) + // Start reading events from the VStream. + go func() { + for { + evs, err := reader.Recv() + switch err { + case nil: + for _, ev := range evs { + if ev.Type == binlogdatapb.VEventType_ROW { + if !copyPhaseCompleted.Load() { + escapedTableNameParts := strings.Split(ev.RowEvent.TableName, ".") + require.Len(t, escapedTableNameParts, 2) + copiedTables.Insert(escapedTableNameParts[1]) + } + numRowEvents++ + } + if ev.Type == binlogdatapb.VEventType_COPY_COMPLETED { + copyPhaseCompleted.Store(true) + } + } + case io.EOF: + log.Infof("Stream Ended") + default: + log.Infof("%s:: remote error: %v", time.Now(), err) + } + + if done.Load() { + return + } + } + }() + + // Wait for copy phase to complete. + ticker := time.NewTicker(100 * time.Millisecond) + for { + <-ticker.C + if copyPhaseCompleted.Load() { + break + } + } + + stopInserting := atomic.Bool{} + stopInserting.Store(false) + var insertMu sync.Mutex + go func() { + for { + if stopInserting.Load() { + return + } + insertMu.Lock() + id++ + execVtgateQuery(t, vtgateConn, "product", fmt.Sprintf("insert into customer (cid, name) values (%d, 'customer%d')", id+100, id)) + execVtgateQuery(t, vtgateConn, "product", fmt.Sprintf("insert into product (pid, description) values (%d, 'description%d')", id+100, id)) + execVtgateQuery(t, vtgateConn, "product", fmt.Sprintf("insert into merchant (mname, category) values ('mname%d', 'category%d')", id+100, id)) + insertMu.Unlock() + } + }() + + time.Sleep(100 * time.Millisecond) + stopInserting.Store(true) + time.Sleep(10 * time.Second) // Give the vstream plenty of time to catchup + done.Store(true) + + qr1 := execVtgateQuery(t, vtgateConn, "product", "select count(*) from customer") + qr2 := execVtgateQuery(t, vtgateConn, "product", "select count(*) from product") + qr3 := execVtgateQuery(t, vtgateConn, "product", "select count(*) from merchant") + require.NotNil(t, qr1) + require.NotNil(t, qr2) + require.NotNil(t, qr3) + + // Total number of rows. + insertedRows1, err := qr1.Rows[0][0].ToCastInt64() + require.NoError(t, err) + require.NotZero(t, insertedRows1) + insertedRows2, err := qr2.Rows[0][0].ToCastInt64() + require.NoError(t, err) + require.NotZero(t, insertedRows2) + insertedRows3, err := qr3.Rows[0][0].ToCastInt64() + require.NoError(t, err) + require.NotZero(t, insertedRows3) + + assert.Len(t, copiedTables, 2) + for _, expectedCopiedTableName := range flags.TablesToCopy { + assert.Truef(t, copiedTables.Has(expectedCopiedTableName), "expected table %s to be copied", expectedCopiedTableName) + } + // We don't expect merchant table to be part of copy phase. + assert.False(t, copiedTables.Has("merchant"), "expected table merchant not to be copied") + + // Since we don't expect merchant table to be part of copy phase, we can + // subtract 10 from the total rows found in the 3 tables. + wantTotalRows := insertedRows1 + insertedRows2 + insertedRows3 - 10 + assert.Equal(t, wantTotalRows, numRowEvents) +} + // Validates that we have a working VStream API // If Failover is enabled: // - We ensure that this works through active reparents and doesn't miss any events @@ -940,7 +1103,7 @@ func TestVStreamStopOnReshardFalse(t *testing.T) { func TestVStreamWithKeyspacesToWatch(t *testing.T) { extraVTGateArgs = append(extraVTGateArgs, []string{ - "--keyspaces_to_watch", "product", + utils.GetFlagVariantForTests("--keyspaces-to-watch"), "product", }...) testVStreamWithFailover(t, false) @@ -1035,9 +1198,9 @@ func doVStream(t *testing.T, vc *VitessCluster, flags *vtgatepb.VStreamFlags) (n func TestVStreamHeartbeats(t *testing.T) { // Enable continuous heartbeats. extraVTTabletArgs = append(extraVTTabletArgs, - "--heartbeat_enable", - "--heartbeat_interval", "1s", - "--heartbeat_on_demand_duration", "0", + utils.GetFlagVariantForTests("--heartbeat-enable"), + utils.GetFlagVariantForTests("--heartbeat-interval"), "1s", + utils.GetFlagVariantForTests("--heartbeat-on-demand-duration"), "0", ) setSidecarDBName("_vt") config := *mainClusterConfig diff --git a/go/test/endtoend/vtgate/connectiondrain/main_test.go b/go/test/endtoend/vtgate/connectiondrain/main_test.go index 6257baf8e40..a951fb39097 100644 --- a/go/test/endtoend/vtgate/connectiondrain/main_test.go +++ b/go/test/endtoend/vtgate/connectiondrain/main_test.go @@ -29,6 +29,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/test/endtoend/cluster" "vitess.io/vitess/go/test/endtoend/utils" + vtutils "vitess.io/vitess/go/vt/utils" ) var ( @@ -60,7 +61,7 @@ func setupCluster(t *testing.T) (*cluster.LocalProcessCluster, mysql.ConnParams) require.NoError(t, err) // Start vtgate - clusterInstance.VtGateExtraArgs = append(clusterInstance.VtGateExtraArgs, "--mysql-server-drain-onterm", "--onterm_timeout", "30s") + clusterInstance.VtGateExtraArgs = append(clusterInstance.VtGateExtraArgs, "--mysql-server-drain-onterm", vtutils.GetFlagVariantForTests("--onterm-timeout"), "30s") err = clusterInstance.StartVtgate() require.NoError(t, err) @@ -119,7 +120,7 @@ func TestConnectionDrainCloseConnections(t *testing.T) { // Create a third connection, this connection should not be allowed. // Set a connection timeout to 1s otherwise the connection will take forever - // and eventually vtgate will reach the --onterm_timeout. + // and eventually vtgate will reach the --onterm-timeout. vtParams.ConnectTimeoutMs = 1000 defer func() { vtParams.ConnectTimeoutMs = 0 @@ -146,10 +147,10 @@ func TestConnectionDrainCloseConnections(t *testing.T) { require.NoError(t, err) vtConn.Close() - // Give enough time for vtgate to finish all the onterm hooks without reaching the 30s of --onterm_timeout + // Give enough time for vtgate to finish all the onterm hooks without reaching the 30s of --onterm-timeout time.Sleep(10 * time.Second) - // By now the vtgate should have shutdown on its own and without reaching --onterm_timeout + // By now the vtgate should have shutdown on its own and without reaching --onterm-timeout require.True(t, clusterInstance.VtgateProcess.IsShutdown()) } @@ -168,18 +169,18 @@ func TestConnectionDrainOnTermTimeout(t *testing.T) { vtConn2.Close() }() - // Tearing down vtgate here, we want to reach the onterm_timeout of 30s + // Tearing down vtgate here, we want to reach the onterm-timeout of 30s err = clusterInstance.VtgateProcess.Terminate() require.NoError(t, err) - // Run a busy query that returns only after the onterm_timeout is reached, this should fail when we reach the timeout + // Run a busy query that returns only after the onterm-timeout is reached, this should fail when we reach the timeout _, err = vtConn.ExecuteFetch("select sleep(40)", 1, false) require.Error(t, err) - // Running a query after we have reached the onterm_timeout should fail + // Running a query after we have reached the onterm-timeout should fail _, err = vtConn2.ExecuteFetch("select id from t1", 1, false) require.Error(t, err) - // By now vtgate will be shutdown becaused it reached its onterm_timeout, despite idle connections still being opened + // By now vtgate will be shutdown becaused it reached its onterm-timeout, despite idle connections still being opened require.True(t, clusterInstance.VtgateProcess.IsShutdown()) } diff --git a/go/test/endtoend/vtgate/createdb_plugin/main_test.go b/go/test/endtoend/vtgate/createdb_plugin/main_test.go index e2925bf928d..d00208b34ac 100644 --- a/go/test/endtoend/vtgate/createdb_plugin/main_test.go +++ b/go/test/endtoend/vtgate/createdb_plugin/main_test.go @@ -32,6 +32,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/test/endtoend/cluster" + vtutils "vitess.io/vitess/go/vt/utils" ) var ( @@ -63,7 +64,7 @@ func TestMain(m *testing.M) { } // Start vtgate - clusterInstance.VtGateExtraArgs = []string{"--dbddl_plugin", "noop", "--mysql_server_query_timeout", "60s"} + clusterInstance.VtGateExtraArgs = []string{vtutils.GetFlagVariantForTests("--dbddl-plugin"), "noop", vtutils.GetFlagVariantForTests("--mysql-server-query-timeout"), "60s"} vtgateProcess := clusterInstance.NewVtgateInstance() vtgateProcess.SysVarSetEnabled = true if err := vtgateProcess.Setup(); err != nil { diff --git a/go/test/endtoend/vtgate/foreignkey/stress/fk_stress_test.go b/go/test/endtoend/vtgate/foreignkey/stress/fk_stress_test.go index 42498ad80f0..c51dba7d0bd 100644 --- a/go/test/endtoend/vtgate/foreignkey/stress/fk_stress_test.go +++ b/go/test/endtoend/vtgate/foreignkey/stress/fk_stress_test.go @@ -44,6 +44,7 @@ import ( "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/schema" "vitess.io/vitess/go/vt/sqlparser" + vtutils "vitess.io/vitess/go/vt/utils" ) // This endtoend test is designd to validate VTGate's FOREIGN KEY implementation for unsharded/single-sharded/shard-scope, meaning @@ -348,17 +349,17 @@ func TestMain(m *testing.M) { } clusterInstance.VtctldExtraArgs = []string{ - "--schema_change_dir", schemaChangeDirectory, - "--schema_change_controller", "local", - "--schema_change_check_interval", "1s", + "--schema-change-dir", schemaChangeDirectory, + "--schema-change-controller", "local", + "--schema-change-check-interval", "1s", } clusterInstance.VtTabletExtraArgs = []string{ - "--heartbeat_enable", - "--heartbeat_interval", "250ms", - "--heartbeat_on_demand_duration", "5s", - "--migration_check_interval", "3s", - "--watch_replication_stream", + vtutils.GetFlagVariantForTests("--heartbeat-enable"), + vtutils.GetFlagVariantForTests("--heartbeat-interval"), "250ms", + vtutils.GetFlagVariantForTests("--heartbeat-on-demand-duration"), "5s", + vtutils.GetFlagVariantForTests("--migration-check-interval"), "3s", + vtutils.GetFlagVariantForTests("--watch-replication-stream"), } clusterInstance.VtGateExtraArgs = []string{} diff --git a/go/test/endtoend/vtgate/godriver/main_test.go b/go/test/endtoend/vtgate/godriver/main_test.go index 91605394cf1..108dfd0680c 100644 --- a/go/test/endtoend/vtgate/godriver/main_test.go +++ b/go/test/endtoend/vtgate/godriver/main_test.go @@ -30,6 +30,7 @@ import ( "google.golang.org/grpc/keepalive" "vitess.io/vitess/go/vt/log" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vitessdriver" "vitess.io/vitess/go/test/endtoend/cluster" @@ -112,7 +113,7 @@ func TestMain(m *testing.M) { } // Start vtgate - clusterInstance.VtGateExtraArgs = []string{"--warn_sharded_only=true"} + clusterInstance.VtGateExtraArgs = []string{utils.GetFlagVariantForTests("--warn-sharded-only") + "=true"} if err := clusterInstance.StartVtgate(); err != nil { log.Fatal(err.Error()) return 1 diff --git a/go/test/endtoend/vtgate/grpc_api/main_test.go b/go/test/endtoend/vtgate/grpc_api/main_test.go index e8e116494a2..76ffcc64b0b 100644 --- a/go/test/endtoend/vtgate/grpc_api/main_test.go +++ b/go/test/endtoend/vtgate/grpc_api/main_test.go @@ -24,6 +24,7 @@ import ( "testing" "vitess.io/vitess/go/test/endtoend/cluster" + "vitess.io/vitess/go/vt/utils" ) var ( @@ -106,10 +107,10 @@ func TestMain(m *testing.M) { // Configure vtgate to use static auth clusterInstance.VtGateExtraArgs = []string{ - "--grpc_auth_mode", "static", - "--grpc_auth_static_password_file", grpcServerAuthStaticPath, - "--grpc_use_effective_callerid", - "--grpc-use-static-authentication-callerid", + utils.GetFlagVariantForTests("--grpc-auth-mode"), "static", + utils.GetFlagVariantForTests("--grpc-auth-static-password-file"), grpcServerAuthStaticPath, + utils.GetFlagVariantForTests("--grpc-use-effective-callerid"), + utils.GetFlagVariantForTests("--grpc-use-static-authentication-callerid"), } // Configure vttablet to use table ACL diff --git a/go/test/endtoend/vtgate/keyspace_watches/keyspace_watch_test.go b/go/test/endtoend/vtgate/keyspace_watches/keyspace_watch_test.go index e3b66dd49bd..4b03f277bcc 100644 --- a/go/test/endtoend/vtgate/keyspace_watches/keyspace_watch_test.go +++ b/go/test/endtoend/vtgate/keyspace_watches/keyspace_watch_test.go @@ -31,6 +31,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/test/endtoend/cluster" + "vitess.io/vitess/go/vt/utils" ) var ( @@ -96,7 +97,7 @@ func createCluster(extraVTGateArgs []string) (*cluster.LocalProcessCluster, int) vtGateArgs := []string{ "--mysql_auth_server_static_file", clusterInstance.TmpDirectory + "/" + mysqlAuthServerStatic, - "--keyspaces_to_watch", keyspaceUnshardedName, + utils.GetFlagVariantForTests("--keyspaces-to-watch"), keyspaceUnshardedName, } if extraVTGateArgs != nil { @@ -159,7 +160,7 @@ func TestVSchemaDDLWithKeyspacesToWatch(t *testing.T) { require.Nil(t, err) defer db.Close() - // The topo server must be read-only when using keyspaces_to_watch in order to prevent + // The topo server must be read-only when using keyspaces-to-watch in order to prevent // potentially corrupting the VSchema based on this vtgates limited view of the world _, err = db.Exec(vschemaDDL) require.EqualError(t, err, vschemaDDLError) diff --git a/go/test/endtoend/vtgate/mysql80/main_test.go b/go/test/endtoend/vtgate/mysql80/main_test.go index b970fb66b12..e188f7f2ed7 100644 --- a/go/test/endtoend/vtgate/mysql80/main_test.go +++ b/go/test/endtoend/vtgate/mysql80/main_test.go @@ -22,6 +22,7 @@ import ( "testing" querypb "vitess.io/vitess/go/vt/proto/query" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/test/endtoend/cluster" @@ -59,7 +60,7 @@ func TestMain(m *testing.M) { clusterInstance.VtGatePlannerVersion = querypb.ExecuteOptions_Gen4 clusterInstance.VtGateExtraArgs = append(clusterInstance.VtGateExtraArgs, "--enable_system_settings=true", - "--mysql_server_version=8.0.16-7", + utils.GetFlagVariantForTests("--mysql-server-version")+"=8.0.16-7", ) // Start vtgate err = clusterInstance.StartVtgate() diff --git a/go/test/endtoend/vtgate/plan_tests/main_test.go b/go/test/endtoend/vtgate/plan_tests/main_test.go index 2dc2e70120b..68d5b570664 100644 --- a/go/test/endtoend/vtgate/plan_tests/main_test.go +++ b/go/test/endtoend/vtgate/plan_tests/main_test.go @@ -29,6 +29,7 @@ import ( "vitess.io/vitess/go/test/endtoend/cluster" "vitess.io/vitess/go/test/endtoend/utils" "vitess.io/vitess/go/vt/sqlparser" + vtutils "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtgate/engine" "vitess.io/vitess/go/vt/vtgate/planbuilder" ) @@ -86,7 +87,7 @@ func TestMain(m *testing.M) { // TODO: (@GuptaManan100/@systay): Also run the tests with normalizer on. clusterInstance.VtGateExtraArgs = append(clusterInstance.VtGateExtraArgs, - "--normalize_queries=false", + vtutils.GetFlagVariantForTests("--normalize-queries")+"=false", "--schema_change_signal=true", ) diff --git a/go/test/endtoend/vtgate/queries/dml/dml_test.go b/go/test/endtoend/vtgate/queries/dml/dml_test.go index 52e9053fb9d..6c67e48e07f 100644 --- a/go/test/endtoend/vtgate/queries/dml/dml_test.go +++ b/go/test/endtoend/vtgate/queries/dml/dml_test.go @@ -94,21 +94,20 @@ func TestUniqueLookupDuplicateIgnore(t *testing.T) { // insert duplicate row in multi-row insert - lookup single shard // Current behavior does not work as expected—one of the rows should be inserted. - // The lookup table is updated, but the main table is not. This is a bug in Vitess. // The issue occurs because the table has two vindex columns (`num` and `col`), both of which ignore nulls during vindex insertion. // In the `INSERT IGNORE` case, after the vindex create API call, a verify call checks if the row exists in the lookup table. // - If the row exists, it is inserted into the main table. // - If the row does not exist, the main table insertion is skipped. // Since the `col` column is null, the row is not inserted into the lookup table, causing the main table insertion to be ignored. qr = utils.Exec(t, mcmp.VtConn, "insert ignore into s_tbl(id, num) values (3,20), (4,20)") - assert.EqualValues(t, 0, qr.RowsAffected) - utils.AssertMatches(t, mcmp.VtConn, "select id, num from s_tbl order by id", `[[INT64(1) INT64(10)]]`) + assert.EqualValues(t, 1, qr.RowsAffected) + utils.AssertMatches(t, mcmp.VtConn, "select id, num from s_tbl order by id", `[[INT64(1) INT64(10)] [INT64(3) INT64(20)]]`) utils.AssertMatches(t, mcmp.VtConn, "select num, hex(keyspace_id) from num_vdx_tbl order by num", `[[INT64(10) VARCHAR("166B40B44ABA4BD6")] [INT64(20) VARCHAR("4EB190C9A2FA169C")]]`) // insert duplicate row in multi-row insert - vindex values are not null qr = utils.Exec(t, mcmp.VtConn, "insert ignore into s_tbl(id, num, col) values (3,20, 30), (4,20, 40)") - assert.EqualValues(t, 1, qr.RowsAffected) - utils.AssertMatches(t, mcmp.VtConn, "select id, num, col from s_tbl order by id", `[[INT64(1) INT64(10) NULL] [INT64(3) INT64(20) INT64(30)]]`) + assert.EqualValues(t, 0, qr.RowsAffected) + utils.AssertMatches(t, mcmp.VtConn, "select id, num, col from s_tbl order by id", `[[INT64(1) INT64(10) NULL] [INT64(3) INT64(20) NULL]]`) utils.AssertMatches(t, mcmp.VtConn, "select num, hex(keyspace_id) from num_vdx_tbl order by num", `[[INT64(10) VARCHAR("166B40B44ABA4BD6")] [INT64(20) VARCHAR("4EB190C9A2FA169C")]]`) utils.AssertMatches(t, mcmp.VtConn, "select col, hex(keyspace_id) from col_vdx_tbl order by col", `[[INT64(30) VARCHAR("4EB190C9A2FA169C")]]`) diff --git a/go/test/endtoend/vtgate/queries/dml/insert_test.go b/go/test/endtoend/vtgate/queries/dml/insert_test.go index b4d12de2573..0bb3ff52c48 100644 --- a/go/test/endtoend/vtgate/queries/dml/insert_test.go +++ b/go/test/endtoend/vtgate/queries/dml/insert_test.go @@ -20,6 +20,8 @@ import ( "fmt" "testing" + "github.com/stretchr/testify/require" + "github.com/stretchr/testify/assert" "vitess.io/vitess/go/test/endtoend/utils" @@ -515,4 +517,31 @@ func TestInsertJson(t *testing.T) { utils.Exec(t, mcmp.VtConn, `insert into uks.j_utbl(id, jdoc) select * from sks.j_tbl`) utils.AssertMatches(t, mcmp.VtConn, `select * from uks.j_utbl order by id`, `[[INT64(1) JSON("{}")] [INT64(2) JSON("{\"a\": 1, \"b\": 2}")] [INT64(3) JSON("{\"k\": \"a\"}")] [INT64(4) JSON("{\"date\": 1629849600, \"keywordSourceId\": 930701976723823, \"keywordSourceVersionId\": 210825230433}")]]`) + + mcmp.Exec(`insert into j_tbl(id, jdoc) values (10, '{}'), (20, "[]")`) +} + +func TestInsertIgnoreNullAndInsertNull(t *testing.T) { + mcmp, closer := start(t) + defer closer() + + mcmp.Exec("insert ignore into s_tbl(id) values (1)") // the remaining columns are be set to NULL + mcmp.Exec("select id, num, col from s_tbl") + mcmp.Exec("insert ignore into s_tbl(id, num, col) values (2, 2, 2), (3, NULL, 3), (4, 4, NULL)") + mcmp.Exec("insert into s_tbl(id, num, col) values (5, 5, 5), (6, NULL, 6), (7, 7, NULL)") + mcmp.Exec("select id, num, col from s_tbl") + utils.AssertMatches(t, mcmp.VtConn, "select num, hex(keyspace_id) from num_vdx_tbl order by num", + `[[INT64(2) VARCHAR("06E7EA22CE92708F")] [INT64(4) VARCHAR("D2FD8867D50D2DFE")] [INT64(5) VARCHAR("70BB023C810CA87A")] [INT64(7) VARCHAR("FB8BAAAD918119B8")]]`) + utils.AssertMatches(t, mcmp.VtConn, "select col, id, hex(keyspace_id) from col_vdx_tbl order by col, id", + `[[INT64(2) INT64(2) VARCHAR("06E7EA22CE92708F")] [INT64(3) INT64(3) VARCHAR("4EB190C9A2FA169C")] [INT64(5) INT64(5) VARCHAR("70BB023C810CA87A")] [INT64(6) INT64(6) VARCHAR("F098480AC4C4BE71")]]`) + + mcmp.Exec("insert ignore into name_tbl(id, name) values (1, 'foo'), (2, 'bar')") + mcmp.Exec("select id, name from name_tbl order by id") + + // This should contain the one row that was inserted above + utils.AssertMatches(t, mcmp.VtConn, "select name, id, hex(keyspace_id) from name_vdx_tbl order by name, id", + `[[VARCHAR("bar") INT64(2) VARCHAR("06E7EA22CE92708F")] [VARCHAR("foo") INT64(1) VARCHAR("166B40B44ABA4BD6")]]`) + + _, err := utils.ExecAllowError(t, mcmp.VtConn, "insert ignore into name_tbl(id, name) values (22, NULL)") // this should fail, since we have a vindex that does not ignore nulls + require.ErrorContains(t, err, "Column 'name,id' cannot be null") } diff --git a/go/test/endtoend/vtgate/queries/dml/sharded_schema.sql b/go/test/endtoend/vtgate/queries/dml/sharded_schema.sql index 9b2e14f5201..69e91c545dd 100644 --- a/go/test/endtoend/vtgate/queries/dml/sharded_schema.sql +++ b/go/test/endtoend/vtgate/queries/dml/sharded_schema.sql @@ -1,12 +1,17 @@ create table s_tbl ( - id bigint, - num bigint, - col bigint, + id bigint, + num bigint, + col bigint, unique key (num), primary key (id) ) Engine = InnoDB; - +create table name_tbl +( + id bigint, + name varchar(50), + primary key (id) +) Engine = InnoDB; create table num_vdx_tbl ( num bigint, @@ -20,6 +25,14 @@ create table col_vdx_tbl id bigint, keyspace_id varbinary(20), primary key (col, id) +) Engine = InnoDB +; +create table name_vdx_tbl +( + name varchar(50), + id bigint, + keyspace_id varbinary(20), + primary key (name, id) ) Engine = InnoDB; create table user_tbl @@ -100,7 +113,7 @@ create table lkp_mixed_idx create table j_tbl ( - id bigint, + id bigint, jdoc json, primary key (id) ) Engine = InnoDB; diff --git a/go/test/endtoend/vtgate/queries/dml/vschema.json b/go/test/endtoend/vtgate/queries/dml/vschema.json index dd44d8989ca..77dcdc96ab5 100644 --- a/go/test/endtoend/vtgate/queries/dml/vschema.json +++ b/go/test/endtoend/vtgate/queries/dml/vschema.json @@ -4,6 +4,9 @@ "hash": { "type": "hash" }, + "hash_varchar": { + "type": "unicode_loose_xxhash" + }, "num_vdx": { "type": "consistent_lookup_unique", "params": { @@ -24,6 +27,15 @@ }, "owner": "s_tbl" }, + "name_vdx": { + "type": "consistent_lookup", + "params": { + "table": "name_vdx_tbl", + "from": "name,id", + "to": "keyspace_id" + }, + "owner": "name_tbl" + }, "oid_vdx": { "type": "consistent_lookup_unique", "params": { @@ -76,11 +88,29 @@ "name": "num_vdx" }, { - "columns": ["col", "id"], + "columns": [ + "col", + "id" + ], "name": "col_vdx" } ] }, + "name_tbl": { + "column_vindexes": [ + { + "column": "id", + "name": "hash" + }, + { + "columns": [ + "name", + "id" + ], + "name": "name_vdx" + } + ] + }, "num_vdx_tbl": { "column_vindexes": [ { @@ -97,6 +127,14 @@ } ] }, + "name_vdx_tbl": { + "column_vindexes": [ + { + "column": "name", + "name": "hash_varchar" + } + ] + }, "user_tbl": { "auto_increment": { "column": "id", diff --git a/go/test/endtoend/vtgate/queries/kill/main_test.go b/go/test/endtoend/vtgate/queries/kill/main_test.go index 61ddec43589..c4b4fa8f3ed 100644 --- a/go/test/endtoend/vtgate/queries/kill/main_test.go +++ b/go/test/endtoend/vtgate/queries/kill/main_test.go @@ -32,6 +32,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/test/endtoend/cluster" "vitess.io/vitess/go/test/endtoend/utils" + vtutils "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtgate/planbuilder" ) @@ -70,7 +71,7 @@ func TestMain(m *testing.M) { var maxGrpcSize int64 = 256 * 1024 * 1024 clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs, "--queryserver-config-max-result-size", "10000000", - "--grpc_max_message_size", strconv.FormatInt(maxGrpcSize, 10)) + vtutils.GetFlagVariantForTests("--grpc-max-message-size"), strconv.FormatInt(maxGrpcSize, 10)) if err := clusterInstance.StartKeyspace(*keyspace, []string{"-80", "80-"}, 0, false); err != nil { return 1 } @@ -78,8 +79,8 @@ func TestMain(m *testing.M) { // Start vtgate clusterInstance.VtGatePlannerVersion = planbuilder.Gen4 clusterInstance.VtGateExtraArgs = append(clusterInstance.VtGateExtraArgs, - "--grpc_max_message_size", strconv.FormatInt(maxGrpcSize, 10), - "--max_memory_rows", "999999", + vtutils.GetFlagVariantForTests("--grpc-max-message-size"), strconv.FormatInt(maxGrpcSize, 10), + vtutils.GetFlagVariantForTests("--max-memory-rows"), "999999", "--allow-kill-statement") if err := clusterInstance.StartVtgate(); err != nil { return 1 diff --git a/go/test/endtoend/vtgate/queries/misc/join_output1.json b/go/test/endtoend/vtgate/queries/misc/join_output1.json new file mode 100644 index 00000000000..f3ec05530f5 --- /dev/null +++ b/go/test/endtoend/vtgate/queries/misc/join_output1.json @@ -0,0 +1,34 @@ +{ + "OperatorType": "Join", + "Variant": "Join", + "JoinColumnIndexes": "L:0,L:1,R:0", + "JoinVars": { + "tbl_nonunq_col": 1 + }, + "Inputs": [ + { + "OperatorType": "Route", + "Variant": "Scatter", + "Keyspace": { + "Name": "ks_misc", + "Sharded": true + }, + "FieldQuery": "select tbl.unq_col, tbl.nonunq_col from tbl where 1 != 1", + "Query": "select tbl.unq_col, tbl.nonunq_col from tbl" + }, + { + "OperatorType": "Route", + "Variant": "EqualUnique", + "Keyspace": { + "Name": "ks_misc", + "Sharded": true + }, + "FieldQuery": "select t1.id2 from t1 where 1 != 1", + "Query": "select t1.id2 from t1 where t1.id1 = :tbl_nonunq_col /* INT64 */", + "Values": [ + ":tbl_nonunq_col" + ], + "Vindex": "hash" + } + ] +} \ No newline at end of file diff --git a/go/test/endtoend/vtgate/queries/misc/join_output2.json b/go/test/endtoend/vtgate/queries/misc/join_output2.json new file mode 100644 index 00000000000..b9085627565 --- /dev/null +++ b/go/test/endtoend/vtgate/queries/misc/join_output2.json @@ -0,0 +1,58 @@ +{ + "OperatorType": "Join", + "Variant": "Join", + "JoinColumnIndexes": "R:0,R:1,L:0", + "JoinVars": { + "t1_id1": 1 + }, + "Inputs": [ + { + "OperatorType": "Route", + "Variant": "Scatter", + "Keyspace": { + "Name": "ks_misc", + "Sharded": true + }, + "FieldQuery": "select t1.id2, t1.id1 from t1 where 1 != 1", + "Query": "select t1.id2, t1.id1 from t1" + }, + { + "OperatorType": "VindexLookup", + "Variant": "Equal", + "Keyspace": { + "Name": "ks_misc", + "Sharded": true + }, + "Values": [ + ":t1_id1" + ], + "Vindex": "nonunq_vdx", + "Inputs": [ + { + "OperatorType": "Route", + "Variant": "IN", + "Keyspace": { + "Name": "ks_misc", + "Sharded": true + }, + "FieldQuery": "select nonunq_col, keyspace_id from nonunq_idx where 1 != 1", + "Query": "select nonunq_col, keyspace_id from nonunq_idx where nonunq_col in ::__vals", + "Values": [ + "::nonunq_col" + ], + "Vindex": "hash" + }, + { + "OperatorType": "Route", + "Variant": "ByDestination", + "Keyspace": { + "Name": "ks_misc", + "Sharded": true + }, + "FieldQuery": "select tbl.unq_col, tbl.nonunq_col from tbl where 1 != 1", + "Query": "select tbl.unq_col, tbl.nonunq_col from tbl where tbl.nonunq_col = :t1_id1 /* INT64 */" + } + ] + } + ] +} \ No newline at end of file diff --git a/go/test/endtoend/vtgate/queries/misc/misc_test.go b/go/test/endtoend/vtgate/queries/misc/misc_test.go index ad01d4e153d..e0f647a237b 100644 --- a/go/test/endtoend/vtgate/queries/misc/misc_test.go +++ b/go/test/endtoend/vtgate/queries/misc/misc_test.go @@ -19,6 +19,7 @@ package misc import ( "context" "database/sql" + _ "embed" "fmt" "strings" "testing" @@ -39,7 +40,7 @@ func start(t *testing.T) (utils.MySQLCompare, func()) { require.NoError(t, err) deleteAll := func() { - tables := []string{"t1", "tbl", "unq_idx", "nonunq_idx", "tbl_enum_set", "uks.unsharded"} + tables := []string{"t1", "tbl", "unq_idx", "nonunq_idx", "tbl_enum_set", "uks.unsharded", "all_types"} for _, table := range tables { _, _ = mcmp.ExecAndIgnore("delete from " + table) } @@ -645,6 +646,12 @@ func TestAlterTableWithView(t *testing.T) { mcmp.AssertMatches("select * from v1", `[[INT64(1) INT64(1)]]`) } +//go:embed join_output1.json +var expJoinOutput1 string + +//go:embed join_output2.json +var expJoinOutput2 string + // TestStraightJoin tests that Vitess respects the ordering of join in a STRAIGHT JOIN query. func TestStraightJoin(t *testing.T) { mcmp, closer := start(t) @@ -659,7 +666,8 @@ func TestStraightJoin(t *testing.T) { // Verify that in a normal join query, vitess joins tbl with t1. res, err := mcmp.VtConn.ExecuteFetch("vexplain plan select tbl.unq_col, tbl.nonunq_col, t1.id2 from t1 join tbl where t1.id1 = tbl.nonunq_col", 100, false) require.NoError(t, err) - require.Contains(t, fmt.Sprintf("%v", res.Rows), "tbl_t1") + require.Len(t, res.Rows, 1) + require.JSONEq(t, expJoinOutput1, res.Rows[0][0].ToString()) // Test the same query with a straight join mcmp.AssertMatchesNoOrder("select tbl.unq_col, tbl.nonunq_col, t1.id2 from t1 straight_join tbl where t1.id1 = tbl.nonunq_col", @@ -668,7 +676,8 @@ func TestStraightJoin(t *testing.T) { // Verify that in a straight join query, vitess joins t1 with tbl. res, err = mcmp.VtConn.ExecuteFetch("vexplain plan select tbl.unq_col, tbl.nonunq_col, t1.id2 from t1 straight_join tbl where t1.id1 = tbl.nonunq_col", 100, false) require.NoError(t, err) - require.Contains(t, fmt.Sprintf("%v", res.Rows), "t1_tbl") + require.Len(t, res.Rows, 1) + require.JSONEq(t, expJoinOutput2, res.Rows[0][0].ToString()) } func TestFailingOuterJoinInOLAP(t *testing.T) { @@ -783,3 +792,48 @@ func TestSemiJoin(t *testing.T) { }) } } + +// TestTabletTypeRouting tests that the tablet type routing works as intended. +func TestTabletTypeRouting(t *testing.T) { + // We are gonna configure the routing rules to send the + // query for a replica tablet in ks_misc.t1 to go to a table that doesn't exist. + // I know this doesn't make much practical sense, but makes testing really easy. + routingRules := `{"rules": [ + { + "from_table": "ks_misc.t1@replica", + "to_tables": ["uks.unknown"] + } +]}` + err := clusterInstance.VtctldClientProcess.ApplyRoutingRules(routingRules) + require.NoError(t, err) + defer func() { + // Clear the routing rules after the test. + err = clusterInstance.VtctldClientProcess.ApplyRoutingRules("{}") + require.NoError(t, err) + }() + + mcmp, closer := start(t) + defer closer() + + mcmp.Exec("insert into t1(id1, id2) values (0,0)") + + vtConn := mcmp.VtConn + // We first verify that querying the primary tablet goes to the t1 table. + utils.Exec(t, vtConn, "use ks_misc@primary") + utils.AssertMatches(t, vtConn, "select * from ks_misc.t1", `[[INT64(0) INT64(0)]]`) + // Now we change the connection's target + utils.Exec(t, vtConn, "use ks_misc@replica") + // We verify that querying the replica tablet creates an unknown table error. + _, err = utils.ExecAllowError(t, vtConn, "select * from ks_misc.t1") + require.ErrorContains(t, err, "table unknown not found") +} + +// TestJoinMixedCaseExpr tests that join condition with expression from both table having in clause is handled correctly. +func TestJoinMixedCaseExpr(t *testing.T) { + mcmp, closer := start(t) + defer closer() + + mcmp.Exec(`insert into all_types(id, int_unsigned) values (1, 1), (2, 2), (3,3), (4,4), (10,5), (20, 6)`) + mcmp.Exec(`prepare prep_pk from 'SELECT t1.id from all_types t1 join all_types t2 on t1.int_unsigned = (case when t2.int_unsigned in (1, 2, 3) then 1 when t2.int_unsigned = 4 then 10 else 20 end)'`) + mcmp.AssertMatches(`execute prep_pk`, `[[INT64(1)] [INT64(1)] [INT64(1)]]`) +} diff --git a/go/test/endtoend/vtgate/queries/misc/text.txt b/go/test/endtoend/vtgate/queries/misc/text.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/go/test/endtoend/vtgate/queries/multi_query/main_test.go b/go/test/endtoend/vtgate/queries/multi_query/main_test.go new file mode 100644 index 00000000000..c5a0c29eb38 --- /dev/null +++ b/go/test/endtoend/vtgate/queries/multi_query/main_test.go @@ -0,0 +1,134 @@ +/* +Copyright 2025 The Vitess Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package multi_query + +import ( + _ "embed" + "flag" + "fmt" + "os" + "testing" + + "github.com/stretchr/testify/require" + + "vitess.io/vitess/go/test/endtoend/utils" + + "vitess.io/vitess/go/mysql" + "vitess.io/vitess/go/test/endtoend/cluster" +) + +var ( + clusterInstance *cluster.LocalProcessCluster + vtParams mysql.ConnParams + mysqlParams mysql.ConnParams + keyspaceName = "ks" + cell = "test" + + //go:embed schema.sql + schemaSQL string + + //go:embed vschema.json + vschema string +) + +func TestMain(m *testing.M) { + flag.Parse() + + exitCode := func() int { + clusterInstance = cluster.NewCluster(cell, "localhost") + defer clusterInstance.Teardown() + + // Start topo server + err := clusterInstance.StartTopo() + if err != nil { + return 1 + } + + clusterInstance.VtGateExtraArgs = append(clusterInstance.VtGateExtraArgs, "--mysql-server-multi-query-protocol") + + // Start keyspace + keyspace := &cluster.Keyspace{ + Name: keyspaceName, + SchemaSQL: schemaSQL, + VSchema: vschema, + } + err = clusterInstance.StartKeyspace(*keyspace, []string{"-80", "80-"}, 0, false) + if err != nil { + return 1 + } + + // Start vtgate + err = clusterInstance.StartVtgate() + if err != nil { + return 1 + } + + vtParams = clusterInstance.GetVTParams(keyspaceName) + + // create mysql instance and connection parameters + conn, closer, err := utils.NewMySQL(clusterInstance, keyspaceName, schemaSQL) + if err != nil { + fmt.Println(err) + return 1 + } + defer closer() + mysqlParams = conn + return m.Run() + }() + os.Exit(exitCode) +} + +func start(t *testing.T) (utils.MySQLCompare, func()) { + mcmp, err := utils.NewMySQLCompare(t, vtParams, mysqlParams) + require.NoError(t, err) + + deleteAll := func() { + _, _ = utils.ExecAllowError(t, mcmp.VtConn, "set workload = oltp") + + tables := []string{"t1", "t2"} + for _, table := range tables { + _, _ = mcmp.ExecAndIgnore("delete from " + table) + } + } + + deleteAll() + + // insert data + queries := []string{ + `INSERT INTO t1 (id1, id2, id3) VALUES + (1, 'abc123', 'xyz789'), + (2, 'def456', 'uvw123'), + (3, 'ghi789', 'rst456'), + (4, 'jkl012', 'opq987'), + (5, 'mno345', 'lmn654'), + (6, 'pqr678', 'hij321');`, + `INSERT INTO t2 (id5, id6, id7) VALUES + (1, 11, 21), + (2, 12, 22), + (10, 3, 23), + (4, 14, 24), + (11, 15, 25);`, + } + for _, query := range queries { + mcmp.Exec(query) + } + + return mcmp, func() { + deleteAll() + mcmp.Close() + } +} diff --git a/go/test/endtoend/vtgate/queries/multi_query/multi_query_test.go b/go/test/endtoend/vtgate/queries/multi_query/multi_query_test.go new file mode 100644 index 00000000000..e26f0089fdf --- /dev/null +++ b/go/test/endtoend/vtgate/queries/multi_query/multi_query_test.go @@ -0,0 +1,185 @@ +/* +Copyright 2025 The Vitess Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package multi_query + +import ( + "context" + "fmt" + "io" + "testing" + + "github.com/stretchr/testify/require" + + "vitess.io/vitess/go/mysql" + "vitess.io/vitess/go/sqltypes" + "vitess.io/vitess/go/test/endtoend/cluster" + "vitess.io/vitess/go/test/endtoend/utils" + querypb "vitess.io/vitess/go/vt/proto/query" +) + +// TestMultiQuery tests the new way of handling queries in vtgate +// that runs multiple queries together. +func TestMultiQuery(t *testing.T) { + testcases := []struct { + name string + sql string + errExpected bool + }{ + { + name: "single route query", + sql: "select * from t1", + errExpected: false, + }, + { + name: "join query", + sql: "select * from t1 join t2", + errExpected: false, + }, + { + name: "join query that can be pushed down", + sql: "select * from t1 join t2 on t1.id1 = t2.id5 where t1.id1 = 4", + errExpected: false, + }, + { + name: "multiple select queries", + sql: "select * from t1; select * from t2; select * from t1 join t2;", + errExpected: false, + }, + { + name: "multiple queries with dml in between", + sql: "select * from t1; insert into t2(id5, id6, id7) values (40, 43, 46); select * from t2; delete from t2; select * from t1 join t2;", + errExpected: false, + }, + { + name: "parsing error in single query", + sql: "unexpected query;", + errExpected: true, + }, + { + name: "parsing error in multiple queries", + sql: "select * from t1; select * from t2; unexpected query; select * from t1 join t2;", + errExpected: true, + }, + } + + ctx := context.Background() + vtgateGrpcAddress := fmt.Sprintf("%s:%d", clusterInstance.Hostname, clusterInstance.VtgateGrpcPort) + vtgateConn, err := cluster.DialVTGate(ctx, t.Name(), vtgateGrpcAddress, "test_user", "") + require.NoError(t, err) + for _, workload := range []string{"oltp", "olap"} { + t.Run(workload, func(t *testing.T) { + for _, tt := range testcases { + t.Run(tt.name, func(t *testing.T) { + t.Run("MySQL Protocol", func(t *testing.T) { + mcmp, closer := start(t) + defer closer() + utils.Exec(t, mcmp.VtConn, fmt.Sprintf(`set workload = %s`, workload)) + defer utils.Exec(t, mcmp.VtConn, `set workload = oltp`) + + if !tt.errExpected { + mcmp.ExecMulti(tt.sql) + return + } + mcmp.ExecMultiAllowError(tt.sql) + }) + t.Run("GRPC Protocol", func(t *testing.T) { + mcmp, closer := start(t) + defer closer() + + // We get the results from MySQL to compare with the results we get from Vitess. + mysqlRes, mysqlErr := getMySqlResults(mcmp.MySQLConn, tt.sql) + + // Create the session + session := vtgateConn.Session("", &querypb.ExecuteOptions{}) + var results []*sqltypes.Result + var vtErr error + + if workload == "olap" { + // Run the query using the gRPC connection in a streaming mode + // and aggregate the results. + stream, streamErr := session.StreamExecuteMulti(ctx, tt.sql) + require.NoError(t, streamErr) + var curRes *sqltypes.Result + for { + res, newRes, rcvErr := stream.Recv() + if rcvErr == io.EOF { + break + } + if newRes && curRes != nil { + results = append(results, curRes) + curRes = nil + } + if rcvErr != nil { + vtErr = rcvErr + break + } + if curRes == nil { + curRes = &sqltypes.Result{} + } + if res.Fields != nil { + curRes.Fields = res.Fields + } + if res.RowsAffected != 0 { + curRes.RowsAffected = res.RowsAffected + } + curRes.Rows = append(curRes.Rows, res.Rows...) + } + if curRes != nil { + results = append(results, curRes) + } + } else { + // Run the query using the gRPC connection in a non-streaming mode + results, vtErr = session.ExecuteMulti(ctx, tt.sql) + } + + // Verify the expectations. + if !tt.errExpected { + require.NoError(t, mysqlErr) + require.NoError(t, vtErr) + } else { + require.Error(t, mysqlErr) + require.Error(t, vtErr) + } + require.EqualValues(t, len(results), len(mysqlRes)) + for idx, result := range results { + err = utils.CompareVitessAndMySQLResults(t, "select 1", mcmp.VtConn, result, mysqlRes[idx], utils.CompareOptions{}) + require.NoError(t, err) + } + }) + }) + } + }) + } +} + +// getMySqlResults executes the given SQL query using the MySQL connection +// and returns the results. It is used to compare the results with the +// results obtained from the gRPC connection. +func getMySqlResults(conn *mysql.Conn, sql string) ([]*sqltypes.Result, error) { + var results []*sqltypes.Result + mysqlQr, mysqlMore, mysqlErr := conn.ExecuteFetchMulti(sql, 1000, true) + if mysqlQr != nil { + results = append(results, mysqlQr) + } + for mysqlMore { + mysqlQr, mysqlMore, _, mysqlErr = conn.ReadQueryResult(1000, true) + if mysqlQr != nil { + results = append(results, mysqlQr) + } + } + return results, mysqlErr +} diff --git a/go/test/endtoend/vtgate/queries/multi_query/schema.sql b/go/test/endtoend/vtgate/queries/multi_query/schema.sql new file mode 100644 index 00000000000..b69dc4fa81d --- /dev/null +++ b/go/test/endtoend/vtgate/queries/multi_query/schema.sql @@ -0,0 +1,17 @@ +create table t1 +( + id1 bigint, + id2 varchar(10), + id3 varchar(10), + primary key (id1) +) ENGINE = InnoDB + DEFAULT charset = utf8mb4 + COLLATE = utf8mb4_general_ci; + +create table t2 +( + id5 bigint, + id6 bigint, + id7 bigint, + primary key (id5) +) Engine = InnoDB; diff --git a/go/test/endtoend/vtgate/queries/multi_query/vschema.json b/go/test/endtoend/vtgate/queries/multi_query/vschema.json new file mode 100644 index 00000000000..289860666d5 --- /dev/null +++ b/go/test/endtoend/vtgate/queries/multi_query/vschema.json @@ -0,0 +1,26 @@ +{ + "sharded": true, + "vindexes": { + "hash": { + "type": "hash" + } + }, + "tables": { + "t2": { + "column_vindexes": [ + { + "column": "id5", + "name": "hash" + } + ] + }, + "t1": { + "column_vindexes": [ + { + "column": "id1", + "name": "hash" + } + ] + } + } +} \ No newline at end of file diff --git a/go/test/endtoend/vtgate/queries/no_scatter/main_test.go b/go/test/endtoend/vtgate/queries/no_scatter/main_test.go index a1478dcd2ac..db99578e286 100644 --- a/go/test/endtoend/vtgate/queries/no_scatter/main_test.go +++ b/go/test/endtoend/vtgate/queries/no_scatter/main_test.go @@ -24,6 +24,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/test/endtoend/cluster" + "vitess.io/vitess/go/vt/utils" ) var ( @@ -58,7 +59,7 @@ func TestMain(m *testing.M) { SchemaSQL: schemaSQL, VSchema: vschema, } - clusterInstance.VtGateExtraArgs = []string{"--no_scatter=true"} + clusterInstance.VtGateExtraArgs = []string{utils.GetFlagVariantForTests("--no-scatter") + "=true"} err = clusterInstance.StartKeyspace(*keyspace, []string{"-80", "80-"}, 0, false) if err != nil { return 1 diff --git a/go/test/endtoend/vtgate/queries/timeout/timeout_test.go b/go/test/endtoend/vtgate/queries/timeout/timeout_test.go index 2877a240092..bfff546d3d3 100644 --- a/go/test/endtoend/vtgate/queries/timeout/timeout_test.go +++ b/go/test/endtoend/vtgate/queries/timeout/timeout_test.go @@ -125,7 +125,7 @@ func TestQueryTimeoutWithShardTargeting(t *testing.T) { for _, query := range queries { t.Run(query, func(t *testing.T) { _, err := utils.ExecAllowError(t, mcmp.VtConn, query) - assert.ErrorContains(t, err, "context deadline exceeded") + // the error message can be different based on VTGate or VTTABLET or grpc error. assert.ErrorContains(t, err, "(errno 1317) (sqlstate 70100)") }) } @@ -198,8 +198,9 @@ func TestOverallQueryTimeout(t *testing.T) { _, err := utils.ExecAllowError(t, mcmp.VtConn, "select /*vt+ QUERY_TIMEOUT_MS=4000 */ sleep(u2.id2), u1.id2 from t1 u1 join t1 u2 where u1.id2 = u2.id1") assert.Error(t, err) // We can get two different error messages based on whether it is coming from vttablet or vtgate + deadLineExceeded := "DeadlineExceeded desc" if !strings.Contains(err.Error(), "Query execution was interrupted, maximum statement execution time exceeded") { - assert.ErrorContains(t, err, "DeadlineExceeded desc = context deadline exceeded (errno 1317) (sqlstate 70100)") + assert.ErrorContains(t, err, deadLineExceeded) } // Let's also check that setting the session variable also works. @@ -207,7 +208,7 @@ func TestOverallQueryTimeout(t *testing.T) { _, err = utils.ExecAllowError(t, mcmp.VtConn, "select sleep(u2.id2), u1.id2 from t1 u1 join t1 u2 where u1.id2 = u2.id1") assert.Error(t, err) if !strings.Contains(err.Error(), "Query execution was interrupted, maximum statement execution time exceeded") { - assert.ErrorContains(t, err, "DeadlineExceeded desc = context deadline exceeded (errno 1317) (sqlstate 70100)") + assert.ErrorContains(t, err, deadLineExceeded) } // Increasing the timeout should pass the query. diff --git a/go/test/endtoend/vtgate/queries/vexplain/vexplain_test.go b/go/test/endtoend/vtgate/queries/vexplain/vexplain_test.go index 1a8ec2b4c37..11fe9d9cb8a 100644 --- a/go/test/endtoend/vtgate/queries/vexplain/vexplain_test.go +++ b/go/test/endtoend/vtgate/queries/vexplain/vexplain_test.go @@ -75,7 +75,7 @@ func TestVtGateVExplain(t *testing.T) { "vexplain queries/all will actually run queries") binaryPrefix := "" - if utils.BinaryIsAtLeastAtVersion(22, "vtgate") { + if utils.BinaryIsAtLeastAtVersion(23, "vtgate") { binaryPrefix = "_binary" } diff --git a/go/test/endtoend/vtgate/readafterwrite/raw_test.go b/go/test/endtoend/vtgate/readafterwrite/raw_test.go index ce6db45d24e..d574890ae45 100644 --- a/go/test/endtoend/vtgate/readafterwrite/raw_test.go +++ b/go/test/endtoend/vtgate/readafterwrite/raw_test.go @@ -28,6 +28,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/test/endtoend/cluster" + vtutils "vitess.io/vitess/go/vt/utils" ) var ( @@ -125,7 +126,7 @@ func TestMain(m *testing.M) { } // Start vtgate - clusterInstance.VtGateExtraArgs = []string{"--lock_heartbeat_time", "2s"} + clusterInstance.VtGateExtraArgs = []string{vtutils.GetFlagVariantForTests("--lock-heartbeat-time"), "2s"} vtgateProcess := clusterInstance.NewVtgateInstance() vtgateProcess.SysVarSetEnabled = true if err := vtgateProcess.Setup(); err != nil { diff --git a/go/test/endtoend/vtgate/reservedconn/main_test.go b/go/test/endtoend/vtgate/reservedconn/main_test.go index 00f569d9eb9..468cb6c9a87 100644 --- a/go/test/endtoend/vtgate/reservedconn/main_test.go +++ b/go/test/endtoend/vtgate/reservedconn/main_test.go @@ -29,6 +29,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/test/endtoend/cluster" + vtutils "vitess.io/vitess/go/vt/utils" ) var ( @@ -124,9 +125,9 @@ func TestMain(m *testing.M) { } // Start vtgate - // This test requires setting the mysql_server_version vtgate flag + // This test requires setting the mysql-server-version vtgate flag // to 5.7 regardless of the actual MySQL version used for the tests. - clusterInstance.VtGateExtraArgs = []string{"--lock_heartbeat_time", "2s", "--mysql_server_version", "5.7.0"} + clusterInstance.VtGateExtraArgs = []string{vtutils.GetFlagVariantForTests("--lock-heartbeat-time"), "2s", vtutils.GetFlagVariantForTests("--mysql-server-version"), "5.7.0"} clusterInstance.VtGatePlannerVersion = querypb.ExecuteOptions_Gen4 if err := clusterInstance.StartVtgate(); err != nil { return 1 diff --git a/go/test/endtoend/vtgate/reservedconn/reconnect1/main_test.go b/go/test/endtoend/vtgate/reservedconn/reconnect1/main_test.go index 3280d64d433..37ce14a7cb0 100644 --- a/go/test/endtoend/vtgate/reservedconn/reconnect1/main_test.go +++ b/go/test/endtoend/vtgate/reservedconn/reconnect1/main_test.go @@ -30,6 +30,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/test/endtoend/cluster" + vtutils "vitess.io/vitess/go/vt/utils" ) var ( @@ -85,7 +86,7 @@ func TestMain(m *testing.M) { } // Start vtgate - clusterInstance.VtGateExtraArgs = []string{"--lock_heartbeat_time", "2s"} + clusterInstance.VtGateExtraArgs = []string{vtutils.GetFlagVariantForTests("--lock-heartbeat-time"), "2s"} if err := clusterInstance.StartVtgate(); err != nil { return 1 } diff --git a/go/test/endtoend/vtgate/reservedconn/reconnect2/main_test.go b/go/test/endtoend/vtgate/reservedconn/reconnect2/main_test.go index 81bb6b90ee5..500e09ddd91 100644 --- a/go/test/endtoend/vtgate/reservedconn/reconnect2/main_test.go +++ b/go/test/endtoend/vtgate/reservedconn/reconnect2/main_test.go @@ -31,6 +31,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/test/endtoend/cluster" + vtutils "vitess.io/vitess/go/vt/utils" ) var ( @@ -87,7 +88,7 @@ func TestMain(m *testing.M) { } // Start vtgate - clusterInstance.VtGateExtraArgs = []string{"--lock_heartbeat_time", "2s"} + clusterInstance.VtGateExtraArgs = []string{vtutils.GetFlagVariantForTests("--lock-heartbeat-time"), "2s"} if err := clusterInstance.StartVtgate(); err != nil { return 1 } diff --git a/go/test/endtoend/vtgate/schema/schema_test.go b/go/test/endtoend/vtgate/schema/schema_test.go index fd84b5b2793..6932aa35119 100644 --- a/go/test/endtoend/vtgate/schema/schema_test.go +++ b/go/test/endtoend/vtgate/schema/schema_test.go @@ -31,6 +31,7 @@ import ( "github.com/stretchr/testify/require" "vitess.io/vitess/go/test/endtoend/cluster" + "vitess.io/vitess/go/vt/utils" ) var ( @@ -68,9 +69,9 @@ func TestMain(m *testing.M) { } clusterInstance.VtctldExtraArgs = []string{ - "--schema_change_dir", schemaChangeDirectory, - "--schema_change_controller", "local", - "--schema_change_check_interval", "1s", + "--schema-change-dir", schemaChangeDirectory, + "--schema-change-controller", "local", + "--schema-change-check-interval", "1s", } if err := clusterInstance.StartTopo(); err != nil { @@ -218,7 +219,7 @@ func testDropNonExistentTables(t *testing.T) { func testCreateInvalidView(t *testing.T) { for _, ddlStrategy := range []string{"direct", "direct -allow-zero-in-date"} { createInvalidView := "CREATE OR REPLACE VIEW invalid_view AS SELECT * FROM nonexistent_table;" - output, err := clusterInstance.VtctldClientProcess.ExecuteCommandWithOutput("ApplySchema", "--ddl-strategy", ddlStrategy, "--sql", createInvalidView, keyspaceName) + output, err := clusterInstance.VtctldClientProcess.ExecuteCommandWithOutput("ApplySchema", utils.GetFlagVariantForTests("--ddl-strategy"), ddlStrategy, "--sql", createInvalidView, keyspaceName) require.Error(t, err) assert.Contains(t, output, "doesn't exist (errno 1146)") } @@ -239,7 +240,7 @@ func testApplySchemaBatch(t *testing.T) { } { sqls := "create table batch1(id int primary key);create table batch2(id int primary key);create table batch3(id int primary key);create table batch4(id int primary key);create table batch5(id int primary key);" - _, err := clusterInstance.VtctldClientProcess.ExecuteCommandWithOutput("ApplySchema", "--ddl-strategy", "direct --allow-zero-in-date", "--sql", sqls, "--batch-size", "2", keyspaceName) + _, err := clusterInstance.VtctldClientProcess.ExecuteCommandWithOutput("ApplySchema", utils.GetFlagVariantForTests("--ddl-strategy"), "direct --allow-zero-in-date", "--sql", sqls, "--batch-size", "2", keyspaceName) require.NoError(t, err) checkTables(t, totalTableCount+5) } @@ -257,12 +258,12 @@ func testUnsafeAllowForeignKeys(t *testing.T) { create table t12 (id int primary key, i int, constraint f1201 foreign key (i) references t11 (id) on delete set null); ` { - _, err := clusterInstance.VtctldClientProcess.ExecuteCommandWithOutput("ApplySchema", "--ddl-strategy", "direct --allow-zero-in-date", "--sql", sqls, keyspaceName) + _, err := clusterInstance.VtctldClientProcess.ExecuteCommandWithOutput("ApplySchema", utils.GetFlagVariantForTests("--ddl-strategy"), "direct --allow-zero-in-date", "--sql", sqls, keyspaceName) assert.Error(t, err) checkTables(t, totalTableCount) } { - _, err := clusterInstance.VtctldClientProcess.ExecuteCommandWithOutput("ApplySchema", "--ddl-strategy", "direct --unsafe-allow-foreign-keys --allow-zero-in-date", "--sql", sqls, keyspaceName) + _, err := clusterInstance.VtctldClientProcess.ExecuteCommandWithOutput("ApplySchema", utils.GetFlagVariantForTests("--ddl-strategy"), "direct --unsafe-allow-foreign-keys --allow-zero-in-date", "--sql", sqls, keyspaceName) require.NoError(t, err) checkTables(t, totalTableCount+2) } diff --git a/go/test/endtoend/vtgate/tablet_healthcheck/reparent_test.go b/go/test/endtoend/vtgate/tablet_healthcheck/reparent_test.go index 77e9a58cf69..4369b0e9036 100644 --- a/go/test/endtoend/vtgate/tablet_healthcheck/reparent_test.go +++ b/go/test/endtoend/vtgate/tablet_healthcheck/reparent_test.go @@ -29,6 +29,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/test/endtoend/cluster" + "vitess.io/vitess/go/vt/utils" ) var ( @@ -107,13 +108,13 @@ func TestMain(m *testing.M) { SchemaSQL: schemaSQL, VSchema: vSchema, } - clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs, []string{"--health_check_interval", "1s"}...) + clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs, []string{utils.GetFlagVariantForTests("--health-check-interval"), "1s"}...) err = clusterInstance.StartKeyspace(*keyspace, shards, 0, false) if err != nil { return 1 } - clusterInstance.VtGateExtraArgs = append(clusterInstance.VtGateExtraArgs, []string{"--tablet_refresh_interval", tabletRefreshInterval.String()}...) + clusterInstance.VtGateExtraArgs = append(clusterInstance.VtGateExtraArgs, []string{utils.GetFlagVariantForTests("--tablet-refresh-interval"), tabletRefreshInterval.String()}...) err = clusterInstance.StartVtgate() if err != nil { return 1 diff --git a/go/test/endtoend/vtgate/tablet_healthcheck_cache/correctness_test.go b/go/test/endtoend/vtgate/tablet_healthcheck_cache/correctness_test.go index 3457a2cab3c..eb011a70bf0 100644 --- a/go/test/endtoend/vtgate/tablet_healthcheck_cache/correctness_test.go +++ b/go/test/endtoend/vtgate/tablet_healthcheck_cache/correctness_test.go @@ -30,6 +30,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/test/endtoend/cluster" + "vitess.io/vitess/go/vt/utils" ) var ( @@ -104,13 +105,13 @@ func TestMain(m *testing.M) { SchemaSQL: schemaSQL, VSchema: vSchema, } - clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs, []string{"--health_check_interval", "1s"}...) + clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs, []string{utils.GetFlagVariantForTests("--health-check-interval"), "1s"}...) err = clusterInstance.StartKeyspace(*keyspace, shards, 1, false) if err != nil { return 1 } - clusterInstance.VtGateExtraArgs = append(clusterInstance.VtGateExtraArgs, []string{"--tablet_refresh_interval", tabletRefreshInterval.String()}...) + clusterInstance.VtGateExtraArgs = append(clusterInstance.VtGateExtraArgs, []string{utils.GetFlagVariantForTests("--tablet-refresh-interval"), tabletRefreshInterval.String()}...) err = clusterInstance.StartVtgate() if err != nil { return 1 @@ -158,7 +159,7 @@ func TestHealthCheckCacheWithTabletChurn(t *testing.T) { deleteTablet(t, tablet) expectedTabletHCcacheEntries-- - // We need to sleep for at least vtgate's --tablet_refresh_interval to be sure we + // We need to sleep for at least vtgate's --tablet-refresh-interval to be sure we // have resynchronized the healthcheck cache with the topo server via the topology // watcher and pruned the deleted tablet from the healthcheck cache. time.Sleep(tabletRefreshInterval) diff --git a/go/test/endtoend/vtgate/unsharded/main_test.go b/go/test/endtoend/vtgate/unsharded/main_test.go index 7fe8b864fd8..feebb3e4065 100644 --- a/go/test/endtoend/vtgate/unsharded/main_test.go +++ b/go/test/endtoend/vtgate/unsharded/main_test.go @@ -34,6 +34,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/test/endtoend/cluster" + vtutils "vitess.io/vitess/go/vt/utils" ) var ( @@ -145,7 +146,16 @@ BEGIN insert into allDefaults(id) values (128); select 128 into val from dual; END; -`} +`, + `CREATE DEFINER=current_user() PROCEDURE with_definer(OUT val int) +BEGIN + insert into allDefaults(id) values (128); + select 128 into val from dual; +END; +`, + `CREATE PROCEDURE p1 (in x BIGINT) BEGIN declare y DECIMAL(14,2); set y = 4.2; END`, + `CREATE PROCEDURE p2 (in x BIGINT) BEGIN START TRANSACTION; SELECT 128 from dual; COMMIT; END`, + } ) func TestMain(m *testing.M) { @@ -173,7 +183,7 @@ func TestMain(m *testing.M) { } // Start vtgate - clusterInstance.VtGateExtraArgs = []string{"--warn_sharded_only=true"} + clusterInstance.VtGateExtraArgs = []string{vtutils.GetFlagVariantForTests("--warn-sharded-only") + "=true"} if err := clusterInstance.StartVtgate(); err != nil { log.Fatal(err.Error()) return 1 diff --git a/go/test/endtoend/vtorc/general/vtorc_test.go b/go/test/endtoend/vtorc/general/vtorc_test.go index 4e6cf8abf16..844085a007d 100644 --- a/go/test/endtoend/vtorc/general/vtorc_test.go +++ b/go/test/endtoend/vtorc/general/vtorc_test.go @@ -31,6 +31,7 @@ import ( "vitess.io/vitess/go/test/endtoend/vtorc/utils" "vitess.io/vitess/go/vt/log" topodatapb "vitess.io/vitess/go/vt/proto/topodata" + vtutils "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtorc/inst" "vitess.io/vitess/go/vt/vtorc/logic" ) @@ -661,7 +662,7 @@ func TestDurabilityPolicySetLater(t *testing.T) { func TestFullStatusConnectionPooling(t *testing.T) { defer utils.PrintVTOrcLogsOnFailure(t, clusterInfo.ClusterInstance) utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 4, 0, []string{ - "--tablet_manager_grpc_concurrency=1", + fmt.Sprintf("%s=1", vtutils.GetFlagVariantForTests("--tablet-manager-grpc-concurrency")), }, cluster.VTOrcConfiguration{ PreventCrossCellFailover: true, }, 1, "") diff --git a/go/test/endtoend/vtorc/primaryfailure/primary_failure_test.go b/go/test/endtoend/vtorc/primaryfailure/primary_failure_test.go index de60420eee3..761ce35e66e 100644 --- a/go/test/endtoend/vtorc/primaryfailure/primary_failure_test.go +++ b/go/test/endtoend/vtorc/primaryfailure/primary_failure_test.go @@ -31,6 +31,7 @@ import ( "vitess.io/vitess/go/test/endtoend/cluster" "vitess.io/vitess/go/test/endtoend/vtorc/utils" + vtutils "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtctl/reparentutil/policy" "vitess.io/vitess/go/vt/vtorc/logic" ) @@ -43,7 +44,7 @@ func TestDownPrimary(t *testing.T) { // We specify the --wait-replicas-timeout to a small value because we spawn a cross-cell replica later in the test. // If that replica is more advanced than the same-cell-replica, then we try to promote the cross-cell replica as an intermediate source. // If we don't specify a small value of --wait-replicas-timeout, then we would end up waiting for 30 seconds for the dead-primary to respond, failing this test. - utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 2, 1, []string{"--remote_operation_timeout=10s", "--wait-replicas-timeout=5s"}, cluster.VTOrcConfiguration{ + utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 2, 1, []string{fmt.Sprintf("%s=10s", vtutils.GetFlagVariantForTests("--remote-operation-timeout")), "--wait-replicas-timeout=5s"}, cluster.VTOrcConfiguration{ PreventCrossCellFailover: true, }, 1, policy.DurabilitySemiSync) keyspace := &clusterInfo.ClusterInstance.Keyspaces[0] @@ -148,7 +149,7 @@ func TestDownPrimaryBeforeVTOrc(t *testing.T) { require.NoError(t, err) // Start a VTOrc instance - utils.StartVTOrcs(t, clusterInfo, []string{"--remote_operation_timeout=10s"}, cluster.VTOrcConfiguration{ + utils.StartVTOrcs(t, clusterInfo, []string{fmt.Sprintf("%s=10s", vtutils.GetFlagVariantForTests("--remote-operation-timeout"))}, cluster.VTOrcConfiguration{ PreventCrossCellFailover: true, }, 1) @@ -171,7 +172,7 @@ func TestDownPrimaryBeforeVTOrc(t *testing.T) { // delete the primary record and let vtorc repair. func TestDeletedPrimaryTablet(t *testing.T) { defer utils.PrintVTOrcLogsOnFailure(t, clusterInfo.ClusterInstance) - utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 2, 1, []string{"--remote_operation_timeout=10s"}, cluster.VTOrcConfiguration{}, 1, policy.DurabilityNone) + utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 2, 1, []string{fmt.Sprintf("%s=10s", vtutils.GetFlagVariantForTests("--remote-operation-timeout"))}, cluster.VTOrcConfiguration{}, 1, policy.DurabilityNone) keyspace := &clusterInfo.ClusterInstance.Keyspaces[0] shard0 := &keyspace.Shards[0] // find primary from topo @@ -240,7 +241,7 @@ func TestDeadPrimaryRecoversImmediately(t *testing.T) { // We specify the --wait-replicas-timeout to a small value because we spawn a cross-cell replica later in the test. // If that replica is more advanced than the same-cell-replica, then we try to promote the cross-cell replica as an intermediate source. // If we don't specify a small value of --wait-replicas-timeout, then we would end up waiting for 30 seconds for the dead-primary to respond, failing this test. - utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 2, 1, []string{"--remote_operation_timeout=10s", "--wait-replicas-timeout=5s"}, cluster.VTOrcConfiguration{ + utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 2, 1, []string{"--remote-operation-timeout=10s", "--wait-replicas-timeout=5s"}, cluster.VTOrcConfiguration{ PreventCrossCellFailover: true, }, 1, policy.DurabilitySemiSync) keyspace := &clusterInfo.ClusterInstance.Keyspaces[0] @@ -309,8 +310,8 @@ func TestDeadPrimaryRecoversImmediately(t *testing.T) { } diff := time2.Sub(time1) fmt.Printf("The difference between %s and %s is %v seconds.\n", t1, t2, diff.Seconds()) - // assert that it takes less than `remote_operation_timeout` to recover from `DeadPrimary` - // use the value provided in `remote_operation_timeout` flag to compare with. + // assert that it takes less than `remote-operation-timeout` to recover from `DeadPrimary` + // use the value provided in `remote-operation-timeout` flag to compare with. // We are testing against 9.5 seconds to be safe and prevent flakiness. assert.Less(t, diff.Seconds(), 9.5) } diff --git a/go/test/endtoend/vtorc/readtopologyinstance/main_test.go b/go/test/endtoend/vtorc/readtopologyinstance/main_test.go index 78e2e556941..581f37c4684 100644 --- a/go/test/endtoend/vtorc/readtopologyinstance/main_test.go +++ b/go/test/endtoend/vtorc/readtopologyinstance/main_test.go @@ -26,6 +26,8 @@ import ( "vitess.io/vitess/go/test/endtoend/vtorc/utils" topodatapb "vitess.io/vitess/go/vt/proto/topodata" "vitess.io/vitess/go/vt/servenv" + + vtutils "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtorc/config" "vitess.io/vitess/go/vt/vtorc/inst" "vitess.io/vitess/go/vt/vtorc/logic" @@ -50,11 +52,21 @@ func TestReadTopologyInstanceBufferable(t *testing.T) { }() // Change the args such that they match how we would invoke VTOrc - os.Args = []string{"vtorc", - "--topo_global_server_address", clusterInfo.ClusterInstance.VtctldClientProcess.TopoGlobalAddress, - "--topo_implementation", clusterInfo.ClusterInstance.VtctldClientProcess.TopoImplementation, - "--topo_global_root", clusterInfo.ClusterInstance.VtctldClientProcess.TopoGlobalRoot, + args := map[string]string{ + "--topo-global-server-address": clusterInfo.ClusterInstance.VtctldClientProcess.TopoGlobalAddress, + "--topo-implementation": clusterInfo.ClusterInstance.VtctldClientProcess.TopoImplementation, + "--topo-global-root": clusterInfo.ClusterInstance.VtctldClientProcess.TopoGlobalRoot, } + + vtutils.SetFlagVariantsForTests(args, "--topo-global-server-address", clusterInfo.ClusterInstance.VtctldClientProcess.TopoGlobalAddress) + vtutils.SetFlagVariantsForTests(args, "--topo-implementation", clusterInfo.ClusterInstance.VtctldClientProcess.TopoImplementation) + vtutils.SetFlagVariantsForTests(args, "--topo-global-root", clusterInfo.ClusterInstance.VtctldClientProcess.TopoGlobalRoot) + + os.Args = []string{"vtorc"} + for k, v := range args { + os.Args = append(os.Args, k, v) + } + servenv.ParseFlags("vtorc") config.SetInstancePollTime(1 * time.Second) config.MarkConfigurationLoaded() diff --git a/go/test/endtoend/vtorc/utils/utils.go b/go/test/endtoend/vtorc/utils/utils.go index 34ef326535b..caca923b1e2 100644 --- a/go/test/endtoend/vtorc/utils/utils.go +++ b/go/test/endtoend/vtorc/utils/utils.go @@ -40,6 +40,7 @@ import ( topodatapb "vitess.io/vitess/go/vt/proto/topodata" "vitess.io/vitess/go/vt/topo" "vitess.io/vitess/go/vt/topo/topoproto" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtctl/reparentutil/policy" // Register topo implementations. @@ -133,7 +134,7 @@ func createVttablets(clusterInstance *cluster.LocalProcessCluster, cellInfos []* } } clusterInstance.VtTabletExtraArgs = []string{ - "--lock_tables_timeout", "5s", + utils.GetFlagVariantForTests("--lock-tables-timeout"), "5s", } // Initialize Cluster shard0.Vttablets = tablets @@ -811,7 +812,7 @@ func SetupNewClusterSemiSync(t *testing.T) *VTOrcClusterInfo { shard.Vttablets = tablets clusterInstance.VtTabletExtraArgs = []string{ - "--lock_tables_timeout", "5s", + utils.GetFlagVariantForTests("--lock-tables-timeout"), "5s", } // Initialize Cluster @@ -885,7 +886,7 @@ func AddSemiSyncKeyspace(t *testing.T, clusterInfo *VTOrcClusterInfo) { clusterInfo.ClusterInstance.VtTabletExtraArgs = oldVttabletArgs }() clusterInfo.ClusterInstance.VtTabletExtraArgs = []string{ - "--lock_tables_timeout", "5s", + utils.GetFlagVariantForTests("--lock-tables-timeout"), "5s", } // Initialize Cluster diff --git a/go/test/fuzzing/vtctl_fuzzer.dict b/go/test/fuzzing/vtctl_fuzzer.dict index a2b61b4ead2..bb253a8cc49 100644 --- a/go/test/fuzzing/vtctl_fuzzer.dict +++ b/go/test/fuzzing/vtctl_fuzzer.dict @@ -44,9 +44,9 @@ "-db_name_override" "-dry-run" "-hostname" -"-mysql_port" +"-mysql-port" "-port" -"-grpc_port" +"-grpc-port" "-tags" "-keyspace" "-shard" diff --git a/go/test/vschemawrapper/vschema_wrapper.go b/go/test/vschemawrapper/vschema_wrapper.go index 9727b598bfe..4a526b434a6 100644 --- a/go/test/vschemawrapper/vschema_wrapper.go +++ b/go/test/vschemawrapper/vschema_wrapper.go @@ -69,7 +69,7 @@ func NewVschemaWrapper( Collation: env.CollationEnv().DefaultConnectionCharset(), DefaultTabletType: topodatapb.TabletType_PRIMARY, SetVarEnabled: true, - }) + }, nil) if err != nil { return nil, err } diff --git a/go/vt/binlog/binlogplayer/binlog_player.go b/go/vt/binlog/binlogplayer/binlog_player.go index 29264cf54b9..c45e8819d89 100644 --- a/go/vt/binlog/binlogplayer/binlog_player.go +++ b/go/vt/binlog/binlogplayer/binlog_player.go @@ -788,9 +788,9 @@ func (r *StatsHistoryRecord) IsDuplicate(other any) bool { return false } -const binlogPlayerProtocolFlagName = "binlog_player_protocol" +const binlogPlayerProtocolFlagName = "binlog-player-protocol" -// SetProtocol is a helper function to set the binlogplayer --binlog_player_protocol +// SetProtocol is a helper function to set the binlogplayer --binlog-player-protocol // flag value for tests. If successful, it returns a function that, when called, // returns the flag to its previous value. // diff --git a/go/vt/binlog/binlogplayer/client.go b/go/vt/binlog/binlogplayer/client.go index 3aaad1a705c..c046999af5d 100644 --- a/go/vt/binlog/binlogplayer/client.go +++ b/go/vt/binlog/binlogplayer/client.go @@ -25,6 +25,7 @@ import ( binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" topodatapb "vitess.io/vitess/go/vt/proto/topodata" "vitess.io/vitess/go/vt/servenv" + vtutils "vitess.io/vitess/go/vt/utils" ) /* @@ -39,7 +40,7 @@ func init() { } func registerFlags(fs *pflag.FlagSet) { - fs.StringVar(&binlogPlayerProtocol, "binlog_player_protocol", binlogPlayerProtocol, "the protocol to download binlogs from a vttablet") + vtutils.SetFlagStringVar(fs, &binlogPlayerProtocol, "binlog-player-protocol", binlogPlayerProtocol, "the protocol to download binlogs from a vttablet") } // BinlogTransactionStream is the interface of the object returned by diff --git a/go/vt/dbconfigs/dbconfigs.go b/go/vt/dbconfigs/dbconfigs.go index 32fb2435286..c1d8bfd868b 100644 --- a/go/vt/dbconfigs/dbconfigs.go +++ b/go/vt/dbconfigs/dbconfigs.go @@ -31,6 +31,7 @@ import ( "vitess.io/vitess/go/vt/log" vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vterrors" "vitess.io/vitess/go/vt/vttls" "vitess.io/vitess/go/yaml2" @@ -130,32 +131,36 @@ func RegisterFlags(userKeys ...string) { } func registerBaseFlags(fs *pflag.FlagSet) { - fs.StringVar(&GlobalDBConfigs.Socket, "db_socket", "", "The unix socket to connect on. If this is specified, host and port will not be used.") - fs.StringVar(&GlobalDBConfigs.Host, "db_host", "", "The host name for the tcp connection.") - fs.IntVar(&GlobalDBConfigs.Port, "db_port", 0, "tcp port") - fs.StringVar(&GlobalDBConfigs.Charset, "db_charset", "utf8mb4", "Character set/collation used for this tablet. Make sure to configure this to a charset/collation supported by the lowest MySQL version in your environment.") - fs.Uint64Var(&GlobalDBConfigs.Flags, "db_flags", 0, "Flag values as defined by MySQL.") - fs.StringVar(&GlobalDBConfigs.Flavor, "db_flavor", "", "Flavor overrid. Valid value is FilePos.") - fs.Var(&GlobalDBConfigs.SslMode, "db_ssl_mode", "SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity.") - fs.StringVar(&GlobalDBConfigs.SslCa, "db_ssl_ca", "", "connection ssl ca") - fs.StringVar(&GlobalDBConfigs.SslCaPath, "db_ssl_ca_path", "", "connection ssl ca path") - fs.StringVar(&GlobalDBConfigs.SslCert, "db_ssl_cert", "", "connection ssl certificate") - fs.StringVar(&GlobalDBConfigs.SslKey, "db_ssl_key", "", "connection ssl key") - fs.StringVar(&GlobalDBConfigs.TLSMinVersion, "db_tls_min_version", "", "Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3.") - fs.StringVar(&GlobalDBConfigs.ServerName, "db_server_name", "", "server name of the DB we are connecting to.") - fs.IntVar(&GlobalDBConfigs.ConnectTimeoutMilliseconds, "db_connect_timeout_ms", 0, "connection timeout to mysqld in milliseconds (0 for no timeout)") - fs.BoolVar(&GlobalDBConfigs.EnableQueryInfo, "db_conn_query_info", false, "enable parsing and processing of QUERY_OK info fields") + + utils.SetFlagStringVar(fs, &GlobalDBConfigs.Socket, "db-socket", "", "The unix socket to connect on. If this is specified, host and port will not be used.") + utils.SetFlagStringVar(fs, &GlobalDBConfigs.Host, "db-host", "", "The host name for the tcp connection.") + utils.SetFlagIntVar(fs, &GlobalDBConfigs.Port, "db-port", 0, "tcp port") + utils.SetFlagStringVar(fs, &GlobalDBConfigs.Charset, "db-charset", "utf8mb4", "Character set/collation used for this tablet. Make sure to configure this to a charset/collation supported by the lowest MySQL version in your environment.") + utils.SetFlagUint64Var(fs, &GlobalDBConfigs.Flags, "db-flags", 0, "Flag values as defined by MySQL.") + utils.SetFlagStringVar(fs, &GlobalDBConfigs.Flavor, "db-flavor", "", "Flavor overrid. Valid value is FilePos.") + utils.SetFlagVar(fs, &GlobalDBConfigs.SslMode, "db-ssl-mode", "SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity.") + utils.SetFlagStringVar(fs, &GlobalDBConfigs.SslCa, "db-ssl-ca", "", "connection ssl ca") + utils.SetFlagStringVar(fs, &GlobalDBConfigs.SslCaPath, "db-ssl-ca-path", "", "connection ssl ca path") + utils.SetFlagStringVar(fs, &GlobalDBConfigs.SslCert, "db-ssl-cert", "", "connection ssl certificate") + utils.SetFlagStringVar(fs, &GlobalDBConfigs.SslKey, "db-ssl-key", "", "connection ssl key") + utils.SetFlagStringVar(fs, &GlobalDBConfigs.TLSMinVersion, "db-tls-min-version", "", "Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3.") + utils.SetFlagStringVar(fs, &GlobalDBConfigs.ServerName, "db-server-name", "", "server name of the DB we are connecting to.") + utils.SetFlagIntVar(fs, &GlobalDBConfigs.ConnectTimeoutMilliseconds, "db-connect-timeout-ms", 0, "connection timeout to mysqld in milliseconds (0 for no timeout)") + utils.SetFlagBoolVar(fs, &GlobalDBConfigs.EnableQueryInfo, "db-conn-query-info", false, "enable parsing and processing of QUERY_OK info fields") } // The flags will change the global singleton func registerPerUserFlags(fs *pflag.FlagSet, userKey string, uc *UserConfig, cp *mysql.ConnParams) { - newUserFlag := "db_" + userKey + "_user" - fs.StringVar(&uc.User, newUserFlag, "vt_"+userKey, "db "+userKey+" user userKey") + newUserFlag := "db-" + userKey + "-user" + utils.SetFlagStringVar(fs, &uc.User, newUserFlag, "vt_"+userKey, "db "+userKey+" user userKey") + // fs.StringVar(&uc.User, newUserFlag, "vt_"+userKey, "db "+userKey+" user userKey") - newPasswordFlag := "db_" + userKey + "_password" - fs.StringVar(&uc.Password, newPasswordFlag, "", "db "+userKey+" password") + newPasswordFlag := "db-" + userKey + "-password" + utils.SetFlagStringVar(fs, &uc.Password, newPasswordFlag, "", "db "+userKey+" password") + // fs.StringVar(&uc.Password, newPasswordFlag, "", "db "+userKey+" password") - fs.BoolVar(&uc.UseSSL, "db_"+userKey+"_use_ssl", true, "Set this flag to false to make the "+userKey+" connection to not use ssl") + utils.SetFlagBoolVar(fs, &uc.UseSSL, "db-"+userKey+"-use-ssl", true, "Set this flag to false to make the "+userKey+" connection to not use ssl") + // fs.BoolVar(&uc.UseSSL, "db_"+userKey+"_use_ssl", true, "Set this flag to false to make the "+userKey+" connection to not use ssl") } // Connector contains Connection Parameters for mysql connection diff --git a/go/vt/discovery/healthcheck.go b/go/vt/discovery/healthcheck.go index 535389f45b1..ef4bc4e4bb7 100644 --- a/go/vt/discovery/healthcheck.go +++ b/go/vt/discovery/healthcheck.go @@ -54,6 +54,7 @@ import ( "vitess.io/vitess/go/netutil" "vitess.io/vitess/go/stats" "vitess.io/vitess/go/vt/log" + "vitess.io/vitess/go/vt/logutil" "vitess.io/vitess/go/vt/proto/query" "vitess.io/vitess/go/vt/proto/topodata" "vitess.io/vitess/go/vt/proto/vtrpc" @@ -61,6 +62,7 @@ import ( "vitess.io/vitess/go/vt/topo" "vitess.io/vitess/go/vt/topo/topoproto" "vitess.io/vitess/go/vt/topotools" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vterrors" "vitess.io/vitess/go/vt/vttablet/queryservice" ) @@ -109,7 +111,7 @@ var ( HealthCheckHealthyTemplate = fmt.Sprintf(healthCheckTemplate, "HealthCheck - Healthy Tablets") // errKeyspacesToWatchAndTabletFilters is an error for cases where incompatible filters are defined. - errKeyspacesToWatchAndTabletFilters = errors.New("only one of --keyspaces_to_watch and --tablet_filters may be specified at a time") + errKeyspacesToWatchAndTabletFilters = errors.New("only one of --keyspaces-to-watch and --tablet_filters may be specified at a time") ) // See the documentation for NewHealthCheck below for an explanation of these parameters. @@ -174,14 +176,15 @@ func init() { func registerDiscoveryFlags(fs *pflag.FlagSet) { fs.StringSliceVar(&tabletFilters, "tablet_filters", []string{}, "Specifies a comma-separated list of 'keyspace|shard_name or keyrange' values to filter the tablets to watch.") fs.Var(&tabletFilterTags, "tablet-filter-tags", "Specifies a comma-separated list of tablet tags (as key:value pairs) to filter the tablets to watch.") - fs.Var((*topoproto.TabletTypeListFlag)(&AllowedTabletTypes), "allowed_tablet_types", "Specifies the tablet types this vtgate is allowed to route queries to. Should be provided as a comma-separated set of tablet types.") - fs.StringSliceVar(&KeyspacesToWatch, "keyspaces_to_watch", []string{}, "Specifies which keyspaces this vtgate should have access to while routing queries or accessing the vschema.") + utils.SetFlagVar(fs, (*topoproto.TabletTypeListFlag)(&AllowedTabletTypes), "allowed-tablet-types", "Specifies the tablet types this vtgate is allowed to route queries to. Should be provided as a comma-separated set of tablet types.") + utils.SetFlagStringSliceVar(fs, &KeyspacesToWatch, "keyspaces-to-watch", []string{}, "Specifies which keyspaces this vtgate should have access to while routing queries or accessing the vschema.") } func registerWebUIFlags(fs *pflag.FlagSet) { - fs.StringVar(&TabletURLTemplateString, "tablet_url_template", "http://{{.GetTabletHostPort}}", "Format string describing debug tablet url formatting. See getTabletDebugURL() for how to customize this.") - fs.DurationVar(&refreshInterval, "tablet_refresh_interval", 1*time.Minute, "Tablet refresh interval.") - fs.BoolVar(&refreshKnownTablets, "tablet_refresh_known_tablets", true, "Whether to reload the tablet's address/port map from topo in case they change.") + utils.SetFlagStringVar(fs, &TabletURLTemplateString, "tablet-url-template", "http://{{.GetTabletHostPort}}", "Format string describing debug tablet url formatting. See getTabletDebugURL() for how to customize this.") + utils.SetFlagDurationVar(fs, &refreshInterval, "tablet-refresh-interval", 1*time.Minute, "Tablet refresh interval.") + utils.SetFlagBoolVar(fs, &refreshKnownTablets, "tablet-refresh-known-tablets", true, "Whether to reload the tablet's address/port map from topo in case they change.") + ParseTabletURLTemplateFromFlag() } @@ -190,8 +193,10 @@ func FilteringKeyspaces() bool { return len(KeyspacesToWatch) > 0 } -type KeyspaceShardTabletType string -type tabletAliasString string +type ( + KeyspaceShardTabletType string + tabletAliasString string +) // HealthCheck declares what the TabletGateway needs from the HealthCheck type HealthCheck interface { @@ -301,6 +306,9 @@ type HealthCheckImpl struct { subscribers map[chan *TabletHealth]string // loadTabletsTrigger is used to immediately load information about tablets of a specific shard. loadTabletsTrigger chan topo.KeyspaceShard + // options contains optional settings used to modify HealthCheckImpl + // behavior. + options Options } // NewVTGateHealthCheckFilters returns healthcheck filters for vtgate. @@ -352,9 +360,9 @@ func NewVTGateHealthCheckFilters() (filters TabletFilters, err error) { // filters. // // Is one or more filters to apply when determining what tablets we want to stream healthchecks from. -func NewHealthCheck(ctx context.Context, retryDelay, healthCheckTimeout time.Duration, topoServer *topo.Server, localCell, cellsToWatch string, filters TabletFilter) *HealthCheckImpl { - log.Infof("loading tablets for cells: %v", cellsToWatch) - +func NewHealthCheck( + ctx context.Context, retryDelay, healthCheckTimeout time.Duration, topoServer *topo.Server, localCell, cellsToWatch string, filters TabletFilter, opts ...Option, +) *HealthCheckImpl { hc := &HealthCheckImpl{ ts: topoServer, cell: localCell, @@ -366,7 +374,11 @@ func NewHealthCheck(ctx context.Context, retryDelay, healthCheckTimeout time.Dur subscribers: make(map[chan *TabletHealth]string), cellAliases: make(map[string]string), loadTabletsTrigger: make(chan topo.KeyspaceShard, 1024), + options: withOptions(opts...), } + + hc.logger().Infof("loading tablets for cells: %v", cellsToWatch) + var topoWatchers []*TopologyWatcher cells := strings.Split(cellsToWatch, ",") if cellsToWatch == "" { @@ -374,11 +386,11 @@ func NewHealthCheck(ctx context.Context, retryDelay, healthCheckTimeout time.Dur } for _, c := range cells { - log.Infof("Setting up healthcheck for cell: %v", c) + hc.logger().Infof("Setting up healthcheck for cell: %v", c) if c == "" { continue } - topoWatchers = append(topoWatchers, NewTopologyWatcher(ctx, topoServer, hc, filters, c, refreshInterval, refreshKnownTablets)) + topoWatchers = append(topoWatchers, NewTopologyWatcher(ctx, topoServer, hc, filters, c, refreshInterval, refreshKnownTablets, opts...)) } hc.topoWatchers = topoWatchers @@ -403,7 +415,7 @@ func (hc *HealthCheckImpl) AddTablet(tablet *topodata.Tablet) { return } - log.Infof("Adding tablet to healthcheck: %v", tablet) + hc.logger().Infof("Adding tablet to healthcheck: %v", tablet) hc.mu.Lock() defer hc.mu.Unlock() if hc.healthByAlias == nil { @@ -421,6 +433,7 @@ func (hc *HealthCheckImpl) AddTablet(tablet *topodata.Tablet) { cancelFunc: cancelFunc, Tablet: tablet, Target: target, + logger: hc.logger(), } // add to our datastore @@ -428,7 +441,7 @@ func (hc *HealthCheckImpl) AddTablet(tablet *topodata.Tablet) { tabletAlias := topoproto.TabletAliasString(tablet.Alias) if _, ok := hc.healthByAlias[tabletAliasString(tabletAlias)]; ok { // We should not add a tablet that we already have - log.Errorf("Program bug: tried to add existing tablet: %v to healthcheck", tabletAlias) + hc.logger().Errorf("Program bug: tried to add existing tablet: %v to healthcheck", tabletAlias) return } hc.healthByAlias[tabletAliasString(tabletAlias)] = thc @@ -456,7 +469,7 @@ func (hc *HealthCheckImpl) ReplaceTablet(old, new *topodata.Tablet) { } func (hc *HealthCheckImpl) deleteTablet(tablet *topodata.Tablet) { - log.Infof("Removing tablet from healthcheck: %v", tablet) + hc.logger().Infof("Removing tablet from healthcheck: %v", tablet) hc.mu.Lock() defer hc.mu.Unlock() @@ -499,7 +512,7 @@ func (hc *HealthCheckImpl) deleteTablet(tablet *topodata.Tablet) { // delete from authoritative map th, ok := hc.healthByAlias[tabletAlias] if !ok { - log.Infof("We have no health data for tablet: %v, it might have been deleted already", tablet) + hc.logger().Infof("We have no health data for tablet: %v, it might have been deleted already", tablet) return } // Calling this will end the context associated with th.checkConn, @@ -518,7 +531,7 @@ func (hc *HealthCheckImpl) updateHealth(th *TabletHealth, prevTarget *query.Targ // so that we're not racing to update it and in effect re-adding a copy of the // tablet record that was deleted if _, ok := hc.healthByAlias[tabletAlias]; !ok { - log.Infof("Tablet %v has been deleted, skipping health update", th.Tablet) + hc.logger().Infof("Tablet %v has been deleted, skipping health update", th.Tablet) return } @@ -543,7 +556,7 @@ func (hc *HealthCheckImpl) updateHealth(th *TabletHealth, prevTarget *query.Targ // causing an interruption where no primary is assigned to the shard. if prevTarget.TabletType == topodata.TabletType_PRIMARY { if primaries := hc.healthData[oldTargetKey]; len(primaries) == 0 { - log.Infof("We will have no health data for the next new primary tablet after demoting the tablet: %v, so start loading tablets now", topotools.TabletIdent(th.Tablet)) + hc.logger().Infof("We will have no health data for the next new primary tablet after demoting the tablet: %v, so start loading tablets now", topotools.TabletIdent(th.Tablet)) // We want to trigger a call to load tablets for this keyspace-shard, // but we want this to be non-blocking to prevent the code from deadlocking as described in https://github.com/vitessio/vitess/issues/16994. // If the buffer is exhausted, then we'll just receive the update when all the tablets are loaded on the ticker. @@ -572,7 +585,7 @@ func (hc *HealthCheckImpl) updateHealth(th *TabletHealth, prevTarget *query.Targ // We already have one up server, see if we // need to replace it. if th.PrimaryTermStartTime < hc.healthy[targetKey][0].PrimaryTermStartTime { - log.Warningf("not marking healthy primary %s as Up for %s because its PrimaryTermStartTime is smaller than the highest known timestamp from previous PRIMARYs %s: %d < %d ", + hc.logger().Warningf("not marking healthy primary %s as Up for %s because its PrimaryTermStartTime is smaller than the highest known timestamp from previous PRIMARYs %s: %d < %d ", topoproto.TabletAliasString(th.Tablet.Alias), topoproto.KeyspaceShardString(th.Target.Keyspace, th.Target.Shard), topoproto.TabletAliasString(hc.healthy[targetKey][0].Tablet.Alias), @@ -609,7 +622,7 @@ func (hc *HealthCheckImpl) updateHealth(th *TabletHealth, prevTarget *query.Targ isNewPrimary := isPrimary && prevTarget.TabletType != topodata.TabletType_PRIMARY if isNewPrimary { - log.Errorf("Adding 1 to PrimaryPromoted counter for target: %v, tablet: %v, tabletType: %v", prevTarget, topoproto.TabletAliasString(th.Tablet.Alias), th.Target.TabletType) + hc.logger().Errorf("Adding 1 to PrimaryPromoted counter for target: %v, tablet: %v, tabletType: %v", prevTarget, topoproto.TabletAliasString(th.Tablet.Alias), th.Target.TabletType) hcPrimaryPromotedCounters.Add([]string{th.Target.Keyspace, th.Target.Shard}, 1) } @@ -666,7 +679,7 @@ func (hc *HealthCheckImpl) broadcast(th *TabletHealth) { default: // If the channel is full, we drop the message. hcChannelFullCounter.Add(1) - log.Warningf("HealthCheck broadcast channel is full for %v, dropping message for %s", subscriber, topotools.TabletIdent(th.Tablet)) + hc.logger().Warningf("HealthCheck broadcast channel is full for %v, dropping message for %s", subscriber, topotools.TabletIdent(th.Tablet)) // Print the stack trace only once. printStack() } @@ -849,7 +862,7 @@ func (hc *HealthCheckImpl) waitForTablets(ctx context.Context, targets []*query. timer.Stop() for _, target := range targets { if target != nil { - log.Infof("couldn't find tablets for target: %v", target) + hc.logger().Infof("couldn't find tablets for target: %v", target) } } return ctx.Err() @@ -977,7 +990,7 @@ func (hc *HealthCheckImpl) ServeHTTP(w http.ResponseWriter, _ *http.Request) { if err != nil { // Error logged if _, err := w.Write([]byte(err.Error())); err != nil { - log.Errorf("write to buffer error failed: %v", err) + hc.logger().Errorf("write to buffer error failed: %v", err) } return @@ -988,7 +1001,7 @@ func (hc *HealthCheckImpl) ServeHTTP(w http.ResponseWriter, _ *http.Request) { // Error logged if _, err := w.Write(buf.Bytes()); err != nil { - log.Errorf("write to buffer bytes failed: %v", err) + hc.logger().Errorf("write to buffer bytes failed: %v", err) } } @@ -1029,6 +1042,11 @@ func (hc *HealthCheckImpl) stateChecksum() int64 { return int64(crc32.ChecksumIEEE(buf.Bytes())) } +// logger returns the logutil.Logger used by the healthcheck. +func (hc *HealthCheckImpl) logger() logutil.Logger { + return hc.options.logger +} + // TabletToMapKey creates a key to the map from tablet's host and ports. // It should only be used in discovery and related module. func TabletToMapKey(tablet *topodata.Tablet) string { diff --git a/go/vt/discovery/options.go b/go/vt/discovery/options.go new file mode 100644 index 00000000000..19847908329 --- /dev/null +++ b/go/vt/discovery/options.go @@ -0,0 +1,67 @@ +/* +Copyright 2025 The Vitess Authors. +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package discovery + +import ( + "vitess.io/vitess/go/vt/logutil" +) + +// Options configure a discovery components. Options are set by the Option +// values passed to the component constructors. +type Options struct { + logger logutil.Logger +} + +// Option configures how we perform certain operations. +type Option interface { + apply(*Options) +} + +// funcOption wraps a function that modifies options into an implementation of +// the Option interface. +type funcOption struct { + f func(*Options) +} + +func defaultOptions() Options { + return Options{ + logger: logutil.NewConsoleLogger(), + } +} + +func withOptions(dos ...Option) Options { + os := defaultOptions() + for _, do := range dos { + do.apply(&os) + } + return os +} + +func (fhco *funcOption) apply(dos *Options) { + fhco.f(dos) +} + +func newFuncOption(f func(*Options)) *funcOption { + return &funcOption{ + f: f, + } +} + +// WithLogger accepts a custom logger to use in a discovery component. If this +// option is not provided then the default system logger will be used. +func WithLogger(l logutil.Logger) Option { + return newFuncOption(func(o *Options) { + o.logger = l + }) +} diff --git a/go/vt/discovery/replicationlag.go b/go/vt/discovery/replicationlag.go index 7814be8ca83..f5cc98fc61a 100644 --- a/go/vt/discovery/replicationlag.go +++ b/go/vt/discovery/replicationlag.go @@ -145,7 +145,7 @@ func IsReplicationLagVeryHigh(tabletHealth *TabletHealth) bool { // One thing to know about this code: vttablet also has a couple flags that impact the logic here: // - unhealthy_threshold: if replication lag is higher than this, a tablet will be reported as unhealthy. // The default for this is 2h, same as the discovery_high_replication_lag_minimum_serving here. -// - degraded_threshold: this is only used by vttablet for display. It should match +// - degraded-threshold: this is only used by vttablet for display. It should match // discovery_low_replication_lag here, so the vttablet status display matches what vtgate will do of it. func FilterStatsByReplicationLag(tabletHealthList []*TabletHealth) []*TabletHealth { if !legacyReplicationLagAlgorithm.Get() { diff --git a/go/vt/discovery/tablet_health_check.go b/go/vt/discovery/tablet_health_check.go index ecadeefdf78..4c6e569cfc5 100644 --- a/go/vt/discovery/tablet_health_check.go +++ b/go/vt/discovery/tablet_health_check.go @@ -25,7 +25,7 @@ import ( "time" "vitess.io/vitess/go/vt/grpcclient" - "vitess.io/vitess/go/vt/log" + "vitess.io/vitess/go/vt/logutil" "vitess.io/vitess/go/vt/proto/vtrpc" "vitess.io/vitess/go/vt/topo/topoproto" "vitess.io/vitess/go/vt/topotools" @@ -71,6 +71,8 @@ type tabletHealthCheck struct { // possibly delete both these loggedServingState bool lastResponseTimestamp time.Time // timestamp of the last healthcheck response + // logger is used to log messages. + logger logutil.Logger } // String is defined because we want to print a []*tabletHealthCheck array nicely. @@ -107,7 +109,7 @@ func (thc *tabletHealthCheck) setServingState(serving bool, reason string) { if !thc.loggedServingState || (serving != thc.Serving) { // Emit the log from a separate goroutine to avoid holding // the th lock while logging is happening - log.Infof("HealthCheckUpdate(Serving State): tablet: %v serving %v => %v for %v/%v (%v) reason: %s", + thc.logger.Infof("HealthCheckUpdate(Serving State): tablet: %v serving %v => %v for %v/%v (%v) reason: %s", topotools.TabletIdent(thc.Tablet), thc.Serving, serving, @@ -294,7 +296,7 @@ func (thc *tabletHealthCheck) checkConn(hc *HealthCheckImpl) { // the healthcheck cache again via the topology watcher. // WARNING: Under no other circumstances should we be deleting the tablet here. if strings.Contains(err.Error(), "health stats mismatch") { - log.Warningf("deleting tablet %v from healthcheck due to health stats mismatch", thc.Tablet) + thc.logger.Warningf("deleting tablet %v from healthcheck due to health stats mismatch", thc.Tablet) hc.deleteTablet(thc.Tablet) return } @@ -331,7 +333,7 @@ func (thc *tabletHealthCheck) checkConn(hc *HealthCheckImpl) { } func (thc *tabletHealthCheck) closeConnection(ctx context.Context, err error) { - log.Warningf("tablet %v healthcheck stream error: %v", thc.Tablet, err) + thc.logger.Warningf("tablet %v healthcheck stream error: %v", thc.Tablet, err) thc.setServingState(false, err.Error()) thc.LastError = err _ = thc.Conn.Close(ctx) diff --git a/go/vt/discovery/topology_watcher.go b/go/vt/discovery/topology_watcher.go index 30e6fc82c07..8966dd33c08 100644 --- a/go/vt/discovery/topology_watcher.go +++ b/go/vt/discovery/topology_watcher.go @@ -29,7 +29,7 @@ import ( "vitess.io/vitess/go/stats" "vitess.io/vitess/go/trace" "vitess.io/vitess/go/vt/key" - "vitess.io/vitess/go/vt/log" + "vitess.io/vitess/go/vt/logutil" topodatapb "vitess.io/vitess/go/vt/proto/topodata" "vitess.io/vitess/go/vt/topo" "vitess.io/vitess/go/vt/topo/topoproto" @@ -84,11 +84,16 @@ type TopologyWatcher struct { firstLoadDone bool // firstLoadChan is closed when the initial load of topology data is complete. firstLoadChan chan struct{} + // options contains optional settings used to modify HealthCheckImpl + // behavior. + options Options } // NewTopologyWatcher returns a TopologyWatcher that monitors all // the tablets in a cell, and reloads them as needed. -func NewTopologyWatcher(ctx context.Context, topoServer *topo.Server, hc HealthCheck, f TabletFilter, cell string, refreshInterval time.Duration, refreshKnownTablets bool) *TopologyWatcher { +func NewTopologyWatcher( + ctx context.Context, topoServer *topo.Server, hc HealthCheck, f TabletFilter, cell string, refreshInterval time.Duration, refreshKnownTablets bool, opts ...Option, +) *TopologyWatcher { tw := &TopologyWatcher{ topoServer: topoServer, healthcheck: hc, @@ -97,6 +102,7 @@ func NewTopologyWatcher(ctx context.Context, topoServer *topo.Server, hc HealthC refreshInterval: refreshInterval, refreshKnownTablets: refreshKnownTablets, tablets: make(map[string]*tabletInfo), + options: withOptions(opts...), } tw.firstLoadChan = make(chan struct{}) @@ -157,12 +163,12 @@ func (tw *TopologyWatcher) Stop() { func (tw *TopologyWatcher) loadTabletsForKeyspaceShard(keyspace string, shard string) { if keyspace == "" || shard == "" { - log.Errorf("topologyWatcher: loadTabletsForKeyspaceShard: keyspace and shard are required") + tw.logger().Errorf("topologyWatcher: loadTabletsForKeyspaceShard: keyspace and shard are required") return } tabletInfos, err := tw.getTabletsByShard(keyspace, shard) if err != nil { - log.Errorf("error getting tablets for keyspace-shard: %v:%v: %v", keyspace, shard, err) + tw.logger().Errorf("error getting tablets for keyspace-shard: %v:%v: %v", keyspace, shard, err) return } // Since we are only reading tablets for a keyspace shard, @@ -179,10 +185,10 @@ func (tw *TopologyWatcher) loadTablets() { topologyWatcherErrors.Add(topologyWatcherOpListTablets, 1) // If we get a partial result error, we just log it and process the tablets that we did manage to fetch. if topo.IsErrType(err, topo.PartialResult) { - log.Errorf("received partial result from getTablets for cell %v: %v", tw.cell, err) + tw.logger().Errorf("received partial result from getTablets for cell %v: %v", tw.cell, err) partialResult = true } else { // For all other errors, just return. - log.Errorf("error getting tablets for cell: %v: %v", tw.cell, err) + tw.logger().Errorf("error getting tablets for cell: %v: %v", tw.cell, err) return } } @@ -298,6 +304,11 @@ func (tw *TopologyWatcher) TopoChecksum() uint32 { return tw.topoChecksum } +// logger returns the logutil.Logger used by the TopologyWatcher. +func (tw *TopologyWatcher) logger() logutil.Logger { + return tw.options.logger +} + // TabletFilter is an interface that can be given to a TopologyWatcher // to be applied as an additional filter on the list of tablets returned by its getTablets function. type TabletFilter interface { @@ -323,6 +334,9 @@ func (tf TabletFilters) IsIncluded(tablet *topodatapb.Tablet) bool { type FilterByShard struct { // filters is a map of keyspace to filters for shards filters map[string][]*filterShard + // options contains optional settings used to modify FilterByShard + // behavior. + options Options } // filterShard describes a filter for a given shard or keyrange inside @@ -331,6 +345,7 @@ type filterShard struct { keyspace string shard string keyRange *topodatapb.KeyRange // only set if shard is also a KeyRange + options Options } // NewFilterByShard creates a new FilterByShard for use by a @@ -338,7 +353,7 @@ type filterShard struct { // can either be a shard name, or a keyrange. All tablets that match // at least one keyspace|shard tuple will be forwarded by the // TopologyWatcher to its consumer. -func NewFilterByShard(filters []string) (*FilterByShard, error) { +func NewFilterByShard(filters []string, opts ...Option) (*FilterByShard, error) { m := make(map[string][]*filterShard) for _, filter := range filters { parts := strings.Split(filter, "|") @@ -369,16 +384,19 @@ func NewFilterByShard(filters []string) (*FilterByShard, error) { }) } - return &FilterByShard{ + fbs := &FilterByShard{ filters: m, - }, nil + options: withOptions(opts...), + } + + return fbs, nil } // IsIncluded returns true iff the tablet's keyspace and shard match what we have. func (fbs *FilterByShard) IsIncluded(tablet *topodatapb.Tablet) bool { canonical, kr, err := topo.ValidateShardName(tablet.Shard) if err != nil { - log.Errorf("Error parsing shard name %v, will ignore tablet: %v", tablet.Shard, err) + fbs.logger().Errorf("Error parsing shard name %v, will ignore tablet: %v", tablet.Shard, err) return false } @@ -395,6 +413,11 @@ func (fbs *FilterByShard) IsIncluded(tablet *topodatapb.Tablet) bool { return false } +// logger returns the logutil.Logger used by the FilterByShard. +func (fbs *FilterByShard) logger() logutil.Logger { + return fbs.options.logger +} + // FilterByKeyspace is a filter that filters tablets by keyspace. type FilterByKeyspace struct { keyspaces map[string]bool diff --git a/go/vt/grpcclient/client.go b/go/vt/grpcclient/client.go index 3ffbd2e69fd..b5a812e8b7b 100644 --- a/go/vt/grpcclient/client.go +++ b/go/vt/grpcclient/client.go @@ -38,6 +38,7 @@ import ( "vitess.io/vitess/go/vt/grpccommon" "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vttls" ) @@ -71,17 +72,18 @@ var ( ) func RegisterFlags(fs *pflag.FlagSet) { - fs.DurationVar(&keepaliveTime, "grpc_keepalive_time", keepaliveTime, "After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive.") - fs.DurationVar(&keepaliveTimeout, "grpc_keepalive_timeout", keepaliveTimeout, "After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed.") - fs.IntVar(&initialConnWindowSize, "grpc_initial_conn_window_size", initialConnWindowSize, "gRPC initial connection window size") - fs.IntVar(&initialWindowSize, "grpc_initial_window_size", initialWindowSize, "gRPC initial window size") - fs.StringVar(&compression, "grpc_compression", compression, "Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy") - fs.StringVar(&credsFile, "grpc_auth_static_client_creds", credsFile, "When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server.") + utils.SetFlagDurationVar(fs, &keepaliveTime, "grpc-keepalive-time", keepaliveTime, "After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive.") + utils.SetFlagDurationVar(fs, &keepaliveTimeout, "grpc-keepalive-timeout", keepaliveTimeout, "After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed.") + utils.SetFlagIntVar(fs, &initialConnWindowSize, "grpc-initial-conn-window-size", initialConnWindowSize, "gRPC initial connection window size") + utils.SetFlagIntVar(fs, &initialWindowSize, "grpc-initial-window-size", initialWindowSize, "gRPC initial window size") + utils.SetFlagStringVar(fs, &compression, "grpc-compression", compression, "Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy") + + utils.SetFlagStringVar(fs, &credsFile, "grpc-auth-static-client-creds", credsFile, "When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server.") } func RegisterDialConcurrencyFlags(fs *pflag.FlagSet) { - fs.Int64Var(&dialConcurrencyLimit, "grpc-dial-concurrency-limit", 1024, "Maximum concurrency of grpc dial operations. This should be less than the golang max thread limit of 10000.") + utils.SetFlagInt64Var(fs, &dialConcurrencyLimit, "grpc-dial-concurrency-limit", 1024, "Maximum concurrency of grpc dial operations. This should be less than the golang max thread limit of 10000.") } func init() { diff --git a/go/vt/grpcclient/client_auth_static.go b/go/vt/grpcclient/client_auth_static.go index bbb91a9fa55..e46e6fd89bc 100644 --- a/go/vt/grpcclient/client_auth_static.go +++ b/go/vt/grpcclient/client_auth_static.go @@ -31,7 +31,7 @@ import ( ) var ( - credsFile string // registered as --grpc_auth_static_client_creds in RegisterFlags + credsFile string // registered as --grpc-auth-static-client-creds in RegisterFlags // StaticAuthClientCreds implements client interface to be able to WithPerRPCCredentials _ credentials.PerRPCCredentials = (*StaticAuthClientCreds)(nil) diff --git a/go/vt/grpcclient/client_test.go b/go/vt/grpcclient/client_test.go index 369ec8da17b..336b4f16769 100644 --- a/go/vt/grpcclient/client_test.go +++ b/go/vt/grpcclient/client_test.go @@ -31,6 +31,7 @@ import ( vtgatepb "vitess.io/vitess/go/vt/proto/vtgate" vtgateservicepb "vitess.io/vitess/go/vt/proto/vtgateservice" + "vitess.io/vitess/go/vt/utils" ) func TestDialErrors(t *testing.T) { @@ -92,8 +93,21 @@ func TestRegisterGRPCClientFlags(t *testing.T) { require.Equal(t, "", compression) require.Equal(t, "", credsFile) + // Use SetFlagVariantsForTests to randomly pick dashed or underscored keys. + flagMap := map[string]string{} + utils.SetFlagVariantsForTests(flagMap, "--grpc-keepalive-time", "5s") + utils.SetFlagVariantsForTests(flagMap, "--grpc-keepalive-timeout", "5s") + utils.SetFlagVariantsForTests(flagMap, "--grpc-initial-conn-window-size", "10") + utils.SetFlagVariantsForTests(flagMap, "--grpc-initial-window-size", "10") + utils.SetFlagVariantsForTests(flagMap, "--grpc-compression", "not-snappy") + utils.SetFlagVariantsForTests(flagMap, "--grpc-auth-static-client-creds", "tempfile") + // Test setting flags from command-line arguments - os.Args = []string{"test", "--grpc_keepalive_time=5s", "--grpc_keepalive_timeout=5s", "--grpc_initial_conn_window_size=10", "--grpc_initial_window_size=10", "--grpc_compression=not-snappy", "--grpc_auth_static_client_creds=tempfile"} + args := []string{"test"} + for k, v := range flagMap { + args = append(args, k+"="+v) + } + os.Args = args err := fs.Parse(os.Args[1:]) require.NoError(t, err) diff --git a/go/vt/grpccommon/options.go b/go/vt/grpccommon/options.go index 7013b95b95a..bd400321812 100644 --- a/go/vt/grpccommon/options.go +++ b/go/vt/grpccommon/options.go @@ -21,6 +21,7 @@ import ( "google.golang.org/grpc" "vitess.io/vitess/go/stats" + "vitess.io/vitess/go/vt/utils" ) var ( @@ -38,17 +39,17 @@ var ( // calls this function, or call this function directly before parsing // command-line arguments. func RegisterFlags(fs *pflag.FlagSet) { - fs.IntVar(&maxMessageSize, "grpc_max_message_size", maxMessageSize, "Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'.") - fs.BoolVar(&grpc.EnableTracing, "grpc_enable_tracing", grpc.EnableTracing, "Enable gRPC tracing.") - fs.BoolVar(&enablePrometheus, "grpc_prometheus", enablePrometheus, "Enable gRPC monitoring with Prometheus.") + utils.SetFlagIntVar(fs, &maxMessageSize, "grpc-max-message-size", maxMessageSize, "Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'.") + utils.SetFlagBoolVar(fs, &grpc.EnableTracing, "grpc-enable-tracing", grpc.EnableTracing, "Enable gRPC tracing.") + utils.SetFlagBoolVar(fs, &enablePrometheus, "grpc-prometheus", enablePrometheus, "Enable gRPC monitoring with Prometheus.") } -// EnableGRPCPrometheus returns the value of the --grpc_prometheus flag. +// EnableGRPCPrometheus returns the value of the --grpc-prometheus flag. func EnableGRPCPrometheus() bool { return enablePrometheus } -// MaxMessageSize returns the value of the --grpc_max_message_size flag. +// MaxMessageSize returns the value of the --grpc-max-message-size flag. func MaxMessageSize() int { return maxMessageSize } diff --git a/go/vt/log/log.go b/go/vt/log/log.go index fb0c90bbb1c..67746d906b6 100644 --- a/go/vt/log/log.go +++ b/go/vt/log/log.go @@ -28,6 +28,8 @@ import ( "github.com/golang/glog" "github.com/spf13/pflag" + + "vitess.io/vitess/go/vt/utils" ) // Level is used with V() to test log verbosity. @@ -85,7 +87,7 @@ func RegisterFlags(fs *pflag.FlagSet) { flagVal := logRotateMaxSize{ val: fmt.Sprintf("%d", atomic.LoadUint64(&glog.MaxSize)), } - fs.Var(&flagVal, "log_rotate_max_size", "size in bytes at which logs are rotated (glog.MaxSize)") + utils.SetFlagVar(fs, &flagVal, "log-rotate-max-size", "size in bytes at which logs are rotated (glog.MaxSize)") } // logRotateMaxSize implements pflag.Value and is used to diff --git a/go/vt/logutil/purge.go b/go/vt/logutil/purge.go index 8d85e15c5c9..c83f6a3081a 100644 --- a/go/vt/logutil/purge.go +++ b/go/vt/logutil/purge.go @@ -27,6 +27,7 @@ import ( "github.com/spf13/pflag" _flag "vitess.io/vitess/go/internal/flag" + "vitess.io/vitess/go/vt/utils" ) var ( @@ -41,9 +42,9 @@ var ( // calls this function, or call this function directly before parsing // command-line arguments. func RegisterFlags(fs *pflag.FlagSet) { - fs.DurationVar(&keepLogsByCtime, "keep_logs", keepLogsByCtime, "keep logs for this long (using ctime) (zero to keep forever)") - fs.DurationVar(&keepLogsByMtime, "keep_logs_by_mtime", keepLogsByMtime, "keep logs for this long (using mtime) (zero to keep forever)") - fs.DurationVar(&purgeLogsInterval, "purge_logs_interval", purgeLogsInterval, "how often try to remove old logs") + utils.SetFlagDurationVar(fs, &keepLogsByCtime, "keep-logs", keepLogsByCtime, "keep logs for this long (using ctime) (zero to keep forever)") + utils.SetFlagDurationVar(fs, &keepLogsByMtime, "keep-logs-by-mtime", keepLogsByMtime, "keep logs for this long (using mtime) (zero to keep forever)") + utils.SetFlagDurationVar(fs, &purgeLogsInterval, "purge-logs-interval", purgeLogsInterval, "how often try to remove old logs") } // parse parses a file name (as used by glog) and returns its process diff --git a/go/vt/mysqlctl/azblobbackupstorage/azblob.go b/go/vt/mysqlctl/azblobbackupstorage/azblob.go index dbd146495e8..583e695f02f 100644 --- a/go/vt/mysqlctl/azblobbackupstorage/azblob.go +++ b/go/vt/mysqlctl/azblobbackupstorage/azblob.go @@ -33,6 +33,7 @@ import ( "github.com/spf13/pflag" "vitess.io/vitess/go/vt/mysqlctl/errors" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/viperutil" "vitess.io/vitess/go/vt/log" @@ -46,7 +47,7 @@ var ( configKey("account.name"), viperutil.Options[string]{ EnvVars: []string{"VT_AZBLOB_ACCOUNT_NAME"}, - FlagName: "azblob_backup_account_name", + FlagName: "azblob-backup-account-name", }, ) @@ -54,7 +55,7 @@ var ( accountKeyFile = viperutil.Configure( configKey("account.key_file"), viperutil.Options[string]{ - FlagName: "azblob_backup_account_key_file", + FlagName: "azblob-backup-account-key-file", }, ) @@ -62,7 +63,7 @@ var ( containerName = viperutil.Configure( configKey("container_name"), viperutil.Options[string]{ - FlagName: "azblob_backup_container_name", + FlagName: "azblob-backup-container-name", }, ) @@ -70,12 +71,12 @@ var ( storageRoot = viperutil.Configure( configKey("storage_root"), viperutil.Options[string]{ - FlagName: "azblob_backup_storage_root", + FlagName: "azblob-backup-storage-root", }, ) azBlobBufferSize = viperutil.Configure( - configKey("buffer_size"), + configKey("buffer-size"), viperutil.Options[int]{ Default: 100 << (10 * 2), // 100 MiB FlagName: "azblob_buffer_size", @@ -86,7 +87,7 @@ var ( configKey("parallelism"), viperutil.Options[int]{ Default: 1, - FlagName: "azblob_backup_parallelism", + FlagName: "azblob-backup-parallelism", }, ) ) @@ -96,12 +97,19 @@ const configKeyPrefix = "backup.storage.azblob" var configKey = viperutil.KeyPrefixFunc(configKeyPrefix) func registerFlags(fs *pflag.FlagSet) { - fs.String("azblob_backup_account_name", accountName.Default(), "Azure Storage Account name for backups; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_NAME will be used.") - fs.String("azblob_backup_account_key_file", accountKeyFile.Default(), "Path to a file containing the Azure Storage account key; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_KEY will be used as the key itself (NOT a file path).") - fs.String("azblob_backup_container_name", containerName.Default(), "Azure Blob Container Name.") - fs.String("azblob_backup_storage_root", storageRoot.Default(), "Root prefix for all backup-related Azure Blobs; this should exclude both initial and trailing '/' (e.g. just 'a/b' not '/a/b/').") - fs.Int("azblob_backup_buffer_size", azBlobBufferSize.Default(), "The memory buffer size to use in bytes, per file or stripe, when streaming to Azure Blob Service.") - fs.Int("azblob_backup_parallelism", azBlobParallelism.Default(), "Azure Blob operation parallelism (requires extra memory when increased -- a multiple of azblob_backup_buffer_size).") + accountNameValue := accountName.Get() + accountKeyFileValue := accountKeyFile.Get() + containerNameValue := containerName.Get() + storageRootValue := storageRoot.Get() + azBlobBufferSizeValue := azBlobBufferSize.Get() + azBlobParallelismValue := azBlobParallelism.Get() + + utils.SetFlagStringVar(fs, &accountNameValue, "azblob-backup-account-name", accountName.Default(), "Azure Storage Account name for backups; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_NAME will be used.") + utils.SetFlagStringVar(fs, &accountKeyFileValue, "azblob-backup-account-key-file", accountKeyFile.Default(), "Path to a file containing the Azure Storage account key; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_KEY will be used as the key itself (NOT a file path).") + utils.SetFlagStringVar(fs, &containerNameValue, "azblob-backup-container-name", containerName.Default(), "Azure Blob Container Name.") + utils.SetFlagStringVar(fs, &storageRootValue, "azblob-backup-storage-root", storageRoot.Default(), "Root prefix for all backup-related Azure Blobs; this should exclude both initial and trailing '/' (e.g. just 'a/b' not '/a/b/').") + utils.SetFlagIntVar(fs, &azBlobBufferSizeValue, "azblob-backup-buffer-size", azBlobBufferSize.Default(), "The memory buffer size to use in bytes, per file or stripe, when streaming to Azure Blob Service.") + utils.SetFlagIntVar(fs, &azBlobParallelismValue, "azblob-backup-parallelism", azBlobParallelism.Default(), "Azure Blob operation parallelism (requires extra memory when increased -- a multiple of azblob-backup-buffer-size).") viperutil.BindFlags(fs, accountName, accountKeyFile, containerName, storageRoot, azBlobParallelism) } @@ -120,7 +128,7 @@ const ( // Return a Shared credential from the available credential sources. // We will use credentials in the following order -// 1. Direct Command Line Flag (azblob_backup_account_name, azblob_backup_account_key) +// 1. Direct Command Line Flag (azblob-backup-account-name, azblob-backup-account-key) // 2. Environment variables func azInternalCredentials() (string, string, error) { actName := accountName.Get() @@ -449,7 +457,7 @@ func (bs *AZBlobBackupStorage) WithParams(params backupstorage.Params) backupsto // objName joins path parts into an object name. // Unlike path.Join, it doesn't collapse ".." or strip trailing slashes. -// It also adds the value of the -azblob_backup_storage_root flag if set. +// It also adds the value of the -azblob-backup-storage-root flag if set. func objName(parts ...string) string { if root := storageRoot.Get(); root != "" { return root + "/" + strings.Join(parts, "/") diff --git a/go/vt/mysqlctl/backup.go b/go/vt/mysqlctl/backup.go index 1cde68b28b7..99b9a6fc748 100644 --- a/go/vt/mysqlctl/backup.go +++ b/go/vt/mysqlctl/backup.go @@ -37,6 +37,7 @@ import ( "vitess.io/vitess/go/vt/proto/vtrpc" "vitess.io/vitess/go/vt/servenv" "vitess.io/vitess/go/vt/topo/topoproto" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vterrors" topodatapb "vitess.io/vitess/go/vt/proto/topodata" @@ -112,9 +113,9 @@ func ParseBinlogTimestamp(timestamp string) (time.Time, error) { } func registerBackupFlags(fs *pflag.FlagSet) { - fs.BoolVar(&backupStorageCompress, "backup_storage_compress", backupStorageCompress, "if set, the backup files will be compressed.") - fs.IntVar(&backupCompressBlockSize, "backup_storage_block_size", backupCompressBlockSize, "if backup_storage_compress is true, backup_storage_block_size sets the byte size for each block while compressing (default is 250000).") - fs.IntVar(&backupCompressBlocks, "backup_storage_number_blocks", backupCompressBlocks, "if backup_storage_compress is true, backup_storage_number_blocks sets the number of blocks that can be processed, in parallel, before the writer blocks, during compression (default is 2). It should be equal to the number of CPUs available for compression.") + utils.SetFlagBoolVar(fs, &backupStorageCompress, "backup-storage-compress", backupStorageCompress, "if set, the backup files will be compressed.") + utils.SetFlagIntVar(fs, &backupCompressBlockSize, "backup-storage-block-size", backupCompressBlockSize, "if backup-storage-compress is true, backup-storage-block-size sets the byte size for each block while compressing (default is 250000).") + utils.SetFlagIntVar(fs, &backupCompressBlocks, "backup-storage-number-blocks", backupCompressBlocks, "if backup-storage-compress is true, backup-storage-number-blocks sets the number of blocks that can be processed, in parallel, before the writer blocks, during compression (default is 2). It should be equal to the number of CPUs available for compression.") } // Backup is the main entry point for a backup: diff --git a/go/vt/mysqlctl/backupengine.go b/go/vt/mysqlctl/backupengine.go index c5700a3cfd4..55ee19ec8f2 100644 --- a/go/vt/mysqlctl/backupengine.go +++ b/go/vt/mysqlctl/backupengine.go @@ -39,6 +39,7 @@ import ( "vitess.io/vitess/go/vt/proto/vtrpc" "vitess.io/vitess/go/vt/servenv" "vitess.io/vitess/go/vt/topo" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vterrors" ) @@ -211,7 +212,7 @@ func isIncrementalBackup(params BackupParams) bool { } func registerBackupEngineFlags(fs *pflag.FlagSet) { - fs.StringVar(&backupEngineImplementation, "backup_engine_implementation", backupEngineImplementation, "Specifies which implementation to use for creating new backups (builtin or xtrabackup). Restores will always be done with whichever engine created a given backup.") + utils.SetFlagStringVar(fs, &backupEngineImplementation, "backup-engine-implementation", backupEngineImplementation, "Specifies which implementation to use for creating new backups (builtin or xtrabackup). Restores will always be done with whichever engine created a given backup.") } // GetBackupEngine returns the BackupEngine implementation that should be used diff --git a/go/vt/mysqlctl/backupstorage/interface.go b/go/vt/mysqlctl/backupstorage/interface.go index 4fd37b3163a..917256b865d 100644 --- a/go/vt/mysqlctl/backupstorage/interface.go +++ b/go/vt/mysqlctl/backupstorage/interface.go @@ -26,6 +26,7 @@ import ( "github.com/spf13/pflag" "vitess.io/vitess/go/vt/mysqlctl/errors" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/servenv" ) @@ -41,7 +42,7 @@ var ( ) func registerBackupFlags(fs *pflag.FlagSet) { - fs.StringVar(&BackupStorageImplementation, "backup_storage_implementation", "", "Which backup storage implementation to use for creating and restoring backups.") + utils.SetFlagStringVar(fs, &BackupStorageImplementation, "backup-storage-implementation", "", "Which backup storage implementation to use for creating and restoring backups.") } func init() { diff --git a/go/vt/mysqlctl/builtinbackupengine.go b/go/vt/mysqlctl/builtinbackupengine.go index 491a2f2b35c..b5efdec77bb 100644 --- a/go/vt/mysqlctl/builtinbackupengine.go +++ b/go/vt/mysqlctl/builtinbackupengine.go @@ -48,6 +48,7 @@ import ( "vitess.io/vitess/go/vt/servenv" "vitess.io/vitess/go/vt/topo" "vitess.io/vitess/go/vt/topo/topoproto" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vterrors" "vitess.io/vitess/go/vt/vttablet/tmclient" @@ -167,8 +168,8 @@ func init() { } func registerBuiltinBackupEngineFlags(fs *pflag.FlagSet) { - fs.DurationVar(&BuiltinBackupMysqldTimeout, "builtinbackup_mysqld_timeout", BuiltinBackupMysqldTimeout, "how long to wait for mysqld to shutdown at the start of the backup.") - fs.DurationVar(&builtinBackupProgress, "builtinbackup_progress", builtinBackupProgress, "how often to send progress updates when backing up large files.") + utils.SetFlagDurationVar(fs, &BuiltinBackupMysqldTimeout, "builtinbackup-mysqld-timeout", BuiltinBackupMysqldTimeout, "how long to wait for mysqld to shutdown at the start of the backup.") + utils.SetFlagDurationVar(fs, &builtinBackupProgress, "builtinbackup-progress", builtinBackupProgress, "how often to send progress updates when backing up large files.") fs.UintVar(&builtinBackupFileReadBufferSize, "builtinbackup-file-read-buffer-size", builtinBackupFileReadBufferSize, "read files using an IO buffer of this many bytes. Golang defaults are used when set to 0.") fs.UintVar(&builtinBackupFileWriteBufferSize, "builtinbackup-file-write-buffer-size", builtinBackupFileWriteBufferSize, "write files using an IO buffer of this many bytes. Golang defaults are used when set to 0.") fs.StringVar(&builtinIncrementalRestorePath, "builtinbackup-incremental-restore-path", builtinIncrementalRestorePath, "the directory where incremental restore files, namely binlog files, are extracted to. In k8s environments, this should be set to a directory that is shared between the vttablet and mysqld pods. The path should exist. When empty, the default OS temp dir is assumed.") diff --git a/go/vt/mysqlctl/cephbackupstorage/ceph.go b/go/vt/mysqlctl/cephbackupstorage/ceph.go index 746794753ef..9bbb5d02e34 100644 --- a/go/vt/mysqlctl/cephbackupstorage/ceph.go +++ b/go/vt/mysqlctl/cephbackupstorage/ceph.go @@ -33,6 +33,7 @@ import ( "github.com/spf13/pflag" "vitess.io/vitess/go/vt/mysqlctl/backupstorage" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/log" errorsbackup "vitess.io/vitess/go/vt/mysqlctl/errors" @@ -45,7 +46,7 @@ var ( ) func registerFlags(fs *pflag.FlagSet) { - fs.StringVar(&configFilePath, "ceph_backup_storage_config", "ceph_backup_config.json", + utils.SetFlagStringVar(fs, &configFilePath, "ceph-backup-storage-config", "ceph_backup_config.json", "Path to JSON config file for ceph backup storage.") } diff --git a/go/vt/mysqlctl/gcsbackupstorage/gcs.go b/go/vt/mysqlctl/gcsbackupstorage/gcs.go index adecbb9bbba..8d88eb176c4 100644 --- a/go/vt/mysqlctl/gcsbackupstorage/gcs.go +++ b/go/vt/mysqlctl/gcsbackupstorage/gcs.go @@ -33,6 +33,7 @@ import ( "google.golang.org/api/option" "vitess.io/vitess/go/vt/mysqlctl/errors" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/trace" "vitess.io/vitess/go/vt/mysqlctl/backupstorage" @@ -48,8 +49,8 @@ var ( ) func registerFlags(fs *pflag.FlagSet) { - fs.StringVar(&bucket, "gcs_backup_storage_bucket", "", "Google Cloud Storage bucket to use for backups.") - fs.StringVar(&root, "gcs_backup_storage_root", "", "Root prefix for all backup-related object names.") + utils.SetFlagStringVar(fs, &bucket, "gcs-backup-storage-bucket", "", "Google Cloud Storage bucket to use for backups.") + utils.SetFlagStringVar(fs, &root, "gcs-backup-storage-root", "", "Root prefix for all backup-related object names.") } func init() { @@ -271,7 +272,7 @@ func (bs *GCSBackupStorage) client(ctx context.Context) (*storage.Client, error) // objName joins path parts into an object name. // Unlike path.Join, it doesn't collapse ".." or strip trailing slashes. -// It also adds the value of the --gcs_backup_storage_root flag if set. +// It also adds the value of the --gcs-backup-storage-root flag if set. func objName(parts ...string) string { if root != "" { return root + "/" + strings.Join(parts, "/") diff --git a/go/vt/mysqlctl/mycnf_flag.go b/go/vt/mysqlctl/mycnf_flag.go index 8559e5c1431..70d5c601916 100644 --- a/go/vt/mysqlctl/mycnf_flag.go +++ b/go/vt/mysqlctl/mycnf_flag.go @@ -23,6 +23,7 @@ import ( "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" ) // This file handles using command line flags to create a Mycnf object. @@ -62,23 +63,23 @@ const ( // to get the supported modes. func RegisterFlags() { servenv.OnParse(func(fs *pflag.FlagSet) { - fs.IntVar(&flagServerID, "mycnf_server_id", flagServerID, "mysql server id of the server (if specified, mycnf-file will be ignored)") - fs.IntVar(&flagMysqlPort, "mycnf_mysql_port", flagMysqlPort, "port mysql is listening on") - fs.StringVar(&flagDataDir, "mycnf_data_dir", flagDataDir, "data directory for mysql") - fs.StringVar(&flagInnodbDataHomeDir, "mycnf_innodb_data_home_dir", flagInnodbDataHomeDir, "Innodb data home directory") - fs.StringVar(&flagInnodbLogGroupHomeDir, "mycnf_innodb_log_group_home_dir", flagInnodbLogGroupHomeDir, "Innodb log group home directory") - fs.StringVar(&flagSocketFile, "mycnf_socket_file", flagSocketFile, "mysql socket file") - fs.StringVar(&flagGeneralLogPath, "mycnf_general_log_path", flagGeneralLogPath, "mysql general log path") - fs.StringVar(&flagErrorLogPath, "mycnf_error_log_path", flagErrorLogPath, "mysql error log path") - fs.StringVar(&flagSlowLogPath, "mycnf_slow_log_path", flagSlowLogPath, "mysql slow query log path") - fs.StringVar(&flagRelayLogPath, "mycnf_relay_log_path", flagRelayLogPath, "mysql relay log path") - fs.StringVar(&flagRelayLogIndexPath, "mycnf_relay_log_index_path", flagRelayLogIndexPath, "mysql relay log index path") - fs.StringVar(&flagRelayLogInfoPath, "mycnf_relay_log_info_path", flagRelayLogInfoPath, "mysql relay log info path") - fs.StringVar(&flagBinLogPath, "mycnf_bin_log_path", flagBinLogPath, "mysql binlog path") - fs.StringVar(&flagMasterInfoFile, "mycnf_master_info_file", flagMasterInfoFile, "mysql master.info file") - fs.StringVar(&flagPidFile, "mycnf_pid_file", flagPidFile, "mysql pid file") - fs.StringVar(&flagTmpDir, "mycnf_tmp_dir", flagTmpDir, "mysql tmp directory") - fs.StringVar(&flagSecureFilePriv, "mycnf_secure_file_priv", flagSecureFilePriv, "mysql path for loading secure files") + utils.SetFlagIntVar(fs, &flagServerID, "mycnf-server-id", flagServerID, "mysql server id of the server (if specified, mycnf-file will be ignored)") + utils.SetFlagIntVar(fs, &flagMysqlPort, "mycnf-mysql-port", flagMysqlPort, "port mysql is listening on") + utils.SetFlagStringVar(fs, &flagDataDir, "mycnf-data-dir", flagDataDir, "data directory for mysql") + utils.SetFlagStringVar(fs, &flagInnodbDataHomeDir, "mycnf-innodb-data-home-dir", flagInnodbDataHomeDir, "Innodb data home directory") + utils.SetFlagStringVar(fs, &flagInnodbLogGroupHomeDir, "mycnf-innodb-log-group-home-dir", flagInnodbLogGroupHomeDir, "Innodb log group home directory") + utils.SetFlagStringVar(fs, &flagSocketFile, "mycnf-socket-file", flagSocketFile, "mysql socket file") + utils.SetFlagStringVar(fs, &flagGeneralLogPath, "mycnf-general-log-path", flagGeneralLogPath, "mysql general log path") + utils.SetFlagStringVar(fs, &flagErrorLogPath, "mycnf-error-log-path", flagErrorLogPath, "mysql error log path") + utils.SetFlagStringVar(fs, &flagSlowLogPath, "mycnf-slow-log-path", flagSlowLogPath, "mysql slow query log path") + utils.SetFlagStringVar(fs, &flagRelayLogPath, "mycnf-relay-log-path", flagRelayLogPath, "mysql relay log path") + utils.SetFlagStringVar(fs, &flagRelayLogIndexPath, "mycnf-relay-log-index-path", flagRelayLogIndexPath, "mysql relay log index path") + utils.SetFlagStringVar(fs, &flagRelayLogInfoPath, "mycnf-relay-log-info-path", flagRelayLogInfoPath, "mysql relay log info path") + utils.SetFlagStringVar(fs, &flagBinLogPath, "mycnf-bin-log-path", flagBinLogPath, "mysql binlog path") + utils.SetFlagStringVar(fs, &flagMasterInfoFile, "mycnf-master-info-file", flagMasterInfoFile, "mysql master.info file") + utils.SetFlagStringVar(fs, &flagPidFile, "mycnf-pid-file", flagPidFile, "mysql pid file") + utils.SetFlagStringVar(fs, &flagTmpDir, "mycnf-tmp-dir", flagTmpDir, "mysql tmp directory") + utils.SetFlagStringVar(fs, &flagSecureFilePriv, "mycnf-secure-file-priv", flagSecureFilePriv, "mysql path for loading secure files") fs.StringVar(&flagMycnfFile, "mycnf-file", flagMycnfFile, "path to my.cnf, if reading all config params from there") }) @@ -87,12 +88,12 @@ func RegisterFlags() { // NewMycnfFromFlags creates a Mycnf object from the command line flags. // // Multiple modes are supported: -// - at least mycnf_server_id is set on the command line +// - at least mycnf-server-id is set on the command line // --> then we read all parameters from the command line, and not from // any my.cnf file. -// - mycnf_server_id is not passed in, but mycnf-file is passed in +// - mycnf-server-id is not passed in, but mycnf-file is passed in // --> then we read that mycnf file -// - mycnf_server_id and mycnf-file are not passed in: +// - mycnf-server-id and mycnf-file are not passed in: // --> then we use the default location of the my.cnf file for the // provided uid and read that my.cnf file. // @@ -100,7 +101,7 @@ func RegisterFlags() { // this, otherwise we'll panic. func NewMycnfFromFlags(uid uint32) (mycnf *Mycnf, err error) { if flagServerID != 0 { - log.Info("mycnf_server_id is specified, using command line parameters for mysql config") + log.Info("mycnf-server-id is specified, using command line parameters for mysql config") return &Mycnf{ ServerID: uint32(flagServerID), MysqlPort: flagMysqlPort, @@ -129,9 +130,9 @@ func NewMycnfFromFlags(uid uint32) (mycnf *Mycnf, err error) { if flagMycnfFile == "" { flagMycnfFile = MycnfFile(uid) - log.Infof("No mycnf_server_id, no mycnf-file specified, using default config for server id %v: %v", uid, flagMycnfFile) + log.Infof("No mycnf-server-id, no mycnf-file specified, using default config for server id %v: %v", uid, flagMycnfFile) } else { - log.Infof("No mycnf_server_id specified, using mycnf-file file %v", flagMycnfFile) + log.Infof("No mycnf-server-id specified, using mycnf-file file %v", flagMycnfFile) } mycnf = NewMycnf(uid, 0) mycnf.Path = flagMycnfFile diff --git a/go/vt/mysqlctl/mycnf_gen.go b/go/vt/mysqlctl/mycnf_gen.go index dd0d6c81c81..16f82de21a3 100644 --- a/go/vt/mysqlctl/mycnf_gen.go +++ b/go/vt/mysqlctl/mycnf_gen.go @@ -30,6 +30,7 @@ import ( "vitess.io/vitess/go/vt/env" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" ) // This files handles the creation of Mycnf objects for the default 'vt' @@ -63,7 +64,7 @@ func init() { } func registerMyCnfFlags(fs *pflag.FlagSet) { - fs.StringVar(&tabletDir, "tablet_dir", tabletDir, "The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid.") + utils.SetFlagStringVar(fs, &tabletDir, "tablet-dir", tabletDir, "The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid.") } // NewMycnf fills the Mycnf structure with vt root paths and derived values. diff --git a/go/vt/mysqlctl/mysqld.go b/go/vt/mysqlctl/mysqld.go index cb794cb06dd..983ec705af3 100644 --- a/go/vt/mysqlctl/mysqld.go +++ b/go/vt/mysqlctl/mysqld.go @@ -60,6 +60,7 @@ import ( mysqlctlpb "vitess.io/vitess/go/vt/proto/mysqlctl" vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vterrors" ) @@ -139,21 +140,21 @@ func init() { } func registerMySQLDFlags(fs *pflag.FlagSet) { - fs.DurationVar(&PoolDynamicHostnameResolution, "pool_hostname_resolve_interval", PoolDynamicHostnameResolution, "if set force an update to all hostnames and reconnect if changed, defaults to 0 (disabled)") - fs.StringVar(&mycnfTemplateFile, "mysqlctl_mycnf_template", mycnfTemplateFile, "template file to use for generating the my.cnf file during server init") - fs.StringVar(&socketFile, "mysqlctl_socket", socketFile, "socket file to use for remote mysqlctl actions (empty for local actions)") - fs.DurationVar(&replicationConnectRetry, "replication_connect_retry", replicationConnectRetry, "how long to wait in between replica reconnect attempts. Only precise to the second.") + utils.SetFlagDurationVar(fs, &PoolDynamicHostnameResolution, "pool-hostname-resolve-interval", PoolDynamicHostnameResolution, "if set force an update to all hostnames and reconnect if changed, defaults to 0 (disabled)") + utils.SetFlagStringVar(fs, &mycnfTemplateFile, "mysqlctl-mycnf-template", mycnfTemplateFile, "template file to use for generating the my.cnf file during server init") + utils.SetFlagStringVar(fs, &socketFile, "mysqlctl-socket", socketFile, "socket file to use for remote mysqlctl actions (empty for local actions)") + utils.SetFlagDurationVar(fs, &replicationConnectRetry, "replication-connect-retry", replicationConnectRetry, "how long to wait in between replica reconnect attempts. Only precise to the second.") } func registerReparentFlags(fs *pflag.FlagSet) { - fs.BoolVar(&DisableActiveReparents, "disable_active_reparents", DisableActiveReparents, "if set, do not allow active reparents. Use this to protect a cluster using external reparents.") + utils.SetFlagBoolVar(fs, &DisableActiveReparents, "disable-active-reparents", DisableActiveReparents, "if set, do not allow active reparents. Use this to protect a cluster using external reparents.") } func registerPoolFlags(fs *pflag.FlagSet) { - fs.IntVar(&dbaPoolSize, "dba_pool_size", dbaPoolSize, "Size of the connection pool for dba connections") - fs.DurationVar(&DbaIdleTimeout, "dba_idle_timeout", DbaIdleTimeout, "Idle timeout for dba connections") - fs.DurationVar(&appIdleTimeout, "app_idle_timeout", appIdleTimeout, "Idle timeout for app connections") - fs.IntVar(&appPoolSize, "app_pool_size", appPoolSize, "Size of the connection pool for app connections") + utils.SetFlagIntVar(fs, &dbaPoolSize, "dba-pool-size", dbaPoolSize, "Size of the connection pool for dba connections") + utils.SetFlagDurationVar(fs, &DbaIdleTimeout, "dba-idle-timeout", DbaIdleTimeout, "Idle timeout for dba connections") + utils.SetFlagDurationVar(fs, &appIdleTimeout, "app-idle-timeout", appIdleTimeout, "Idle timeout for app connections") + utils.SetFlagIntVar(fs, &appPoolSize, "app-pool-size", appPoolSize, "Size of the connection pool for app connections") } // NewMysqld creates a Mysqld object based on the provided configuration @@ -921,7 +922,7 @@ func (mysqld *Mysqld) getMycnfTemplate() string { if mycnfTemplateFile != "" { data, err := os.ReadFile(mycnfTemplateFile) if err != nil { - log.Fatalf("template file specified by -mysqlctl_mycnf_template could not be read: %v", mycnfTemplateFile) + log.Fatalf("template file specified by -mysqlctl-mycnf-template could not be read: %v", mycnfTemplateFile) } return string(data) // use only specified template } diff --git a/go/vt/mysqlctl/s3backupstorage/README.txt b/go/vt/mysqlctl/s3backupstorage/README.txt index 53f0cf996da..bc0e567ccf7 100644 --- a/go/vt/mysqlctl/s3backupstorage/README.txt +++ b/go/vt/mysqlctl/s3backupstorage/README.txt @@ -1,8 +1,8 @@ Recently added options to enable usage of an S3 appliance: Cloudian HyperStore: - --s3_backup_aws_endpoint (port is required) - --s3_backup_force_path_style=true/false - --s3_backup_log_level can be one of: LogOff, LogDebug, LogDebugWithSigning, LogDebugWithHTTPBody, LogDebugWithRequestRetries, LogDebugWithRequestErrors. Default: LogOff + --s3-backup-aws-endpoint (port is required) + --s3-backup-force-path-style=true/false + --s3-backup-log-level can be one of: LogOff, LogDebug, LogDebugWithSigning, LogDebugWithHTTPBody, LogDebugWithRequestRetries, LogDebugWithRequestErrors. Default: LogOff By default the s3 client will try to connect to ..amazonaws.com. Adjusting the endpoint will allow this @@ -10,7 +10,7 @@ to be changed. Given the way the FQDN is configured the TLS certificate may not match the server's "base" (.) due to the leading -so setting --s3_backup_force_path_style=true will force the s3 client to +so setting --s3-backup-force-path-style=true will force the s3 client to connect to . and then make a request using the full path within the http calls. diff --git a/go/vt/mysqlctl/s3backupstorage/s3.go b/go/vt/mysqlctl/s3backupstorage/s3.go index 4dd583009aa..84f3ac1d772 100644 --- a/go/vt/mysqlctl/s3backupstorage/s3.go +++ b/go/vt/mysqlctl/s3backupstorage/s3.go @@ -51,6 +51,7 @@ import ( "github.com/spf13/pflag" errorsbackup "vitess.io/vitess/go/vt/mysqlctl/errors" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/log" stats "vitess.io/vitess/go/vt/mysqlctl/backupstats" @@ -100,16 +101,17 @@ var ( ) func registerFlags(fs *pflag.FlagSet) { - fs.StringVar(®ion, "s3_backup_aws_region", "us-east-1", "AWS region to use.") - fs.IntVar(&retryCount, "s3_backup_aws_retries", -1, "AWS request retries.") - fs.StringVar(&endpoint, "s3_backup_aws_endpoint", "", "endpoint of the S3 backend (region must be provided).") - fs.StringVar(&bucket, "s3_backup_storage_bucket", "", "S3 bucket to use for backups.") - fs.StringVar(&root, "s3_backup_storage_root", "", "root prefix for all backup-related object names.") - fs.BoolVar(&forcePath, "s3_backup_force_path_style", false, "force the s3 path style.") - fs.BoolVar(&tlsSkipVerifyCert, "s3_backup_tls_skip_verify_cert", false, "skip the 'certificate is valid' check for SSL connections.") - fs.StringVar(&requiredLogLevel, "s3_backup_log_level", "LogOff", "determine the S3 loglevel to use from LogOff, LogDebug, LogDebugWithSigning, LogDebugWithHTTPBody, LogDebugWithRequestRetries, LogDebugWithRequestErrors.") - fs.StringVar(&sse, "s3_backup_server_side_encryption", "", "server-side encryption algorithm (e.g., AES256, aws:kms, sse_c:/path/to/key/file).") - fs.Int64Var(&minPartSize, "s3_backup_aws_min_partsize", manager.MinUploadPartSize, "Minimum part size to use, defaults to 5MiB but can be increased due to the dataset size.") + + utils.SetFlagStringVar(fs, ®ion, "s3-backup-aws-region", "us-east-1", "AWS region to use.") + utils.SetFlagIntVar(fs, &retryCount, "s3-backup-aws-retries", -1, "AWS request retries.") + utils.SetFlagStringVar(fs, &endpoint, "s3-backup-aws-endpoint", "", "endpoint of the S3 backend (region must be provided).") + utils.SetFlagStringVar(fs, &bucket, "s3-backup-storage-bucket", "", "S3 bucket to use for backups.") + utils.SetFlagStringVar(fs, &root, "s3-backup-storage-root", "", "root prefix for all backup-related object names.") + utils.SetFlagBoolVar(fs, &forcePath, "s3-backup-force-path-style", false, "force the s3 path style.") + utils.SetFlagBoolVar(fs, &tlsSkipVerifyCert, "s3-backup-tls-skip-verify-cert", false, "skip the 'certificate is valid' check for SSL connections.") + utils.SetFlagStringVar(fs, &requiredLogLevel, "s3-backup-log-level", "LogOff", "determine the S3 loglevel to use from LogOff, LogDebug, LogDebugWithSigning, LogDebugWithHTTPBody, LogDebugWithRequestRetries, LogDebugWithRequestErrors.") + utils.SetFlagStringVar(fs, &sse, "s3-backup-server-side-encryption", "", "server-side encryption algorithm (e.g., AES256, aws:kms, sse_c:/path/to/key/file).") + utils.SetFlagInt64Var(fs, &minPartSize, "s3-backup-aws-min-partsize", manager.MinUploadPartSize, "Minimum part size to use, defaults to 5MiB but can be increased due to the dataset size.") } func init() { @@ -550,7 +552,7 @@ func (bs *S3BackupStorage) client() (*s3.Client, error) { bs._client = s3.NewFromConfig(cfg, options...) if len(bucket) == 0 { - return nil, fmt.Errorf("--s3_backup_storage_bucket required") + return nil, fmt.Errorf("--s3-backup-storage-bucket required") } if _, err := bs._client.HeadBucket(context.Background(), &s3.HeadBucketInput{Bucket: &bucket}); err != nil { diff --git a/go/vt/mysqlctl/xtrabackupengine.go b/go/vt/mysqlctl/xtrabackupengine.go index 639f30d7f4d..d93227328d6 100644 --- a/go/vt/mysqlctl/xtrabackupengine.go +++ b/go/vt/mysqlctl/xtrabackupengine.go @@ -39,6 +39,7 @@ import ( tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata" "vitess.io/vitess/go/vt/proto/vtrpc" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vterrors" ) @@ -126,14 +127,14 @@ func init() { } func registerXtraBackupEngineFlags(fs *pflag.FlagSet) { - fs.StringVar(&xtrabackupEnginePath, "xtrabackup_root_path", xtrabackupEnginePath, "Directory location of the xtrabackup and xbstream executables, e.g., /usr/bin") - fs.StringVar(&xtrabackupBackupFlags, "xtrabackup_backup_flags", xtrabackupBackupFlags, "Flags to pass to backup command. These should be space separated and will be added to the end of the command") - fs.StringVar(&xtrabackupPrepareFlags, "xtrabackup_prepare_flags", xtrabackupPrepareFlags, "Flags to pass to prepare command. These should be space separated and will be added to the end of the command") - fs.StringVar(&xbstreamRestoreFlags, "xbstream_restore_flags", xbstreamRestoreFlags, "Flags to pass to xbstream command during restore. These should be space separated and will be added to the end of the command. These need to match the ones used for backup e.g. --compress / --decompress, --encrypt / --decrypt") - fs.StringVar(&xtrabackupStreamMode, "xtrabackup_stream_mode", xtrabackupStreamMode, "Which mode to use if streaming, valid values are tar and xbstream. Please note that tar is not supported in XtraBackup 8.0") - fs.StringVar(&xtrabackupUser, "xtrabackup_user", xtrabackupUser, "User that xtrabackup will use to connect to the database server. This user must have all necessary privileges. For details, please refer to xtrabackup documentation.") - fs.UintVar(&xtrabackupStripes, "xtrabackup_stripes", xtrabackupStripes, "If greater than 0, use data striping across this many destination files to parallelize data transfer and decompression") - fs.UintVar(&xtrabackupStripeBlockSize, "xtrabackup_stripe_block_size", xtrabackupStripeBlockSize, "Size in bytes of each block that gets sent to a given stripe before rotating to the next stripe") + utils.SetFlagStringVar(fs, &xbstreamRestoreFlags, "xbstream-restore-flags", xbstreamRestoreFlags, "Flags to pass to xbstream command during restore. These should be space separated and will be added to the end of the command. These need to match the ones used for backup e.g. --compress / --decompress, --encrypt / --decrypt") + utils.SetFlagStringVar(fs, &xtrabackupEnginePath, "xtrabackup-root-path", xtrabackupEnginePath, "Directory location of the xtrabackup and xbstream executables, e.g., /usr/bin") + utils.SetFlagStringVar(fs, &xtrabackupBackupFlags, "xtrabackup-backup-flags", xtrabackupBackupFlags, "Flags to pass to backup command. These should be space separated and will be added to the end of the command") + utils.SetFlagStringVar(fs, &xtrabackupPrepareFlags, "xtrabackup-prepare-flags", xtrabackupPrepareFlags, "Flags to pass to prepare command. These should be space separated and will be added to the end of the command") + utils.SetFlagStringVar(fs, &xtrabackupStreamMode, "xtrabackup-stream-mode", xtrabackupStreamMode, "Which mode to use if streaming, valid values are tar and xbstream. Please note that tar is not supported in XtraBackup 8.0") + utils.SetFlagStringVar(fs, &xtrabackupUser, "xtrabackup-user", xtrabackupUser, "User that xtrabackup will use to connect to the database server. This user must have all necessary privileges. For details, please refer to xtrabackup documentation.") + utils.SetFlagUintVar(fs, &xtrabackupStripes, "xtrabackup-stripes", xtrabackupStripes, "If greater than 0, use data striping across this many destination files to parallelize data transfer and decompression") + utils.SetFlagUintVar(fs, &xtrabackupStripeBlockSize, "xtrabackup-stripe-block-size", xtrabackupStripeBlockSize, "Size in bytes of each block that gets sent to a given stripe before rotating to the next stripe") } func (be *XtrabackupEngine) backupFileName() string { @@ -740,7 +741,7 @@ func (be *XtrabackupEngine) extractFiles(ctx context.Context, logger logutil.Log return vterrors.Wrap(err, "xbstream failed") } default: - return vterrors.Errorf(vtrpc.Code_INVALID_ARGUMENT, "%v is not a valid value for xtrabackup_stream_mode, supported modes are tar and xbstream", streamMode) + return vterrors.Errorf(vtrpc.Code_INVALID_ARGUMENT, "%v is not a valid value for xtrabackup-stream-mode, supported modes are tar and xbstream", streamMode) } return nil } diff --git a/go/vt/proto/binlogdata/binlogdata.pb.go b/go/vt/proto/binlogdata/binlogdata.pb.go index ede8d8aba13..fb848125a3d 100644 --- a/go/vt/proto/binlogdata/binlogdata.pb.go +++ b/go/vt/proto/binlogdata/binlogdata.pb.go @@ -19,7 +19,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v3.21.3 // source: binlogdata.proto @@ -2152,8 +2152,11 @@ type VStreamOptions struct { state protoimpl.MessageState `protogen:"open.v1"` InternalTables []string `protobuf:"bytes,1,rep,name=internal_tables,json=internalTables,proto3" json:"internal_tables,omitempty"` ConfigOverrides map[string]string `protobuf:"bytes,2,rep,name=config_overrides,json=configOverrides,proto3" json:"config_overrides,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Copy only these tables, skip the rest in the filter. + // If not provided, the default behaviour is to copy all tables. + TablesToCopy []string `protobuf:"bytes,3,rep,name=tables_to_copy,json=tablesToCopy,proto3" json:"tables_to_copy,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *VStreamOptions) Reset() { @@ -2200,6 +2203,13 @@ func (x *VStreamOptions) GetConfigOverrides() map[string]string { return nil } +func (x *VStreamOptions) GetTablesToCopy() []string { + if x != nil { + return x.TablesToCopy + } + return nil +} + // VStreamRequest is the payload for VStreamer type VStreamRequest struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -3035,500 +3045,296 @@ func (x *RowChange_Bitmap) GetCols() []byte { var File_binlogdata_proto protoreflect.FileDescriptor -var file_binlogdata_proto_rawDesc = string([]byte{ - 0x0a, 0x10, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x12, 0x0a, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x0b, - 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0b, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x4d, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x72, - 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, - 0x6f, 0x6e, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x6e, 0x6e, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0xe5, 0x03, 0x0a, 0x11, 0x42, 0x69, 0x6e, 0x6c, - 0x6f, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, - 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x42, - 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x0b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x0a, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x1a, 0xc6, 0x02, 0x0a, 0x09, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x4c, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, - 0x67, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x62, 0x69, 0x6e, - 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x08, 0x63, 0x61, - 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x2d, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x52, 0x07, 0x63, 0x68, - 0x61, 0x72, 0x73, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x03, 0x73, 0x71, 0x6c, 0x22, 0xa9, 0x01, 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, - 0x67, 0x6f, 0x72, 0x79, 0x12, 0x13, 0x0a, 0x0f, 0x42, 0x4c, 0x5f, 0x55, 0x4e, 0x52, 0x45, 0x43, - 0x4f, 0x47, 0x4e, 0x49, 0x5a, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x4c, 0x5f, - 0x42, 0x45, 0x47, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x4c, 0x5f, 0x43, 0x4f, - 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x42, 0x4c, 0x5f, 0x52, 0x4f, 0x4c, - 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x42, 0x4c, 0x5f, 0x44, 0x4d, - 0x4c, 0x5f, 0x44, 0x45, 0x50, 0x52, 0x45, 0x43, 0x41, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0a, - 0x0a, 0x06, 0x42, 0x4c, 0x5f, 0x44, 0x44, 0x4c, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x42, 0x4c, - 0x5f, 0x53, 0x45, 0x54, 0x10, 0x06, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x4c, 0x5f, 0x49, 0x4e, 0x53, - 0x45, 0x52, 0x54, 0x10, 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x4c, 0x5f, 0x55, 0x50, 0x44, 0x41, - 0x54, 0x45, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x4c, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, - 0x45, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, - 0x93, 0x01, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4b, 0x65, 0x79, 0x52, 0x61, 0x6e, - 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x5f, 0x72, 0x61, 0x6e, - 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x08, 0x6b, 0x65, - 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x2d, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x52, 0x07, 0x63, 0x68, - 0x61, 0x72, 0x73, 0x65, 0x74, 0x22, 0x66, 0x0a, 0x16, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4b, - 0x65, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x4c, 0x0a, 0x12, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x62, 0x69, - 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x62, 0x69, 0x6e, 0x6c, - 0x6f, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x78, 0x0a, - 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x72, - 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x62, 0x69, 0x6e, 0x6c, - 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x52, 0x07, - 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x22, 0x64, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x4c, 0x0a, 0x12, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x62, 0x69, - 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x62, 0x69, 0x6e, 0x6c, - 0x6f, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x55, 0x0a, - 0x11, 0x43, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x73, - 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x72, 0x6f, 0x6d, 0x43, 0x68, - 0x61, 0x72, 0x73, 0x65, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x5f, 0x63, 0x68, 0x61, 0x72, - 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x6f, 0x43, 0x68, 0x61, - 0x72, 0x73, 0x65, 0x74, 0x22, 0x89, 0x06, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x61, - 0x74, 0x63, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x58, 0x0a, 0x14, 0x63, - 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x74, 0x6f, 0x5f, 0x74, - 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x69, 0x6e, 0x6c, - 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x6f, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x54, - 0x6f, 0x54, 0x65, 0x78, 0x74, 0x12, 0x4d, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, - 0x5f, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, - 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x75, 0x6c, 0x65, - 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x43, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x43, 0x68, 0x61, - 0x72, 0x73, 0x65, 0x74, 0x12, 0x39, 0x0a, 0x19, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x75, - 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, - 0x6e, 0x69, 0x71, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, - 0x39, 0x0a, 0x19, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, - 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x16, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, - 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x46, 0x0a, 0x20, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x6e, 0x69, 0x71, - 0x75, 0x65, 0x4b, 0x65, 0x79, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x73, 0x12, 0x55, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x5f, 0x69, 0x6e, - 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x75, 0x6c, - 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x49, 0x6e, 0x74, 0x54, 0x6f, 0x45, 0x6e, - 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, - 0x49, 0x6e, 0x74, 0x54, 0x6f, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x6f, 0x72, - 0x63, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, - 0x4b, 0x65, 0x79, 0x1a, 0x44, 0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x45, 0x6e, - 0x75, 0x6d, 0x54, 0x6f, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x60, 0x0a, 0x13, 0x43, 0x6f, 0x6e, - 0x76, 0x65, 0x72, 0x74, 0x43, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, - 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x43, 0x0a, 0x15, 0x43, - 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x49, 0x6e, 0x74, 0x54, 0x6f, 0x45, 0x6e, 0x75, 0x6d, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0xff, 0x01, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x05, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x62, 0x69, 0x6e, - 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x12, 0x4b, 0x0a, 0x10, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, - 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, - 0x52, 0x0e, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, - 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x36, 0x0a, 0x0e, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x13, 0x0a, 0x0f, - 0x45, 0x52, 0x52, 0x5f, 0x4f, 0x4e, 0x5f, 0x4d, 0x49, 0x53, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, - 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x42, 0x45, 0x53, 0x54, 0x5f, 0x45, 0x46, 0x46, 0x4f, 0x52, 0x54, - 0x10, 0x01, 0x22, 0xea, 0x03, 0x0a, 0x0c, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x35, 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, - 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2f, 0x0a, 0x09, - 0x6b, 0x65, 0x79, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x61, - 0x6e, 0x67, 0x65, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x12, 0x2e, 0x0a, 0x06, 0x6f, 0x6e, 0x5f, 0x64, 0x64, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x17, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4f, - 0x6e, 0x44, 0x44, 0x4c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x6f, 0x6e, 0x44, 0x64, - 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x6d, 0x79, - 0x73, 0x71, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x4d, 0x79, 0x73, 0x71, 0x6c, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x74, 0x6f, 0x70, - 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0d, 0x73, 0x74, 0x6f, 0x70, 0x41, 0x66, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x70, 0x79, - 0x12, 0x29, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x7a, 0x6f, 0x6e, 0x65, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x22, - 0x94, 0x02, 0x0a, 0x09, 0x52, 0x6f, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x22, 0x0a, - 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x6f, 0x77, 0x52, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, - 0x65, 0x12, 0x20, 0x0a, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0a, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x6f, 0x77, 0x52, 0x05, 0x61, 0x66, - 0x74, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x75, - 0x6d, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x69, 0x6e, 0x6c, - 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x6f, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x2e, 0x42, 0x69, 0x74, 0x6d, 0x61, 0x70, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x4c, 0x0a, 0x13, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, - 0x6f, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x42, 0x69, 0x74, 0x6d, 0x61, 0x70, 0x52, - 0x11, 0x6a, 0x73, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x1a, 0x32, 0x0a, 0x06, 0x42, 0x69, 0x74, 0x6d, 0x61, 0x70, 0x12, 0x14, 0x0a, 0x05, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x04, 0x63, 0x6f, 0x6c, 0x73, 0x22, 0xd5, 0x01, 0x0a, 0x08, 0x52, 0x6f, 0x77, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x0b, 0x72, 0x6f, 0x77, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x6f, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0a, - 0x72, 0x6f, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, - 0x67, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x69, 0x73, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x69, - 0x73, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x22, 0xe4, - 0x01, 0x0a, 0x0a, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x06, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, - 0x68, 0x61, 0x72, 0x64, 0x12, 0x33, 0x0a, 0x16, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x73, 0x65, 0x74, - 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x19, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x65, 0x6e, 0x75, 0x6d, 0x53, 0x65, 0x74, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x69, 0x73, 0x5f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x1a, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x69, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x09, 0x53, 0x68, 0x61, 0x72, 0x64, 0x47, - 0x74, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x74, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x67, 0x74, 0x69, 0x64, 0x12, 0x35, 0x0a, 0x0a, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x5f, 0x70, 0x5f, 0x6b, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x4c, 0x61, 0x73, 0x74, 0x50, 0x4b, 0x52, 0x08, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x4b, 0x73, - 0x22, 0x3f, 0x0a, 0x05, 0x56, 0x47, 0x74, 0x69, 0x64, 0x12, 0x36, 0x0a, 0x0b, 0x73, 0x68, 0x61, - 0x72, 0x64, 0x5f, 0x67, 0x74, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, - 0x64, 0x47, 0x74, 0x69, 0x64, 0x52, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x64, 0x47, 0x74, 0x69, 0x64, - 0x73, 0x22, 0x41, 0x0a, 0x0d, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x68, 0x61, - 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, - 0x68, 0x61, 0x72, 0x64, 0x22, 0xbc, 0x02, 0x0a, 0x07, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x40, 0x0a, 0x0e, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, - 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x0d, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x6f, - 0x63, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x36, 0x0a, 0x0b, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x67, 0x74, 0x69, 0x64, 0x73, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x47, 0x74, 0x69, 0x64, 0x52, 0x0a, 0x73, - 0x68, 0x61, 0x72, 0x64, 0x47, 0x74, 0x69, 0x64, 0x73, 0x12, 0x3d, 0x0a, 0x0c, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x74, - 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x07, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x73, 0x22, 0xb6, 0x04, 0x0a, 0x06, 0x56, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2a, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x62, - 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x74, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x67, 0x74, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x09, 0x72, 0x6f, - 0x77, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x6f, 0x77, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x52, 0x08, 0x72, 0x6f, 0x77, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x37, 0x0a, - 0x0b, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x05, 0x76, 0x67, 0x74, 0x69, 0x64, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x56, 0x47, 0x74, 0x69, 0x64, 0x52, 0x05, 0x76, 0x67, 0x74, 0x69, 0x64, 0x12, - 0x2d, 0x0a, 0x07, 0x6a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4a, 0x6f, - 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x07, 0x6a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x10, - 0x0a, 0x03, 0x64, 0x6d, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x64, 0x6d, 0x6c, - 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x5f, 0x6b, 0x5f, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x62, 0x69, - 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x61, 0x73, 0x74, 0x50, 0x4b, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x50, 0x4b, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x16, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, - 0x61, 0x72, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, - 0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, - 0x64, 0x12, 0x29, 0x0a, 0x10, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x5f, 0x72, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x68, 0x72, - 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x8d, 0x01, 0x0a, - 0x0c, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x61, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x24, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x0c, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, - 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x1e, 0x0a, 0x0b, 0x70, 0x5f, 0x6b, 0x5f, 0x63, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x09, 0x70, 0x4b, - 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x23, 0x0a, 0x0e, 0x70, 0x5f, 0x6b, 0x5f, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x70, 0x4b, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x41, 0x0a, 0x0d, - 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x61, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x30, 0x0a, - 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, - 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x69, 0x6e, 0x69, 0x6d, - 0x61, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, - 0xd9, 0x01, 0x0a, 0x0e, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x5a, 0x0a, 0x10, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x76, - 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x1a, 0x42, 0x0a, 0x14, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfd, 0x02, 0x0a, 0x0e, - 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, - 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, - 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, - 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, - 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, - 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, - 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x1a, 0x0a, - 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x06, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x62, 0x69, 0x6e, 0x6c, - 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x0f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6c, - 0x61, 0x73, 0x74, 0x5f, 0x70, 0x5f, 0x6b, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x4c, 0x61, 0x73, 0x74, 0x50, 0x4b, 0x52, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x61, - 0x73, 0x74, 0x50, 0x4b, 0x73, 0x12, 0x34, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3d, 0x0a, 0x0f, 0x56, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, - 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xbb, 0x02, 0x0a, 0x12, 0x56, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, - 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, - 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, - 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, - 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, - 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, - 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2a, 0x0a, 0x06, 0x6c, 0x61, 0x73, 0x74, 0x70, 0x6b, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x73, 0x74, - 0x70, 0x6b, 0x12, 0x34, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xa4, 0x02, 0x0a, 0x13, 0x56, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x24, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0c, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x06, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x28, 0x0a, 0x08, 0x70, 0x6b, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x08, 0x70, 0x6b, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, - 0x12, 0x12, 0x0a, 0x04, 0x67, 0x74, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x67, 0x74, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x6f, 0x77, 0x52, 0x04, - 0x72, 0x6f, 0x77, 0x73, 0x12, 0x22, 0x0a, 0x06, 0x6c, 0x61, 0x73, 0x74, 0x70, 0x6b, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x6f, 0x77, - 0x52, 0x06, 0x6c, 0x61, 0x73, 0x74, 0x70, 0x6b, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x6f, - 0x74, 0x74, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x74, 0x68, 0x72, - 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, - 0x65, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x65, 0x61, 0x72, 0x74, - 0x62, 0x65, 0x61, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, - 0x64, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, - 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, - 0xfb, 0x01, 0x0a, 0x14, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, - 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, - 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, - 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, - 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, - 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x34, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, - 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xde, 0x01, - 0x0a, 0x15, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x28, 0x0a, 0x08, - 0x70, 0x6b, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, - 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x08, 0x70, 0x6b, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x74, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x67, 0x74, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x04, 0x72, 0x6f, - 0x77, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x52, 0x6f, 0x77, 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x12, 0x22, 0x0a, 0x06, 0x6c, 0x61, - 0x73, 0x74, 0x70, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x52, 0x6f, 0x77, 0x52, 0x06, 0x6c, 0x61, 0x73, 0x74, 0x70, 0x6b, 0x22, 0x69, - 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x50, 0x4b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x3c, 0x0a, - 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x5f, 0x6b, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x50, 0x4b, 0x52, 0x0b, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x50, 0x4b, 0x12, 0x1c, 0x0a, 0x09, 0x63, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, - 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0x58, 0x0a, 0x0b, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x50, 0x4b, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x6c, 0x61, 0x73, 0x74, 0x70, - 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x73, - 0x74, 0x70, 0x6b, 0x22, 0xdc, 0x01, 0x0a, 0x15, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, - 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, - 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, - 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, - 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, - 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x22, 0x72, 0x0a, 0x16, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x06, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x74, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x67, 0x74, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x6f, 0x77, - 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x2a, 0x3e, 0x0a, 0x0b, 0x4f, 0x6e, 0x44, 0x44, 0x4c, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0a, 0x0a, 0x06, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x10, - 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x54, 0x4f, 0x50, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x45, - 0x58, 0x45, 0x43, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x45, 0x58, 0x45, 0x43, 0x5f, 0x49, 0x47, - 0x4e, 0x4f, 0x52, 0x45, 0x10, 0x03, 0x2a, 0x7b, 0x0a, 0x18, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, - 0x65, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x6f, - 0x6b, 0x75, 0x70, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x4d, 0x69, - 0x67, 0x72, 0x61, 0x74, 0x65, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x68, 0x61, - 0x72, 0x64, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x44, - 0x4c, 0x10, 0x05, 0x2a, 0x44, 0x0a, 0x1b, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x75, 0x62, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x6f, 0x6e, 0x65, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, - 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x74, 0x6f, - 0x6d, 0x69, 0x63, 0x43, 0x6f, 0x70, 0x79, 0x10, 0x02, 0x2a, 0x71, 0x0a, 0x19, 0x56, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, - 0x6e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x6e, 0x69, 0x74, 0x10, 0x01, 0x12, 0x0b, 0x0a, - 0x07, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x6f, - 0x70, 0x79, 0x69, 0x6e, 0x67, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x75, 0x6e, 0x6e, 0x69, - 0x6e, 0x67, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x05, 0x12, - 0x0b, 0x0a, 0x07, 0x4c, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x10, 0x06, 0x2a, 0x8d, 0x02, 0x0a, - 0x0a, 0x56, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x54, 0x49, 0x44, - 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x10, 0x02, 0x12, 0x0a, 0x0a, - 0x06, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x4f, 0x4c, - 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x04, 0x12, 0x07, 0x0a, 0x03, 0x44, 0x44, 0x4c, 0x10, 0x05, - 0x12, 0x0a, 0x0a, 0x06, 0x49, 0x4e, 0x53, 0x45, 0x52, 0x54, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, - 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x10, 0x07, 0x12, 0x0a, 0x0a, 0x06, 0x55, 0x50, 0x44, - 0x41, 0x54, 0x45, 0x10, 0x08, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, - 0x09, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x45, 0x54, 0x10, 0x0a, 0x12, 0x09, 0x0a, 0x05, 0x4f, 0x54, - 0x48, 0x45, 0x52, 0x10, 0x0b, 0x12, 0x07, 0x0a, 0x03, 0x52, 0x4f, 0x57, 0x10, 0x0c, 0x12, 0x09, - 0x0a, 0x05, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x10, 0x0d, 0x12, 0x0d, 0x0a, 0x09, 0x48, 0x45, 0x41, - 0x52, 0x54, 0x42, 0x45, 0x41, 0x54, 0x10, 0x0e, 0x12, 0x09, 0x0a, 0x05, 0x56, 0x47, 0x54, 0x49, - 0x44, 0x10, 0x0f, 0x12, 0x0b, 0x0a, 0x07, 0x4a, 0x4f, 0x55, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x10, - 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x11, 0x12, 0x0a, 0x0a, - 0x06, 0x4c, 0x41, 0x53, 0x54, 0x50, 0x4b, 0x10, 0x12, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x41, 0x56, - 0x45, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x10, 0x13, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x4f, 0x50, 0x59, - 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x14, 0x2a, 0x27, 0x0a, 0x0d, - 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, - 0x06, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x53, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x48, 0x41, - 0x52, 0x44, 0x53, 0x10, 0x01, 0x42, 0x29, 0x5a, 0x27, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, - 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_binlogdata_proto_rawDesc = "" + + "\n" + + "\x10binlogdata.proto\x12\n" + + "binlogdata\x1a\vvtrpc.proto\x1a\vquery.proto\x1a\x0etopodata.proto\"M\n" + + "\aCharset\x12\x16\n" + + "\x06client\x18\x01 \x01(\x05R\x06client\x12\x12\n" + + "\x04conn\x18\x02 \x01(\x05R\x04conn\x12\x16\n" + + "\x06server\x18\x03 \x01(\x05R\x06server\"\xe5\x03\n" + + "\x11BinlogTransaction\x12G\n" + + "\n" + + "statements\x18\x01 \x03(\v2'.binlogdata.BinlogTransaction.StatementR\n" + + "statements\x122\n" + + "\vevent_token\x18\x04 \x01(\v2\x11.query.EventTokenR\n" + + "eventToken\x1a\xc6\x02\n" + + "\tStatement\x12L\n" + + "\bcategory\x18\x01 \x01(\x0e20.binlogdata.BinlogTransaction.Statement.CategoryR\bcategory\x12-\n" + + "\acharset\x18\x02 \x01(\v2\x13.binlogdata.CharsetR\acharset\x12\x10\n" + + "\x03sql\x18\x03 \x01(\fR\x03sql\"\xa9\x01\n" + + "\bCategory\x12\x13\n" + + "\x0fBL_UNRECOGNIZED\x10\x00\x12\f\n" + + "\bBL_BEGIN\x10\x01\x12\r\n" + + "\tBL_COMMIT\x10\x02\x12\x0f\n" + + "\vBL_ROLLBACK\x10\x03\x12\x15\n" + + "\x11BL_DML_DEPRECATED\x10\x04\x12\n" + + "\n" + + "\x06BL_DDL\x10\x05\x12\n" + + "\n" + + "\x06BL_SET\x10\x06\x12\r\n" + + "\tBL_INSERT\x10\a\x12\r\n" + + "\tBL_UPDATE\x10\b\x12\r\n" + + "\tBL_DELETE\x10\tJ\x04\b\x02\x10\x03J\x04\b\x03\x10\x04\"\x93\x01\n" + + "\x15StreamKeyRangeRequest\x12\x1a\n" + + "\bposition\x18\x01 \x01(\tR\bposition\x12/\n" + + "\tkey_range\x18\x02 \x01(\v2\x12.topodata.KeyRangeR\bkeyRange\x12-\n" + + "\acharset\x18\x03 \x01(\v2\x13.binlogdata.CharsetR\acharset\"f\n" + + "\x16StreamKeyRangeResponse\x12L\n" + + "\x12binlog_transaction\x18\x01 \x01(\v2\x1d.binlogdata.BinlogTransactionR\x11binlogTransaction\"x\n" + + "\x13StreamTablesRequest\x12\x1a\n" + + "\bposition\x18\x01 \x01(\tR\bposition\x12\x16\n" + + "\x06tables\x18\x02 \x03(\tR\x06tables\x12-\n" + + "\acharset\x18\x03 \x01(\v2\x13.binlogdata.CharsetR\acharset\"d\n" + + "\x14StreamTablesResponse\x12L\n" + + "\x12binlog_transaction\x18\x01 \x01(\v2\x1d.binlogdata.BinlogTransactionR\x11binlogTransaction\"U\n" + + "\x11CharsetConversion\x12!\n" + + "\ffrom_charset\x18\x01 \x01(\tR\vfromCharset\x12\x1d\n" + + "\n" + + "to_charset\x18\x02 \x01(\tR\ttoCharset\"\x89\x06\n" + + "\x04Rule\x12\x14\n" + + "\x05match\x18\x01 \x01(\tR\x05match\x12\x16\n" + + "\x06filter\x18\x02 \x01(\tR\x06filter\x12X\n" + + "\x14convert_enum_to_text\x18\x03 \x03(\v2'.binlogdata.Rule.ConvertEnumToTextEntryR\x11convertEnumToText\x12M\n" + + "\x0fconvert_charset\x18\x04 \x03(\v2$.binlogdata.Rule.ConvertCharsetEntryR\x0econvertCharset\x129\n" + + "\x19source_unique_key_columns\x18\x05 \x01(\tR\x16sourceUniqueKeyColumns\x129\n" + + "\x19target_unique_key_columns\x18\x06 \x01(\tR\x16targetUniqueKeyColumns\x12F\n" + + " source_unique_key_target_columns\x18\a \x01(\tR\x1csourceUniqueKeyTargetColumns\x12U\n" + + "\x13convert_int_to_enum\x18\b \x03(\v2&.binlogdata.Rule.ConvertIntToEnumEntryR\x10convertIntToEnum\x12(\n" + + "\x10force_unique_key\x18\t \x01(\tR\x0eforceUniqueKey\x1aD\n" + + "\x16ConvertEnumToTextEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1a`\n" + + "\x13ConvertCharsetEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x123\n" + + "\x05value\x18\x02 \x01(\v2\x1d.binlogdata.CharsetConversionR\x05value:\x028\x01\x1aC\n" + + "\x15ConvertIntToEnumEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\bR\x05value:\x028\x01\"\xff\x01\n" + + "\x06Filter\x12&\n" + + "\x05rules\x18\x01 \x03(\v2\x10.binlogdata.RuleR\x05rules\x12K\n" + + "\x10field_event_mode\x18\x02 \x01(\x0e2!.binlogdata.Filter.FieldEventModeR\x0efieldEventMode\x12#\n" + + "\rworkflow_type\x18\x03 \x01(\x03R\fworkflowType\x12#\n" + + "\rworkflow_name\x18\x04 \x01(\tR\fworkflowName\"6\n" + + "\x0eFieldEventMode\x12\x13\n" + + "\x0fERR_ON_MISMATCH\x10\x00\x12\x0f\n" + + "\vBEST_EFFORT\x10\x01\"\xea\x03\n" + + "\fBinlogSource\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x125\n" + + "\vtablet_type\x18\x03 \x01(\x0e2\x14.topodata.TabletTypeR\n" + + "tabletType\x12/\n" + + "\tkey_range\x18\x04 \x01(\v2\x12.topodata.KeyRangeR\bkeyRange\x12\x16\n" + + "\x06tables\x18\x05 \x03(\tR\x06tables\x12*\n" + + "\x06filter\x18\x06 \x01(\v2\x12.binlogdata.FilterR\x06filter\x12.\n" + + "\x06on_ddl\x18\a \x01(\x0e2\x17.binlogdata.OnDDLActionR\x05onDdl\x12%\n" + + "\x0eexternal_mysql\x18\b \x01(\tR\rexternalMysql\x12&\n" + + "\x0fstop_after_copy\x18\t \x01(\bR\rstopAfterCopy\x12)\n" + + "\x10external_cluster\x18\n" + + " \x01(\tR\x0fexternalCluster\x12(\n" + + "\x10source_time_zone\x18\v \x01(\tR\x0esourceTimeZone\x12(\n" + + "\x10target_time_zone\x18\f \x01(\tR\x0etargetTimeZone\"\x94\x02\n" + + "\tRowChange\x12\"\n" + + "\x06before\x18\x01 \x01(\v2\n" + + ".query.RowR\x06before\x12 \n" + + "\x05after\x18\x02 \x01(\v2\n" + + ".query.RowR\x05after\x12?\n" + + "\fdata_columns\x18\x03 \x01(\v2\x1c.binlogdata.RowChange.BitmapR\vdataColumns\x12L\n" + + "\x13json_partial_values\x18\x04 \x01(\v2\x1c.binlogdata.RowChange.BitmapR\x11jsonPartialValues\x1a2\n" + + "\x06Bitmap\x12\x14\n" + + "\x05count\x18\x01 \x01(\x03R\x05count\x12\x12\n" + + "\x04cols\x18\x02 \x01(\fR\x04cols\"\xd5\x01\n" + + "\bRowEvent\x12\x1d\n" + + "\n" + + "table_name\x18\x01 \x01(\tR\ttableName\x126\n" + + "\vrow_changes\x18\x02 \x03(\v2\x15.binlogdata.RowChangeR\n" + + "rowChanges\x12\x1a\n" + + "\bkeyspace\x18\x03 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x04 \x01(\tR\x05shard\x12\x14\n" + + "\x05flags\x18\x05 \x01(\rR\x05flags\x12*\n" + + "\x11is_internal_table\x18\x06 \x01(\bR\x0fisInternalTable\"\xe4\x01\n" + + "\n" + + "FieldEvent\x12\x1d\n" + + "\n" + + "table_name\x18\x01 \x01(\tR\ttableName\x12$\n" + + "\x06fields\x18\x02 \x03(\v2\f.query.FieldR\x06fields\x12\x1a\n" + + "\bkeyspace\x18\x03 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x04 \x01(\tR\x05shard\x123\n" + + "\x16enum_set_string_values\x18\x19 \x01(\bR\x13enumSetStringValues\x12*\n" + + "\x11is_internal_table\x18\x1a \x01(\bR\x0fisInternalTable\"\x88\x01\n" + + "\tShardGtid\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x12\x12\n" + + "\x04gtid\x18\x03 \x01(\tR\x04gtid\x125\n" + + "\n" + + "table_p_ks\x18\x04 \x03(\v2\x17.binlogdata.TableLastPKR\btablePKs\"?\n" + + "\x05VGtid\x126\n" + + "\vshard_gtids\x18\x01 \x03(\v2\x15.binlogdata.ShardGtidR\n" + + "shardGtids\"A\n" + + "\rKeyspaceShard\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\"\xbc\x02\n" + + "\aJournal\x12\x0e\n" + + "\x02id\x18\x01 \x01(\x03R\x02id\x12@\n" + + "\x0emigration_type\x18\x02 \x01(\x0e2\x19.binlogdata.MigrationTypeR\rmigrationType\x12\x16\n" + + "\x06tables\x18\x03 \x03(\tR\x06tables\x12%\n" + + "\x0elocal_position\x18\x04 \x01(\tR\rlocalPosition\x126\n" + + "\vshard_gtids\x18\x05 \x03(\v2\x15.binlogdata.ShardGtidR\n" + + "shardGtids\x12=\n" + + "\fparticipants\x18\x06 \x03(\v2\x19.binlogdata.KeyspaceShardR\fparticipants\x12)\n" + + "\x10source_workflows\x18\a \x03(\tR\x0fsourceWorkflows\"\xb6\x04\n" + + "\x06VEvent\x12*\n" + + "\x04type\x18\x01 \x01(\x0e2\x16.binlogdata.VEventTypeR\x04type\x12\x1c\n" + + "\ttimestamp\x18\x02 \x01(\x03R\ttimestamp\x12\x12\n" + + "\x04gtid\x18\x03 \x01(\tR\x04gtid\x12\x1c\n" + + "\tstatement\x18\x04 \x01(\tR\tstatement\x121\n" + + "\trow_event\x18\x05 \x01(\v2\x14.binlogdata.RowEventR\browEvent\x127\n" + + "\vfield_event\x18\x06 \x01(\v2\x16.binlogdata.FieldEventR\n" + + "fieldEvent\x12'\n" + + "\x05vgtid\x18\a \x01(\v2\x11.binlogdata.VGtidR\x05vgtid\x12-\n" + + "\ajournal\x18\b \x01(\v2\x13.binlogdata.JournalR\ajournal\x12\x10\n" + + "\x03dml\x18\t \x01(\tR\x03dml\x12!\n" + + "\fcurrent_time\x18\x14 \x01(\x03R\vcurrentTime\x12<\n" + + "\x0elast_p_k_event\x18\x15 \x01(\v2\x17.binlogdata.LastPKEventR\vlastPKEvent\x12\x1a\n" + + "\bkeyspace\x18\x16 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x17 \x01(\tR\x05shard\x12\x1c\n" + + "\tthrottled\x18\x18 \x01(\bR\tthrottled\x12)\n" + + "\x10throttled_reason\x18\x19 \x01(\tR\x0fthrottledReason\"\x8d\x01\n" + + "\fMinimalTable\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12$\n" + + "\x06fields\x18\x02 \x03(\v2\f.query.FieldR\x06fields\x12\x1e\n" + + "\vp_k_columns\x18\x03 \x03(\x03R\tpKColumns\x12#\n" + + "\x0ep_k_index_name\x18\x04 \x01(\tR\vpKIndexName\"A\n" + + "\rMinimalSchema\x120\n" + + "\x06tables\x18\x01 \x03(\v2\x18.binlogdata.MinimalTableR\x06tables\"\xff\x01\n" + + "\x0eVStreamOptions\x12'\n" + + "\x0finternal_tables\x18\x01 \x03(\tR\x0einternalTables\x12Z\n" + + "\x10config_overrides\x18\x02 \x03(\v2/.binlogdata.VStreamOptions.ConfigOverridesEntryR\x0fconfigOverrides\x12$\n" + + "\x0etables_to_copy\x18\x03 \x03(\tR\ftablesToCopy\x1aB\n" + + "\x14ConfigOverridesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xfd\x02\n" + + "\x0eVStreamRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12\x1a\n" + + "\bposition\x18\x04 \x01(\tR\bposition\x12*\n" + + "\x06filter\x18\x05 \x01(\v2\x12.binlogdata.FilterR\x06filter\x12>\n" + + "\x0ftable_last_p_ks\x18\x06 \x03(\v2\x17.binlogdata.TableLastPKR\ftableLastPKs\x124\n" + + "\aoptions\x18\a \x01(\v2\x1a.binlogdata.VStreamOptionsR\aoptions\"=\n" + + "\x0fVStreamResponse\x12*\n" + + "\x06events\x18\x01 \x03(\v2\x12.binlogdata.VEventR\x06events\"\xbb\x02\n" + + "\x12VStreamRowsRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12\x14\n" + + "\x05query\x18\x04 \x01(\tR\x05query\x12*\n" + + "\x06lastpk\x18\x05 \x01(\v2\x12.query.QueryResultR\x06lastpk\x124\n" + + "\aoptions\x18\x06 \x01(\v2\x1a.binlogdata.VStreamOptionsR\aoptions\"\xa4\x02\n" + + "\x13VStreamRowsResponse\x12$\n" + + "\x06fields\x18\x01 \x03(\v2\f.query.FieldR\x06fields\x12(\n" + + "\bpkfields\x18\x02 \x03(\v2\f.query.FieldR\bpkfields\x12\x12\n" + + "\x04gtid\x18\x03 \x01(\tR\x04gtid\x12\x1e\n" + + "\x04rows\x18\x04 \x03(\v2\n" + + ".query.RowR\x04rows\x12\"\n" + + "\x06lastpk\x18\x05 \x01(\v2\n" + + ".query.RowR\x06lastpk\x12\x1c\n" + + "\tthrottled\x18\x06 \x01(\bR\tthrottled\x12\x1c\n" + + "\theartbeat\x18\a \x01(\bR\theartbeat\x12)\n" + + "\x10throttled_reason\x18\b \x01(\tR\x0fthrottledReason\"\xfb\x01\n" + + "\x14VStreamTablesRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x124\n" + + "\aoptions\x18\x04 \x01(\v2\x1a.binlogdata.VStreamOptionsR\aoptions\"\xde\x01\n" + + "\x15VStreamTablesResponse\x12\x1d\n" + + "\n" + + "table_name\x18\x01 \x01(\tR\ttableName\x12$\n" + + "\x06fields\x18\x02 \x03(\v2\f.query.FieldR\x06fields\x12(\n" + + "\bpkfields\x18\x03 \x03(\v2\f.query.FieldR\bpkfields\x12\x12\n" + + "\x04gtid\x18\x04 \x01(\tR\x04gtid\x12\x1e\n" + + "\x04rows\x18\x05 \x03(\v2\n" + + ".query.RowR\x04rows\x12\"\n" + + "\x06lastpk\x18\x06 \x01(\v2\n" + + ".query.RowR\x06lastpk\"i\n" + + "\vLastPKEvent\x12<\n" + + "\x0etable_last_p_k\x18\x01 \x01(\v2\x17.binlogdata.TableLastPKR\vtableLastPK\x12\x1c\n" + + "\tcompleted\x18\x02 \x01(\bR\tcompleted\"X\n" + + "\vTableLastPK\x12\x1d\n" + + "\n" + + "table_name\x18\x01 \x01(\tR\ttableName\x12*\n" + + "\x06lastpk\x18\x03 \x01(\v2\x12.query.QueryResultR\x06lastpk\"\xdc\x01\n" + + "\x15VStreamResultsRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12\x14\n" + + "\x05query\x18\x04 \x01(\tR\x05query\"r\n" + + "\x16VStreamResultsResponse\x12$\n" + + "\x06fields\x18\x01 \x03(\v2\f.query.FieldR\x06fields\x12\x12\n" + + "\x04gtid\x18\x03 \x01(\tR\x04gtid\x12\x1e\n" + + "\x04rows\x18\x04 \x03(\v2\n" + + ".query.RowR\x04rows*>\n" + + "\vOnDDLAction\x12\n" + + "\n" + + "\x06IGNORE\x10\x00\x12\b\n" + + "\x04STOP\x10\x01\x12\b\n" + + "\x04EXEC\x10\x02\x12\x0f\n" + + "\vEXEC_IGNORE\x10\x03*{\n" + + "\x18VReplicationWorkflowType\x12\x0f\n" + + "\vMaterialize\x10\x00\x12\x0e\n" + + "\n" + + "MoveTables\x10\x01\x12\x15\n" + + "\x11CreateLookupIndex\x10\x02\x12\v\n" + + "\aMigrate\x10\x03\x12\v\n" + + "\aReshard\x10\x04\x12\r\n" + + "\tOnlineDDL\x10\x05*D\n" + + "\x1bVReplicationWorkflowSubType\x12\b\n" + + "\x04None\x10\x00\x12\v\n" + + "\aPartial\x10\x01\x12\x0e\n" + + "\n" + + "AtomicCopy\x10\x02*q\n" + + "\x19VReplicationWorkflowState\x12\v\n" + + "\aUnknown\x10\x00\x12\b\n" + + "\x04Init\x10\x01\x12\v\n" + + "\aStopped\x10\x02\x12\v\n" + + "\aCopying\x10\x03\x12\v\n" + + "\aRunning\x10\x04\x12\t\n" + + "\x05Error\x10\x05\x12\v\n" + + "\aLagging\x10\x06*\x8d\x02\n" + + "\n" + + "VEventType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\b\n" + + "\x04GTID\x10\x01\x12\t\n" + + "\x05BEGIN\x10\x02\x12\n" + + "\n" + + "\x06COMMIT\x10\x03\x12\f\n" + + "\bROLLBACK\x10\x04\x12\a\n" + + "\x03DDL\x10\x05\x12\n" + + "\n" + + "\x06INSERT\x10\x06\x12\v\n" + + "\aREPLACE\x10\a\x12\n" + + "\n" + + "\x06UPDATE\x10\b\x12\n" + + "\n" + + "\x06DELETE\x10\t\x12\a\n" + + "\x03SET\x10\n" + + "\x12\t\n" + + "\x05OTHER\x10\v\x12\a\n" + + "\x03ROW\x10\f\x12\t\n" + + "\x05FIELD\x10\r\x12\r\n" + + "\tHEARTBEAT\x10\x0e\x12\t\n" + + "\x05VGTID\x10\x0f\x12\v\n" + + "\aJOURNAL\x10\x10\x12\v\n" + + "\aVERSION\x10\x11\x12\n" + + "\n" + + "\x06LASTPK\x10\x12\x12\r\n" + + "\tSAVEPOINT\x10\x13\x12\x12\n" + + "\x0eCOPY_COMPLETED\x10\x14*'\n" + + "\rMigrationType\x12\n" + + "\n" + + "\x06TABLES\x10\x00\x12\n" + + "\n" + + "\x06SHARDS\x10\x01B)Z'vitess.io/vitess/go/vt/proto/binlogdatab\x06proto3" var ( file_binlogdata_proto_rawDescOnce sync.Once diff --git a/go/vt/proto/binlogdata/binlogdata_vtproto.pb.go b/go/vt/proto/binlogdata/binlogdata_vtproto.pb.go index 315a753568f..74433a6d6b9 100644 --- a/go/vt/proto/binlogdata/binlogdata_vtproto.pb.go +++ b/go/vt/proto/binlogdata/binlogdata_vtproto.pb.go @@ -593,6 +593,11 @@ func (m *VStreamOptions) CloneVT() *VStreamOptions { } r.ConfigOverrides = tmpContainer } + if rhs := m.TablesToCopy; rhs != nil { + tmpContainer := make([]string, len(rhs)) + copy(tmpContainer, rhs) + r.TablesToCopy = tmpContainer + } if len(m.unknownFields) > 0 { r.unknownFields = make([]byte, len(m.unknownFields)) copy(r.unknownFields, m.unknownFields) @@ -2457,6 +2462,15 @@ func (m *VStreamOptions) MarshalToSizedBufferVT(dAtA []byte) (int, error) { i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } + if len(m.TablesToCopy) > 0 { + for iNdEx := len(m.TablesToCopy) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.TablesToCopy[iNdEx]) + copy(dAtA[i:], m.TablesToCopy[iNdEx]) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TablesToCopy[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } if len(m.ConfigOverrides) > 0 { for k := range m.ConfigOverrides { v := m.ConfigOverrides[k] @@ -3962,6 +3976,12 @@ func (m *VStreamOptions) SizeVT() (n int) { n += mapEntrySize + 1 + protohelpers.SizeOfVarint(uint64(mapEntrySize)) } } + if len(m.TablesToCopy) > 0 { + for _, s := range m.TablesToCopy { + l = len(s) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + } n += len(m.unknownFields) return n } @@ -8765,6 +8785,38 @@ func (m *VStreamOptions) UnmarshalVT(dAtA []byte) error { } m.ConfigOverrides[mapkey] = mapvalue iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TablesToCopy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TablesToCopy = append(m.TablesToCopy, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := protohelpers.Skip(dAtA[iNdEx:]) diff --git a/go/vt/proto/binlogservice/binlogservice.pb.go b/go/vt/proto/binlogservice/binlogservice.pb.go index a4cf9189ad8..c4eda50f9c9 100644 --- a/go/vt/proto/binlogservice/binlogservice.pb.go +++ b/go/vt/proto/binlogservice/binlogservice.pb.go @@ -19,7 +19,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v3.21.3 // source: binlogservice.proto @@ -42,28 +42,12 @@ const ( var File_binlogservice_proto protoreflect.FileDescriptor -var file_binlogservice_proto_rawDesc = string([]byte{ - 0x0a, 0x13, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0d, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x1a, 0x10, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xc2, 0x01, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x5b, 0x0a, 0x0e, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x4b, 0x65, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x21, 0x2e, 0x62, 0x69, 0x6e, 0x6c, - 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4b, 0x65, 0x79, - 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x62, - 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x4b, 0x65, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x30, 0x01, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x42, 0x2c, 0x5a, 0x2a, 0x76, - 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, - 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x62, 0x69, 0x6e, 0x6c, - 0x6f, 0x67, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, -}) +const file_binlogservice_proto_rawDesc = "" + + "\n" + + "\x13binlogservice.proto\x12\rbinlogservice\x1a\x10binlogdata.proto2\xc2\x01\n" + + "\fUpdateStream\x12[\n" + + "\x0eStreamKeyRange\x12!.binlogdata.StreamKeyRangeRequest\x1a\".binlogdata.StreamKeyRangeResponse\"\x000\x01\x12U\n" + + "\fStreamTables\x12\x1f.binlogdata.StreamTablesRequest\x1a .binlogdata.StreamTablesResponse\"\x000\x01B,Z*vitess.io/vitess/go/vt/proto/binlogserviceb\x06proto3" var file_binlogservice_proto_goTypes = []any{ (*binlogdata.StreamKeyRangeRequest)(nil), // 0: binlogdata.StreamKeyRangeRequest diff --git a/go/vt/proto/logutil/logutil.pb.go b/go/vt/proto/logutil/logutil.pb.go index 7db6db2fe70..52d9c6aed9a 100644 --- a/go/vt/proto/logutil/logutil.pb.go +++ b/go/vt/proto/logutil/logutil.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v3.21.3 // source: logutil.proto @@ -175,26 +175,20 @@ func (x *Event) GetValue() string { var File_logutil_proto protoreflect.FileDescriptor -var file_logutil_proto_rawDesc = string([]byte{ - 0x0a, 0x0d, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x07, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x1a, 0x0c, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8d, 0x01, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x20, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, - 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x04, 0x74, 0x69, - 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x36, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, - 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x41, 0x52, - 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, - 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4f, 0x4e, 0x53, 0x4f, 0x4c, 0x45, 0x10, 0x03, 0x42, 0x26, - 0x5a, 0x24, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, - 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6c, - 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_logutil_proto_rawDesc = "" + + "\n" + + "\rlogutil.proto\x12\alogutil\x1a\fvttime.proto\"\x8d\x01\n" + + "\x05Event\x12 \n" + + "\x04time\x18\x01 \x01(\v2\f.vttime.TimeR\x04time\x12$\n" + + "\x05level\x18\x02 \x01(\x0e2\x0e.logutil.LevelR\x05level\x12\x12\n" + + "\x04file\x18\x03 \x01(\tR\x04file\x12\x12\n" + + "\x04line\x18\x04 \x01(\x03R\x04line\x12\x14\n" + + "\x05value\x18\x05 \x01(\tR\x05value*6\n" + + "\x05Level\x12\b\n" + + "\x04INFO\x10\x00\x12\v\n" + + "\aWARNING\x10\x01\x12\t\n" + + "\x05ERROR\x10\x02\x12\v\n" + + "\aCONSOLE\x10\x03B&Z$vitess.io/vitess/go/vt/proto/logutilb\x06proto3" var ( file_logutil_proto_rawDescOnce sync.Once diff --git a/go/vt/proto/mysqlctl/mysqlctl.pb.go b/go/vt/proto/mysqlctl/mysqlctl.pb.go index 9b7c80e5173..da11d5e9a43 100644 --- a/go/vt/proto/mysqlctl/mysqlctl.pb.go +++ b/go/vt/proto/mysqlctl/mysqlctl.pb.go @@ -18,7 +18,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v3.21.3 // source: mysqlctl.proto @@ -1028,168 +1028,75 @@ func (x *HostMetricsResponse_Metric) GetError() *vtrpc.RPCError { var File_mysqlctl_proto protoreflect.FileDescriptor -var file_mysqlctl_proto_rawDesc = string([]byte{ - 0x0a, 0x0e, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x08, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x1a, 0x0e, 0x74, 0x6f, 0x70, 0x6f, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0c, 0x76, 0x74, 0x74, 0x69, - 0x6d, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0b, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x2f, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x64, 0x5f, - 0x61, 0x72, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x79, 0x73, 0x71, - 0x6c, 0x64, 0x41, 0x72, 0x67, 0x73, 0x22, 0x0f, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x81, 0x01, 0x0a, 0x0f, 0x53, 0x68, 0x75, 0x74, - 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x77, - 0x61, 0x69, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x77, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x4d, 0x79, 0x73, - 0x71, 0x6c, 0x64, 0x12, 0x46, 0x0a, 0x16, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x5f, 0x73, 0x68, 0x75, - 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x53, 0x68, 0x75, 0x74, - 0x64, 0x6f, 0x77, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0x12, 0x0a, 0x10, 0x53, - 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x18, 0x0a, 0x16, 0x52, 0x75, 0x6e, 0x4d, 0x79, 0x73, 0x71, 0x6c, 0x55, 0x70, 0x67, 0x72, 0x61, - 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x19, 0x0a, 0x17, 0x52, 0x75, 0x6e, - 0x4d, 0x79, 0x73, 0x71, 0x6c, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc0, 0x01, 0x0a, 0x16, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x42, 0x69, - 0x6e, 0x6c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x28, 0x0a, 0x10, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, - 0x67, 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x62, 0x69, 0x6e, - 0x6c, 0x6f, 0x67, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x62, 0x69, 0x6e, 0x6c, - 0x6f, 0x67, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x44, 0x0a, 0x17, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x5f, 0x72, 0x65, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x52, 0x15, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x44, - 0x61, 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x19, 0x0a, 0x17, 0x41, 0x70, 0x70, 0x6c, 0x79, - 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x4e, 0x0a, 0x20, 0x52, 0x65, 0x61, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, - 0x46, 0x69, 0x6c, 0x65, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, - 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0f, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x22, 0xf9, 0x01, 0x0a, 0x21, 0x52, 0x65, 0x61, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, - 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x0f, 0x66, 0x69, 0x72, 0x73, - 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, - 0x0e, 0x66, 0x69, 0x72, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, - 0x34, 0x0a, 0x16, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x5f, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x14, 0x66, 0x69, 0x72, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, - 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x12, 0x33, 0x0a, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, - 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0d, 0x6c, 0x61, 0x73, - 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x32, 0x0a, 0x15, 0x6c, 0x61, - 0x73, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x62, 0x69, 0x6e, - 0x6c, 0x6f, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x6c, 0x61, 0x73, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x22, 0x15, - 0x0a, 0x13, 0x52, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x16, 0x0a, 0x14, 0x52, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x0a, - 0x14, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x17, 0x0a, 0x15, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, - 0x0a, 0x14, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x31, 0x0a, 0x15, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x14, 0x0a, 0x12, 0x48, 0x6f, 0x73, - 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0x98, 0x02, 0x0a, 0x13, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6d, 0x79, 0x73, 0x71, 0x6c, - 0x63, 0x74, 0x6c, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x1a, 0x59, 0x0a, - 0x06, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x25, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x1a, 0x60, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3a, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6d, 0x79, 0x73, 0x71, - 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe6, 0x02, 0x0a, 0x0a, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x6b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x38, 0x0a, - 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x20, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x67, - 0x69, 0x6e, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x67, 0x69, 0x6e, - 0x65, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x1b, 0x2e, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x4b, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0e, 0x0a, - 0x0a, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, - 0x08, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x49, - 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x56, 0x41, 0x4c, 0x49, - 0x44, 0x10, 0x04, 0x32, 0xfe, 0x05, 0x0a, 0x08, 0x4d, 0x79, 0x73, 0x71, 0x6c, 0x43, 0x74, 0x6c, - 0x12, 0x3a, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x16, 0x2e, 0x6d, 0x79, 0x73, 0x71, - 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x17, 0x2e, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x08, - 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x19, 0x2e, 0x6d, 0x79, 0x73, 0x71, 0x6c, - 0x63, 0x74, 0x6c, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x53, - 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x58, 0x0a, 0x0f, 0x52, 0x75, 0x6e, 0x4d, 0x79, 0x73, 0x71, 0x6c, 0x55, 0x70, 0x67, - 0x72, 0x61, 0x64, 0x65, 0x12, 0x20, 0x2e, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x2e, - 0x52, 0x75, 0x6e, 0x4d, 0x79, 0x73, 0x71, 0x6c, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x63, 0x74, - 0x6c, 0x2e, 0x52, 0x75, 0x6e, 0x4d, 0x79, 0x73, 0x71, 0x6c, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x0f, 0x41, - 0x70, 0x70, 0x6c, 0x79, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x20, - 0x2e, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x42, - 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x21, 0x2e, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x6c, - 0x79, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x19, 0x52, 0x65, 0x61, 0x64, 0x42, 0x69, 0x6e, - 0x6c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x73, 0x12, 0x2a, 0x2e, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x52, 0x65, - 0x61, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, - 0x2e, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x42, 0x69, - 0x6e, 0x6c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, - 0x0c, 0x52, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1d, 0x2e, - 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x52, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6d, - 0x79, 0x73, 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x52, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, - 0x0a, 0x0d, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, - 0x1e, 0x2e, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, - 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1f, 0x2e, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, - 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x12, 0x1e, 0x2e, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x1c, 0x2e, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x63, 0x74, 0x6c, - 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x48, - 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x42, 0x27, 0x5a, 0x25, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, - 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_mysqlctl_proto_rawDesc = "" + + "\n" + + "\x0emysqlctl.proto\x12\bmysqlctl\x1a\x0etopodata.proto\x1a\fvttime.proto\x1a\vvtrpc.proto\"/\n" + + "\fStartRequest\x12\x1f\n" + + "\vmysqld_args\x18\x01 \x03(\tR\n" + + "mysqldArgs\"\x0f\n" + + "\rStartResponse\"\x81\x01\n" + + "\x0fShutdownRequest\x12&\n" + + "\x0fwait_for_mysqld\x18\x01 \x01(\bR\rwaitForMysqld\x12F\n" + + "\x16mysql_shutdown_timeout\x18\x02 \x01(\v2\x10.vttime.DurationR\x14mysqlShutdownTimeout\"\x12\n" + + "\x10ShutdownResponse\"\x18\n" + + "\x16RunMysqlUpgradeRequest\"\x19\n" + + "\x17RunMysqlUpgradeResponse\"\xc0\x01\n" + + "\x16ApplyBinlogFileRequest\x12(\n" + + "\x10binlog_file_name\x18\x01 \x01(\tR\x0ebinlogFileName\x126\n" + + "\x17binlog_restore_position\x18\x02 \x01(\tR\x15binlogRestorePosition\x12D\n" + + "\x17binlog_restore_datetime\x18\x03 \x01(\v2\f.vttime.TimeR\x15binlogRestoreDatetime\"\x19\n" + + "\x17ApplyBinlogFileResponse\"N\n" + + " ReadBinlogFilesTimestampsRequest\x12*\n" + + "\x11binlog_file_names\x18\x01 \x03(\tR\x0fbinlogFileNames\"\xf9\x01\n" + + "!ReadBinlogFilesTimestampsResponse\x125\n" + + "\x0ffirst_timestamp\x18\x01 \x01(\v2\f.vttime.TimeR\x0efirstTimestamp\x124\n" + + "\x16first_timestamp_binlog\x18\x02 \x01(\tR\x14firstTimestampBinlog\x123\n" + + "\x0elast_timestamp\x18\x03 \x01(\v2\f.vttime.TimeR\rlastTimestamp\x122\n" + + "\x15last_timestamp_binlog\x18\x04 \x01(\tR\x13lastTimestampBinlog\"\x15\n" + + "\x13ReinitConfigRequest\"\x16\n" + + "\x14ReinitConfigResponse\"\x16\n" + + "\x14RefreshConfigRequest\"\x17\n" + + "\x15RefreshConfigResponse\"\x16\n" + + "\x14VersionStringRequest\"1\n" + + "\x15VersionStringResponse\x12\x18\n" + + "\aversion\x18\x01 \x01(\tR\aversion\"\x14\n" + + "\x12HostMetricsRequest\"\x98\x02\n" + + "\x13HostMetricsResponse\x12D\n" + + "\ametrics\x18\x01 \x03(\v2*.mysqlctl.HostMetricsResponse.MetricsEntryR\ametrics\x1aY\n" + + "\x06Metric\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n" + + "\x05value\x18\x02 \x01(\x01R\x05value\x12%\n" + + "\x05error\x18\x03 \x01(\v2\x0f.vtrpc.RPCErrorR\x05error\x1a`\n" + + "\fMetricsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12:\n" + + "\x05value\x18\x02 \x01(\v2$.mysqlctl.HostMetricsResponse.MetricR\x05value:\x028\x01\"\xe6\x02\n" + + "\n" + + "BackupInfo\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x1c\n" + + "\tdirectory\x18\x02 \x01(\tR\tdirectory\x12\x1a\n" + + "\bkeyspace\x18\x03 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x04 \x01(\tR\x05shard\x128\n" + + "\ftablet_alias\x18\x05 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\x12 \n" + + "\x04time\x18\x06 \x01(\v2\f.vttime.TimeR\x04time\x12\x16\n" + + "\x06engine\x18\a \x01(\tR\x06engine\x123\n" + + "\x06status\x18\b \x01(\x0e2\x1b.mysqlctl.BackupInfo.StatusR\x06status\"K\n" + + "\x06Status\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\x0e\n" + + "\n" + + "INCOMPLETE\x10\x01\x12\f\n" + + "\bCOMPLETE\x10\x02\x12\v\n" + + "\aINVALID\x10\x03\x12\t\n" + + "\x05VALID\x10\x042\xfe\x05\n" + + "\bMysqlCtl\x12:\n" + + "\x05Start\x12\x16.mysqlctl.StartRequest\x1a\x17.mysqlctl.StartResponse\"\x00\x12C\n" + + "\bShutdown\x12\x19.mysqlctl.ShutdownRequest\x1a\x1a.mysqlctl.ShutdownResponse\"\x00\x12X\n" + + "\x0fRunMysqlUpgrade\x12 .mysqlctl.RunMysqlUpgradeRequest\x1a!.mysqlctl.RunMysqlUpgradeResponse\"\x00\x12X\n" + + "\x0fApplyBinlogFile\x12 .mysqlctl.ApplyBinlogFileRequest\x1a!.mysqlctl.ApplyBinlogFileResponse\"\x00\x12v\n" + + "\x19ReadBinlogFilesTimestamps\x12*.mysqlctl.ReadBinlogFilesTimestampsRequest\x1a+.mysqlctl.ReadBinlogFilesTimestampsResponse\"\x00\x12O\n" + + "\fReinitConfig\x12\x1d.mysqlctl.ReinitConfigRequest\x1a\x1e.mysqlctl.ReinitConfigResponse\"\x00\x12R\n" + + "\rRefreshConfig\x12\x1e.mysqlctl.RefreshConfigRequest\x1a\x1f.mysqlctl.RefreshConfigResponse\"\x00\x12R\n" + + "\rVersionString\x12\x1e.mysqlctl.VersionStringRequest\x1a\x1f.mysqlctl.VersionStringResponse\"\x00\x12L\n" + + "\vHostMetrics\x12\x1c.mysqlctl.HostMetricsRequest\x1a\x1d.mysqlctl.HostMetricsResponse\"\x00B'Z%vitess.io/vitess/go/vt/proto/mysqlctlb\x06proto3" var ( file_mysqlctl_proto_rawDescOnce sync.Once diff --git a/go/vt/proto/query/query.pb.go b/go/vt/proto/query/query.pb.go index e7f4688c376..73440c8cbcd 100644 --- a/go/vt/proto/query/query.pb.go +++ b/go/vt/proto/query/query.pb.go @@ -18,7 +18,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v3.21.3 // source: query.proto @@ -5787,978 +5787,512 @@ func (x *StreamEvent_Statement) GetSql() []byte { var File_query_proto protoreflect.FileDescriptor -var file_query_proto_rawDesc = string([]byte{ - 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x1a, 0x0e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0b, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0x85, 0x01, 0x0a, 0x06, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x1a, 0x0a, 0x08, - 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x35, - 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x22, 0x44, 0x0a, 0x0e, 0x56, 0x54, 0x47, - 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x75, - 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, - 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, - 0x5c, 0x0a, 0x0a, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x0a, - 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x73, - 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, - 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x0a, - 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x6b, 0x0a, - 0x0c, 0x42, 0x69, 0x6e, 0x64, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1f, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x24, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xc2, 0x01, 0x0a, 0x0a, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x71, 0x6c, 0x12, 0x4b, 0x0a, 0x0e, 0x62, - 0x69, 0x6e, 0x64, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75, 0x6e, - 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x56, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x62, 0x69, 0x6e, 0x64, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x1a, 0x55, 0x0a, 0x12, 0x42, 0x69, 0x6e, 0x64, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0xb5, 0x0c, 0x0a, 0x0e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x4d, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x5f, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x73, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x6f, 0x75, 0x6e, - 0x64, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x3a, 0x0a, - 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1e, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x52, - 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x71, 0x6c, - 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0e, 0x73, 0x71, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x12, 0x5f, 0x0a, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x73, 0x6f, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x15, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x12, 0x73, 0x6b, 0x69, 0x70, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6c, - 0x61, 0x6e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x4d, 0x0a, 0x0f, 0x70, 0x6c, 0x61, 0x6e, 0x6e, - 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x24, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x17, 0x68, 0x61, 0x73, 0x5f, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x68, 0x61, 0x73, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x46, 0x0a, - 0x0c, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x45, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x6f, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x63, 0x0a, 0x17, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x65, - 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x45, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, - 0x6f, 0x64, 0x65, 0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x57, 0x6f, - 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x35, 0x0a, 0x15, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x14, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, - 0x74, 0x12, 0x2f, 0x0a, 0x14, 0x66, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, - 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x11, 0x66, 0x65, 0x74, 0x63, 0x68, 0x4c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, - 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x69, 0x6e, 0x5f, 0x64, 0x6d, 0x6c, 0x5f, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, - 0x44, 0x6d, 0x6c, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3b, 0x0a, 0x0e, - 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x11, - 0x0a, 0x0d, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, - 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, - 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x02, 0x22, 0x38, 0x0a, 0x08, 0x57, 0x6f, 0x72, - 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4f, 0x4c, 0x54, 0x50, 0x10, 0x01, - 0x12, 0x08, 0x0a, 0x04, 0x4f, 0x4c, 0x41, 0x50, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x44, 0x42, - 0x41, 0x10, 0x03, 0x22, 0xa7, 0x01, 0x0a, 0x14, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, - 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x45, 0x50, - 0x45, 0x41, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x10, 0x01, 0x12, 0x12, - 0x0a, 0x0e, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x54, 0x45, 0x44, - 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x55, 0x4e, 0x43, 0x4f, 0x4d, - 0x4d, 0x49, 0x54, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x45, 0x52, 0x49, - 0x41, 0x4c, 0x49, 0x5a, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x04, 0x12, 0x21, 0x0a, 0x1d, 0x43, 0x4f, - 0x4e, 0x53, 0x49, 0x53, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x4e, 0x41, 0x50, 0x53, 0x48, 0x4f, - 0x54, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x05, 0x12, 0x0e, 0x0a, - 0x0a, 0x41, 0x55, 0x54, 0x4f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x06, 0x22, 0x92, 0x01, - 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x50, 0x4c, 0x41, 0x4e, - 0x4e, 0x45, 0x52, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x56, 0x33, 0x10, 0x01, 0x12, 0x08, 0x0a, - 0x04, 0x47, 0x65, 0x6e, 0x34, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x47, 0x65, 0x6e, 0x34, 0x47, - 0x72, 0x65, 0x65, 0x64, 0x79, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x34, 0x4c, - 0x65, 0x66, 0x74, 0x32, 0x52, 0x69, 0x67, 0x68, 0x74, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x47, - 0x65, 0x6e, 0x34, 0x57, 0x69, 0x74, 0x68, 0x46, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x10, - 0x05, 0x12, 0x11, 0x0a, 0x0d, 0x47, 0x65, 0x6e, 0x34, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, - 0x56, 0x33, 0x10, 0x06, 0x12, 0x0c, 0x0a, 0x08, 0x56, 0x33, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, - 0x10, 0x07, 0x22, 0x84, 0x01, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x18, 0x43, 0x4f, 0x4e, 0x53, 0x4f, 0x4c, 0x49, 0x44, 0x41, - 0x54, 0x4f, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x4f, 0x4e, 0x53, 0x4f, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, - 0x52, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, - 0x43, 0x4f, 0x4e, 0x53, 0x4f, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x41, - 0x42, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x21, 0x0a, 0x1d, 0x43, 0x4f, 0x4e, 0x53, 0x4f, 0x4c, - 0x49, 0x44, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x5f, 0x52, - 0x45, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x53, 0x10, 0x03, 0x22, 0x4f, 0x0a, 0x15, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, - 0x64, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4f, 0x4e, 0x53, 0x49, 0x53, 0x54, 0x45, 0x4e, 0x54, - 0x5f, 0x53, 0x4e, 0x41, 0x50, 0x53, 0x48, 0x4f, 0x54, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x52, - 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x52, - 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x02, 0x42, 0x09, 0x0a, 0x07, 0x74, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x02, 0x10, - 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xb8, 0x02, 0x0a, 0x05, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x09, - 0x6f, 0x72, 0x67, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x6f, 0x72, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x72, 0x67, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x67, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4c, - 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x12, - 0x1a, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x66, - 0x6c, 0x61, 0x67, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, - 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, - 0x70, 0x65, 0x22, 0x37, 0x0a, 0x03, 0x52, 0x6f, 0x77, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x12, 0x52, 0x07, 0x6c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x8f, 0x02, 0x0a, 0x0b, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x24, 0x0a, 0x06, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x72, 0x6f, 0x77, 0x73, 0x41, 0x66, - 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x65, 0x72, - 0x74, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x0a, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x6f, 0x77, 0x52, 0x04, 0x72, - 0x6f, 0x77, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x69, - 0x6e, 0x73, 0x65, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x49, 0x64, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0x3c, 0x0a, - 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x12, 0x0a, - 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa0, 0x03, 0x0a, 0x0b, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x3c, 0x0a, 0x0a, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x0b, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x52, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x1a, 0x9e, 0x02, - 0x0a, 0x09, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x08, 0x63, - 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x61, 0x74, 0x65, - 0x67, 0x6f, 0x72, 0x79, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x1d, - 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, - 0x12, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x10, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, - 0x4b, 0x65, 0x79, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x38, 0x0a, 0x12, 0x70, 0x72, 0x69, - 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x6f, - 0x77, 0x52, 0x10, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x03, 0x73, 0x71, 0x6c, 0x22, 0x27, 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, - 0x79, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, - 0x44, 0x4d, 0x4c, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x44, 0x44, 0x4c, 0x10, 0x02, 0x22, 0xe1, - 0x02, 0x0a, 0x0e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, - 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, - 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, - 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, - 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, - 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, - 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x12, 0x27, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x11, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x12, 0x2f, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, - 0x49, 0x64, 0x22, 0x3d, 0x0a, 0x0f, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x64, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, - 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xe7, 0x02, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, - 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, - 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, - 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, - 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, - 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, - 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, - 0x27, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2f, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, - 0x64, 0x22, 0x43, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xee, 0x01, 0x0a, 0x0c, 0x42, 0x65, 0x67, 0x69, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, - 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, - 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, - 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, - 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x2f, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xa4, 0x01, 0x0a, 0x0d, 0x42, 0x65, 0x67, 0x69, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x73, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22, 0xe5, - 0x01, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, - 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, - 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, - 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, - 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, - 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, - 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, - 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x31, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64, 0x22, 0xe7, 0x01, 0x0a, 0x0f, 0x52, 0x6f, - 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, - 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, - 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, - 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, - 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, - 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x25, 0x0a, 0x0e, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x22, 0x33, 0x0a, 0x10, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64, 0x22, 0xfa, 0x01, 0x0a, 0x0e, 0x50, 0x72, 0x65, - 0x70, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, - 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, - 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, - 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x74, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x64, 0x74, 0x69, 0x64, 0x22, 0x11, 0x0a, 0x0f, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xda, 0x01, 0x0a, 0x15, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, - 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, - 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, - 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, - 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, - 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x74, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x64, 0x74, 0x69, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x50, - 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x83, 0x02, 0x0a, 0x17, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x50, 0x72, 0x65, 0x70, - 0x61, 0x72, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, - 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, - 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, - 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x74, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x64, 0x74, 0x69, 0x64, 0x22, 0x1a, 0x0a, 0x18, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, - 0x6b, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x90, 0x02, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, - 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, - 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, - 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, - 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, - 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, - 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x64, 0x74, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, - 0x64, 0x12, 0x31, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, - 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, - 0x61, 0x6e, 0x74, 0x73, 0x22, 0x1b, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0xfe, 0x01, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, - 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, - 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, - 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, - 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, - 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x64, 0x74, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, - 0x69, 0x64, 0x22, 0x44, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0xfe, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x74, - 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, - 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, - 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, - 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, - 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, - 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x25, - 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x74, 0x69, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x65, 0x74, - 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0xdf, 0x01, 0x0a, 0x1a, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, - 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, - 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, - 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, - 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, - 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x12, - 0x0a, 0x04, 0x64, 0x74, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, - 0x69, 0x64, 0x22, 0x1d, 0x0a, 0x1b, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0xdb, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x61, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, - 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, - 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, - 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, - 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, - 0x74, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, 0x64, 0x22, - 0x51, 0x0a, 0x17, 0x52, 0x65, 0x61, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x08, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x22, 0xef, 0x01, 0x0a, 0x1d, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, - 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, - 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, - 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, - 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, - 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, - 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x62, 0x61, 0x6e, 0x64, 0x6f, 0x6e, 0x5f, 0x61, - 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x61, 0x62, 0x61, 0x6e, 0x64, 0x6f, - 0x6e, 0x41, 0x67, 0x65, 0x22, 0x60, 0x0a, 0x1e, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, - 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe0, 0x02, 0x0a, 0x13, 0x42, 0x65, 0x67, 0x69, 0x6e, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, - 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, - 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, - 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, - 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, - 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, - 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x27, 0x0a, - 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, - 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2f, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x5f, - 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, - 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xfe, 0x01, 0x0a, 0x14, 0x42, 0x65, - 0x67, 0x69, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x0c, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22, 0xe6, 0x02, 0x0a, 0x19, 0x42, - 0x65, 0x67, 0x69, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, - 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, - 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, - 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, - 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, - 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x27, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x12, 0x2f, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x69, - 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x64, 0x49, 0x64, 0x22, 0x84, 0x02, 0x0a, 0x1a, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x0c, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22, 0xd9, 0x01, 0x0a, 0x14, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, - 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, - 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, - 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, - 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x43, 0x0a, 0x15, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xf6, 0x01, 0x0a, 0x11, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, - 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, - 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, - 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, - 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, - 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, - 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x0c, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x03, 0x69, 0x64, 0x73, 0x22, 0x40, 0x0a, 0x12, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, - 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xe8, 0x02, 0x0a, 0x15, 0x52, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, - 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, - 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, - 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, - 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, - 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, - 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, - 0x27, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, - 0x2f, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, - 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, - 0x73, 0x22, 0xc6, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, - 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, - 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64, - 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0xee, 0x02, 0x0a, 0x1b, 0x52, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, - 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, - 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, - 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, - 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x27, 0x0a, 0x05, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x12, 0x2f, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x45, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, - 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0a, 0x70, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xcc, 0x01, 0x0a, 0x1c, - 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, - 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, - 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64, - 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0xf4, 0x02, 0x0a, 0x1a, 0x52, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, - 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, - 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, - 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x27, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x12, 0x2f, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, - 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x62, 0x65, 0x67, 0x69, - 0x6e, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x10, 0x70, 0x6f, 0x73, 0x74, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, - 0x73, 0x22, 0xa6, 0x02, 0x0a, 0x1b, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x42, 0x65, 0x67, - 0x69, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x25, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0a, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x0c, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22, 0xfa, 0x02, 0x0a, 0x20, 0x52, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, - 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, - 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, - 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, - 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, - 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x27, - 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2f, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x5f, - 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, - 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x6f, 0x73, - 0x74, 0x5f, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, - 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x74, 0x42, 0x65, 0x67, 0x69, 0x6e, - 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xac, 0x02, 0x0a, 0x21, 0x52, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, - 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, - 0x61, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x13, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22, 0x87, 0x02, 0x0a, 0x0e, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, - 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, - 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, - 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, - 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64, - 0x22, 0x11, 0x0a, 0x0f, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x48, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xbe, 0x03, 0x0a, 0x0d, 0x52, - 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, - 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, - 0x36, 0x0a, 0x17, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, - 0x61, 0x67, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x15, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, - 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x62, 0x69, 0x6e, 0x6c, 0x6f, - 0x67, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x20, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x1d, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, 0x53, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x63, 0x70, 0x75, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x10, 0x0a, 0x03, 0x71, 0x70, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x71, 0x70, - 0x73, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x12, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x11, 0x76, 0x69, 0x65, 0x77, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x64, 0x66, 0x73, 0x5f, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x64, 0x66, 0x73, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x78, 0x5f, 0x75, 0x6e, 0x72, - 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x74, - 0x78, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0xf6, 0x01, 0x0a, 0x0e, - 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x30, - 0x0a, 0x14, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x68, 0x65, - 0x61, 0x6c, 0x74, 0x68, 0x79, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x34, 0x0a, 0x16, 0x75, 0x6e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x5f, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x14, 0x75, 0x6e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x1b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, - 0x73, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x18, 0x72, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, 0x53, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x73, 0x4d, 0x69, 0x6e, 0x12, 0x3d, 0x0a, 0x1b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, - 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x18, 0x72, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, - 0x73, 0x4d, 0x61, 0x78, 0x22, 0x95, 0x02, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x48, - 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, - 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x12, 0x3f, - 0x0a, 0x1c, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x74, 0x65, 0x72, 0x6d, 0x5f, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x19, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x54, 0x65, 0x72, - 0x6d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, - 0x3b, 0x0a, 0x0e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x52, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0d, 0x72, - 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x38, 0x0a, 0x0c, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0xae, 0x01, 0x0a, - 0x13, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x74, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x5f, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, - 0x69, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x31, 0x0a, 0x0c, 0x70, 0x61, - 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, - 0x0c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x22, 0x91, 0x01, - 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x35, 0x0a, 0x0a, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x22, 0x6d, 0x0a, 0x07, 0x55, 0x44, 0x46, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, - 0x6e, 0x67, 0x12, 0x2c, 0x0a, 0x0b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x54, 0x79, 0x70, 0x65, - 0x22, 0xd5, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x04, 0x75, 0x64, 0x66, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x55, 0x44, 0x46, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x75, 0x64, 0x66, 0x73, 0x12, 0x58, 0x0a, 0x10, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x0f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x42, 0x0a, 0x14, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x66, - 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0x92, 0x03, 0x0a, 0x09, 0x4d, 0x79, 0x53, - 0x71, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x10, - 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x46, 0x4c, - 0x41, 0x47, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x52, 0x49, 0x5f, 0x4b, 0x45, 0x59, 0x5f, - 0x46, 0x4c, 0x41, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x4e, 0x49, 0x51, 0x55, 0x45, - 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x4d, - 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, - 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, - 0x10, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, 0x5f, 0x46, 0x4c, - 0x41, 0x47, 0x10, 0x20, 0x12, 0x11, 0x0a, 0x0d, 0x5a, 0x45, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x4c, - 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x40, 0x12, 0x10, 0x0a, 0x0b, 0x42, 0x49, 0x4e, 0x41, 0x52, - 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x45, 0x4e, 0x55, - 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x02, 0x12, 0x18, 0x0a, 0x13, 0x41, 0x55, 0x54, - 0x4f, 0x5f, 0x49, 0x4e, 0x43, 0x52, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x46, 0x4c, 0x41, 0x47, - 0x10, 0x80, 0x04, 0x12, 0x13, 0x0a, 0x0e, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, - 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08, 0x53, 0x45, 0x54, 0x5f, - 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x10, 0x12, 0x1a, 0x0a, 0x15, 0x4e, 0x4f, 0x5f, 0x44, 0x45, - 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x46, 0x4c, 0x41, 0x47, - 0x10, 0x80, 0x20, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, - 0x5f, 0x4e, 0x4f, 0x57, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x40, 0x12, 0x0e, 0x0a, 0x08, - 0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x02, 0x12, 0x13, 0x0a, 0x0d, - 0x50, 0x41, 0x52, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, - 0x01, 0x12, 0x10, 0x0a, 0x0a, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, - 0x80, 0x80, 0x02, 0x12, 0x11, 0x0a, 0x0b, 0x55, 0x4e, 0x49, 0x51, 0x55, 0x45, 0x5f, 0x46, 0x4c, - 0x41, 0x47, 0x10, 0x80, 0x80, 0x04, 0x12, 0x11, 0x0a, 0x0b, 0x42, 0x49, 0x4e, 0x43, 0x4d, 0x50, - 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x08, 0x1a, 0x02, 0x10, 0x01, 0x2a, 0x6b, 0x0a, - 0x04, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, - 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x4c, 0x10, 0x80, 0x02, - 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, 0x10, 0x80, - 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x49, 0x53, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x80, 0x08, 0x12, - 0x0d, 0x0a, 0x08, 0x49, 0x53, 0x51, 0x55, 0x4f, 0x54, 0x45, 0x44, 0x10, 0x80, 0x10, 0x12, 0x0b, - 0x0a, 0x06, 0x49, 0x53, 0x54, 0x45, 0x58, 0x54, 0x10, 0x80, 0x20, 0x12, 0x0d, 0x0a, 0x08, 0x49, - 0x53, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x80, 0x40, 0x2a, 0xe7, 0x03, 0x0a, 0x04, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x10, 0x00, 0x12, 0x09, 0x0a, 0x04, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x81, 0x02, 0x12, 0x0a, 0x0a, - 0x05, 0x55, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x82, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, - 0x31, 0x36, 0x10, 0x83, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x31, 0x36, 0x10, - 0x84, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, 0x85, 0x02, 0x12, 0x0b, - 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, 0x86, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, - 0x4e, 0x54, 0x33, 0x32, 0x10, 0x87, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x33, - 0x32, 0x10, 0x88, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x89, 0x02, - 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x8a, 0x06, 0x12, 0x0c, 0x0a, - 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x33, 0x32, 0x10, 0x8b, 0x08, 0x12, 0x0c, 0x0a, 0x07, 0x46, - 0x4c, 0x4f, 0x41, 0x54, 0x36, 0x34, 0x10, 0x8c, 0x08, 0x12, 0x0e, 0x0a, 0x09, 0x54, 0x49, 0x4d, - 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x8d, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x44, 0x41, 0x54, - 0x45, 0x10, 0x8e, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x8f, 0x10, 0x12, - 0x0d, 0x0a, 0x08, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x90, 0x10, 0x12, 0x09, - 0x0a, 0x04, 0x59, 0x45, 0x41, 0x52, 0x10, 0x91, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x43, - 0x49, 0x4d, 0x41, 0x4c, 0x10, 0x12, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x45, 0x58, 0x54, 0x10, 0x93, - 0x30, 0x12, 0x09, 0x0a, 0x04, 0x42, 0x4c, 0x4f, 0x42, 0x10, 0x94, 0x50, 0x12, 0x0c, 0x0a, 0x07, - 0x56, 0x41, 0x52, 0x43, 0x48, 0x41, 0x52, 0x10, 0x95, 0x30, 0x12, 0x0e, 0x0a, 0x09, 0x56, 0x41, - 0x52, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x96, 0x50, 0x12, 0x09, 0x0a, 0x04, 0x43, 0x48, - 0x41, 0x52, 0x10, 0x97, 0x30, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, - 0x98, 0x50, 0x12, 0x08, 0x0a, 0x03, 0x42, 0x49, 0x54, 0x10, 0x99, 0x10, 0x12, 0x09, 0x0a, 0x04, - 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x9a, 0x10, 0x12, 0x08, 0x0a, 0x03, 0x53, 0x45, 0x54, 0x10, 0x9b, - 0x10, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x55, 0x50, 0x4c, 0x45, 0x10, 0x1c, 0x12, 0x0d, 0x0a, 0x08, - 0x47, 0x45, 0x4f, 0x4d, 0x45, 0x54, 0x52, 0x59, 0x10, 0x9d, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x4a, - 0x53, 0x4f, 0x4e, 0x10, 0x9e, 0x10, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x58, 0x50, 0x52, 0x45, 0x53, - 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x1f, 0x12, 0x0b, 0x0a, 0x06, 0x48, 0x45, 0x58, 0x4e, 0x55, 0x4d, - 0x10, 0xa0, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x48, 0x45, 0x58, 0x56, 0x41, 0x4c, 0x10, 0xa1, 0x20, - 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x54, 0x4e, 0x55, 0x4d, 0x10, 0xa2, 0x20, 0x12, 0x0b, 0x0a, - 0x06, 0x56, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x10, 0xa3, 0x10, 0x12, 0x08, 0x0a, 0x03, 0x52, 0x41, - 0x57, 0x10, 0xa4, 0x10, 0x12, 0x0e, 0x0a, 0x09, 0x52, 0x4f, 0x57, 0x5f, 0x54, 0x55, 0x50, 0x4c, - 0x45, 0x10, 0xa5, 0x10, 0x2a, 0x36, 0x0a, 0x10, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, - 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x61, 0x69, 0x6c, 0x10, 0x01, 0x12, - 0x0b, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x10, 0x02, 0x2a, 0x46, 0x0a, 0x10, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, - 0x07, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x4f, - 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4d, 0x4d, - 0x49, 0x54, 0x10, 0x03, 0x2a, 0x3b, 0x0a, 0x0f, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x56, 0x49, 0x45, 0x57, 0x53, - 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x53, 0x10, 0x01, 0x12, 0x07, - 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x55, 0x44, 0x46, 0x53, 0x10, - 0x03, 0x42, 0x35, 0x0a, 0x0f, 0x69, 0x6f, 0x2e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x22, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, - 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_query_proto_rawDesc = "" + + "\n" + + "\vquery.proto\x12\x05query\x1a\x0etopodata.proto\x1a\vvtrpc.proto\"\x85\x01\n" + + "\x06Target\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x125\n" + + "\vtablet_type\x18\x03 \x01(\x0e2\x14.topodata.TabletTypeR\n" + + "tabletType\x12\x12\n" + + "\x04cell\x18\x04 \x01(\tR\x04cell\"D\n" + + "\x0eVTGateCallerID\x12\x1a\n" + + "\busername\x18\x01 \x01(\tR\busername\x12\x16\n" + + "\x06groups\x18\x02 \x03(\tR\x06groups\"\\\n" + + "\n" + + "EventToken\x12\x1c\n" + + "\ttimestamp\x18\x01 \x01(\x03R\ttimestamp\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x12\x1a\n" + + "\bposition\x18\x03 \x01(\tR\bposition\">\n" + + "\x05Value\x12\x1f\n" + + "\x04type\x18\x01 \x01(\x0e2\v.query.TypeR\x04type\x12\x14\n" + + "\x05value\x18\x02 \x01(\fR\x05value\"k\n" + + "\fBindVariable\x12\x1f\n" + + "\x04type\x18\x01 \x01(\x0e2\v.query.TypeR\x04type\x12\x14\n" + + "\x05value\x18\x02 \x01(\fR\x05value\x12$\n" + + "\x06values\x18\x03 \x03(\v2\f.query.ValueR\x06values\"\xc2\x01\n" + + "\n" + + "BoundQuery\x12\x10\n" + + "\x03sql\x18\x01 \x01(\tR\x03sql\x12K\n" + + "\x0ebind_variables\x18\x02 \x03(\v2$.query.BoundQuery.BindVariablesEntryR\rbindVariables\x1aU\n" + + "\x12BindVariablesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12)\n" + + "\x05value\x18\x02 \x01(\v2\x13.query.BindVariableR\x05value:\x028\x01\"\xb5\f\n" + + "\x0eExecuteOptions\x12M\n" + + "\x0fincluded_fields\x18\x04 \x01(\x0e2$.query.ExecuteOptions.IncludedFieldsR\x0eincludedFields\x12*\n" + + "\x11client_found_rows\x18\x05 \x01(\bR\x0fclientFoundRows\x12:\n" + + "\bworkload\x18\x06 \x01(\x0e2\x1e.query.ExecuteOptions.WorkloadR\bworkload\x12(\n" + + "\x10sql_select_limit\x18\b \x01(\x03R\x0esqlSelectLimit\x12_\n" + + "\x15transaction_isolation\x18\t \x01(\x0e2*.query.ExecuteOptions.TransactionIsolationR\x14transactionIsolation\x121\n" + + "\x15skip_query_plan_cache\x18\n" + + " \x01(\bR\x12skipQueryPlanCache\x12M\n" + + "\x0fplanner_version\x18\v \x01(\x0e2$.query.ExecuteOptions.PlannerVersionR\x0eplannerVersion\x125\n" + + "\x17has_created_temp_tables\x18\f \x01(\bR\x14hasCreatedTempTables\x12F\n" + + "\fconsolidator\x18\r \x01(\x0e2\".query.ExecuteOptions.ConsolidatorR\fconsolidator\x12c\n" + + "\x17transaction_access_mode\x18\x0e \x03(\x0e2+.query.ExecuteOptions.TransactionAccessModeR\x15transactionAccessMode\x12\"\n" + + "\fWorkloadName\x18\x0f \x01(\tR\fWorkloadName\x12\x1a\n" + + "\bpriority\x18\x10 \x01(\tR\bpriority\x125\n" + + "\x15authoritative_timeout\x18\x11 \x01(\x03H\x00R\x14authoritativeTimeout\x12/\n" + + "\x14fetch_last_insert_id\x18\x12 \x01(\bR\x11fetchLastInsertId\x12(\n" + + "\x10in_dml_execution\x18\x13 \x01(\bR\x0einDmlExecution\";\n" + + "\x0eIncludedFields\x12\x11\n" + + "\rTYPE_AND_NAME\x10\x00\x12\r\n" + + "\tTYPE_ONLY\x10\x01\x12\a\n" + + "\x03ALL\x10\x02\"8\n" + + "\bWorkload\x12\x0f\n" + + "\vUNSPECIFIED\x10\x00\x12\b\n" + + "\x04OLTP\x10\x01\x12\b\n" + + "\x04OLAP\x10\x02\x12\a\n" + + "\x03DBA\x10\x03\"\xa7\x01\n" + + "\x14TransactionIsolation\x12\v\n" + + "\aDEFAULT\x10\x00\x12\x13\n" + + "\x0fREPEATABLE_READ\x10\x01\x12\x12\n" + + "\x0eREAD_COMMITTED\x10\x02\x12\x14\n" + + "\x10READ_UNCOMMITTED\x10\x03\x12\x10\n" + + "\fSERIALIZABLE\x10\x04\x12!\n" + + "\x1dCONSISTENT_SNAPSHOT_READ_ONLY\x10\x05\x12\x0e\n" + + "\n" + + "AUTOCOMMIT\x10\x06\"\x92\x01\n" + + "\x0ePlannerVersion\x12\x13\n" + + "\x0fDEFAULT_PLANNER\x10\x00\x12\x06\n" + + "\x02V3\x10\x01\x12\b\n" + + "\x04Gen4\x10\x02\x12\x0e\n" + + "\n" + + "Gen4Greedy\x10\x03\x12\x12\n" + + "\x0eGen4Left2Right\x10\x04\x12\x14\n" + + "\x10Gen4WithFallback\x10\x05\x12\x11\n" + + "\rGen4CompareV3\x10\x06\x12\f\n" + + "\bV3Insert\x10\a\"\x84\x01\n" + + "\fConsolidator\x12\x1c\n" + + "\x18CONSOLIDATOR_UNSPECIFIED\x10\x00\x12\x19\n" + + "\x15CONSOLIDATOR_DISABLED\x10\x01\x12\x18\n" + + "\x14CONSOLIDATOR_ENABLED\x10\x02\x12!\n" + + "\x1dCONSOLIDATOR_ENABLED_REPLICAS\x10\x03\"O\n" + + "\x15TransactionAccessMode\x12\x17\n" + + "\x13CONSISTENT_SNAPSHOT\x10\x00\x12\x0e\n" + + "\n" + + "READ_WRITE\x10\x01\x12\r\n" + + "\tREAD_ONLY\x10\x02B\t\n" + + "\atimeoutJ\x04\b\x01\x10\x02J\x04\b\x02\x10\x03J\x04\b\x03\x10\x04\"\xb8\x02\n" + + "\x05Field\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x1f\n" + + "\x04type\x18\x02 \x01(\x0e2\v.query.TypeR\x04type\x12\x14\n" + + "\x05table\x18\x03 \x01(\tR\x05table\x12\x1b\n" + + "\torg_table\x18\x04 \x01(\tR\borgTable\x12\x1a\n" + + "\bdatabase\x18\x05 \x01(\tR\bdatabase\x12\x19\n" + + "\borg_name\x18\x06 \x01(\tR\aorgName\x12#\n" + + "\rcolumn_length\x18\a \x01(\rR\fcolumnLength\x12\x18\n" + + "\acharset\x18\b \x01(\rR\acharset\x12\x1a\n" + + "\bdecimals\x18\t \x01(\rR\bdecimals\x12\x14\n" + + "\x05flags\x18\n" + + " \x01(\rR\x05flags\x12\x1f\n" + + "\vcolumn_type\x18\v \x01(\tR\n" + + "columnType\"7\n" + + "\x03Row\x12\x18\n" + + "\alengths\x18\x01 \x03(\x12R\alengths\x12\x16\n" + + "\x06values\x18\x02 \x01(\fR\x06values\"\x8f\x02\n" + + "\vQueryResult\x12$\n" + + "\x06fields\x18\x01 \x03(\v2\f.query.FieldR\x06fields\x12#\n" + + "\rrows_affected\x18\x02 \x01(\x04R\frowsAffected\x12\x1b\n" + + "\tinsert_id\x18\x03 \x01(\x04R\binsertId\x12\x1e\n" + + "\x04rows\x18\x04 \x03(\v2\n" + + ".query.RowR\x04rows\x12\x12\n" + + "\x04info\x18\x06 \x01(\tR\x04info\x122\n" + + "\x15session_state_changes\x18\a \x01(\tR\x13sessionStateChanges\x12*\n" + + "\x11insert_id_changed\x18\b \x01(\bR\x0finsertIdChangedJ\x04\b\x05\x10\x06\"<\n" + + "\fQueryWarning\x12\x12\n" + + "\x04code\x18\x01 \x01(\rR\x04code\x12\x18\n" + + "\amessage\x18\x02 \x01(\tR\amessage\"\xa0\x03\n" + + "\vStreamEvent\x12<\n" + + "\n" + + "statements\x18\x01 \x03(\v2\x1c.query.StreamEvent.StatementR\n" + + "statements\x122\n" + + "\vevent_token\x18\x02 \x01(\v2\x11.query.EventTokenR\n" + + "eventToken\x1a\x9e\x02\n" + + "\tStatement\x12A\n" + + "\bcategory\x18\x01 \x01(\x0e2%.query.StreamEvent.Statement.CategoryR\bcategory\x12\x1d\n" + + "\n" + + "table_name\x18\x02 \x01(\tR\ttableName\x12:\n" + + "\x12primary_key_fields\x18\x03 \x03(\v2\f.query.FieldR\x10primaryKeyFields\x128\n" + + "\x12primary_key_values\x18\x04 \x03(\v2\n" + + ".query.RowR\x10primaryKeyValues\x12\x10\n" + + "\x03sql\x18\x05 \x01(\fR\x03sql\"'\n" + + "\bCategory\x12\t\n" + + "\x05Error\x10\x00\x12\a\n" + + "\x03DML\x10\x01\x12\a\n" + + "\x03DDL\x10\x02\"\xe1\x02\n" + + "\x0eExecuteRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12'\n" + + "\x05query\x18\x04 \x01(\v2\x11.query.BoundQueryR\x05query\x12%\n" + + "\x0etransaction_id\x18\x05 \x01(\x03R\rtransactionId\x12/\n" + + "\aoptions\x18\x06 \x01(\v2\x15.query.ExecuteOptionsR\aoptions\x12\x1f\n" + + "\vreserved_id\x18\a \x01(\x03R\n" + + "reservedId\"=\n" + + "\x0fExecuteResponse\x12*\n" + + "\x06result\x18\x01 \x01(\v2\x12.query.QueryResultR\x06result\"d\n" + + "\x0fResultWithError\x12%\n" + + "\x05error\x18\x01 \x01(\v2\x0f.vtrpc.RPCErrorR\x05error\x12*\n" + + "\x06result\x18\x02 \x01(\v2\x12.query.QueryResultR\x06result\"\xe7\x02\n" + + "\x14StreamExecuteRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12'\n" + + "\x05query\x18\x04 \x01(\v2\x11.query.BoundQueryR\x05query\x12/\n" + + "\aoptions\x18\x05 \x01(\v2\x15.query.ExecuteOptionsR\aoptions\x12%\n" + + "\x0etransaction_id\x18\x06 \x01(\x03R\rtransactionId\x12\x1f\n" + + "\vreserved_id\x18\a \x01(\x03R\n" + + "reservedId\"C\n" + + "\x15StreamExecuteResponse\x12*\n" + + "\x06result\x18\x01 \x01(\v2\x12.query.QueryResultR\x06result\"\xee\x01\n" + + "\fBeginRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12/\n" + + "\aoptions\x18\x04 \x01(\v2\x15.query.ExecuteOptionsR\aoptions\"\xa4\x01\n" + + "\rBeginResponse\x12%\n" + + "\x0etransaction_id\x18\x01 \x01(\x03R\rtransactionId\x128\n" + + "\ftablet_alias\x18\x02 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\x122\n" + + "\x15session_state_changes\x18\x03 \x01(\tR\x13sessionStateChanges\"\xe5\x01\n" + + "\rCommitRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12%\n" + + "\x0etransaction_id\x18\x04 \x01(\x03R\rtransactionId\"1\n" + + "\x0eCommitResponse\x12\x1f\n" + + "\vreserved_id\x18\x01 \x01(\x03R\n" + + "reservedId\"\xe7\x01\n" + + "\x0fRollbackRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12%\n" + + "\x0etransaction_id\x18\x04 \x01(\x03R\rtransactionId\"3\n" + + "\x10RollbackResponse\x12\x1f\n" + + "\vreserved_id\x18\x01 \x01(\x03R\n" + + "reservedId\"\xfa\x01\n" + + "\x0ePrepareRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12%\n" + + "\x0etransaction_id\x18\x04 \x01(\x03R\rtransactionId\x12\x12\n" + + "\x04dtid\x18\x05 \x01(\tR\x04dtid\"\x11\n" + + "\x0fPrepareResponse\"\xda\x01\n" + + "\x15CommitPreparedRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12\x12\n" + + "\x04dtid\x18\x04 \x01(\tR\x04dtid\"\x18\n" + + "\x16CommitPreparedResponse\"\x83\x02\n" + + "\x17RollbackPreparedRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12%\n" + + "\x0etransaction_id\x18\x04 \x01(\x03R\rtransactionId\x12\x12\n" + + "\x04dtid\x18\x05 \x01(\tR\x04dtid\"\x1a\n" + + "\x18RollbackPreparedResponse\"\x90\x02\n" + + "\x18CreateTransactionRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12\x12\n" + + "\x04dtid\x18\x04 \x01(\tR\x04dtid\x121\n" + + "\fparticipants\x18\x05 \x03(\v2\r.query.TargetR\fparticipants\"\x1b\n" + + "\x19CreateTransactionResponse\"\xfe\x01\n" + + "\x12StartCommitRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12%\n" + + "\x0etransaction_id\x18\x04 \x01(\x03R\rtransactionId\x12\x12\n" + + "\x04dtid\x18\x05 \x01(\tR\x04dtid\"D\n" + + "\x13StartCommitResponse\x12-\n" + + "\x05state\x18\x01 \x01(\x0e2\x17.query.StartCommitStateR\x05state\"\xfe\x01\n" + + "\x12SetRollbackRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12%\n" + + "\x0etransaction_id\x18\x04 \x01(\x03R\rtransactionId\x12\x12\n" + + "\x04dtid\x18\x05 \x01(\tR\x04dtid\"\x15\n" + + "\x13SetRollbackResponse\"\xdf\x01\n" + + "\x1aConcludeTransactionRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12\x12\n" + + "\x04dtid\x18\x04 \x01(\tR\x04dtid\"\x1d\n" + + "\x1bConcludeTransactionResponse\"\xdb\x01\n" + + "\x16ReadTransactionRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12\x12\n" + + "\x04dtid\x18\x04 \x01(\tR\x04dtid\"Q\n" + + "\x17ReadTransactionResponse\x126\n" + + "\bmetadata\x18\x01 \x01(\v2\x1a.query.TransactionMetadataR\bmetadata\"\xef\x01\n" + + "\x1dUnresolvedTransactionsRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12\x1f\n" + + "\vabandon_age\x18\x04 \x01(\x03R\n" + + "abandonAge\"`\n" + + "\x1eUnresolvedTransactionsResponse\x12>\n" + + "\ftransactions\x18\x01 \x03(\v2\x1a.query.TransactionMetadataR\ftransactions\"\xe0\x02\n" + + "\x13BeginExecuteRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12'\n" + + "\x05query\x18\x04 \x01(\v2\x11.query.BoundQueryR\x05query\x12/\n" + + "\aoptions\x18\x05 \x01(\v2\x15.query.ExecuteOptionsR\aoptions\x12\x1f\n" + + "\vreserved_id\x18\x06 \x01(\x03R\n" + + "reservedId\x12\x1f\n" + + "\vpre_queries\x18\a \x03(\tR\n" + + "preQueries\"\xfe\x01\n" + + "\x14BeginExecuteResponse\x12%\n" + + "\x05error\x18\x01 \x01(\v2\x0f.vtrpc.RPCErrorR\x05error\x12*\n" + + "\x06result\x18\x02 \x01(\v2\x12.query.QueryResultR\x06result\x12%\n" + + "\x0etransaction_id\x18\x03 \x01(\x03R\rtransactionId\x128\n" + + "\ftablet_alias\x18\x04 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\x122\n" + + "\x15session_state_changes\x18\x05 \x01(\tR\x13sessionStateChanges\"\xe6\x02\n" + + "\x19BeginStreamExecuteRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12'\n" + + "\x05query\x18\x04 \x01(\v2\x11.query.BoundQueryR\x05query\x12/\n" + + "\aoptions\x18\x05 \x01(\v2\x15.query.ExecuteOptionsR\aoptions\x12\x1f\n" + + "\vpre_queries\x18\x06 \x03(\tR\n" + + "preQueries\x12\x1f\n" + + "\vreserved_id\x18\a \x01(\x03R\n" + + "reservedId\"\x84\x02\n" + + "\x1aBeginStreamExecuteResponse\x12%\n" + + "\x05error\x18\x01 \x01(\v2\x0f.vtrpc.RPCErrorR\x05error\x12*\n" + + "\x06result\x18\x02 \x01(\v2\x12.query.QueryResultR\x06result\x12%\n" + + "\x0etransaction_id\x18\x03 \x01(\x03R\rtransactionId\x128\n" + + "\ftablet_alias\x18\x04 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\x122\n" + + "\x15session_state_changes\x18\x05 \x01(\tR\x13sessionStateChanges\"\xd9\x01\n" + + "\x14MessageStreamRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12\x12\n" + + "\x04name\x18\x04 \x01(\tR\x04name\"C\n" + + "\x15MessageStreamResponse\x12*\n" + + "\x06result\x18\x01 \x01(\v2\x12.query.QueryResultR\x06result\"\xf6\x01\n" + + "\x11MessageAckRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12\x12\n" + + "\x04name\x18\x04 \x01(\tR\x04name\x12\x1e\n" + + "\x03ids\x18\x05 \x03(\v2\f.query.ValueR\x03ids\"@\n" + + "\x12MessageAckResponse\x12*\n" + + "\x06result\x18\x01 \x01(\v2\x12.query.QueryResultR\x06result\"\xe8\x02\n" + + "\x15ReserveExecuteRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12'\n" + + "\x05query\x18\x04 \x01(\v2\x11.query.BoundQueryR\x05query\x12%\n" + + "\x0etransaction_id\x18\x05 \x01(\x03R\rtransactionId\x12/\n" + + "\aoptions\x18\x06 \x01(\v2\x15.query.ExecuteOptionsR\aoptions\x12\x1f\n" + + "\vpre_queries\x18\a \x03(\tR\n" + + "preQueries\"\xc6\x01\n" + + "\x16ReserveExecuteResponse\x12%\n" + + "\x05error\x18\x01 \x01(\v2\x0f.vtrpc.RPCErrorR\x05error\x12*\n" + + "\x06result\x18\x02 \x01(\v2\x12.query.QueryResultR\x06result\x12\x1f\n" + + "\vreserved_id\x18\x03 \x01(\x03R\n" + + "reservedId\x128\n" + + "\ftablet_alias\x18\x04 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\"\xee\x02\n" + + "\x1bReserveStreamExecuteRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12'\n" + + "\x05query\x18\x04 \x01(\v2\x11.query.BoundQueryR\x05query\x12/\n" + + "\aoptions\x18\x05 \x01(\v2\x15.query.ExecuteOptionsR\aoptions\x12%\n" + + "\x0etransaction_id\x18\x06 \x01(\x03R\rtransactionId\x12\x1f\n" + + "\vpre_queries\x18\a \x03(\tR\n" + + "preQueries\"\xcc\x01\n" + + "\x1cReserveStreamExecuteResponse\x12%\n" + + "\x05error\x18\x01 \x01(\v2\x0f.vtrpc.RPCErrorR\x05error\x12*\n" + + "\x06result\x18\x02 \x01(\v2\x12.query.QueryResultR\x06result\x12\x1f\n" + + "\vreserved_id\x18\x03 \x01(\x03R\n" + + "reservedId\x128\n" + + "\ftablet_alias\x18\x04 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\"\xf4\x02\n" + + "\x1aReserveBeginExecuteRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12'\n" + + "\x05query\x18\x04 \x01(\v2\x11.query.BoundQueryR\x05query\x12/\n" + + "\aoptions\x18\x05 \x01(\v2\x15.query.ExecuteOptionsR\aoptions\x12\x1f\n" + + "\vpre_queries\x18\x06 \x03(\tR\n" + + "preQueries\x12,\n" + + "\x12post_begin_queries\x18\a \x03(\tR\x10postBeginQueries\"\xa6\x02\n" + + "\x1bReserveBeginExecuteResponse\x12%\n" + + "\x05error\x18\x01 \x01(\v2\x0f.vtrpc.RPCErrorR\x05error\x12*\n" + + "\x06result\x18\x02 \x01(\v2\x12.query.QueryResultR\x06result\x12%\n" + + "\x0etransaction_id\x18\x03 \x01(\x03R\rtransactionId\x12\x1f\n" + + "\vreserved_id\x18\x04 \x01(\x03R\n" + + "reservedId\x128\n" + + "\ftablet_alias\x18\x05 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\x122\n" + + "\x15session_state_changes\x18\x06 \x01(\tR\x13sessionStateChanges\"\xfa\x02\n" + + " ReserveBeginStreamExecuteRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12'\n" + + "\x05query\x18\x04 \x01(\v2\x11.query.BoundQueryR\x05query\x12/\n" + + "\aoptions\x18\x05 \x01(\v2\x15.query.ExecuteOptionsR\aoptions\x12\x1f\n" + + "\vpre_queries\x18\x06 \x03(\tR\n" + + "preQueries\x12,\n" + + "\x12post_begin_queries\x18\a \x03(\tR\x10postBeginQueries\"\xac\x02\n" + + "!ReserveBeginStreamExecuteResponse\x12%\n" + + "\x05error\x18\x01 \x01(\v2\x0f.vtrpc.RPCErrorR\x05error\x12*\n" + + "\x06result\x18\x02 \x01(\v2\x12.query.QueryResultR\x06result\x12%\n" + + "\x0etransaction_id\x18\x03 \x01(\x03R\rtransactionId\x12\x1f\n" + + "\vreserved_id\x18\x04 \x01(\x03R\n" + + "reservedId\x128\n" + + "\ftablet_alias\x18\x05 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\x122\n" + + "\x15session_state_changes\x18\x06 \x01(\tR\x13sessionStateChanges\"\x87\x02\n" + + "\x0eReleaseRequest\x12?\n" + + "\x13effective_caller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\x11effectiveCallerId\x12E\n" + + "\x13immediate_caller_id\x18\x02 \x01(\v2\x15.query.VTGateCallerIDR\x11immediateCallerId\x12%\n" + + "\x06target\x18\x03 \x01(\v2\r.query.TargetR\x06target\x12%\n" + + "\x0etransaction_id\x18\x04 \x01(\x03R\rtransactionId\x12\x1f\n" + + "\vreserved_id\x18\x05 \x01(\x03R\n" + + "reservedId\"\x11\n" + + "\x0fReleaseResponse\"\x15\n" + + "\x13StreamHealthRequest\"\xbe\x03\n" + + "\rRealtimeStats\x12!\n" + + "\fhealth_error\x18\x01 \x01(\tR\vhealthError\x126\n" + + "\x17replication_lag_seconds\x18\x02 \x01(\rR\x15replicationLagSeconds\x120\n" + + "\x14binlog_players_count\x18\x03 \x01(\x05R\x12binlogPlayersCount\x12G\n" + + " filtered_replication_lag_seconds\x18\x04 \x01(\x03R\x1dfilteredReplicationLagSeconds\x12\x1b\n" + + "\tcpu_usage\x18\x05 \x01(\x01R\bcpuUsage\x12\x10\n" + + "\x03qps\x18\x06 \x01(\x01R\x03qps\x120\n" + + "\x14table_schema_changed\x18\a \x03(\tR\x12tableSchemaChanged\x12.\n" + + "\x13view_schema_changed\x18\b \x03(\tR\x11viewSchemaChanged\x12!\n" + + "\fudfs_changed\x18\t \x01(\bR\vudfsChanged\x12#\n" + + "\rtx_unresolved\x18\n" + + " \x01(\bR\ftxUnresolved\"\xf6\x01\n" + + "\x0eAggregateStats\x120\n" + + "\x14healthy_tablet_count\x18\x01 \x01(\x05R\x12healthyTabletCount\x124\n" + + "\x16unhealthy_tablet_count\x18\x02 \x01(\x05R\x14unhealthyTabletCount\x12=\n" + + "\x1breplication_lag_seconds_min\x18\x03 \x01(\rR\x18replicationLagSecondsMin\x12=\n" + + "\x1breplication_lag_seconds_max\x18\x04 \x01(\rR\x18replicationLagSecondsMax\"\x95\x02\n" + + "\x14StreamHealthResponse\x12%\n" + + "\x06target\x18\x01 \x01(\v2\r.query.TargetR\x06target\x12\x18\n" + + "\aserving\x18\x02 \x01(\bR\aserving\x12?\n" + + "\x1cprimary_term_start_timestamp\x18\x03 \x01(\x03R\x19primaryTermStartTimestamp\x12;\n" + + "\x0erealtime_stats\x18\x04 \x01(\v2\x14.query.RealtimeStatsR\rrealtimeStats\x128\n" + + "\ftablet_alias\x18\x05 \x01(\v2\x15.topodata.TabletAliasR\vtabletAliasJ\x04\b\x06\x10\a\"\xae\x01\n" + + "\x13TransactionMetadata\x12\x12\n" + + "\x04dtid\x18\x01 \x01(\tR\x04dtid\x12-\n" + + "\x05state\x18\x02 \x01(\x0e2\x17.query.TransactionStateR\x05state\x12!\n" + + "\ftime_created\x18\x03 \x01(\x03R\vtimeCreated\x121\n" + + "\fparticipants\x18\x04 \x03(\v2\r.query.TargetR\fparticipants\"\x91\x01\n" + + "\x10GetSchemaRequest\x12%\n" + + "\x06target\x18\x01 \x01(\v2\r.query.TargetR\x06target\x125\n" + + "\n" + + "table_type\x18\x02 \x01(\x0e2\x16.query.SchemaTableTypeR\ttableType\x12\x1f\n" + + "\vtable_names\x18\x03 \x03(\tR\n" + + "tableNames\"m\n" + + "\aUDFInfo\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12 \n" + + "\vaggregating\x18\x02 \x01(\bR\vaggregating\x12,\n" + + "\vreturn_type\x18\x03 \x01(\x0e2\v.query.TypeR\n" + + "returnType\"\xd5\x01\n" + + "\x11GetSchemaResponse\x12\"\n" + + "\x04udfs\x18\x01 \x03(\v2\x0e.query.UDFInfoR\x04udfs\x12X\n" + + "\x10table_definition\x18\x02 \x03(\v2-.query.GetSchemaResponse.TableDefinitionEntryR\x0ftableDefinition\x1aB\n" + + "\x14TableDefinitionEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01*\x92\x03\n" + + "\tMySqlFlag\x12\t\n" + + "\x05EMPTY\x10\x00\x12\x11\n" + + "\rNOT_NULL_FLAG\x10\x01\x12\x10\n" + + "\fPRI_KEY_FLAG\x10\x02\x12\x13\n" + + "\x0fUNIQUE_KEY_FLAG\x10\x04\x12\x15\n" + + "\x11MULTIPLE_KEY_FLAG\x10\b\x12\r\n" + + "\tBLOB_FLAG\x10\x10\x12\x11\n" + + "\rUNSIGNED_FLAG\x10 \x12\x11\n" + + "\rZEROFILL_FLAG\x10@\x12\x10\n" + + "\vBINARY_FLAG\x10\x80\x01\x12\x0e\n" + + "\tENUM_FLAG\x10\x80\x02\x12\x18\n" + + "\x13AUTO_INCREMENT_FLAG\x10\x80\x04\x12\x13\n" + + "\x0eTIMESTAMP_FLAG\x10\x80\b\x12\r\n" + + "\bSET_FLAG\x10\x80\x10\x12\x1a\n" + + "\x15NO_DEFAULT_VALUE_FLAG\x10\x80 \x12\x17\n" + + "\x12ON_UPDATE_NOW_FLAG\x10\x80@\x12\x0e\n" + + "\bNUM_FLAG\x10\x80\x80\x02\x12\x13\n" + + "\rPART_KEY_FLAG\x10\x80\x80\x01\x12\x10\n" + + "\n" + + "GROUP_FLAG\x10\x80\x80\x02\x12\x11\n" + + "\vUNIQUE_FLAG\x10\x80\x80\x04\x12\x11\n" + + "\vBINCMP_FLAG\x10\x80\x80\b\x1a\x02\x10\x01*k\n" + + "\x04Flag\x12\b\n" + + "\x04NONE\x10\x00\x12\x0f\n" + + "\n" + + "ISINTEGRAL\x10\x80\x02\x12\x0f\n" + + "\n" + + "ISUNSIGNED\x10\x80\x04\x12\f\n" + + "\aISFLOAT\x10\x80\b\x12\r\n" + + "\bISQUOTED\x10\x80\x10\x12\v\n" + + "\x06ISTEXT\x10\x80 \x12\r\n" + + "\bISBINARY\x10\x80@*\xe7\x03\n" + + "\x04Type\x12\r\n" + + "\tNULL_TYPE\x10\x00\x12\t\n" + + "\x04INT8\x10\x81\x02\x12\n" + + "\n" + + "\x05UINT8\x10\x82\x06\x12\n" + + "\n" + + "\x05INT16\x10\x83\x02\x12\v\n" + + "\x06UINT16\x10\x84\x06\x12\n" + + "\n" + + "\x05INT24\x10\x85\x02\x12\v\n" + + "\x06UINT24\x10\x86\x06\x12\n" + + "\n" + + "\x05INT32\x10\x87\x02\x12\v\n" + + "\x06UINT32\x10\x88\x06\x12\n" + + "\n" + + "\x05INT64\x10\x89\x02\x12\v\n" + + "\x06UINT64\x10\x8a\x06\x12\f\n" + + "\aFLOAT32\x10\x8b\b\x12\f\n" + + "\aFLOAT64\x10\x8c\b\x12\x0e\n" + + "\tTIMESTAMP\x10\x8d\x10\x12\t\n" + + "\x04DATE\x10\x8e\x10\x12\t\n" + + "\x04TIME\x10\x8f\x10\x12\r\n" + + "\bDATETIME\x10\x90\x10\x12\t\n" + + "\x04YEAR\x10\x91\x06\x12\v\n" + + "\aDECIMAL\x10\x12\x12\t\n" + + "\x04TEXT\x10\x930\x12\t\n" + + "\x04BLOB\x10\x94P\x12\f\n" + + "\aVARCHAR\x10\x950\x12\x0e\n" + + "\tVARBINARY\x10\x96P\x12\t\n" + + "\x04CHAR\x10\x970\x12\v\n" + + "\x06BINARY\x10\x98P\x12\b\n" + + "\x03BIT\x10\x99\x10\x12\t\n" + + "\x04ENUM\x10\x9a\x10\x12\b\n" + + "\x03SET\x10\x9b\x10\x12\t\n" + + "\x05TUPLE\x10\x1c\x12\r\n" + + "\bGEOMETRY\x10\x9d\x10\x12\t\n" + + "\x04JSON\x10\x9e\x10\x12\x0e\n" + + "\n" + + "EXPRESSION\x10\x1f\x12\v\n" + + "\x06HEXNUM\x10\xa0 \x12\v\n" + + "\x06HEXVAL\x10\xa1 \x12\v\n" + + "\x06BITNUM\x10\xa2 \x12\v\n" + + "\x06VECTOR\x10\xa3\x10\x12\b\n" + + "\x03RAW\x10\xa4\x10\x12\x0e\n" + + "\tROW_TUPLE\x10\xa5\x10*6\n" + + "\x10StartCommitState\x12\v\n" + + "\aUnknown\x10\x00\x12\b\n" + + "\x04Fail\x10\x01\x12\v\n" + + "\aSuccess\x10\x02*F\n" + + "\x10TransactionState\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\v\n" + + "\aPREPARE\x10\x01\x12\f\n" + + "\bROLLBACK\x10\x02\x12\n" + + "\n" + + "\x06COMMIT\x10\x03*;\n" + + "\x0fSchemaTableType\x12\t\n" + + "\x05VIEWS\x10\x00\x12\n" + + "\n" + + "\x06TABLES\x10\x01\x12\a\n" + + "\x03ALL\x10\x02\x12\b\n" + + "\x04UDFS\x10\x03B5\n" + + "\x0fio.vitess.protoZ\"vitess.io/vitess/go/vt/proto/queryb\x06proto3" var ( file_query_proto_rawDescOnce sync.Once diff --git a/go/vt/proto/queryservice/queryservice.pb.go b/go/vt/proto/queryservice/queryservice.pb.go index 4b1fe3af390..1dc4b0b94e3 100644 --- a/go/vt/proto/queryservice/queryservice.pb.go +++ b/go/vt/proto/queryservice/queryservice.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v3.21.3 // source: queryservice.proto @@ -41,161 +41,40 @@ const ( var File_queryservice_proto protoreflect.FileDescriptor -var file_queryservice_proto_rawDesc = string([]byte{ - 0x0a, 0x12, 0x71, 0x75, 0x65, 0x72, 0x79, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x71, 0x75, 0x65, 0x72, 0x79, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x1a, 0x0b, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x10, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x32, 0x95, 0x12, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x3a, 0x0a, 0x07, 0x45, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x12, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x45, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0d, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x34, 0x0a, 0x05, 0x42, 0x65, 0x67, 0x69, 0x6e, - 0x12, 0x13, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x65, - 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x37, 0x0a, - 0x06, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, - 0x63, 0x6b, 0x12, 0x16, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x62, - 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x07, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, - 0x12, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x4f, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, - 0x72, 0x65, 0x64, 0x12, 0x1c, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x55, 0x0a, 0x10, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x50, 0x72, - 0x65, 0x70, 0x61, 0x72, 0x65, 0x64, 0x12, 0x1e, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, - 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, - 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x11, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, - 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x20, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x12, 0x19, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0b, 0x53, - 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x19, 0x2e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x65, - 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0f, 0x52, 0x65, 0x61, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, - 0x65, 0x61, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, - 0x61, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x67, 0x0a, 0x16, 0x55, 0x6e, 0x72, 0x65, 0x73, - 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x24, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x49, 0x0a, 0x0c, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, - 0x12, 0x1a, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x12, 0x42, - 0x65, 0x67, 0x69, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x65, 0x12, 0x20, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x65, 0x67, 0x69, - 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4e, 0x0a, 0x0d, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1b, 0x2e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x43, 0x0a, 0x0a, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x63, 0x6b, 0x12, 0x18, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x4f, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x65, 0x12, 0x1c, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x45, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x5e, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x45, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x45, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x63, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x12, 0x22, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x72, 0x0a, 0x19, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x42, 0x65, 0x67, 0x69, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x65, 0x12, 0x27, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x3a, 0x0a, 0x07, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x12, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x48, - 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x1a, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1b, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x30, 0x01, 0x12, 0x46, 0x0a, 0x07, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1a, 0x2e, - 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x62, 0x69, 0x6e, 0x6c, - 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x52, 0x0a, 0x0b, 0x56, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x1e, 0x2e, 0x62, 0x69, 0x6e, 0x6c, - 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x6f, - 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x62, 0x69, 0x6e, 0x6c, - 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x6f, - 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x58, - 0x0a, 0x0d, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, - 0x20, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x21, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x5b, 0x0a, 0x0e, 0x56, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x21, 0x2e, 0x62, 0x69, 0x6e, - 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, - 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x42, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x12, 0x17, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x42, 0x2b, 0x5a, 0x29, 0x76, 0x69, 0x74, - 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, - 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_queryservice_proto_rawDesc = "" + + "\n" + + "\x12queryservice.proto\x12\fqueryservice\x1a\vquery.proto\x1a\x10binlogdata.proto2\x95\x12\n" + + "\x05Query\x12:\n" + + "\aExecute\x12\x15.query.ExecuteRequest\x1a\x16.query.ExecuteResponse\"\x00\x12N\n" + + "\rStreamExecute\x12\x1b.query.StreamExecuteRequest\x1a\x1c.query.StreamExecuteResponse\"\x000\x01\x124\n" + + "\x05Begin\x12\x13.query.BeginRequest\x1a\x14.query.BeginResponse\"\x00\x127\n" + + "\x06Commit\x12\x14.query.CommitRequest\x1a\x15.query.CommitResponse\"\x00\x12=\n" + + "\bRollback\x12\x16.query.RollbackRequest\x1a\x17.query.RollbackResponse\"\x00\x12:\n" + + "\aPrepare\x12\x15.query.PrepareRequest\x1a\x16.query.PrepareResponse\"\x00\x12O\n" + + "\x0eCommitPrepared\x12\x1c.query.CommitPreparedRequest\x1a\x1d.query.CommitPreparedResponse\"\x00\x12U\n" + + "\x10RollbackPrepared\x12\x1e.query.RollbackPreparedRequest\x1a\x1f.query.RollbackPreparedResponse\"\x00\x12X\n" + + "\x11CreateTransaction\x12\x1f.query.CreateTransactionRequest\x1a .query.CreateTransactionResponse\"\x00\x12F\n" + + "\vStartCommit\x12\x19.query.StartCommitRequest\x1a\x1a.query.StartCommitResponse\"\x00\x12F\n" + + "\vSetRollback\x12\x19.query.SetRollbackRequest\x1a\x1a.query.SetRollbackResponse\"\x00\x12^\n" + + "\x13ConcludeTransaction\x12!.query.ConcludeTransactionRequest\x1a\".query.ConcludeTransactionResponse\"\x00\x12R\n" + + "\x0fReadTransaction\x12\x1d.query.ReadTransactionRequest\x1a\x1e.query.ReadTransactionResponse\"\x00\x12g\n" + + "\x16UnresolvedTransactions\x12$.query.UnresolvedTransactionsRequest\x1a%.query.UnresolvedTransactionsResponse\"\x00\x12I\n" + + "\fBeginExecute\x12\x1a.query.BeginExecuteRequest\x1a\x1b.query.BeginExecuteResponse\"\x00\x12]\n" + + "\x12BeginStreamExecute\x12 .query.BeginStreamExecuteRequest\x1a!.query.BeginStreamExecuteResponse\"\x000\x01\x12N\n" + + "\rMessageStream\x12\x1b.query.MessageStreamRequest\x1a\x1c.query.MessageStreamResponse\"\x000\x01\x12C\n" + + "\n" + + "MessageAck\x12\x18.query.MessageAckRequest\x1a\x19.query.MessageAckResponse\"\x00\x12O\n" + + "\x0eReserveExecute\x12\x1c.query.ReserveExecuteRequest\x1a\x1d.query.ReserveExecuteResponse\"\x00\x12^\n" + + "\x13ReserveBeginExecute\x12!.query.ReserveBeginExecuteRequest\x1a\".query.ReserveBeginExecuteResponse\"\x00\x12c\n" + + "\x14ReserveStreamExecute\x12\".query.ReserveStreamExecuteRequest\x1a#.query.ReserveStreamExecuteResponse\"\x000\x01\x12r\n" + + "\x19ReserveBeginStreamExecute\x12'.query.ReserveBeginStreamExecuteRequest\x1a(.query.ReserveBeginStreamExecuteResponse\"\x000\x01\x12:\n" + + "\aRelease\x12\x15.query.ReleaseRequest\x1a\x16.query.ReleaseResponse\"\x00\x12K\n" + + "\fStreamHealth\x12\x1a.query.StreamHealthRequest\x1a\x1b.query.StreamHealthResponse\"\x000\x01\x12F\n" + + "\aVStream\x12\x1a.binlogdata.VStreamRequest\x1a\x1b.binlogdata.VStreamResponse\"\x000\x01\x12R\n" + + "\vVStreamRows\x12\x1e.binlogdata.VStreamRowsRequest\x1a\x1f.binlogdata.VStreamRowsResponse\"\x000\x01\x12X\n" + + "\rVStreamTables\x12 .binlogdata.VStreamTablesRequest\x1a!.binlogdata.VStreamTablesResponse\"\x000\x01\x12[\n" + + "\x0eVStreamResults\x12!.binlogdata.VStreamResultsRequest\x1a\".binlogdata.VStreamResultsResponse\"\x000\x01\x12B\n" + + "\tGetSchema\x12\x17.query.GetSchemaRequest\x1a\x18.query.GetSchemaResponse\"\x000\x01B+Z)vitess.io/vitess/go/vt/proto/queryserviceb\x06proto3" var file_queryservice_proto_goTypes = []any{ (*query.ExecuteRequest)(nil), // 0: query.ExecuteRequest diff --git a/go/vt/proto/replicationdata/replicationdata.pb.go b/go/vt/proto/replicationdata/replicationdata.pb.go index f671973590f..1dee7237c42 100644 --- a/go/vt/proto/replicationdata/replicationdata.pb.go +++ b/go/vt/proto/replicationdata/replicationdata.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v3.21.3 // source: replicationdata.proto @@ -718,178 +718,85 @@ func (x *FullStatus) GetTabletType() topodata.TabletType { var File_replicationdata_proto protoreflect.FileDescriptor -var file_replicationdata_proto_rawDesc = string([]byte{ - 0x0a, 0x15, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x0e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbd, 0x07, 0x0a, 0x06, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x36, 0x0a, 0x17, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, - 0x61, 0x67, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x15, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, - 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x2c, - 0x0a, 0x12, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6c, 0x6f, 0x67, 0x5f, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x72, 0x65, 0x6c, 0x61, - 0x79, 0x4c, 0x6f, 0x67, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, - 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x5b, 0x0a, 0x2b, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6c, 0x6f, 0x67, 0x5f, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x5f, 0x65, 0x71, 0x75, - 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x26, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x4c, 0x6f, 0x67, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x45, 0x71, 0x75, 0x69, - 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, - 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x75, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x6f, 0x5f, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x69, 0x6f, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x69, 0x6f, 0x5f, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6c, 0x61, 0x73, - 0x74, 0x49, 0x6f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x71, 0x6c, 0x5f, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x71, 0x6c, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x71, - 0x6c, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6c, - 0x61, 0x73, 0x74, 0x53, 0x71, 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x35, 0x0a, 0x17, 0x72, - 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6c, 0x6f, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x72, 0x65, - 0x6c, 0x61, 0x79, 0x4c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, - 0x73, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x71, 0x6c, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, - 0x18, 0x13, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x73, 0x71, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, - 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x75, 0x74, 0x6f, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x67, - 0x74, 0x69, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x75, 0x73, 0x69, 0x6e, 0x67, - 0x47, 0x74, 0x69, 0x64, 0x12, 0x36, 0x0a, 0x17, 0x68, 0x61, 0x73, 0x5f, 0x72, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, - 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x68, 0x61, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1f, 0x0a, 0x0b, - 0x73, 0x73, 0x6c, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0a, 0x73, 0x73, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x36, 0x0a, - 0x17, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67, - 0x5f, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, - 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, 0x55, 0x6e, - 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, - 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x62, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x4a, 0x04, 0x08, 0x02, - 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x6e, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x0a, 0x12, 0x68, 0x65, 0x61, - 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x11, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x5f, 0x6e, 0x65, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x4e, 0x65, - 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0x77, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x70, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x62, 0x65, 0x66, 0x6f, - 0x72, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x05, 0x61, 0x66, 0x74, 0x65, - 0x72, 0x22, 0x71, 0x0a, 0x0d, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, - 0x0a, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x75, 0x75, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x55, 0x75, 0x69, 0x64, 0x22, 0xce, 0x09, 0x0a, 0x0a, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x55, 0x75, 0x69, - 0x64, 0x12, 0x46, 0x0a, 0x12, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x11, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x45, 0x0a, 0x0e, 0x70, 0x72, 0x69, - 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x0d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x1f, 0x0a, 0x0b, 0x67, 0x74, 0x69, 0x64, 0x5f, 0x70, 0x75, 0x72, 0x67, 0x65, 0x64, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x67, 0x74, 0x69, 0x64, 0x50, 0x75, 0x72, 0x67, 0x65, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, - 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, - 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x74, 0x69, 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x67, 0x74, 0x69, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x23, - 0x0a, 0x0d, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x46, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x5f, 0x72, 0x6f, - 0x77, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x62, - 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x6f, 0x77, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, - 0x0f, 0x6c, 0x6f, 0x67, 0x5f, 0x62, 0x69, 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6c, 0x6f, 0x67, 0x42, 0x69, 0x6e, 0x45, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x6c, 0x6f, 0x67, 0x5f, 0x72, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x11, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x19, 0x73, 0x65, 0x6d, 0x69, 0x5f, 0x73, 0x79, - 0x6e, 0x63, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, - 0x6e, 0x63, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x12, 0x39, 0x0a, 0x19, 0x73, 0x65, 0x6d, 0x69, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x72, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x16, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x18, 0x73, - 0x65, 0x6d, 0x69, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, - 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x73, - 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x18, 0x73, 0x65, 0x6d, 0x69, 0x5f, 0x73, 0x79, 0x6e, - 0x63, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x39, 0x0a, - 0x19, 0x73, 0x65, 0x6d, 0x69, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, - 0x72, 0x79, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x16, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, - 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x39, 0x0a, 0x19, 0x73, 0x65, 0x6d, 0x69, - 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x04, 0x52, 0x16, 0x73, 0x65, 0x6d, - 0x69, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x12, 0x45, 0x0a, 0x20, 0x73, 0x65, 0x6d, 0x69, 0x5f, 0x73, 0x79, 0x6e, 0x63, - 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x1b, 0x73, - 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x75, - 0x70, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x15, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x75, 0x70, 0x65, 0x72, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, - 0x6c, 0x79, 0x12, 0x5b, 0x0a, 0x19, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x18, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x18, - 0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x6c, 0x6c, - 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x65, 0x6d, 0x69, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x73, - 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x35, - 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x19, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x2a, 0x3b, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x0e, - 0x49, 0x4f, 0x41, 0x4e, 0x44, 0x53, 0x51, 0x4c, 0x54, 0x48, 0x52, 0x45, 0x41, 0x44, 0x10, 0x00, - 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x4f, 0x54, 0x48, 0x52, 0x45, 0x41, 0x44, 0x4f, 0x4e, 0x4c, 0x59, - 0x10, 0x01, 0x42, 0x2e, 0x5a, 0x2c, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, - 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, - 0x74, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_replicationdata_proto_rawDesc = "" + + "\n" + + "\x15replicationdata.proto\x12\x0freplicationdata\x1a\x0etopodata.proto\"\xbd\a\n" + + "\x06Status\x12\x1a\n" + + "\bposition\x18\x01 \x01(\tR\bposition\x126\n" + + "\x17replication_lag_seconds\x18\x04 \x01(\rR\x15replicationLagSeconds\x12\x1f\n" + + "\vsource_host\x18\x05 \x01(\tR\n" + + "sourceHost\x12\x1f\n" + + "\vsource_port\x18\x06 \x01(\x05R\n" + + "sourcePort\x12#\n" + + "\rconnect_retry\x18\a \x01(\x05R\fconnectRetry\x12,\n" + + "\x12relay_log_position\x18\b \x01(\tR\x10relayLogPosition\x12#\n" + + "\rfile_position\x18\t \x01(\tR\ffilePosition\x12[\n" + + "+relay_log_source_binlog_equivalent_position\x18\n" + + " \x01(\tR&relayLogSourceBinlogEquivalentPosition\x12(\n" + + "\x10source_server_id\x18\v \x01(\rR\x0esourceServerId\x12\x1f\n" + + "\vsource_uuid\x18\f \x01(\tR\n" + + "sourceUuid\x12\x19\n" + + "\bio_state\x18\r \x01(\x05R\aioState\x12\"\n" + + "\rlast_io_error\x18\x0e \x01(\tR\vlastIoError\x12\x1b\n" + + "\tsql_state\x18\x0f \x01(\x05R\bsqlState\x12$\n" + + "\x0elast_sql_error\x18\x10 \x01(\tR\flastSqlError\x125\n" + + "\x17relay_log_file_position\x18\x11 \x01(\tR\x14relayLogFilePosition\x12\x1f\n" + + "\vsource_user\x18\x12 \x01(\tR\n" + + "sourceUser\x12\x1b\n" + + "\tsql_delay\x18\x13 \x01(\rR\bsqlDelay\x12#\n" + + "\rauto_position\x18\x14 \x01(\bR\fautoPosition\x12\x1d\n" + + "\n" + + "using_gtid\x18\x15 \x01(\bR\tusingGtid\x126\n" + + "\x17has_replication_filters\x18\x16 \x01(\bR\x15hasReplicationFilters\x12\x1f\n" + + "\vssl_allowed\x18\x17 \x01(\bR\n" + + "sslAllowed\x126\n" + + "\x17replication_lag_unknown\x18\x18 \x01(\bR\x15replicationLagUnknown\x12%\n" + + "\x0ebackup_running\x18\x19 \x01(\bR\rbackupRunningJ\x04\b\x02\x10\x03J\x04\b\x03\x10\x04\"n\n" + + "\rConfiguration\x12-\n" + + "\x12heartbeat_interval\x18\x01 \x01(\x01R\x11heartbeatInterval\x12.\n" + + "\x13replica_net_timeout\x18\x02 \x01(\x05R\x11replicaNetTimeout\"w\n" + + "\x15StopReplicationStatus\x12/\n" + + "\x06before\x18\x01 \x01(\v2\x17.replicationdata.StatusR\x06before\x12-\n" + + "\x05after\x18\x02 \x01(\v2\x17.replicationdata.StatusR\x05after\"q\n" + + "\rPrimaryStatus\x12\x1a\n" + + "\bposition\x18\x01 \x01(\tR\bposition\x12#\n" + + "\rfile_position\x18\x02 \x01(\tR\ffilePosition\x12\x1f\n" + + "\vserver_uuid\x18\x03 \x01(\tR\n" + + "serverUuid\"\xce\t\n" + + "\n" + + "FullStatus\x12\x1b\n" + + "\tserver_id\x18\x01 \x01(\rR\bserverId\x12\x1f\n" + + "\vserver_uuid\x18\x02 \x01(\tR\n" + + "serverUuid\x12F\n" + + "\x12replication_status\x18\x03 \x01(\v2\x17.replicationdata.StatusR\x11replicationStatus\x12E\n" + + "\x0eprimary_status\x18\x04 \x01(\v2\x1e.replicationdata.PrimaryStatusR\rprimaryStatus\x12\x1f\n" + + "\vgtid_purged\x18\x05 \x01(\tR\n" + + "gtidPurged\x12\x18\n" + + "\aversion\x18\x06 \x01(\tR\aversion\x12'\n" + + "\x0fversion_comment\x18\a \x01(\tR\x0eversionComment\x12\x1b\n" + + "\tread_only\x18\b \x01(\bR\breadOnly\x12\x1b\n" + + "\tgtid_mode\x18\t \x01(\tR\bgtidMode\x12#\n" + + "\rbinlog_format\x18\n" + + " \x01(\tR\fbinlogFormat\x12(\n" + + "\x10binlog_row_image\x18\v \x01(\tR\x0ebinlogRowImage\x12&\n" + + "\x0flog_bin_enabled\x18\f \x01(\bR\rlogBinEnabled\x12.\n" + + "\x13log_replica_updates\x18\r \x01(\bR\x11logReplicaUpdates\x129\n" + + "\x19semi_sync_primary_enabled\x18\x0e \x01(\bR\x16semiSyncPrimaryEnabled\x129\n" + + "\x19semi_sync_replica_enabled\x18\x0f \x01(\bR\x16semiSyncReplicaEnabled\x127\n" + + "\x18semi_sync_primary_status\x18\x10 \x01(\bR\x15semiSyncPrimaryStatus\x127\n" + + "\x18semi_sync_replica_status\x18\x11 \x01(\bR\x15semiSyncReplicaStatus\x129\n" + + "\x19semi_sync_primary_clients\x18\x12 \x01(\rR\x16semiSyncPrimaryClients\x129\n" + + "\x19semi_sync_primary_timeout\x18\x13 \x01(\x04R\x16semiSyncPrimaryTimeout\x12E\n" + + " semi_sync_wait_for_replica_count\x18\x14 \x01(\rR\x1bsemiSyncWaitForReplicaCount\x12&\n" + + "\x0fsuper_read_only\x18\x15 \x01(\bR\rsuperReadOnly\x12[\n" + + "\x19replication_configuration\x18\x16 \x01(\v2\x1e.replicationdata.ConfigurationR\x18replicationConfiguration\x12!\n" + + "\fdisk_stalled\x18\x17 \x01(\bR\vdiskStalled\x12*\n" + + "\x11semi_sync_blocked\x18\x18 \x01(\bR\x0fsemiSyncBlocked\x125\n" + + "\vtablet_type\x18\x19 \x01(\x0e2\x14.topodata.TabletTypeR\n" + + "tabletType*;\n" + + "\x13StopReplicationMode\x12\x12\n" + + "\x0eIOANDSQLTHREAD\x10\x00\x12\x10\n" + + "\fIOTHREADONLY\x10\x01B.Z,vitess.io/vitess/go/vt/proto/replicationdatab\x06proto3" var ( file_replicationdata_proto_rawDescOnce sync.Once diff --git a/go/vt/proto/tableacl/tableacl.pb.go b/go/vt/proto/tableacl/tableacl.pb.go index bf183366307..0674f486333 100644 --- a/go/vt/proto/tableacl/tableacl.pb.go +++ b/go/vt/proto/tableacl/tableacl.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v3.21.3 // source: tableacl.proto @@ -162,28 +162,17 @@ func (x *Config) GetTableGroups() []*TableGroupSpec { var File_tableacl_proto protoreflect.FileDescriptor -var file_tableacl_proto_rawDesc = string([]byte{ - 0x0a, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x61, 0x63, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x08, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x61, 0x63, 0x6c, 0x22, 0xa7, 0x01, 0x0a, 0x0e, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x35, 0x0a, 0x17, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x5f, 0x6f, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x14, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x4f, 0x72, - 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x07, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x73, 0x22, 0x45, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3b, - 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x61, 0x63, 0x6c, 0x2e, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0b, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x42, 0x27, 0x5a, 0x25, 0x76, - 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, - 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x61, 0x63, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_tableacl_proto_rawDesc = "" + + "\n" + + "\x0etableacl.proto\x12\btableacl\"\xa7\x01\n" + + "\x0eTableGroupSpec\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x125\n" + + "\x17table_names_or_prefixes\x18\x02 \x03(\tR\x14tableNamesOrPrefixes\x12\x18\n" + + "\areaders\x18\x03 \x03(\tR\areaders\x12\x18\n" + + "\awriters\x18\x04 \x03(\tR\awriters\x12\x16\n" + + "\x06admins\x18\x05 \x03(\tR\x06admins\"E\n" + + "\x06Config\x12;\n" + + "\ftable_groups\x18\x01 \x03(\v2\x18.tableacl.TableGroupSpecR\vtableGroupsB'Z%vitess.io/vitess/go/vt/proto/tableaclb\x06proto3" var ( file_tableacl_proto_rawDescOnce sync.Once diff --git a/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go b/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go index 7540ee2b4e5..e3b54aeb58f 100644 --- a/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go +++ b/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go @@ -18,7 +18,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v3.21.3 // source: tabletmanagerdata.proto @@ -6761,8 +6761,10 @@ type UpdateVReplicationWorkflowRequest struct { Shards []string `protobuf:"bytes,7,rep,name=shards,proto3" json:"shards,omitempty"` ConfigOverrides map[string]string `protobuf:"bytes,8,rep,name=config_overrides,json=configOverrides,proto3" json:"config_overrides,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` Message *string `protobuf:"bytes,9,opt,name=message,proto3,oneof" json:"message,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Specify filter rules which need to be appended in the existing binlogsource filter rules. + FilterRules []*binlogdata.Rule `protobuf:"bytes,10,rep,name=filter_rules,json=filterRules,proto3" json:"filter_rules,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpdateVReplicationWorkflowRequest) Reset() { @@ -6858,6 +6860,13 @@ func (x *UpdateVReplicationWorkflowRequest) GetMessage() string { return "" } +func (x *UpdateVReplicationWorkflowRequest) GetFilterRules() []*binlogdata.Rule { + if x != nil { + return x.FilterRules + } + return nil +} + type UpdateVReplicationWorkflowResponse struct { state protoimpl.MessageState `protogen:"open.v1"` Result *query.QueryResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` @@ -7635,6 +7644,175 @@ func (x *ChangeTagsResponse) GetTags() map[string]string { return nil } +type UpdateSequenceTablesRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Sequences []*UpdateSequenceTablesRequest_SequenceMetadata `protobuf:"bytes,1,rep,name=sequences,proto3" json:"sequences,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpdateSequenceTablesRequest) Reset() { + *x = UpdateSequenceTablesRequest{} + mi := &file_tabletmanagerdata_proto_msgTypes[145] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateSequenceTablesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateSequenceTablesRequest) ProtoMessage() {} + +func (x *UpdateSequenceTablesRequest) ProtoReflect() protoreflect.Message { + mi := &file_tabletmanagerdata_proto_msgTypes[145] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateSequenceTablesRequest.ProtoReflect.Descriptor instead. +func (*UpdateSequenceTablesRequest) Descriptor() ([]byte, []int) { + return file_tabletmanagerdata_proto_rawDescGZIP(), []int{145} +} + +func (x *UpdateSequenceTablesRequest) GetSequences() []*UpdateSequenceTablesRequest_SequenceMetadata { + if x != nil { + return x.Sequences + } + return nil +} + +type UpdateSequenceTablesResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpdateSequenceTablesResponse) Reset() { + *x = UpdateSequenceTablesResponse{} + mi := &file_tabletmanagerdata_proto_msgTypes[146] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateSequenceTablesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateSequenceTablesResponse) ProtoMessage() {} + +func (x *UpdateSequenceTablesResponse) ProtoReflect() protoreflect.Message { + mi := &file_tabletmanagerdata_proto_msgTypes[146] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateSequenceTablesResponse.ProtoReflect.Descriptor instead. +func (*UpdateSequenceTablesResponse) Descriptor() ([]byte, []int) { + return file_tabletmanagerdata_proto_rawDescGZIP(), []int{146} +} + +type GetMaxValueForSequencesRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Sequences []*GetMaxValueForSequencesRequest_SequenceMetadata `protobuf:"bytes,1,rep,name=sequences,proto3" json:"sequences,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetMaxValueForSequencesRequest) Reset() { + *x = GetMaxValueForSequencesRequest{} + mi := &file_tabletmanagerdata_proto_msgTypes[147] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetMaxValueForSequencesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMaxValueForSequencesRequest) ProtoMessage() {} + +func (x *GetMaxValueForSequencesRequest) ProtoReflect() protoreflect.Message { + mi := &file_tabletmanagerdata_proto_msgTypes[147] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMaxValueForSequencesRequest.ProtoReflect.Descriptor instead. +func (*GetMaxValueForSequencesRequest) Descriptor() ([]byte, []int) { + return file_tabletmanagerdata_proto_rawDescGZIP(), []int{147} +} + +func (x *GetMaxValueForSequencesRequest) GetSequences() []*GetMaxValueForSequencesRequest_SequenceMetadata { + if x != nil { + return x.Sequences + } + return nil +} + +type GetMaxValueForSequencesResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Max used sequence value mapped with the backing sequence table. + MaxValuesBySequenceTable map[string]int64 `protobuf:"bytes,1,rep,name=max_values_by_sequence_table,json=maxValuesBySequenceTable,proto3" json:"max_values_by_sequence_table,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetMaxValueForSequencesResponse) Reset() { + *x = GetMaxValueForSequencesResponse{} + mi := &file_tabletmanagerdata_proto_msgTypes[148] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetMaxValueForSequencesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMaxValueForSequencesResponse) ProtoMessage() {} + +func (x *GetMaxValueForSequencesResponse) ProtoReflect() protoreflect.Message { + mi := &file_tabletmanagerdata_proto_msgTypes[148] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMaxValueForSequencesResponse.ProtoReflect.Descriptor instead. +func (*GetMaxValueForSequencesResponse) Descriptor() ([]byte, []int) { + return file_tabletmanagerdata_proto_rawDescGZIP(), []int{148} +} + +func (x *GetMaxValueForSequencesResponse) GetMaxValuesBySequenceTable() map[string]int64 { + if x != nil { + return x.MaxValuesBySequenceTable + } + return nil +} + type ReadVReplicationWorkflowResponse_Stream struct { state protoimpl.MessageState `protogen:"open.v1"` Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` @@ -7657,7 +7835,7 @@ type ReadVReplicationWorkflowResponse_Stream struct { func (x *ReadVReplicationWorkflowResponse_Stream) Reset() { *x = ReadVReplicationWorkflowResponse_Stream{} - mi := &file_tabletmanagerdata_proto_msgTypes[150] + mi := &file_tabletmanagerdata_proto_msgTypes[154] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7669,7 +7847,7 @@ func (x *ReadVReplicationWorkflowResponse_Stream) String() string { func (*ReadVReplicationWorkflowResponse_Stream) ProtoMessage() {} func (x *ReadVReplicationWorkflowResponse_Stream) ProtoReflect() protoreflect.Message { - mi := &file_tabletmanagerdata_proto_msgTypes[150] + mi := &file_tabletmanagerdata_proto_msgTypes[154] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7805,7 +7983,7 @@ type CheckThrottlerResponse_Metric struct { func (x *CheckThrottlerResponse_Metric) Reset() { *x = CheckThrottlerResponse_Metric{} - mi := &file_tabletmanagerdata_proto_msgTypes[153] + mi := &file_tabletmanagerdata_proto_msgTypes[157] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7817,7 +7995,7 @@ func (x *CheckThrottlerResponse_Metric) String() string { func (*CheckThrottlerResponse_Metric) ProtoMessage() {} func (x *CheckThrottlerResponse_Metric) ProtoReflect() protoreflect.Message { - mi := &file_tabletmanagerdata_proto_msgTypes[153] + mi := &file_tabletmanagerdata_proto_msgTypes[157] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7892,7 +8070,7 @@ type GetThrottlerStatusResponse_MetricResult struct { func (x *GetThrottlerStatusResponse_MetricResult) Reset() { *x = GetThrottlerStatusResponse_MetricResult{} - mi := &file_tabletmanagerdata_proto_msgTypes[155] + mi := &file_tabletmanagerdata_proto_msgTypes[159] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7904,7 +8082,7 @@ func (x *GetThrottlerStatusResponse_MetricResult) String() string { func (*GetThrottlerStatusResponse_MetricResult) ProtoMessage() {} func (x *GetThrottlerStatusResponse_MetricResult) ProtoReflect() protoreflect.Message { - mi := &file_tabletmanagerdata_proto_msgTypes[155] + mi := &file_tabletmanagerdata_proto_msgTypes[159] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7944,7 +8122,7 @@ type GetThrottlerStatusResponse_MetricHealth struct { func (x *GetThrottlerStatusResponse_MetricHealth) Reset() { *x = GetThrottlerStatusResponse_MetricHealth{} - mi := &file_tabletmanagerdata_proto_msgTypes[158] + mi := &file_tabletmanagerdata_proto_msgTypes[162] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7956,7 +8134,7 @@ func (x *GetThrottlerStatusResponse_MetricHealth) String() string { func (*GetThrottlerStatusResponse_MetricHealth) ProtoMessage() {} func (x *GetThrottlerStatusResponse_MetricHealth) ProtoReflect() protoreflect.Message { - mi := &file_tabletmanagerdata_proto_msgTypes[158] + mi := &file_tabletmanagerdata_proto_msgTypes[162] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7997,7 +8175,7 @@ type GetThrottlerStatusResponse_RecentApp struct { func (x *GetThrottlerStatusResponse_RecentApp) Reset() { *x = GetThrottlerStatusResponse_RecentApp{} - mi := &file_tabletmanagerdata_proto_msgTypes[162] + mi := &file_tabletmanagerdata_proto_msgTypes[166] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8009,7 +8187,7 @@ func (x *GetThrottlerStatusResponse_RecentApp) String() string { func (*GetThrottlerStatusResponse_RecentApp) ProtoMessage() {} func (x *GetThrottlerStatusResponse_RecentApp) ProtoReflect() protoreflect.Message { - mi := &file_tabletmanagerdata_proto_msgTypes[162] + mi := &file_tabletmanagerdata_proto_msgTypes[166] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8039,1193 +8217,725 @@ func (x *GetThrottlerStatusResponse_RecentApp) GetResponseCode() CheckThrottlerR return CheckThrottlerResponseCode_UNDEFINED } +type UpdateSequenceTablesRequest_SequenceMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The name of the sequence table. + BackingTableName string `protobuf:"bytes,1,opt,name=backing_table_name,json=backingTableName,proto3" json:"backing_table_name,omitempty"` + // The dbName in use by the keyspace where the backing table lives. + BackingTableDbName string `protobuf:"bytes,2,opt,name=backing_table_db_name,json=backingTableDbName,proto3" json:"backing_table_db_name,omitempty"` + // The maximum used sequence value. + MaxValue int64 `protobuf:"varint,3,opt,name=max_value,json=maxValue,proto3" json:"max_value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpdateSequenceTablesRequest_SequenceMetadata) Reset() { + *x = UpdateSequenceTablesRequest_SequenceMetadata{} + mi := &file_tabletmanagerdata_proto_msgTypes[170] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateSequenceTablesRequest_SequenceMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateSequenceTablesRequest_SequenceMetadata) ProtoMessage() {} + +func (x *UpdateSequenceTablesRequest_SequenceMetadata) ProtoReflect() protoreflect.Message { + mi := &file_tabletmanagerdata_proto_msgTypes[170] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateSequenceTablesRequest_SequenceMetadata.ProtoReflect.Descriptor instead. +func (*UpdateSequenceTablesRequest_SequenceMetadata) Descriptor() ([]byte, []int) { + return file_tabletmanagerdata_proto_rawDescGZIP(), []int{145, 0} +} + +func (x *UpdateSequenceTablesRequest_SequenceMetadata) GetBackingTableName() string { + if x != nil { + return x.BackingTableName + } + return "" +} + +func (x *UpdateSequenceTablesRequest_SequenceMetadata) GetBackingTableDbName() string { + if x != nil { + return x.BackingTableDbName + } + return "" +} + +func (x *UpdateSequenceTablesRequest_SequenceMetadata) GetMaxValue() int64 { + if x != nil { + return x.MaxValue + } + return 0 +} + +type GetMaxValueForSequencesRequest_SequenceMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The name of the sequence table. This will be used for mapping max value + // with table in the response. + BackingTableName string `protobuf:"bytes,1,opt,name=backing_table_name,json=backingTableName,proto3" json:"backing_table_name,omitempty"` + // Escaped column name specified for sequence in table. + UsingColEscaped string `protobuf:"bytes,2,opt,name=using_col_escaped,json=usingColEscaped,proto3" json:"using_col_escaped,omitempty"` + // Escaped name of the table using the sequence. + UsingTableNameEscaped string `protobuf:"bytes,3,opt,name=using_table_name_escaped,json=usingTableNameEscaped,proto3" json:"using_table_name_escaped,omitempty"` + // Escaped db name in use by the keyspace where the using table lives. + UsingTableDbNameEscaped string `protobuf:"bytes,4,opt,name=using_table_db_name_escaped,json=usingTableDbNameEscaped,proto3" json:"using_table_db_name_escaped,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetMaxValueForSequencesRequest_SequenceMetadata) Reset() { + *x = GetMaxValueForSequencesRequest_SequenceMetadata{} + mi := &file_tabletmanagerdata_proto_msgTypes[171] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetMaxValueForSequencesRequest_SequenceMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMaxValueForSequencesRequest_SequenceMetadata) ProtoMessage() {} + +func (x *GetMaxValueForSequencesRequest_SequenceMetadata) ProtoReflect() protoreflect.Message { + mi := &file_tabletmanagerdata_proto_msgTypes[171] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMaxValueForSequencesRequest_SequenceMetadata.ProtoReflect.Descriptor instead. +func (*GetMaxValueForSequencesRequest_SequenceMetadata) Descriptor() ([]byte, []int) { + return file_tabletmanagerdata_proto_rawDescGZIP(), []int{147, 0} +} + +func (x *GetMaxValueForSequencesRequest_SequenceMetadata) GetBackingTableName() string { + if x != nil { + return x.BackingTableName + } + return "" +} + +func (x *GetMaxValueForSequencesRequest_SequenceMetadata) GetUsingColEscaped() string { + if x != nil { + return x.UsingColEscaped + } + return "" +} + +func (x *GetMaxValueForSequencesRequest_SequenceMetadata) GetUsingTableNameEscaped() string { + if x != nil { + return x.UsingTableNameEscaped + } + return "" +} + +func (x *GetMaxValueForSequencesRequest_SequenceMetadata) GetUsingTableDbNameEscaped() string { + if x != nil { + return x.UsingTableDbNameEscaped + } + return "" +} + var File_tabletmanagerdata_proto protoreflect.FileDescriptor -var file_tabletmanagerdata_proto_rawDesc = string([]byte{ - 0x0a, 0x17, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x10, 0x62, 0x69, - 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0b, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0e, 0x74, 0x6f, 0x70, - 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x72, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x0d, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x0c, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x0b, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0e, 0x6d, 0x79, - 0x73, 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xff, 0x01, 0x0a, - 0x0f, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x18, 0x0a, 0x07, - 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, - 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x11, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x43, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x61, - 0x74, 0x61, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0a, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x72, - 0x6f, 0x77, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, - 0x72, 0x6f, 0x77, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x22, 0x92, - 0x01, 0x0a, 0x10, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x4f, 0x0a, 0x11, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4a, 0x04, 0x08, - 0x03, 0x10, 0x04, 0x22, 0xa6, 0x01, 0x0a, 0x12, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x48, 0x0a, 0x0d, 0x62, 0x65, - 0x66, 0x6f, 0x72, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x44, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x12, 0x46, 0x0a, 0x0c, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0b, 0x61, 0x66, 0x74, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0xf7, 0x01, 0x0a, - 0x0e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, - 0x6f, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x61, 0x73, 0x73, 0x77, - 0x6f, 0x72, 0x64, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x10, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x51, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, - 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x73, 0x65, - 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x72, 0x69, 0x76, - 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x69, - 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, - 0x6c, 0x65, 0x67, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd6, 0x01, 0x0a, 0x0c, 0x44, 0x62, 0x50, 0x65, 0x72, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x64, - 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x64, 0x62, 0x12, 0x12, 0x0a, 0x04, 0x75, - 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, - 0x4f, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x62, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, - 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0xa3, 0x01, 0x0a, 0x0b, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x4c, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x73, - 0x65, 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x75, 0x73, - 0x65, 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x46, 0x0a, - 0x0e, 0x64, 0x62, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x62, 0x50, 0x65, 0x72, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x64, 0x62, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x27, 0x0a, 0x0b, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x28, - 0x0a, 0x0c, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x2a, 0x0a, 0x0c, 0x53, 0x6c, 0x65, 0x65, - 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x0f, 0x0a, 0x0d, 0x53, 0x6c, 0x65, 0x65, 0x70, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd7, 0x01, 0x0a, 0x12, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x12, 0x50, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x65, 0x6e, 0x76, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x48, - 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x78, 0x74, 0x72, 0x61, - 0x45, 0x6e, 0x76, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x65, 0x78, 0x74, 0x72, 0x61, 0x45, - 0x6e, 0x76, 0x1a, 0x3b, 0x0a, 0x0d, 0x45, 0x78, 0x74, 0x72, 0x61, 0x45, 0x6e, 0x76, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x66, 0x0a, 0x13, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x65, 0x78, 0x69, - 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x22, 0xa2, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, - 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x56, 0x69, 0x65, 0x77, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x65, 0x0a, 0x11, - 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x50, 0x0a, 0x11, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x10, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5a, 0x0a, 0x16, - 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0b, 0x70, 0x65, 0x72, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3a, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x47, - 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x56, 0x61, 0x72, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x22, 0xc5, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x47, 0x6c, 0x6f, 0x62, - 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x56, 0x61, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x47, 0x65, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x56, - 0x61, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x3f, 0x0a, 0x11, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x14, 0x0a, 0x12, - 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x65, 0x74, - 0x52, 0x65, 0x61, 0x64, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x16, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x57, 0x72, 0x69, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x66, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, - 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, - 0x22, 0x14, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, - 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x16, 0x0a, - 0x14, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61, 0x6c, - 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x18, - 0x0a, 0x16, 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x0a, 0x13, 0x52, 0x65, 0x6c, 0x6f, - 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x23, 0x0a, 0x0d, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x61, 0x69, 0x74, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x16, 0x0a, 0x14, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x0a, 0x16, - 0x50, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, - 0x22, 0x67, 0x0a, 0x17, 0x50, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0e, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x0d, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0xf2, 0x02, 0x0a, 0x12, 0x41, 0x70, - 0x70, 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, - 0x71, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x0d, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x5f, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x0c, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, - 0x46, 0x0a, 0x0c, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x61, 0x66, 0x74, 0x65, - 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x71, 0x6c, 0x5f, 0x6d, - 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x71, 0x6c, 0x4d, 0x6f, - 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x62, 0x61, 0x74, 0x63, 0x68, 0x53, 0x69, 0x7a, - 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x6f, 0x72, - 0x65, 0x69, 0x67, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, - 0x72, 0x65, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x22, 0xa7, - 0x01, 0x0a, 0x13, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0d, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, - 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x0c, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x12, 0x46, 0x0a, 0x0c, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x61, 0x66, 0x74, - 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0x13, 0x0a, 0x11, 0x4c, 0x6f, 0x63, 0x6b, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x14, 0x0a, - 0x12, 0x4c, 0x6f, 0x63, 0x6b, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x16, 0x0a, 0x14, 0x55, 0x6e, - 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x8d, 0x01, 0x0a, 0x13, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x12, 0x17, 0x0a, 0x07, 0x64, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x64, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, - 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6d, 0x61, 0x78, - 0x52, 0x6f, 0x77, 0x73, 0x12, 0x2c, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, - 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, - 0x49, 0x64, 0x22, 0x42, 0x0a, 0x14, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xef, 0x01, 0x0a, 0x18, 0x45, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x62, 0x61, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x62, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x62, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x27, 0x0a, - 0x0f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x42, - 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, - 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x72, - 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x3b, 0x0a, 0x1a, 0x64, - 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x5f, 0x6b, - 0x65, 0x79, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x17, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x4b, - 0x65, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x22, 0x47, 0x0a, 0x19, 0x45, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x62, 0x61, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0xf0, 0x01, 0x0a, 0x1d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4d, 0x75, 0x6c, - 0x74, 0x69, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x62, 0x61, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x03, 0x73, 0x71, 0x6c, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, - 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x07, 0x6d, 0x61, 0x78, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x69, 0x73, - 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x6c, 0x6f, - 0x67, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x6f, 0x61, - 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x3b, 0x0a, 0x1a, 0x64, 0x69, 0x73, 0x61, 0x62, - 0x6c, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x63, - 0x68, 0x65, 0x63, 0x6b, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x64, 0x69, 0x73, - 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x73, 0x22, 0x4e, 0x0a, 0x1e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4d, - 0x75, 0x6c, 0x74, 0x69, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x62, 0x61, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x73, 0x22, 0x8e, 0x01, 0x0a, 0x1d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, - 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x6c, 0x6c, 0x50, 0x72, 0x69, 0x76, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x17, 0x0a, 0x07, - 0x64, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, - 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x6f, 0x77, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x52, 0x6f, 0x77, 0x73, - 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0x4c, 0x0a, 0x1e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, - 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x6c, 0x6c, 0x50, 0x72, 0x69, 0x76, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x22, 0x4b, 0x0a, 0x18, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, - 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x6f, 0x77, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x52, 0x6f, 0x77, 0x73, - 0x22, 0x47, 0x0a, 0x19, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, - 0x41, 0x73, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, - 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x43, 0x0a, 0x20, 0x47, 0x65, 0x74, - 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, - 0x0b, 0x61, 0x62, 0x61, 0x6e, 0x64, 0x6f, 0x6e, 0x5f, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0a, 0x61, 0x62, 0x61, 0x6e, 0x64, 0x6f, 0x6e, 0x41, 0x67, 0x65, 0x22, 0x63, - 0x0a, 0x21, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x22, 0x2c, 0x0a, 0x16, 0x52, 0x65, 0x61, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x64, 0x74, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, - 0x64, 0x22, 0x57, 0x0a, 0x17, 0x52, 0x65, 0x61, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0b, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2f, 0x0a, 0x19, 0x47, 0x65, - 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x74, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, 0x64, 0x22, 0x8f, 0x01, 0x0a, 0x1a, - 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x69, - 0x6d, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1e, 0x0a, - 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x40, 0x0a, - 0x1a, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, - 0x74, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, 0x64, 0x12, - 0x0e, 0x0a, 0x02, 0x6d, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6d, 0x6d, 0x22, - 0x1d, 0x0a, 0x1b, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, - 0x0a, 0x17, 0x4d, 0x79, 0x73, 0x71, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5b, 0x0a, 0x18, 0x4d, 0x79, 0x73, - 0x71, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6d, 0x79, 0x73, - 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x4d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x1a, 0x0a, 0x18, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x4c, 0x0a, 0x19, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2f, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x22, 0x16, 0x0a, 0x14, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4f, 0x0a, 0x15, 0x50, 0x72, 0x69, 0x6d, - 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x36, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x18, 0x0a, 0x16, 0x50, 0x72, 0x69, - 0x6d, 0x61, 0x72, 0x79, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x22, 0x35, 0x0a, 0x17, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x34, 0x0a, 0x16, 0x57, 0x61, - 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x19, 0x0a, 0x17, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x53, - 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x19, 0x0a, 0x17, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x5e, 0x0a, 0x1d, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, - 0x0c, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x77, 0x61, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, - 0x22, 0x3c, 0x0a, 0x1e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x35, - 0x0a, 0x17, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6d, - 0x69, 0x53, 0x79, 0x6e, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x65, 0x6d, - 0x69, 0x53, 0x79, 0x6e, 0x63, 0x22, 0x1a, 0x0a, 0x18, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x62, 0x0a, 0x21, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x77, 0x61, 0x69, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0x24, 0x0a, 0x22, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x41, 0x66, - 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0x2b, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x72, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x72, 0x73, 0x22, 0x19, - 0x0a, 0x17, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x1a, 0x0a, 0x18, 0x52, 0x65, 0x73, - 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x0a, 0x17, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x46, 0x0a, 0x18, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x4b, - 0x0a, 0x1d, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x61, - 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x0a, 0x1e, 0x56, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x61, 0x69, 0x74, 0x46, - 0x6f, 0x72, 0x50, 0x6f, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x0a, - 0x12, 0x49, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x22, - 0x31, 0x0a, 0x13, 0x49, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0xd8, 0x01, 0x0a, 0x1e, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, - 0x74, 0x69, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x73, 0x12, 0x1f, 0x0a, - 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3a, - 0x0a, 0x0d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0c, 0x70, 0x72, - 0x69, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x31, 0x0a, 0x14, 0x72, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x21, 0x0a, - 0x1f, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x20, 0x0a, 0x1e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x39, 0x0a, 0x1f, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0xba, 0x01, - 0x0a, 0x12, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x06, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x14, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x13, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x73, 0x12, 0x1a, - 0x0a, 0x08, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x22, 0x15, 0x0a, 0x13, 0x49, 0x6e, - 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x16, 0x0a, 0x14, 0x44, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, - 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x64, 0x0a, 0x15, 0x44, 0x65, 0x6d, - 0x6f, 0x74, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0e, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x72, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x69, - 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0d, 0x70, 0x72, 0x69, 0x6d, - 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, - 0x36, 0x0a, 0x18, 0x55, 0x6e, 0x64, 0x6f, 0x44, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x50, 0x72, 0x69, - 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, - 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, - 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x22, 0x1b, 0x0a, 0x19, 0x55, 0x6e, 0x64, 0x6f, 0x44, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x0a, 0x19, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x57, - 0x61, 0x73, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0x1c, 0x0a, 0x1a, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x57, 0x61, 0x73, 0x50, - 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x23, 0x0a, 0x21, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0x24, 0x0a, 0x22, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x13, 0x0a, 0x11, 0x46, 0x75, - 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0x49, 0x0a, 0x12, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x9c, 0x02, 0x0a, 0x1b, 0x53, - 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x06, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, - 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, - 0x73, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x69, 0x6d, - 0x65, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, - 0x73, 0x12, 0x36, 0x0a, 0x17, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x15, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x61, 0x69, - 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x77, 0x61, 0x69, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, - 0x0a, 0x08, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x2d, 0x0a, 0x12, 0x68, 0x65, - 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x11, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, - 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x22, 0x1e, 0x0a, 0x1c, 0x53, 0x65, 0x74, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x0a, 0x1a, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x57, 0x61, 0x73, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x06, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x22, 0x1d, 0x0a, 0x1b, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x57, 0x61, 0x73, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7e, 0x0a, 0x22, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x47, 0x65, 0x74, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x58, 0x0a, 0x15, 0x73, - 0x74, 0x6f, 0x70, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x72, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x6f, - 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, - 0x52, 0x13, 0x73, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x6b, 0x0a, 0x23, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x47, 0x65, 0x74, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x72, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, - 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4a, 0x04, 0x08, 0x01, - 0x10, 0x02, 0x22, 0x33, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, - 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, - 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x22, 0x34, 0x0a, 0x16, 0x50, 0x72, 0x6f, 0x6d, 0x6f, - 0x74, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xaf, 0x02, - 0x0a, 0x0d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, - 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, - 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, - 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x70, 0x6f, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, - 0x6c, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x6f, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x70, 0x67, 0x72, - 0x61, 0x64, 0x65, 0x5f, 0x73, 0x61, 0x66, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, - 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x53, 0x61, 0x66, 0x65, 0x12, 0x28, 0x0a, 0x0d, 0x62, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x45, 0x6e, 0x67, 0x69, - 0x6e, 0x65, 0x88, 0x01, 0x01, 0x12, 0x46, 0x0a, 0x16, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x5f, 0x73, - 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x53, 0x68, - 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x10, 0x0a, - 0x0e, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x22, - 0x36, 0x0a, 0x0e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x24, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0xfe, 0x01, 0x0a, 0x18, 0x52, 0x65, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x0b, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, - 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x74, - 0x6f, 0x5f, 0x70, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x54, 0x6f, 0x50, 0x6f, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x79, - 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x72, 0x79, 0x52, - 0x75, 0x6e, 0x12, 0x3e, 0x0a, 0x14, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x6f, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x12, - 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x12, 0x34, 0x0a, 0x16, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x62, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x14, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x41, 0x0a, 0x19, 0x52, 0x65, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0xee, 0x04, 0x0a, 0x21, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x3d, 0x0a, - 0x0d, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0c, - 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, - 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x6c, 0x0a, 0x1b, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x19, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0d, 0x77, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x24, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x53, 0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x5f, 0x73, 0x75, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x27, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x53, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x53, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x65, 0x66, - 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, - 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x64, 0x65, 0x66, 0x65, 0x72, 0x53, 0x65, - 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, - 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x09, 0x61, 0x75, 0x74, 0x6f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x74, - 0x6f, 0x70, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x74, 0x6f, 0x70, 0x41, 0x66, 0x74, 0x65, 0x72, 0x43, 0x6f, - 0x70, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x50, 0x0a, 0x22, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xda, - 0x01, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x60, 0x0a, 0x0d, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x3b, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x62, - 0x61, 0x74, 0x63, 0x68, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x09, 0x62, 0x61, 0x74, 0x63, 0x68, 0x53, 0x69, 0x7a, 0x65, 0x1a, 0x3f, 0x0a, 0x11, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x19, 0x0a, 0x17, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x0a, 0x21, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, 0x50, 0x0a, 0x22, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, - 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x21, 0x0a, 0x1f, 0x48, 0x61, 0x73, - 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x34, 0x0a, 0x20, - 0x48, 0x61, 0x73, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x10, 0x0a, 0x03, 0x68, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x68, - 0x61, 0x73, 0x22, 0xe0, 0x02, 0x0a, 0x20, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x49, 0x64, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x57, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x4c, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x25, 0x2e, - 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x77, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, - 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, - 0x12, 0x4c, 0x0a, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, - 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x25, - 0x0a, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x66, 0x72, 0x6f, 0x7a, 0x65, 0x6e, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x46, - 0x72, 0x6f, 0x7a, 0x65, 0x6e, 0x22, 0x76, 0x0a, 0x21, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x09, 0x77, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x22, 0x3d, 0x0a, - 0x1f, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, 0xe7, 0x0a, 0x0a, - 0x20, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x14, 0x0a, - 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, - 0x6c, 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x6c, 0x0a, 0x1b, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, - 0x19, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x62, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x62, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x49, 0x0a, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, - 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x53, 0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x73, - 0x75, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, - 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, - 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x53, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x65, 0x66, 0x65, 0x72, - 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x64, 0x65, 0x66, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x61, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x54, 0x0a, 0x07, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, - 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x07, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, - 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x73, 0x0a, 0x10, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x18, 0x0d, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, - 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x1a, 0xc1, - 0x04, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2a, 0x0a, 0x03, 0x62, 0x6c, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x03, 0x62, 0x6c, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x70, 0x5f, - 0x70, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x70, 0x50, - 0x6f, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x70, 0x73, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x54, 0x70, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x6d, - 0x61, 0x78, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, - 0x61, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, 0x12, 0x2f, 0x0a, 0x0c, 0x74, - 0x69, 0x6d, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, - 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x15, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, - 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, - 0x3b, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, - 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x63, - 0x6f, 0x70, 0x69, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x6f, 0x77, - 0x73, 0x43, 0x6f, 0x70, 0x69, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x5f, - 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0d, 0x74, - 0x69, 0x6d, 0x65, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x33, 0x0a, 0x0e, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, - 0x64, 0x12, 0x2f, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x74, - 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, - 0x65, 0x64, 0x1a, 0x42, 0x0a, 0x14, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x76, 0x65, 0x72, - 0x72, 0x69, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x28, 0x0a, 0x26, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, - 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x4d, 0x0a, 0x27, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, - 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, - 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x22, - 0xd7, 0x01, 0x0a, 0x0c, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x72, 0x67, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x72, 0x67, 0x12, - 0x1d, 0x0a, 0x0a, 0x76, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x64, 0x69, 0x66, 0x66, 0x55, 0x75, 0x69, 0x64, 0x12, 0x39, - 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1f, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x6a, 0x0a, 0x0d, 0x56, 0x44, 0x69, - 0x66, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2a, 0x0a, 0x06, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x64, 0x69, 0x66, 0x66, 0x5f, - 0x75, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x64, 0x69, 0x66, - 0x66, 0x55, 0x75, 0x69, 0x64, 0x22, 0x79, 0x0a, 0x12, 0x56, 0x44, 0x69, 0x66, 0x66, 0x50, 0x69, - 0x63, 0x6b, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x1f, - 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x12, - 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, - 0x22, 0xce, 0x01, 0x0a, 0x12, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, - 0x70, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6f, 0x6e, 0x6c, 0x79, 0x50, - 0x6b, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6d, - 0x61, 0x78, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, - 0x6f, 0x77, 0x73, 0x12, 0x3c, 0x0a, 0x1b, 0x72, 0x6f, 0x77, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, - 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x5f, - 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x72, 0x6f, 0x77, 0x44, 0x69, 0x66, - 0x66, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x41, - 0x74, 0x22, 0x8d, 0x03, 0x0a, 0x10, 0x56, 0x44, 0x69, 0x66, 0x66, 0x43, 0x6f, 0x72, 0x65, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x1d, - 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x19, 0x0a, - 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x07, 0x6d, 0x61, 0x78, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x70, - 0x63, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x50, 0x63, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x73, - 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x74, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x38, 0x0a, 0x19, - 0x6d, 0x61, 0x78, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x74, - 0x6f, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x15, 0x6d, 0x61, 0x78, 0x45, 0x78, 0x74, 0x72, 0x61, 0x52, 0x6f, 0x77, 0x73, 0x54, 0x6f, 0x43, - 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x69, 0x66, 0x66, - 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, - 0x6d, 0x61, 0x78, 0x44, 0x69, 0x66, 0x66, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x22, - 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x88, - 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x22, 0xf2, 0x01, 0x0a, 0x0c, 0x56, 0x44, 0x69, 0x66, 0x66, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x4c, 0x0a, 0x0e, 0x70, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x5f, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, - 0x44, 0x69, 0x66, 0x66, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x0d, 0x70, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x46, 0x0a, 0x0c, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, - 0x43, 0x6f, 0x72, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0b, 0x63, 0x6f, 0x72, - 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4c, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x7a, 0x0a, 0x10, 0x56, 0x44, 0x69, 0x66, 0x66, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x50, 0x4b, 0x12, 0x2a, 0x0a, 0x06, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x06, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x22, 0xaa, 0x05, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0e, - 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x73, 0x12, 0x71, 0x0a, 0x1b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x19, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x06, 0x6f, 0x6e, 0x5f, 0x64, 0x64, 0x6c, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x4f, 0x6e, 0x44, 0x44, 0x4c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, - 0x01, 0x52, 0x05, 0x6f, 0x6e, 0x44, 0x64, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x40, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x62, 0x69, 0x6e, - 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x48, 0x02, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x88, 0x01, 0x01, 0x12, 0x16, 0x0a, - 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, - 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x74, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, - 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x49, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x76, 0x65, 0x72, - 0x72, 0x69, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, 0x52, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x1e, - 0x0a, 0x1c, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x09, - 0x0a, 0x07, 0x5f, 0x6f, 0x6e, 0x5f, 0x64, 0x64, 0x6c, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x50, 0x0a, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0xd6, 0x02, 0x0a, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x5f, - 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0c, 0x61, 0x6c, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x2b, 0x0a, - 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x57, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x40, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x70, - 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x02, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x88, - 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x42, 0x0a, 0x0a, 0x08, - 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x73, 0x74, 0x6f, - 0x70, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x23, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x2f, 0x0a, - 0x15, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0x18, - 0x0a, 0x16, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc6, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, - 0x6f, 0x70, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x73, 0x6b, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x12, 0x27, 0x0a, 0x10, 0x6f, - 0x6b, 0x5f, 0x69, 0x66, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6f, 0x6b, 0x49, 0x66, 0x4e, 0x6f, 0x74, 0x45, 0x78, - 0x69, 0x73, 0x74, 0x73, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x52, 0x15, 0x6d, 0x75, 0x6c, 0x74, - 0x69, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x22, 0xf6, 0x05, 0x0a, 0x16, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, - 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, - 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x5f, 0x63, 0x68, 0x65, - 0x63, 0x6b, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x65, - 0x6e, 0x74, 0x6c, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x50, 0x0a, 0x07, 0x6d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x19, 0x0a, - 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, - 0x61, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x12, 0x52, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x1a, 0xf0, 0x01, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, - 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, - 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, - 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, - 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, - 0x52, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, - 0x6f, 0x64, 0x65, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x1a, 0x6c, 0x0a, 0x0c, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x0b, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x1b, 0x0a, 0x19, 0x47, 0x65, - 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x9b, 0x10, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x54, - 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, - 0x73, 0x5f, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, - 0x69, 0x73, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x6f, - 0x70, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4f, 0x70, 0x65, - 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x64, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x74, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x44, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x74, 0x12, - 0x28, 0x0a, 0x10, 0x6c, 0x61, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6c, 0x61, 0x67, 0x4d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x68, 0x72, - 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x3c, 0x0a, 0x1b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x61, 0x73, 0x5f, 0x64, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x55, 0x73, 0x65, 0x64, 0x41, 0x73, 0x44, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x12, 0x73, 0x0a, 0x12, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x44, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, - 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, - 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x70, 0x0a, 0x11, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x18, 0x0d, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, - 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, - 0x6f, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x12, 0x67, 0x0a, 0x0e, 0x6d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x18, 0x0e, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, - 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x48, 0x65, - 0x61, 0x6c, 0x74, 0x68, 0x12, 0x67, 0x0a, 0x0e, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, - 0x64, 0x5f, 0x61, 0x70, 0x70, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x68, 0x72, 0x6f, - 0x74, 0x74, 0x6c, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, - 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x74, 0x0a, - 0x13, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, - 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x70, 0x70, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x11, 0x61, 0x70, 0x70, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x5f, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x72, - 0x65, 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x5e, - 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x70, 0x70, 0x73, 0x18, 0x12, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, - 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x41, 0x70, 0x70, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x41, 0x70, 0x70, 0x73, 0x1a, 0x3a, - 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x1a, 0x80, 0x01, 0x0a, 0x16, 0x41, - 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x50, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, - 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x43, 0x0a, - 0x15, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x81, 0x01, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x48, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x12, 0x34, 0x0a, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x6c, - 0x74, 0x68, 0x79, 0x5f, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, - 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0d, 0x6c, 0x61, 0x73, 0x74, - 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x41, 0x74, 0x12, 0x3b, 0x0a, 0x1a, 0x73, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, - 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x73, - 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x48, - 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x1a, 0x7c, 0x0a, 0x12, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x50, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5c, 0x0a, 0x12, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, - 0x64, 0x41, 0x70, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x6f, - 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, - 0x41, 0x70, 0x70, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x41, 0x70, 0x70, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, - 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x92, 0x01, 0x0a, 0x09, 0x52, 0x65, 0x63, - 0x65, 0x6e, 0x74, 0x41, 0x70, 0x70, 0x12, 0x2b, 0x0a, 0x0a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, - 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x09, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, - 0x64, 0x41, 0x74, 0x12, 0x52, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x1a, 0x76, 0x0a, - 0x0f, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x41, 0x70, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x37, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, - 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x41, 0x70, 0x70, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xaa, 0x01, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x04, 0x74, - 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, - 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x1a, 0x37, 0x0a, 0x09, 0x54, 0x61, 0x67, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0x92, 0x01, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x67, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x04, 0x74, 0x61, 0x67, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, - 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x1a, 0x37, - 0x0a, 0x09, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0x3e, 0x0a, 0x19, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4e, 0x59, 0x10, 0x00, 0x12, 0x0b, 0x0a, - 0x07, 0x49, 0x4e, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, - 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x03, 0x2a, 0x83, 0x01, 0x0a, 0x1a, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x55, 0x4e, 0x44, 0x45, 0x46, 0x49, - 0x4e, 0x45, 0x44, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x01, 0x12, 0x16, 0x0a, - 0x12, 0x54, 0x48, 0x52, 0x45, 0x53, 0x48, 0x4f, 0x4c, 0x44, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, - 0x44, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x50, 0x50, 0x5f, 0x44, 0x45, 0x4e, - 0x49, 0x45, 0x44, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, - 0x5f, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4e, 0x54, - 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x05, 0x42, 0x30, 0x5a, - 0x2e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, - 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_tabletmanagerdata_proto_rawDesc = "" + + "\n" + + "\x17tabletmanagerdata.proto\x12\x11tabletmanagerdata\x1a\x10binlogdata.proto\x1a\vquery.proto\x1a\x0etopodata.proto\x1a\x15replicationdata.proto\x1a\rlogutil.proto\x1a\fvttime.proto\x1a\vvtrpc.proto\x1a\x0emysqlctl.proto\"\xff\x01\n" + + "\x0fTableDefinition\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x16\n" + + "\x06schema\x18\x02 \x01(\tR\x06schema\x12\x18\n" + + "\acolumns\x18\x03 \x03(\tR\acolumns\x12.\n" + + "\x13primary_key_columns\x18\x04 \x03(\tR\x11primaryKeyColumns\x12\x12\n" + + "\x04type\x18\x05 \x01(\tR\x04type\x12\x1f\n" + + "\vdata_length\x18\x06 \x01(\x04R\n" + + "dataLength\x12\x1b\n" + + "\trow_count\x18\a \x01(\x04R\browCount\x12$\n" + + "\x06fields\x18\b \x03(\v2\f.query.FieldR\x06fields\"\x92\x01\n" + + "\x10SchemaDefinition\x12'\n" + + "\x0fdatabase_schema\x18\x01 \x01(\tR\x0edatabaseSchema\x12O\n" + + "\x11table_definitions\x18\x02 \x03(\v2\".tabletmanagerdata.TableDefinitionR\x10tableDefinitionsJ\x04\b\x03\x10\x04\"\xa6\x01\n" + + "\x12SchemaChangeResult\x12H\n" + + "\rbefore_schema\x18\x01 \x01(\v2#.tabletmanagerdata.SchemaDefinitionR\fbeforeSchema\x12F\n" + + "\fafter_schema\x18\x02 \x01(\v2#.tabletmanagerdata.SchemaDefinitionR\vafterSchema\"\xf7\x01\n" + + "\x0eUserPermission\x12\x12\n" + + "\x04host\x18\x01 \x01(\tR\x04host\x12\x12\n" + + "\x04user\x18\x02 \x01(\tR\x04user\x12+\n" + + "\x11password_checksum\x18\x03 \x01(\x04R\x10passwordChecksum\x12Q\n" + + "\n" + + "privileges\x18\x04 \x03(\v21.tabletmanagerdata.UserPermission.PrivilegesEntryR\n" + + "privileges\x1a=\n" + + "\x0fPrivilegesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xd6\x01\n" + + "\fDbPermission\x12\x12\n" + + "\x04host\x18\x01 \x01(\tR\x04host\x12\x0e\n" + + "\x02db\x18\x02 \x01(\tR\x02db\x12\x12\n" + + "\x04user\x18\x03 \x01(\tR\x04user\x12O\n" + + "\n" + + "privileges\x18\x04 \x03(\v2/.tabletmanagerdata.DbPermission.PrivilegesEntryR\n" + + "privileges\x1a=\n" + + "\x0fPrivilegesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xa3\x01\n" + + "\vPermissions\x12L\n" + + "\x10user_permissions\x18\x01 \x03(\v2!.tabletmanagerdata.UserPermissionR\x0fuserPermissions\x12F\n" + + "\x0edb_permissions\x18\x02 \x03(\v2\x1f.tabletmanagerdata.DbPermissionR\rdbPermissions\"'\n" + + "\vPingRequest\x12\x18\n" + + "\apayload\x18\x01 \x01(\tR\apayload\"(\n" + + "\fPingResponse\x12\x18\n" + + "\apayload\x18\x01 \x01(\tR\apayload\"*\n" + + "\fSleepRequest\x12\x1a\n" + + "\bduration\x18\x01 \x01(\x03R\bduration\"\x0f\n" + + "\rSleepResponse\"\xd7\x01\n" + + "\x12ExecuteHookRequest\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x1e\n" + + "\n" + + "parameters\x18\x02 \x03(\tR\n" + + "parameters\x12P\n" + + "\textra_env\x18\x03 \x03(\v23.tabletmanagerdata.ExecuteHookRequest.ExtraEnvEntryR\bextraEnv\x1a;\n" + + "\rExtraEnvEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"f\n" + + "\x13ExecuteHookResponse\x12\x1f\n" + + "\vexit_status\x18\x01 \x01(\x03R\n" + + "exitStatus\x12\x16\n" + + "\x06stdout\x18\x02 \x01(\tR\x06stdout\x12\x16\n" + + "\x06stderr\x18\x03 \x01(\tR\x06stderr\"\xa2\x01\n" + + "\x10GetSchemaRequest\x12\x16\n" + + "\x06tables\x18\x01 \x03(\tR\x06tables\x12#\n" + + "\rinclude_views\x18\x02 \x01(\bR\fincludeViews\x12%\n" + + "\x0eexclude_tables\x18\x03 \x03(\tR\rexcludeTables\x12*\n" + + "\x11table_schema_only\x18\x04 \x01(\bR\x0ftableSchemaOnly\"e\n" + + "\x11GetSchemaResponse\x12P\n" + + "\x11schema_definition\x18\x01 \x01(\v2#.tabletmanagerdata.SchemaDefinitionR\x10schemaDefinition\"\x17\n" + + "\x15GetPermissionsRequest\"Z\n" + + "\x16GetPermissionsResponse\x12@\n" + + "\vpermissions\x18\x01 \x01(\v2\x1e.tabletmanagerdata.PermissionsR\vpermissions\":\n" + + "\x1aGetGlobalStatusVarsRequest\x12\x1c\n" + + "\tvariables\x18\x01 \x03(\tR\tvariables\"\xc5\x01\n" + + "\x1bGetGlobalStatusVarsResponse\x12e\n" + + "\rstatus_values\x18\x01 \x03(\v2@.tabletmanagerdata.GetGlobalStatusVarsResponse.StatusValuesEntryR\fstatusValues\x1a?\n" + + "\x11StatusValuesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x14\n" + + "\x12SetReadOnlyRequest\"\x15\n" + + "\x13SetReadOnlyResponse\"\x15\n" + + "\x13SetReadWriteRequest\"\x16\n" + + "\x14SetReadWriteResponse\"f\n" + + "\x11ChangeTypeRequest\x125\n" + + "\vtablet_type\x18\x01 \x01(\x0e2\x14.topodata.TabletTypeR\n" + + "tabletType\x12\x1a\n" + + "\bsemiSync\x18\x02 \x01(\bR\bsemiSync\"\x14\n" + + "\x12ChangeTypeResponse\"\x15\n" + + "\x13RefreshStateRequest\"\x16\n" + + "\x14RefreshStateResponse\"\x17\n" + + "\x15RunHealthCheckRequest\"\x18\n" + + "\x16RunHealthCheckResponse\":\n" + + "\x13ReloadSchemaRequest\x12#\n" + + "\rwait_position\x18\x01 \x01(\tR\fwaitPosition\"\x16\n" + + "\x14ReloadSchemaResponse\"2\n" + + "\x16PreflightSchemaRequest\x12\x18\n" + + "\achanges\x18\x01 \x03(\tR\achanges\"g\n" + + "\x17PreflightSchemaResponse\x12L\n" + + "\x0echange_results\x18\x01 \x03(\v2%.tabletmanagerdata.SchemaChangeResultR\rchangeResults\"\xf2\x02\n" + + "\x12ApplySchemaRequest\x12\x10\n" + + "\x03sql\x18\x01 \x01(\tR\x03sql\x12\x14\n" + + "\x05force\x18\x02 \x01(\bR\x05force\x12+\n" + + "\x11allow_replication\x18\x03 \x01(\bR\x10allowReplication\x12H\n" + + "\rbefore_schema\x18\x04 \x01(\v2#.tabletmanagerdata.SchemaDefinitionR\fbeforeSchema\x12F\n" + + "\fafter_schema\x18\x05 \x01(\v2#.tabletmanagerdata.SchemaDefinitionR\vafterSchema\x12\x19\n" + + "\bsql_mode\x18\x06 \x01(\tR\asqlMode\x12\x1d\n" + + "\n" + + "batch_size\x18\a \x01(\x03R\tbatchSize\x12;\n" + + "\x1adisable_foreign_key_checks\x18\b \x01(\bR\x17disableForeignKeyChecks\"\xa7\x01\n" + + "\x13ApplySchemaResponse\x12H\n" + + "\rbefore_schema\x18\x01 \x01(\v2#.tabletmanagerdata.SchemaDefinitionR\fbeforeSchema\x12F\n" + + "\fafter_schema\x18\x02 \x01(\v2#.tabletmanagerdata.SchemaDefinitionR\vafterSchema\"\x13\n" + + "\x11LockTablesRequest\"\x14\n" + + "\x12LockTablesResponse\"\x15\n" + + "\x13UnlockTablesRequest\"\x16\n" + + "\x14UnlockTablesResponse\"\x8d\x01\n" + + "\x13ExecuteQueryRequest\x12\x14\n" + + "\x05query\x18\x01 \x01(\fR\x05query\x12\x17\n" + + "\adb_name\x18\x02 \x01(\tR\x06dbName\x12\x19\n" + + "\bmax_rows\x18\x03 \x01(\x04R\amaxRows\x12,\n" + + "\tcaller_id\x18\x04 \x01(\v2\x0f.vtrpc.CallerIDR\bcallerId\"B\n" + + "\x14ExecuteQueryResponse\x12*\n" + + "\x06result\x18\x01 \x01(\v2\x12.query.QueryResultR\x06result\"\xef\x01\n" + + "\x18ExecuteFetchAsDbaRequest\x12\x14\n" + + "\x05query\x18\x01 \x01(\fR\x05query\x12\x17\n" + + "\adb_name\x18\x02 \x01(\tR\x06dbName\x12\x19\n" + + "\bmax_rows\x18\x03 \x01(\x04R\amaxRows\x12'\n" + + "\x0fdisable_binlogs\x18\x04 \x01(\bR\x0edisableBinlogs\x12#\n" + + "\rreload_schema\x18\x05 \x01(\bR\freloadSchema\x12;\n" + + "\x1adisable_foreign_key_checks\x18\x06 \x01(\bR\x17disableForeignKeyChecks\"G\n" + + "\x19ExecuteFetchAsDbaResponse\x12*\n" + + "\x06result\x18\x01 \x01(\v2\x12.query.QueryResultR\x06result\"\xf0\x01\n" + + "\x1dExecuteMultiFetchAsDbaRequest\x12\x10\n" + + "\x03sql\x18\x01 \x01(\fR\x03sql\x12\x17\n" + + "\adb_name\x18\x02 \x01(\tR\x06dbName\x12\x19\n" + + "\bmax_rows\x18\x03 \x01(\x04R\amaxRows\x12'\n" + + "\x0fdisable_binlogs\x18\x04 \x01(\bR\x0edisableBinlogs\x12#\n" + + "\rreload_schema\x18\x05 \x01(\bR\freloadSchema\x12;\n" + + "\x1adisable_foreign_key_checks\x18\x06 \x01(\bR\x17disableForeignKeyChecks\"N\n" + + "\x1eExecuteMultiFetchAsDbaResponse\x12,\n" + + "\aresults\x18\x01 \x03(\v2\x12.query.QueryResultR\aresults\"\x8e\x01\n" + + "\x1dExecuteFetchAsAllPrivsRequest\x12\x14\n" + + "\x05query\x18\x01 \x01(\fR\x05query\x12\x17\n" + + "\adb_name\x18\x02 \x01(\tR\x06dbName\x12\x19\n" + + "\bmax_rows\x18\x03 \x01(\x04R\amaxRows\x12#\n" + + "\rreload_schema\x18\x04 \x01(\bR\freloadSchema\"L\n" + + "\x1eExecuteFetchAsAllPrivsResponse\x12*\n" + + "\x06result\x18\x01 \x01(\v2\x12.query.QueryResultR\x06result\"K\n" + + "\x18ExecuteFetchAsAppRequest\x12\x14\n" + + "\x05query\x18\x01 \x01(\fR\x05query\x12\x19\n" + + "\bmax_rows\x18\x02 \x01(\x04R\amaxRows\"G\n" + + "\x19ExecuteFetchAsAppResponse\x12*\n" + + "\x06result\x18\x01 \x01(\v2\x12.query.QueryResultR\x06result\"C\n" + + " GetUnresolvedTransactionsRequest\x12\x1f\n" + + "\vabandon_age\x18\x01 \x01(\x03R\n" + + "abandonAge\"c\n" + + "!GetUnresolvedTransactionsResponse\x12>\n" + + "\ftransactions\x18\x01 \x03(\v2\x1a.query.TransactionMetadataR\ftransactions\",\n" + + "\x16ReadTransactionRequest\x12\x12\n" + + "\x04dtid\x18\x01 \x01(\tR\x04dtid\"W\n" + + "\x17ReadTransactionResponse\x12<\n" + + "\vtransaction\x18\x01 \x01(\v2\x1a.query.TransactionMetadataR\vtransaction\"/\n" + + "\x19GetTransactionInfoRequest\x12\x12\n" + + "\x04dtid\x18\x01 \x01(\tR\x04dtid\"\x8f\x01\n" + + "\x1aGetTransactionInfoResponse\x12\x14\n" + + "\x05state\x18\x01 \x01(\tR\x05state\x12\x18\n" + + "\amessage\x18\x02 \x01(\tR\amessage\x12!\n" + + "\ftime_created\x18\x03 \x01(\x03R\vtimeCreated\x12\x1e\n" + + "\n" + + "statements\x18\x04 \x03(\tR\n" + + "statements\"@\n" + + "\x1aConcludeTransactionRequest\x12\x12\n" + + "\x04dtid\x18\x01 \x01(\tR\x04dtid\x12\x0e\n" + + "\x02mm\x18\x02 \x01(\bR\x02mm\"\x1d\n" + + "\x1bConcludeTransactionResponse\"\x19\n" + + "\x17MysqlHostMetricsRequest\"[\n" + + "\x18MysqlHostMetricsResponse\x12?\n" + + "\vHostMetrics\x18\x01 \x01(\v2\x1d.mysqlctl.HostMetricsResponseR\vHostMetrics\"\x1a\n" + + "\x18ReplicationStatusRequest\"L\n" + + "\x19ReplicationStatusResponse\x12/\n" + + "\x06status\x18\x01 \x01(\v2\x17.replicationdata.StatusR\x06status\"\x16\n" + + "\x14PrimaryStatusRequest\"O\n" + + "\x15PrimaryStatusResponse\x126\n" + + "\x06status\x18\x01 \x01(\v2\x1e.replicationdata.PrimaryStatusR\x06status\"\x18\n" + + "\x16PrimaryPositionRequest\"5\n" + + "\x17PrimaryPositionResponse\x12\x1a\n" + + "\bposition\x18\x01 \x01(\tR\bposition\"4\n" + + "\x16WaitForPositionRequest\x12\x1a\n" + + "\bposition\x18\x01 \x01(\tR\bposition\"\x19\n" + + "\x17WaitForPositionResponse\"\x18\n" + + "\x16StopReplicationRequest\"\x19\n" + + "\x17StopReplicationResponse\"^\n" + + "\x1dStopReplicationMinimumRequest\x12\x1a\n" + + "\bposition\x18\x01 \x01(\tR\bposition\x12!\n" + + "\fwait_timeout\x18\x02 \x01(\x03R\vwaitTimeout\"<\n" + + "\x1eStopReplicationMinimumResponse\x12\x1a\n" + + "\bposition\x18\x01 \x01(\tR\bposition\"5\n" + + "\x17StartReplicationRequest\x12\x1a\n" + + "\bsemiSync\x18\x01 \x01(\bR\bsemiSync\"\x1a\n" + + "\x18StartReplicationResponse\"b\n" + + "!StartReplicationUntilAfterRequest\x12\x1a\n" + + "\bposition\x18\x01 \x01(\tR\bposition\x12!\n" + + "\fwait_timeout\x18\x02 \x01(\x03R\vwaitTimeout\"$\n" + + "\"StartReplicationUntilAfterResponse\"\x14\n" + + "\x12GetReplicasRequest\"+\n" + + "\x13GetReplicasResponse\x12\x14\n" + + "\x05addrs\x18\x01 \x03(\tR\x05addrs\"\x19\n" + + "\x17ResetReplicationRequest\"\x1a\n" + + "\x18ResetReplicationResponse\"/\n" + + "\x17VReplicationExecRequest\x12\x14\n" + + "\x05query\x18\x01 \x01(\tR\x05query\"F\n" + + "\x18VReplicationExecResponse\x12*\n" + + "\x06result\x18\x01 \x01(\v2\x12.query.QueryResultR\x06result\"K\n" + + "\x1dVReplicationWaitForPosRequest\x12\x0e\n" + + "\x02id\x18\x01 \x01(\x05R\x02id\x12\x1a\n" + + "\bposition\x18\x02 \x01(\tR\bposition\" \n" + + "\x1eVReplicationWaitForPosResponse\"0\n" + + "\x12InitPrimaryRequest\x12\x1a\n" + + "\bsemiSync\x18\x01 \x01(\bR\bsemiSync\"1\n" + + "\x13InitPrimaryResponse\x12\x1a\n" + + "\bposition\x18\x01 \x01(\tR\bposition\"\xd8\x01\n" + + "\x1ePopulateReparentJournalRequest\x12&\n" + + "\x0ftime_created_ns\x18\x01 \x01(\x03R\rtimeCreatedNs\x12\x1f\n" + + "\vaction_name\x18\x02 \x01(\tR\n" + + "actionName\x12:\n" + + "\rprimary_alias\x18\x03 \x01(\v2\x15.topodata.TabletAliasR\fprimaryAlias\x121\n" + + "\x14replication_position\x18\x04 \x01(\tR\x13replicationPosition\"!\n" + + "\x1fPopulateReparentJournalResponse\" \n" + + "\x1eReadReparentJournalInfoRequest\"9\n" + + "\x1fReadReparentJournalInfoResponse\x12\x16\n" + + "\x06length\x18\x01 \x01(\x05R\x06length\"\xba\x01\n" + + "\x12InitReplicaRequest\x12-\n" + + "\x06parent\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\x06parent\x121\n" + + "\x14replication_position\x18\x02 \x01(\tR\x13replicationPosition\x12&\n" + + "\x0ftime_created_ns\x18\x03 \x01(\x03R\rtimeCreatedNs\x12\x1a\n" + + "\bsemiSync\x18\x04 \x01(\bR\bsemiSync\"\x15\n" + + "\x13InitReplicaResponse\"\x16\n" + + "\x14DemotePrimaryRequest\"d\n" + + "\x15DemotePrimaryResponse\x12E\n" + + "\x0eprimary_status\x18\x02 \x01(\v2\x1e.replicationdata.PrimaryStatusR\rprimaryStatusJ\x04\b\x01\x10\x02\"6\n" + + "\x18UndoDemotePrimaryRequest\x12\x1a\n" + + "\bsemiSync\x18\x01 \x01(\bR\bsemiSync\"\x1b\n" + + "\x19UndoDemotePrimaryResponse\"\x1b\n" + + "\x19ReplicaWasPromotedRequest\"\x1c\n" + + "\x1aReplicaWasPromotedResponse\"#\n" + + "!ResetReplicationParametersRequest\"$\n" + + "\"ResetReplicationParametersResponse\"\x13\n" + + "\x11FullStatusRequest\"I\n" + + "\x12FullStatusResponse\x123\n" + + "\x06status\x18\x01 \x01(\v2\x1b.replicationdata.FullStatusR\x06status\"\x9c\x02\n" + + "\x1bSetReplicationSourceRequest\x12-\n" + + "\x06parent\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\x06parent\x12&\n" + + "\x0ftime_created_ns\x18\x02 \x01(\x03R\rtimeCreatedNs\x126\n" + + "\x17force_start_replication\x18\x03 \x01(\bR\x15forceStartReplication\x12#\n" + + "\rwait_position\x18\x04 \x01(\tR\fwaitPosition\x12\x1a\n" + + "\bsemiSync\x18\x05 \x01(\bR\bsemiSync\x12-\n" + + "\x12heartbeat_interval\x18\x06 \x01(\x01R\x11heartbeatInterval\"\x1e\n" + + "\x1cSetReplicationSourceResponse\"K\n" + + "\x1aReplicaWasRestartedRequest\x12-\n" + + "\x06parent\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\x06parent\"\x1d\n" + + "\x1bReplicaWasRestartedResponse\"~\n" + + "\"StopReplicationAndGetStatusRequest\x12X\n" + + "\x15stop_replication_mode\x18\x01 \x01(\x0e2$.replicationdata.StopReplicationModeR\x13stopReplicationMode\"k\n" + + "#StopReplicationAndGetStatusResponse\x12>\n" + + "\x06status\x18\x02 \x01(\v2&.replicationdata.StopReplicationStatusR\x06statusJ\x04\b\x01\x10\x02\"3\n" + + "\x15PromoteReplicaRequest\x12\x1a\n" + + "\bsemiSync\x18\x01 \x01(\bR\bsemiSync\"4\n" + + "\x16PromoteReplicaResponse\x12\x1a\n" + + "\bposition\x18\x01 \x01(\tR\bposition\"\xaf\x02\n" + + "\rBackupRequest\x12 \n" + + "\vconcurrency\x18\x01 \x01(\x05R\vconcurrency\x12#\n" + + "\rallow_primary\x18\x02 \x01(\bR\fallowPrimary\x120\n" + + "\x14incremental_from_pos\x18\x03 \x01(\tR\x12incrementalFromPos\x12!\n" + + "\fupgrade_safe\x18\x04 \x01(\bR\vupgradeSafe\x12(\n" + + "\rbackup_engine\x18\x05 \x01(\tH\x00R\fbackupEngine\x88\x01\x01\x12F\n" + + "\x16mysql_shutdown_timeout\x18\x06 \x01(\v2\x10.vttime.DurationR\x14mysqlShutdownTimeoutB\x10\n" + + "\x0e_backup_engine\"6\n" + + "\x0eBackupResponse\x12$\n" + + "\x05event\x18\x01 \x01(\v2\x0e.logutil.EventR\x05event\"\xfe\x01\n" + + "\x18RestoreFromBackupRequest\x12-\n" + + "\vbackup_time\x18\x01 \x01(\v2\f.vttime.TimeR\n" + + "backupTime\x12$\n" + + "\x0erestore_to_pos\x18\x02 \x01(\tR\frestoreToPos\x12\x17\n" + + "\adry_run\x18\x03 \x01(\bR\x06dryRun\x12>\n" + + "\x14restore_to_timestamp\x18\x04 \x01(\v2\f.vttime.TimeR\x12restoreToTimestamp\x124\n" + + "\x16allowed_backup_engines\x18\x05 \x03(\tR\x14allowedBackupEngines\"A\n" + + "\x19RestoreFromBackupResponse\x12$\n" + + "\x05event\x18\x01 \x01(\v2\x0e.logutil.EventR\x05event\"\xee\x04\n" + + "!CreateVReplicationWorkflowRequest\x12\x1a\n" + + "\bworkflow\x18\x01 \x01(\tR\bworkflow\x12=\n" + + "\rbinlog_source\x18\x02 \x03(\v2\x18.binlogdata.BinlogSourceR\fbinlogSource\x12\x14\n" + + "\x05cells\x18\x03 \x03(\tR\x05cells\x127\n" + + "\ftablet_types\x18\x04 \x03(\x0e2\x14.topodata.TabletTypeR\vtabletTypes\x12l\n" + + "\x1btablet_selection_preference\x18\x05 \x01(\x0e2,.tabletmanagerdata.TabletSelectionPreferenceR\x19tabletSelectionPreference\x12I\n" + + "\rworkflow_type\x18\x06 \x01(\x0e2$.binlogdata.VReplicationWorkflowTypeR\fworkflowType\x12S\n" + + "\x11workflow_sub_type\x18\a \x01(\x0e2'.binlogdata.VReplicationWorkflowSubTypeR\x0fworkflowSubType\x120\n" + + "\x14defer_secondary_keys\x18\b \x01(\bR\x12deferSecondaryKeys\x12\x1d\n" + + "\n" + + "auto_start\x18\t \x01(\bR\tautoStart\x12&\n" + + "\x0fstop_after_copy\x18\n" + + " \x01(\bR\rstopAfterCopy\x12\x18\n" + + "\aoptions\x18\v \x01(\tR\aoptions\"P\n" + + "\"CreateVReplicationWorkflowResponse\x12*\n" + + "\x06result\x18\x01 \x01(\v2\x12.query.QueryResultR\x06result\"\xda\x01\n" + + "\x16DeleteTableDataRequest\x12`\n" + + "\rtable_filters\x18\x01 \x03(\v2;.tabletmanagerdata.DeleteTableDataRequest.TableFiltersEntryR\ftableFilters\x12\x1d\n" + + "\n" + + "batch_size\x18\x02 \x01(\x03R\tbatchSize\x1a?\n" + + "\x11TableFiltersEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x19\n" + + "\x17DeleteTableDataResponse\"?\n" + + "!DeleteVReplicationWorkflowRequest\x12\x1a\n" + + "\bworkflow\x18\x01 \x01(\tR\bworkflow\"P\n" + + "\"DeleteVReplicationWorkflowResponse\x12*\n" + + "\x06result\x18\x01 \x01(\v2\x12.query.QueryResultR\x06result\"!\n" + + "\x1fHasVReplicationWorkflowsRequest\"4\n" + + " HasVReplicationWorkflowsResponse\x12\x10\n" + + "\x03has\x18\x01 \x01(\bR\x03has\"\xe0\x02\n" + + " ReadVReplicationWorkflowsRequest\x12\x1f\n" + + "\vinclude_ids\x18\x01 \x03(\x05R\n" + + "includeIds\x12+\n" + + "\x11include_workflows\x18\x02 \x03(\tR\x10includeWorkflows\x12L\n" + + "\x0einclude_states\x18\x03 \x03(\x0e2%.binlogdata.VReplicationWorkflowStateR\rincludeStates\x12+\n" + + "\x11exclude_workflows\x18\x04 \x03(\tR\x10excludeWorkflows\x12L\n" + + "\x0eexclude_states\x18\x05 \x03(\x0e2%.binlogdata.VReplicationWorkflowStateR\rexcludeStates\x12%\n" + + "\x0eexclude_frozen\x18\x06 \x01(\bR\rexcludeFrozen\"v\n" + + "!ReadVReplicationWorkflowsResponse\x12Q\n" + + "\tworkflows\x18\x01 \x03(\v23.tabletmanagerdata.ReadVReplicationWorkflowResponseR\tworkflows\"=\n" + + "\x1fReadVReplicationWorkflowRequest\x12\x1a\n" + + "\bworkflow\x18\x01 \x01(\tR\bworkflow\"\xe7\n" + + "\n" + + " ReadVReplicationWorkflowResponse\x12\x1a\n" + + "\bworkflow\x18\x02 \x01(\tR\bworkflow\x12\x14\n" + + "\x05cells\x18\x03 \x01(\tR\x05cells\x127\n" + + "\ftablet_types\x18\x04 \x03(\x0e2\x14.topodata.TabletTypeR\vtabletTypes\x12l\n" + + "\x1btablet_selection_preference\x18\x05 \x01(\x0e2,.tabletmanagerdata.TabletSelectionPreferenceR\x19tabletSelectionPreference\x12\x17\n" + + "\adb_name\x18\x06 \x01(\tR\x06dbName\x12\x12\n" + + "\x04tags\x18\a \x01(\tR\x04tags\x12I\n" + + "\rworkflow_type\x18\b \x01(\x0e2$.binlogdata.VReplicationWorkflowTypeR\fworkflowType\x12S\n" + + "\x11workflow_sub_type\x18\t \x01(\x0e2'.binlogdata.VReplicationWorkflowSubTypeR\x0fworkflowSubType\x120\n" + + "\x14defer_secondary_keys\x18\n" + + " \x01(\bR\x12deferSecondaryKeys\x12T\n" + + "\astreams\x18\v \x03(\v2:.tabletmanagerdata.ReadVReplicationWorkflowResponse.StreamR\astreams\x12\x18\n" + + "\aoptions\x18\f \x01(\tR\aoptions\x12s\n" + + "\x10config_overrides\x18\r \x03(\v2H.tabletmanagerdata.ReadVReplicationWorkflowResponse.ConfigOverridesEntryR\x0fconfigOverrides\x1a\xc1\x04\n" + + "\x06Stream\x12\x0e\n" + + "\x02id\x18\x01 \x01(\x05R\x02id\x12*\n" + + "\x03bls\x18\x02 \x01(\v2\x18.binlogdata.BinlogSourceR\x03bls\x12\x10\n" + + "\x03pos\x18\x03 \x01(\tR\x03pos\x12\x19\n" + + "\bstop_pos\x18\x04 \x01(\tR\astopPos\x12\x17\n" + + "\amax_tps\x18\x05 \x01(\x03R\x06maxTps\x12.\n" + + "\x13max_replication_lag\x18\x06 \x01(\x03R\x11maxReplicationLag\x12/\n" + + "\ftime_updated\x18\a \x01(\v2\f.vttime.TimeR\vtimeUpdated\x12A\n" + + "\x15transaction_timestamp\x18\b \x01(\v2\f.vttime.TimeR\x14transactionTimestamp\x12;\n" + + "\x05state\x18\t \x01(\x0e2%.binlogdata.VReplicationWorkflowStateR\x05state\x12\x18\n" + + "\amessage\x18\n" + + " \x01(\tR\amessage\x12\x1f\n" + + "\vrows_copied\x18\v \x01(\x03R\n" + + "rowsCopied\x123\n" + + "\x0etime_heartbeat\x18\f \x01(\v2\f.vttime.TimeR\rtimeHeartbeat\x123\n" + + "\x0etime_throttled\x18\r \x01(\v2\f.vttime.TimeR\rtimeThrottled\x12/\n" + + "\x13component_throttled\x18\x0e \x01(\tR\x12componentThrottled\x1aB\n" + + "\x14ConfigOverridesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"(\n" + + "&ValidateVReplicationPermissionsRequest\"M\n" + + "'ValidateVReplicationPermissionsResponse\x12\x12\n" + + "\x04user\x18\x01 \x01(\tR\x04user\x12\x0e\n" + + "\x02ok\x18\x02 \x01(\bR\x02ok\"\xd7\x01\n" + + "\fVDiffRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x1a\n" + + "\bworkflow\x18\x02 \x01(\tR\bworkflow\x12\x16\n" + + "\x06action\x18\x03 \x01(\tR\x06action\x12\x1d\n" + + "\n" + + "action_arg\x18\x04 \x01(\tR\tactionArg\x12\x1d\n" + + "\n" + + "vdiff_uuid\x18\x05 \x01(\tR\tvdiffUuid\x129\n" + + "\aoptions\x18\x06 \x01(\v2\x1f.tabletmanagerdata.VDiffOptionsR\aoptions\"j\n" + + "\rVDiffResponse\x12\x0e\n" + + "\x02id\x18\x01 \x01(\x03R\x02id\x12*\n" + + "\x06output\x18\x02 \x01(\v2\x12.query.QueryResultR\x06output\x12\x1d\n" + + "\n" + + "vdiff_uuid\x18\x03 \x01(\tR\tvdiffUuid\"y\n" + + "\x12VDiffPickerOptions\x12!\n" + + "\ftablet_types\x18\x01 \x01(\tR\vtabletTypes\x12\x1f\n" + + "\vsource_cell\x18\x02 \x01(\tR\n" + + "sourceCell\x12\x1f\n" + + "\vtarget_cell\x18\x03 \x01(\tR\n" + + "targetCell\"\xce\x01\n" + + "\x12VDiffReportOptions\x12\x19\n" + + "\bonly_pks\x18\x01 \x01(\bR\aonlyPks\x12\x1f\n" + + "\vdebug_query\x18\x02 \x01(\bR\n" + + "debugQuery\x12\x16\n" + + "\x06format\x18\x03 \x01(\tR\x06format\x12&\n" + + "\x0fmax_sample_rows\x18\x04 \x01(\x03R\rmaxSampleRows\x12<\n" + + "\x1brow_diff_column_truncate_at\x18\x05 \x01(\x03R\x17rowDiffColumnTruncateAt\"\x8d\x03\n" + + "\x10VDiffCoreOptions\x12\x16\n" + + "\x06tables\x18\x01 \x01(\tR\x06tables\x12\x1d\n" + + "\n" + + "auto_retry\x18\x02 \x01(\bR\tautoRetry\x12\x19\n" + + "\bmax_rows\x18\x03 \x01(\x03R\amaxRows\x12\x1a\n" + + "\bchecksum\x18\x04 \x01(\bR\bchecksum\x12\x1d\n" + + "\n" + + "sample_pct\x18\x05 \x01(\x03R\tsamplePct\x12'\n" + + "\x0ftimeout_seconds\x18\x06 \x01(\x03R\x0etimeoutSeconds\x128\n" + + "\x19max_extra_rows_to_compare\x18\a \x01(\x03R\x15maxExtraRowsToCompare\x12,\n" + + "\x12update_table_stats\x18\b \x01(\bR\x10updateTableStats\x12(\n" + + "\x10max_diff_seconds\x18\t \x01(\x03R\x0emaxDiffSeconds\x12\"\n" + + "\n" + + "auto_start\x18\n" + + " \x01(\bH\x00R\tautoStart\x88\x01\x01B\r\n" + + "\v_auto_start\"\xf2\x01\n" + + "\fVDiffOptions\x12L\n" + + "\x0epicker_options\x18\x01 \x01(\v2%.tabletmanagerdata.VDiffPickerOptionsR\rpickerOptions\x12F\n" + + "\fcore_options\x18\x02 \x01(\v2#.tabletmanagerdata.VDiffCoreOptionsR\vcoreOptions\x12L\n" + + "\x0ereport_options\x18\x03 \x01(\v2%.tabletmanagerdata.VDiffReportOptionsR\rreportOptions\"z\n" + + "\x10VDiffTableLastPK\x12*\n" + + "\x06target\x18\x01 \x01(\v2\x12.query.QueryResultR\x06target\x12/\n" + + "\x06source\x18\x02 \x01(\v2\x12.query.QueryResultH\x00R\x06source\x88\x01\x01B\t\n" + + "\a_source\"\xdf\x05\n" + + "!UpdateVReplicationWorkflowRequest\x12\x1a\n" + + "\bworkflow\x18\x01 \x01(\tR\bworkflow\x12\x14\n" + + "\x05cells\x18\x02 \x03(\tR\x05cells\x127\n" + + "\ftablet_types\x18\x03 \x03(\x0e2\x14.topodata.TabletTypeR\vtabletTypes\x12q\n" + + "\x1btablet_selection_preference\x18\x04 \x01(\x0e2,.tabletmanagerdata.TabletSelectionPreferenceH\x00R\x19tabletSelectionPreference\x88\x01\x01\x123\n" + + "\x06on_ddl\x18\x05 \x01(\x0e2\x17.binlogdata.OnDDLActionH\x01R\x05onDdl\x88\x01\x01\x12@\n" + + "\x05state\x18\x06 \x01(\x0e2%.binlogdata.VReplicationWorkflowStateH\x02R\x05state\x88\x01\x01\x12\x16\n" + + "\x06shards\x18\a \x03(\tR\x06shards\x12t\n" + + "\x10config_overrides\x18\b \x03(\v2I.tabletmanagerdata.UpdateVReplicationWorkflowRequest.ConfigOverridesEntryR\x0fconfigOverrides\x12\x1d\n" + + "\amessage\x18\t \x01(\tH\x03R\amessage\x88\x01\x01\x123\n" + + "\ffilter_rules\x18\n" + + " \x03(\v2\x10.binlogdata.RuleR\vfilterRules\x1aB\n" + + "\x14ConfigOverridesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01B\x1e\n" + + "\x1c_tablet_selection_preferenceB\t\n" + + "\a_on_ddlB\b\n" + + "\x06_stateB\n" + + "\n" + + "\b_message\"P\n" + + "\"UpdateVReplicationWorkflowResponse\x12*\n" + + "\x06result\x18\x01 \x01(\v2\x12.query.QueryResultR\x06result\"\xd6\x02\n" + + "\"UpdateVReplicationWorkflowsRequest\x12#\n" + + "\rall_workflows\x18\x01 \x01(\bR\fallWorkflows\x12+\n" + + "\x11include_workflows\x18\x02 \x03(\tR\x10includeWorkflows\x12+\n" + + "\x11exclude_workflows\x18\x03 \x03(\tR\x10excludeWorkflows\x12@\n" + + "\x05state\x18\x04 \x01(\x0e2%.binlogdata.VReplicationWorkflowStateH\x00R\x05state\x88\x01\x01\x12\x1d\n" + + "\amessage\x18\x05 \x01(\tH\x01R\amessage\x88\x01\x01\x12(\n" + + "\rstop_position\x18\x06 \x01(\tH\x02R\fstopPosition\x88\x01\x01B\b\n" + + "\x06_stateB\n" + + "\n" + + "\b_messageB\x10\n" + + "\x0e_stop_position\"Q\n" + + "#UpdateVReplicationWorkflowsResponse\x12*\n" + + "\x06result\x18\x01 \x01(\v2\x12.query.QueryResultR\x06result\"/\n" + + "\x15ResetSequencesRequest\x12\x16\n" + + "\x06tables\x18\x01 \x03(\tR\x06tables\"\x18\n" + + "\x16ResetSequencesResponse\"\xc6\x01\n" + + "\x15CheckThrottlerRequest\x12\x19\n" + + "\bapp_name\x18\x01 \x01(\tR\aappName\x12\x14\n" + + "\x05scope\x18\x02 \x01(\tR\x05scope\x126\n" + + "\x17skip_request_heartbeats\x18\x03 \x01(\bR\x15skipRequestHeartbeats\x12'\n" + + "\x10ok_if_not_exists\x18\x04 \x01(\bR\rokIfNotExistsJ\x04\b\x05\x10\x06R\x15multi_metrics_enabled\"\xf6\x05\n" + + "\x16CheckThrottlerResponse\x12\x14\n" + + "\x05value\x18\x02 \x01(\x01R\x05value\x12\x1c\n" + + "\tthreshold\x18\x03 \x01(\x01R\tthreshold\x12\x14\n" + + "\x05error\x18\x04 \x01(\tR\x05error\x12\x18\n" + + "\amessage\x18\x05 \x01(\tR\amessage\x12)\n" + + "\x10recently_checked\x18\x06 \x01(\bR\x0frecentlyChecked\x12P\n" + + "\ametrics\x18\a \x03(\v26.tabletmanagerdata.CheckThrottlerResponse.MetricsEntryR\ametrics\x12\x19\n" + + "\bapp_name\x18\b \x01(\tR\aappName\x12\x18\n" + + "\asummary\x18\t \x01(\tR\asummary\x12R\n" + + "\rresponse_code\x18\n" + + " \x01(\x0e2-.tabletmanagerdata.CheckThrottlerResponseCodeR\fresponseCode\x1a\xf0\x01\n" + + "\x06Metric\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n" + + "\x05value\x18\x03 \x01(\x01R\x05value\x12\x1c\n" + + "\tthreshold\x18\x04 \x01(\x01R\tthreshold\x12\x14\n" + + "\x05error\x18\x05 \x01(\tR\x05error\x12\x18\n" + + "\amessage\x18\x06 \x01(\tR\amessage\x12\x14\n" + + "\x05scope\x18\a \x01(\tR\x05scope\x12R\n" + + "\rresponse_code\x18\b \x01(\x0e2-.tabletmanagerdata.CheckThrottlerResponseCodeR\fresponseCodeJ\x04\b\x02\x10\x03\x1al\n" + + "\fMetricsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12F\n" + + "\x05value\x18\x02 \x01(\v20.tabletmanagerdata.CheckThrottlerResponse.MetricR\x05value:\x028\x01J\x04\b\x01\x10\x02R\vstatus_code\"\x1b\n" + + "\x19GetThrottlerStatusRequest\"\x9b\x10\n" + + "\x1aGetThrottlerStatusResponse\x12!\n" + + "\ftablet_alias\x18\x01 \x01(\tR\vtabletAlias\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x03 \x01(\tR\x05shard\x12\x1b\n" + + "\tis_leader\x18\x04 \x01(\bR\bisLeader\x12\x17\n" + + "\ais_open\x18\x05 \x01(\bR\x06isOpen\x12\x1d\n" + + "\n" + + "is_enabled\x18\x06 \x01(\bR\tisEnabled\x12\x1d\n" + + "\n" + + "is_dormant\x18\a \x01(\bR\tisDormant\x12(\n" + + "\x10lag_metric_query\x18\b \x01(\tR\x0elagMetricQuery\x12.\n" + + "\x13custom_metric_query\x18\t \x01(\tR\x11customMetricQuery\x12+\n" + + "\x11default_threshold\x18\n" + + " \x01(\x01R\x10defaultThreshold\x12<\n" + + "\x1bmetric_name_used_as_default\x18\v \x01(\tR\x17metricNameUsedAsDefault\x12s\n" + + "\x12aggregated_metrics\x18\f \x03(\v2D.tabletmanagerdata.GetThrottlerStatusResponse.AggregatedMetricsEntryR\x11aggregatedMetrics\x12p\n" + + "\x11metric_thresholds\x18\r \x03(\v2C.tabletmanagerdata.GetThrottlerStatusResponse.MetricThresholdsEntryR\x10metricThresholds\x12g\n" + + "\x0emetrics_health\x18\x0e \x03(\v2@.tabletmanagerdata.GetThrottlerStatusResponse.MetricsHealthEntryR\rmetricsHealth\x12g\n" + + "\x0ethrottled_apps\x18\x0f \x03(\v2@.tabletmanagerdata.GetThrottlerStatusResponse.ThrottledAppsEntryR\rthrottledApps\x12t\n" + + "\x13app_checked_metrics\x18\x10 \x03(\v2D.tabletmanagerdata.GetThrottlerStatusResponse.AppCheckedMetricsEntryR\x11appCheckedMetrics\x12)\n" + + "\x10recently_checked\x18\x11 \x01(\bR\x0frecentlyChecked\x12^\n" + + "\vrecent_apps\x18\x12 \x03(\v2=.tabletmanagerdata.GetThrottlerStatusResponse.RecentAppsEntryR\n" + + "recentApps\x1a:\n" + + "\fMetricResult\x12\x14\n" + + "\x05value\x18\x01 \x01(\x01R\x05value\x12\x14\n" + + "\x05error\x18\x02 \x01(\tR\x05error\x1a\x80\x01\n" + + "\x16AggregatedMetricsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12P\n" + + "\x05value\x18\x02 \x01(\v2:.tabletmanagerdata.GetThrottlerStatusResponse.MetricResultR\x05value:\x028\x01\x1aC\n" + + "\x15MetricThresholdsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\x01R\x05value:\x028\x01\x1a\x81\x01\n" + + "\fMetricHealth\x124\n" + + "\x0flast_healthy_at\x18\x01 \x01(\v2\f.vttime.TimeR\rlastHealthyAt\x12;\n" + + "\x1aseconds_since_last_healthy\x18\x02 \x01(\x03R\x17secondsSinceLastHealthy\x1a|\n" + + "\x12MetricsHealthEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12P\n" + + "\x05value\x18\x02 \x01(\v2:.tabletmanagerdata.GetThrottlerStatusResponse.MetricHealthR\x05value:\x028\x01\x1a\\\n" + + "\x12ThrottledAppsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x120\n" + + "\x05value\x18\x02 \x01(\v2\x1a.topodata.ThrottledAppRuleR\x05value:\x028\x01\x1aD\n" + + "\x16AppCheckedMetricsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1a\x92\x01\n" + + "\tRecentApp\x12+\n" + + "\n" + + "checked_at\x18\x01 \x01(\v2\f.vttime.TimeR\tcheckedAt\x12R\n" + + "\rresponse_code\x18\x03 \x01(\x0e2-.tabletmanagerdata.CheckThrottlerResponseCodeR\fresponseCodeJ\x04\b\x02\x10\x03\x1av\n" + + "\x0fRecentAppsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12M\n" + + "\x05value\x18\x02 \x01(\v27.tabletmanagerdata.GetThrottlerStatusResponse.RecentAppR\x05value:\x028\x01\"\xaa\x01\n" + + "\x11ChangeTagsRequest\x12B\n" + + "\x04tags\x18\x01 \x03(\v2..tabletmanagerdata.ChangeTagsRequest.TagsEntryR\x04tags\x12\x18\n" + + "\areplace\x18\x02 \x01(\bR\areplace\x1a7\n" + + "\tTagsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x92\x01\n" + + "\x12ChangeTagsResponse\x12C\n" + + "\x04tags\x18\x01 \x03(\v2/.tabletmanagerdata.ChangeTagsResponse.TagsEntryR\x04tags\x1a7\n" + + "\tTagsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x8f\x02\n" + + "\x1bUpdateSequenceTablesRequest\x12]\n" + + "\tsequences\x18\x01 \x03(\v2?.tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadataR\tsequences\x1a\x90\x01\n" + + "\x10SequenceMetadata\x12,\n" + + "\x12backing_table_name\x18\x01 \x01(\tR\x10backingTableName\x121\n" + + "\x15backing_table_db_name\x18\x02 \x01(\tR\x12backingTableDbName\x12\x1b\n" + + "\tmax_value\x18\x03 \x01(\x03R\bmaxValue\"\x1e\n" + + "\x1cUpdateSequenceTablesResponse\"\xe8\x02\n" + + "\x1eGetMaxValueForSequencesRequest\x12`\n" + + "\tsequences\x18\x01 \x03(\v2B.tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadataR\tsequences\x1a\xe3\x01\n" + + "\x10SequenceMetadata\x12,\n" + + "\x12backing_table_name\x18\x01 \x01(\tR\x10backingTableName\x12*\n" + + "\x11using_col_escaped\x18\x02 \x01(\tR\x0fusingColEscaped\x127\n" + + "\x18using_table_name_escaped\x18\x03 \x01(\tR\x15usingTableNameEscaped\x12<\n" + + "\x1busing_table_db_name_escaped\x18\x04 \x01(\tR\x17usingTableDbNameEscaped\"\x81\x02\n" + + "\x1fGetMaxValueForSequencesResponse\x12\x90\x01\n" + + "\x1cmax_values_by_sequence_table\x18\x01 \x03(\v2P.tabletmanagerdata.GetMaxValueForSequencesResponse.MaxValuesBySequenceTableEntryR\x18maxValuesBySequenceTable\x1aK\n" + + "\x1dMaxValuesBySequenceTableEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\x03R\x05value:\x028\x01*>\n" + + "\x19TabletSelectionPreference\x12\a\n" + + "\x03ANY\x10\x00\x12\v\n" + + "\aINORDER\x10\x01\x12\v\n" + + "\aUNKNOWN\x10\x03*\x83\x01\n" + + "\x1aCheckThrottlerResponseCode\x12\r\n" + + "\tUNDEFINED\x10\x00\x12\x06\n" + + "\x02OK\x10\x01\x12\x16\n" + + "\x12THRESHOLD_EXCEEDED\x10\x02\x12\x0e\n" + + "\n" + + "APP_DENIED\x10\x03\x12\x12\n" + + "\x0eUNKNOWN_METRIC\x10\x04\x12\x12\n" + + "\x0eINTERNAL_ERROR\x10\x05B0Z.vitess.io/vitess/go/vt/proto/tabletmanagerdatab\x06proto3" var ( file_tabletmanagerdata_proto_rawDescOnce sync.Once @@ -9240,7 +8950,7 @@ func file_tabletmanagerdata_proto_rawDescGZIP() []byte { } var file_tabletmanagerdata_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_tabletmanagerdata_proto_msgTypes = make([]protoimpl.MessageInfo, 166) +var file_tabletmanagerdata_proto_msgTypes = make([]protoimpl.MessageInfo, 173) var file_tabletmanagerdata_proto_goTypes = []any{ (TabletSelectionPreference)(0), // 0: tabletmanagerdata.TabletSelectionPreference (CheckThrottlerResponseCode)(0), // 1: tabletmanagerdata.CheckThrottlerResponseCode @@ -9389,155 +9099,167 @@ var file_tabletmanagerdata_proto_goTypes = []any{ (*GetThrottlerStatusResponse)(nil), // 144: tabletmanagerdata.GetThrottlerStatusResponse (*ChangeTagsRequest)(nil), // 145: tabletmanagerdata.ChangeTagsRequest (*ChangeTagsResponse)(nil), // 146: tabletmanagerdata.ChangeTagsResponse - nil, // 147: tabletmanagerdata.UserPermission.PrivilegesEntry - nil, // 148: tabletmanagerdata.DbPermission.PrivilegesEntry - nil, // 149: tabletmanagerdata.ExecuteHookRequest.ExtraEnvEntry - nil, // 150: tabletmanagerdata.GetGlobalStatusVarsResponse.StatusValuesEntry - nil, // 151: tabletmanagerdata.DeleteTableDataRequest.TableFiltersEntry - (*ReadVReplicationWorkflowResponse_Stream)(nil), // 152: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream - nil, // 153: tabletmanagerdata.ReadVReplicationWorkflowResponse.ConfigOverridesEntry - nil, // 154: tabletmanagerdata.UpdateVReplicationWorkflowRequest.ConfigOverridesEntry - (*CheckThrottlerResponse_Metric)(nil), // 155: tabletmanagerdata.CheckThrottlerResponse.Metric - nil, // 156: tabletmanagerdata.CheckThrottlerResponse.MetricsEntry - (*GetThrottlerStatusResponse_MetricResult)(nil), // 157: tabletmanagerdata.GetThrottlerStatusResponse.MetricResult - nil, // 158: tabletmanagerdata.GetThrottlerStatusResponse.AggregatedMetricsEntry - nil, // 159: tabletmanagerdata.GetThrottlerStatusResponse.MetricThresholdsEntry - (*GetThrottlerStatusResponse_MetricHealth)(nil), // 160: tabletmanagerdata.GetThrottlerStatusResponse.MetricHealth - nil, // 161: tabletmanagerdata.GetThrottlerStatusResponse.MetricsHealthEntry - nil, // 162: tabletmanagerdata.GetThrottlerStatusResponse.ThrottledAppsEntry - nil, // 163: tabletmanagerdata.GetThrottlerStatusResponse.AppCheckedMetricsEntry - (*GetThrottlerStatusResponse_RecentApp)(nil), // 164: tabletmanagerdata.GetThrottlerStatusResponse.RecentApp - nil, // 165: tabletmanagerdata.GetThrottlerStatusResponse.RecentAppsEntry - nil, // 166: tabletmanagerdata.ChangeTagsRequest.TagsEntry - nil, // 167: tabletmanagerdata.ChangeTagsResponse.TagsEntry - (*query.Field)(nil), // 168: query.Field - (topodata.TabletType)(0), // 169: topodata.TabletType - (*vtrpc.CallerID)(nil), // 170: vtrpc.CallerID - (*query.QueryResult)(nil), // 171: query.QueryResult - (*query.TransactionMetadata)(nil), // 172: query.TransactionMetadata - (*mysqlctl.HostMetricsResponse)(nil), // 173: mysqlctl.HostMetricsResponse - (*replicationdata.Status)(nil), // 174: replicationdata.Status - (*replicationdata.PrimaryStatus)(nil), // 175: replicationdata.PrimaryStatus - (*topodata.TabletAlias)(nil), // 176: topodata.TabletAlias - (*replicationdata.FullStatus)(nil), // 177: replicationdata.FullStatus - (replicationdata.StopReplicationMode)(0), // 178: replicationdata.StopReplicationMode - (*replicationdata.StopReplicationStatus)(nil), // 179: replicationdata.StopReplicationStatus - (*vttime.Duration)(nil), // 180: vttime.Duration - (*logutil.Event)(nil), // 181: logutil.Event - (*vttime.Time)(nil), // 182: vttime.Time - (*binlogdata.BinlogSource)(nil), // 183: binlogdata.BinlogSource - (binlogdata.VReplicationWorkflowType)(0), // 184: binlogdata.VReplicationWorkflowType - (binlogdata.VReplicationWorkflowSubType)(0), // 185: binlogdata.VReplicationWorkflowSubType - (binlogdata.VReplicationWorkflowState)(0), // 186: binlogdata.VReplicationWorkflowState - (binlogdata.OnDDLAction)(0), // 187: binlogdata.OnDDLAction - (*topodata.ThrottledAppRule)(nil), // 188: topodata.ThrottledAppRule + (*UpdateSequenceTablesRequest)(nil), // 147: tabletmanagerdata.UpdateSequenceTablesRequest + (*UpdateSequenceTablesResponse)(nil), // 148: tabletmanagerdata.UpdateSequenceTablesResponse + (*GetMaxValueForSequencesRequest)(nil), // 149: tabletmanagerdata.GetMaxValueForSequencesRequest + (*GetMaxValueForSequencesResponse)(nil), // 150: tabletmanagerdata.GetMaxValueForSequencesResponse + nil, // 151: tabletmanagerdata.UserPermission.PrivilegesEntry + nil, // 152: tabletmanagerdata.DbPermission.PrivilegesEntry + nil, // 153: tabletmanagerdata.ExecuteHookRequest.ExtraEnvEntry + nil, // 154: tabletmanagerdata.GetGlobalStatusVarsResponse.StatusValuesEntry + nil, // 155: tabletmanagerdata.DeleteTableDataRequest.TableFiltersEntry + (*ReadVReplicationWorkflowResponse_Stream)(nil), // 156: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream + nil, // 157: tabletmanagerdata.ReadVReplicationWorkflowResponse.ConfigOverridesEntry + nil, // 158: tabletmanagerdata.UpdateVReplicationWorkflowRequest.ConfigOverridesEntry + (*CheckThrottlerResponse_Metric)(nil), // 159: tabletmanagerdata.CheckThrottlerResponse.Metric + nil, // 160: tabletmanagerdata.CheckThrottlerResponse.MetricsEntry + (*GetThrottlerStatusResponse_MetricResult)(nil), // 161: tabletmanagerdata.GetThrottlerStatusResponse.MetricResult + nil, // 162: tabletmanagerdata.GetThrottlerStatusResponse.AggregatedMetricsEntry + nil, // 163: tabletmanagerdata.GetThrottlerStatusResponse.MetricThresholdsEntry + (*GetThrottlerStatusResponse_MetricHealth)(nil), // 164: tabletmanagerdata.GetThrottlerStatusResponse.MetricHealth + nil, // 165: tabletmanagerdata.GetThrottlerStatusResponse.MetricsHealthEntry + nil, // 166: tabletmanagerdata.GetThrottlerStatusResponse.ThrottledAppsEntry + nil, // 167: tabletmanagerdata.GetThrottlerStatusResponse.AppCheckedMetricsEntry + (*GetThrottlerStatusResponse_RecentApp)(nil), // 168: tabletmanagerdata.GetThrottlerStatusResponse.RecentApp + nil, // 169: tabletmanagerdata.GetThrottlerStatusResponse.RecentAppsEntry + nil, // 170: tabletmanagerdata.ChangeTagsRequest.TagsEntry + nil, // 171: tabletmanagerdata.ChangeTagsResponse.TagsEntry + (*UpdateSequenceTablesRequest_SequenceMetadata)(nil), // 172: tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata + (*GetMaxValueForSequencesRequest_SequenceMetadata)(nil), // 173: tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata + nil, // 174: tabletmanagerdata.GetMaxValueForSequencesResponse.MaxValuesBySequenceTableEntry + (*query.Field)(nil), // 175: query.Field + (topodata.TabletType)(0), // 176: topodata.TabletType + (*vtrpc.CallerID)(nil), // 177: vtrpc.CallerID + (*query.QueryResult)(nil), // 178: query.QueryResult + (*query.TransactionMetadata)(nil), // 179: query.TransactionMetadata + (*mysqlctl.HostMetricsResponse)(nil), // 180: mysqlctl.HostMetricsResponse + (*replicationdata.Status)(nil), // 181: replicationdata.Status + (*replicationdata.PrimaryStatus)(nil), // 182: replicationdata.PrimaryStatus + (*topodata.TabletAlias)(nil), // 183: topodata.TabletAlias + (*replicationdata.FullStatus)(nil), // 184: replicationdata.FullStatus + (replicationdata.StopReplicationMode)(0), // 185: replicationdata.StopReplicationMode + (*replicationdata.StopReplicationStatus)(nil), // 186: replicationdata.StopReplicationStatus + (*vttime.Duration)(nil), // 187: vttime.Duration + (*logutil.Event)(nil), // 188: logutil.Event + (*vttime.Time)(nil), // 189: vttime.Time + (*binlogdata.BinlogSource)(nil), // 190: binlogdata.BinlogSource + (binlogdata.VReplicationWorkflowType)(0), // 191: binlogdata.VReplicationWorkflowType + (binlogdata.VReplicationWorkflowSubType)(0), // 192: binlogdata.VReplicationWorkflowSubType + (binlogdata.VReplicationWorkflowState)(0), // 193: binlogdata.VReplicationWorkflowState + (binlogdata.OnDDLAction)(0), // 194: binlogdata.OnDDLAction + (*binlogdata.Rule)(nil), // 195: binlogdata.Rule + (*topodata.ThrottledAppRule)(nil), // 196: topodata.ThrottledAppRule } var file_tabletmanagerdata_proto_depIdxs = []int32{ - 168, // 0: tabletmanagerdata.TableDefinition.fields:type_name -> query.Field + 175, // 0: tabletmanagerdata.TableDefinition.fields:type_name -> query.Field 2, // 1: tabletmanagerdata.SchemaDefinition.table_definitions:type_name -> tabletmanagerdata.TableDefinition 3, // 2: tabletmanagerdata.SchemaChangeResult.before_schema:type_name -> tabletmanagerdata.SchemaDefinition 3, // 3: tabletmanagerdata.SchemaChangeResult.after_schema:type_name -> tabletmanagerdata.SchemaDefinition - 147, // 4: tabletmanagerdata.UserPermission.privileges:type_name -> tabletmanagerdata.UserPermission.PrivilegesEntry - 148, // 5: tabletmanagerdata.DbPermission.privileges:type_name -> tabletmanagerdata.DbPermission.PrivilegesEntry + 151, // 4: tabletmanagerdata.UserPermission.privileges:type_name -> tabletmanagerdata.UserPermission.PrivilegesEntry + 152, // 5: tabletmanagerdata.DbPermission.privileges:type_name -> tabletmanagerdata.DbPermission.PrivilegesEntry 5, // 6: tabletmanagerdata.Permissions.user_permissions:type_name -> tabletmanagerdata.UserPermission 6, // 7: tabletmanagerdata.Permissions.db_permissions:type_name -> tabletmanagerdata.DbPermission - 149, // 8: tabletmanagerdata.ExecuteHookRequest.extra_env:type_name -> tabletmanagerdata.ExecuteHookRequest.ExtraEnvEntry + 153, // 8: tabletmanagerdata.ExecuteHookRequest.extra_env:type_name -> tabletmanagerdata.ExecuteHookRequest.ExtraEnvEntry 3, // 9: tabletmanagerdata.GetSchemaResponse.schema_definition:type_name -> tabletmanagerdata.SchemaDefinition 7, // 10: tabletmanagerdata.GetPermissionsResponse.permissions:type_name -> tabletmanagerdata.Permissions - 150, // 11: tabletmanagerdata.GetGlobalStatusVarsResponse.status_values:type_name -> tabletmanagerdata.GetGlobalStatusVarsResponse.StatusValuesEntry - 169, // 12: tabletmanagerdata.ChangeTypeRequest.tablet_type:type_name -> topodata.TabletType + 154, // 11: tabletmanagerdata.GetGlobalStatusVarsResponse.status_values:type_name -> tabletmanagerdata.GetGlobalStatusVarsResponse.StatusValuesEntry + 176, // 12: tabletmanagerdata.ChangeTypeRequest.tablet_type:type_name -> topodata.TabletType 4, // 13: tabletmanagerdata.PreflightSchemaResponse.change_results:type_name -> tabletmanagerdata.SchemaChangeResult 3, // 14: tabletmanagerdata.ApplySchemaRequest.before_schema:type_name -> tabletmanagerdata.SchemaDefinition 3, // 15: tabletmanagerdata.ApplySchemaRequest.after_schema:type_name -> tabletmanagerdata.SchemaDefinition 3, // 16: tabletmanagerdata.ApplySchemaResponse.before_schema:type_name -> tabletmanagerdata.SchemaDefinition 3, // 17: tabletmanagerdata.ApplySchemaResponse.after_schema:type_name -> tabletmanagerdata.SchemaDefinition - 170, // 18: tabletmanagerdata.ExecuteQueryRequest.caller_id:type_name -> vtrpc.CallerID - 171, // 19: tabletmanagerdata.ExecuteQueryResponse.result:type_name -> query.QueryResult - 171, // 20: tabletmanagerdata.ExecuteFetchAsDbaResponse.result:type_name -> query.QueryResult - 171, // 21: tabletmanagerdata.ExecuteMultiFetchAsDbaResponse.results:type_name -> query.QueryResult - 171, // 22: tabletmanagerdata.ExecuteFetchAsAllPrivsResponse.result:type_name -> query.QueryResult - 171, // 23: tabletmanagerdata.ExecuteFetchAsAppResponse.result:type_name -> query.QueryResult - 172, // 24: tabletmanagerdata.GetUnresolvedTransactionsResponse.transactions:type_name -> query.TransactionMetadata - 172, // 25: tabletmanagerdata.ReadTransactionResponse.transaction:type_name -> query.TransactionMetadata - 173, // 26: tabletmanagerdata.MysqlHostMetricsResponse.HostMetrics:type_name -> mysqlctl.HostMetricsResponse - 174, // 27: tabletmanagerdata.ReplicationStatusResponse.status:type_name -> replicationdata.Status - 175, // 28: tabletmanagerdata.PrimaryStatusResponse.status:type_name -> replicationdata.PrimaryStatus - 171, // 29: tabletmanagerdata.VReplicationExecResponse.result:type_name -> query.QueryResult - 176, // 30: tabletmanagerdata.PopulateReparentJournalRequest.primary_alias:type_name -> topodata.TabletAlias - 176, // 31: tabletmanagerdata.InitReplicaRequest.parent:type_name -> topodata.TabletAlias - 175, // 32: tabletmanagerdata.DemotePrimaryResponse.primary_status:type_name -> replicationdata.PrimaryStatus - 177, // 33: tabletmanagerdata.FullStatusResponse.status:type_name -> replicationdata.FullStatus - 176, // 34: tabletmanagerdata.SetReplicationSourceRequest.parent:type_name -> topodata.TabletAlias - 176, // 35: tabletmanagerdata.ReplicaWasRestartedRequest.parent:type_name -> topodata.TabletAlias - 178, // 36: tabletmanagerdata.StopReplicationAndGetStatusRequest.stop_replication_mode:type_name -> replicationdata.StopReplicationMode - 179, // 37: tabletmanagerdata.StopReplicationAndGetStatusResponse.status:type_name -> replicationdata.StopReplicationStatus - 180, // 38: tabletmanagerdata.BackupRequest.mysql_shutdown_timeout:type_name -> vttime.Duration - 181, // 39: tabletmanagerdata.BackupResponse.event:type_name -> logutil.Event - 182, // 40: tabletmanagerdata.RestoreFromBackupRequest.backup_time:type_name -> vttime.Time - 182, // 41: tabletmanagerdata.RestoreFromBackupRequest.restore_to_timestamp:type_name -> vttime.Time - 181, // 42: tabletmanagerdata.RestoreFromBackupResponse.event:type_name -> logutil.Event - 183, // 43: tabletmanagerdata.CreateVReplicationWorkflowRequest.binlog_source:type_name -> binlogdata.BinlogSource - 169, // 44: tabletmanagerdata.CreateVReplicationWorkflowRequest.tablet_types:type_name -> topodata.TabletType + 177, // 18: tabletmanagerdata.ExecuteQueryRequest.caller_id:type_name -> vtrpc.CallerID + 178, // 19: tabletmanagerdata.ExecuteQueryResponse.result:type_name -> query.QueryResult + 178, // 20: tabletmanagerdata.ExecuteFetchAsDbaResponse.result:type_name -> query.QueryResult + 178, // 21: tabletmanagerdata.ExecuteMultiFetchAsDbaResponse.results:type_name -> query.QueryResult + 178, // 22: tabletmanagerdata.ExecuteFetchAsAllPrivsResponse.result:type_name -> query.QueryResult + 178, // 23: tabletmanagerdata.ExecuteFetchAsAppResponse.result:type_name -> query.QueryResult + 179, // 24: tabletmanagerdata.GetUnresolvedTransactionsResponse.transactions:type_name -> query.TransactionMetadata + 179, // 25: tabletmanagerdata.ReadTransactionResponse.transaction:type_name -> query.TransactionMetadata + 180, // 26: tabletmanagerdata.MysqlHostMetricsResponse.HostMetrics:type_name -> mysqlctl.HostMetricsResponse + 181, // 27: tabletmanagerdata.ReplicationStatusResponse.status:type_name -> replicationdata.Status + 182, // 28: tabletmanagerdata.PrimaryStatusResponse.status:type_name -> replicationdata.PrimaryStatus + 178, // 29: tabletmanagerdata.VReplicationExecResponse.result:type_name -> query.QueryResult + 183, // 30: tabletmanagerdata.PopulateReparentJournalRequest.primary_alias:type_name -> topodata.TabletAlias + 183, // 31: tabletmanagerdata.InitReplicaRequest.parent:type_name -> topodata.TabletAlias + 182, // 32: tabletmanagerdata.DemotePrimaryResponse.primary_status:type_name -> replicationdata.PrimaryStatus + 184, // 33: tabletmanagerdata.FullStatusResponse.status:type_name -> replicationdata.FullStatus + 183, // 34: tabletmanagerdata.SetReplicationSourceRequest.parent:type_name -> topodata.TabletAlias + 183, // 35: tabletmanagerdata.ReplicaWasRestartedRequest.parent:type_name -> topodata.TabletAlias + 185, // 36: tabletmanagerdata.StopReplicationAndGetStatusRequest.stop_replication_mode:type_name -> replicationdata.StopReplicationMode + 186, // 37: tabletmanagerdata.StopReplicationAndGetStatusResponse.status:type_name -> replicationdata.StopReplicationStatus + 187, // 38: tabletmanagerdata.BackupRequest.mysql_shutdown_timeout:type_name -> vttime.Duration + 188, // 39: tabletmanagerdata.BackupResponse.event:type_name -> logutil.Event + 189, // 40: tabletmanagerdata.RestoreFromBackupRequest.backup_time:type_name -> vttime.Time + 189, // 41: tabletmanagerdata.RestoreFromBackupRequest.restore_to_timestamp:type_name -> vttime.Time + 188, // 42: tabletmanagerdata.RestoreFromBackupResponse.event:type_name -> logutil.Event + 190, // 43: tabletmanagerdata.CreateVReplicationWorkflowRequest.binlog_source:type_name -> binlogdata.BinlogSource + 176, // 44: tabletmanagerdata.CreateVReplicationWorkflowRequest.tablet_types:type_name -> topodata.TabletType 0, // 45: tabletmanagerdata.CreateVReplicationWorkflowRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference - 184, // 46: tabletmanagerdata.CreateVReplicationWorkflowRequest.workflow_type:type_name -> binlogdata.VReplicationWorkflowType - 185, // 47: tabletmanagerdata.CreateVReplicationWorkflowRequest.workflow_sub_type:type_name -> binlogdata.VReplicationWorkflowSubType - 171, // 48: tabletmanagerdata.CreateVReplicationWorkflowResponse.result:type_name -> query.QueryResult - 151, // 49: tabletmanagerdata.DeleteTableDataRequest.table_filters:type_name -> tabletmanagerdata.DeleteTableDataRequest.TableFiltersEntry - 171, // 50: tabletmanagerdata.DeleteVReplicationWorkflowResponse.result:type_name -> query.QueryResult - 186, // 51: tabletmanagerdata.ReadVReplicationWorkflowsRequest.include_states:type_name -> binlogdata.VReplicationWorkflowState - 186, // 52: tabletmanagerdata.ReadVReplicationWorkflowsRequest.exclude_states:type_name -> binlogdata.VReplicationWorkflowState + 191, // 46: tabletmanagerdata.CreateVReplicationWorkflowRequest.workflow_type:type_name -> binlogdata.VReplicationWorkflowType + 192, // 47: tabletmanagerdata.CreateVReplicationWorkflowRequest.workflow_sub_type:type_name -> binlogdata.VReplicationWorkflowSubType + 178, // 48: tabletmanagerdata.CreateVReplicationWorkflowResponse.result:type_name -> query.QueryResult + 155, // 49: tabletmanagerdata.DeleteTableDataRequest.table_filters:type_name -> tabletmanagerdata.DeleteTableDataRequest.TableFiltersEntry + 178, // 50: tabletmanagerdata.DeleteVReplicationWorkflowResponse.result:type_name -> query.QueryResult + 193, // 51: tabletmanagerdata.ReadVReplicationWorkflowsRequest.include_states:type_name -> binlogdata.VReplicationWorkflowState + 193, // 52: tabletmanagerdata.ReadVReplicationWorkflowsRequest.exclude_states:type_name -> binlogdata.VReplicationWorkflowState 125, // 53: tabletmanagerdata.ReadVReplicationWorkflowsResponse.workflows:type_name -> tabletmanagerdata.ReadVReplicationWorkflowResponse - 169, // 54: tabletmanagerdata.ReadVReplicationWorkflowResponse.tablet_types:type_name -> topodata.TabletType + 176, // 54: tabletmanagerdata.ReadVReplicationWorkflowResponse.tablet_types:type_name -> topodata.TabletType 0, // 55: tabletmanagerdata.ReadVReplicationWorkflowResponse.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference - 184, // 56: tabletmanagerdata.ReadVReplicationWorkflowResponse.workflow_type:type_name -> binlogdata.VReplicationWorkflowType - 185, // 57: tabletmanagerdata.ReadVReplicationWorkflowResponse.workflow_sub_type:type_name -> binlogdata.VReplicationWorkflowSubType - 152, // 58: tabletmanagerdata.ReadVReplicationWorkflowResponse.streams:type_name -> tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream - 153, // 59: tabletmanagerdata.ReadVReplicationWorkflowResponse.config_overrides:type_name -> tabletmanagerdata.ReadVReplicationWorkflowResponse.ConfigOverridesEntry + 191, // 56: tabletmanagerdata.ReadVReplicationWorkflowResponse.workflow_type:type_name -> binlogdata.VReplicationWorkflowType + 192, // 57: tabletmanagerdata.ReadVReplicationWorkflowResponse.workflow_sub_type:type_name -> binlogdata.VReplicationWorkflowSubType + 156, // 58: tabletmanagerdata.ReadVReplicationWorkflowResponse.streams:type_name -> tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream + 157, // 59: tabletmanagerdata.ReadVReplicationWorkflowResponse.config_overrides:type_name -> tabletmanagerdata.ReadVReplicationWorkflowResponse.ConfigOverridesEntry 133, // 60: tabletmanagerdata.VDiffRequest.options:type_name -> tabletmanagerdata.VDiffOptions - 171, // 61: tabletmanagerdata.VDiffResponse.output:type_name -> query.QueryResult + 178, // 61: tabletmanagerdata.VDiffResponse.output:type_name -> query.QueryResult 130, // 62: tabletmanagerdata.VDiffOptions.picker_options:type_name -> tabletmanagerdata.VDiffPickerOptions 132, // 63: tabletmanagerdata.VDiffOptions.core_options:type_name -> tabletmanagerdata.VDiffCoreOptions 131, // 64: tabletmanagerdata.VDiffOptions.report_options:type_name -> tabletmanagerdata.VDiffReportOptions - 171, // 65: tabletmanagerdata.VDiffTableLastPK.target:type_name -> query.QueryResult - 171, // 66: tabletmanagerdata.VDiffTableLastPK.source:type_name -> query.QueryResult - 169, // 67: tabletmanagerdata.UpdateVReplicationWorkflowRequest.tablet_types:type_name -> topodata.TabletType + 178, // 65: tabletmanagerdata.VDiffTableLastPK.target:type_name -> query.QueryResult + 178, // 66: tabletmanagerdata.VDiffTableLastPK.source:type_name -> query.QueryResult + 176, // 67: tabletmanagerdata.UpdateVReplicationWorkflowRequest.tablet_types:type_name -> topodata.TabletType 0, // 68: tabletmanagerdata.UpdateVReplicationWorkflowRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference - 187, // 69: tabletmanagerdata.UpdateVReplicationWorkflowRequest.on_ddl:type_name -> binlogdata.OnDDLAction - 186, // 70: tabletmanagerdata.UpdateVReplicationWorkflowRequest.state:type_name -> binlogdata.VReplicationWorkflowState - 154, // 71: tabletmanagerdata.UpdateVReplicationWorkflowRequest.config_overrides:type_name -> tabletmanagerdata.UpdateVReplicationWorkflowRequest.ConfigOverridesEntry - 171, // 72: tabletmanagerdata.UpdateVReplicationWorkflowResponse.result:type_name -> query.QueryResult - 186, // 73: tabletmanagerdata.UpdateVReplicationWorkflowsRequest.state:type_name -> binlogdata.VReplicationWorkflowState - 171, // 74: tabletmanagerdata.UpdateVReplicationWorkflowsResponse.result:type_name -> query.QueryResult - 156, // 75: tabletmanagerdata.CheckThrottlerResponse.metrics:type_name -> tabletmanagerdata.CheckThrottlerResponse.MetricsEntry - 1, // 76: tabletmanagerdata.CheckThrottlerResponse.response_code:type_name -> tabletmanagerdata.CheckThrottlerResponseCode - 158, // 77: tabletmanagerdata.GetThrottlerStatusResponse.aggregated_metrics:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.AggregatedMetricsEntry - 159, // 78: tabletmanagerdata.GetThrottlerStatusResponse.metric_thresholds:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.MetricThresholdsEntry - 161, // 79: tabletmanagerdata.GetThrottlerStatusResponse.metrics_health:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.MetricsHealthEntry - 162, // 80: tabletmanagerdata.GetThrottlerStatusResponse.throttled_apps:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.ThrottledAppsEntry - 163, // 81: tabletmanagerdata.GetThrottlerStatusResponse.app_checked_metrics:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.AppCheckedMetricsEntry - 165, // 82: tabletmanagerdata.GetThrottlerStatusResponse.recent_apps:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.RecentAppsEntry - 166, // 83: tabletmanagerdata.ChangeTagsRequest.tags:type_name -> tabletmanagerdata.ChangeTagsRequest.TagsEntry - 167, // 84: tabletmanagerdata.ChangeTagsResponse.tags:type_name -> tabletmanagerdata.ChangeTagsResponse.TagsEntry - 183, // 85: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.bls:type_name -> binlogdata.BinlogSource - 182, // 86: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.time_updated:type_name -> vttime.Time - 182, // 87: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.transaction_timestamp:type_name -> vttime.Time - 186, // 88: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.state:type_name -> binlogdata.VReplicationWorkflowState - 182, // 89: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.time_heartbeat:type_name -> vttime.Time - 182, // 90: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.time_throttled:type_name -> vttime.Time - 1, // 91: tabletmanagerdata.CheckThrottlerResponse.Metric.response_code:type_name -> tabletmanagerdata.CheckThrottlerResponseCode - 155, // 92: tabletmanagerdata.CheckThrottlerResponse.MetricsEntry.value:type_name -> tabletmanagerdata.CheckThrottlerResponse.Metric - 157, // 93: tabletmanagerdata.GetThrottlerStatusResponse.AggregatedMetricsEntry.value:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.MetricResult - 182, // 94: tabletmanagerdata.GetThrottlerStatusResponse.MetricHealth.last_healthy_at:type_name -> vttime.Time - 160, // 95: tabletmanagerdata.GetThrottlerStatusResponse.MetricsHealthEntry.value:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.MetricHealth - 188, // 96: tabletmanagerdata.GetThrottlerStatusResponse.ThrottledAppsEntry.value:type_name -> topodata.ThrottledAppRule - 182, // 97: tabletmanagerdata.GetThrottlerStatusResponse.RecentApp.checked_at:type_name -> vttime.Time - 1, // 98: tabletmanagerdata.GetThrottlerStatusResponse.RecentApp.response_code:type_name -> tabletmanagerdata.CheckThrottlerResponseCode - 164, // 99: tabletmanagerdata.GetThrottlerStatusResponse.RecentAppsEntry.value:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.RecentApp - 100, // [100:100] is the sub-list for method output_type - 100, // [100:100] is the sub-list for method input_type - 100, // [100:100] is the sub-list for extension type_name - 100, // [100:100] is the sub-list for extension extendee - 0, // [0:100] is the sub-list for field type_name + 194, // 69: tabletmanagerdata.UpdateVReplicationWorkflowRequest.on_ddl:type_name -> binlogdata.OnDDLAction + 193, // 70: tabletmanagerdata.UpdateVReplicationWorkflowRequest.state:type_name -> binlogdata.VReplicationWorkflowState + 158, // 71: tabletmanagerdata.UpdateVReplicationWorkflowRequest.config_overrides:type_name -> tabletmanagerdata.UpdateVReplicationWorkflowRequest.ConfigOverridesEntry + 195, // 72: tabletmanagerdata.UpdateVReplicationWorkflowRequest.filter_rules:type_name -> binlogdata.Rule + 178, // 73: tabletmanagerdata.UpdateVReplicationWorkflowResponse.result:type_name -> query.QueryResult + 193, // 74: tabletmanagerdata.UpdateVReplicationWorkflowsRequest.state:type_name -> binlogdata.VReplicationWorkflowState + 178, // 75: tabletmanagerdata.UpdateVReplicationWorkflowsResponse.result:type_name -> query.QueryResult + 160, // 76: tabletmanagerdata.CheckThrottlerResponse.metrics:type_name -> tabletmanagerdata.CheckThrottlerResponse.MetricsEntry + 1, // 77: tabletmanagerdata.CheckThrottlerResponse.response_code:type_name -> tabletmanagerdata.CheckThrottlerResponseCode + 162, // 78: tabletmanagerdata.GetThrottlerStatusResponse.aggregated_metrics:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.AggregatedMetricsEntry + 163, // 79: tabletmanagerdata.GetThrottlerStatusResponse.metric_thresholds:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.MetricThresholdsEntry + 165, // 80: tabletmanagerdata.GetThrottlerStatusResponse.metrics_health:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.MetricsHealthEntry + 166, // 81: tabletmanagerdata.GetThrottlerStatusResponse.throttled_apps:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.ThrottledAppsEntry + 167, // 82: tabletmanagerdata.GetThrottlerStatusResponse.app_checked_metrics:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.AppCheckedMetricsEntry + 169, // 83: tabletmanagerdata.GetThrottlerStatusResponse.recent_apps:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.RecentAppsEntry + 170, // 84: tabletmanagerdata.ChangeTagsRequest.tags:type_name -> tabletmanagerdata.ChangeTagsRequest.TagsEntry + 171, // 85: tabletmanagerdata.ChangeTagsResponse.tags:type_name -> tabletmanagerdata.ChangeTagsResponse.TagsEntry + 172, // 86: tabletmanagerdata.UpdateSequenceTablesRequest.sequences:type_name -> tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata + 173, // 87: tabletmanagerdata.GetMaxValueForSequencesRequest.sequences:type_name -> tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata + 174, // 88: tabletmanagerdata.GetMaxValueForSequencesResponse.max_values_by_sequence_table:type_name -> tabletmanagerdata.GetMaxValueForSequencesResponse.MaxValuesBySequenceTableEntry + 190, // 89: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.bls:type_name -> binlogdata.BinlogSource + 189, // 90: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.time_updated:type_name -> vttime.Time + 189, // 91: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.transaction_timestamp:type_name -> vttime.Time + 193, // 92: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.state:type_name -> binlogdata.VReplicationWorkflowState + 189, // 93: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.time_heartbeat:type_name -> vttime.Time + 189, // 94: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.time_throttled:type_name -> vttime.Time + 1, // 95: tabletmanagerdata.CheckThrottlerResponse.Metric.response_code:type_name -> tabletmanagerdata.CheckThrottlerResponseCode + 159, // 96: tabletmanagerdata.CheckThrottlerResponse.MetricsEntry.value:type_name -> tabletmanagerdata.CheckThrottlerResponse.Metric + 161, // 97: tabletmanagerdata.GetThrottlerStatusResponse.AggregatedMetricsEntry.value:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.MetricResult + 189, // 98: tabletmanagerdata.GetThrottlerStatusResponse.MetricHealth.last_healthy_at:type_name -> vttime.Time + 164, // 99: tabletmanagerdata.GetThrottlerStatusResponse.MetricsHealthEntry.value:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.MetricHealth + 196, // 100: tabletmanagerdata.GetThrottlerStatusResponse.ThrottledAppsEntry.value:type_name -> topodata.ThrottledAppRule + 189, // 101: tabletmanagerdata.GetThrottlerStatusResponse.RecentApp.checked_at:type_name -> vttime.Time + 1, // 102: tabletmanagerdata.GetThrottlerStatusResponse.RecentApp.response_code:type_name -> tabletmanagerdata.CheckThrottlerResponseCode + 168, // 103: tabletmanagerdata.GetThrottlerStatusResponse.RecentAppsEntry.value:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.RecentApp + 104, // [104:104] is the sub-list for method output_type + 104, // [104:104] is the sub-list for method input_type + 104, // [104:104] is the sub-list for extension type_name + 104, // [104:104] is the sub-list for extension extendee + 0, // [0:104] is the sub-list for field type_name } func init() { file_tabletmanagerdata_proto_init() } @@ -9556,7 +9278,7 @@ func file_tabletmanagerdata_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_tabletmanagerdata_proto_rawDesc), len(file_tabletmanagerdata_proto_rawDesc)), NumEnums: 2, - NumMessages: 166, + NumMessages: 173, NumExtensions: 0, NumServices: 0, }, diff --git a/go/vt/proto/tabletmanagerdata/tabletmanagerdata_vtproto.pb.go b/go/vt/proto/tabletmanagerdata/tabletmanagerdata_vtproto.pb.go index 74e3cab9f1e..efee17134ff 100644 --- a/go/vt/proto/tabletmanagerdata/tabletmanagerdata_vtproto.pb.go +++ b/go/vt/proto/tabletmanagerdata/tabletmanagerdata_vtproto.pb.go @@ -2642,6 +2642,13 @@ func (m *UpdateVReplicationWorkflowRequest) CloneVT() *UpdateVReplicationWorkflo tmpVal := *rhs r.Message = &tmpVal } + if rhs := m.FilterRules; rhs != nil { + tmpContainer := make([]*binlogdata.Rule, len(rhs)) + for k, v := range rhs { + tmpContainer[k] = v.CloneVT() + } + r.FilterRules = tmpContainer + } if len(m.unknownFields) > 0 { r.unknownFields = make([]byte, len(m.unknownFields)) copy(r.unknownFields, m.unknownFields) @@ -3024,6 +3031,130 @@ func (m *ChangeTagsResponse) CloneMessageVT() proto.Message { return m.CloneVT() } +func (m *UpdateSequenceTablesRequest_SequenceMetadata) CloneVT() *UpdateSequenceTablesRequest_SequenceMetadata { + if m == nil { + return (*UpdateSequenceTablesRequest_SequenceMetadata)(nil) + } + r := new(UpdateSequenceTablesRequest_SequenceMetadata) + r.BackingTableName = m.BackingTableName + r.BackingTableDbName = m.BackingTableDbName + r.MaxValue = m.MaxValue + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *UpdateSequenceTablesRequest_SequenceMetadata) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *UpdateSequenceTablesRequest) CloneVT() *UpdateSequenceTablesRequest { + if m == nil { + return (*UpdateSequenceTablesRequest)(nil) + } + r := new(UpdateSequenceTablesRequest) + if rhs := m.Sequences; rhs != nil { + tmpContainer := make([]*UpdateSequenceTablesRequest_SequenceMetadata, len(rhs)) + for k, v := range rhs { + tmpContainer[k] = v.CloneVT() + } + r.Sequences = tmpContainer + } + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *UpdateSequenceTablesRequest) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *UpdateSequenceTablesResponse) CloneVT() *UpdateSequenceTablesResponse { + if m == nil { + return (*UpdateSequenceTablesResponse)(nil) + } + r := new(UpdateSequenceTablesResponse) + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *UpdateSequenceTablesResponse) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *GetMaxValueForSequencesRequest_SequenceMetadata) CloneVT() *GetMaxValueForSequencesRequest_SequenceMetadata { + if m == nil { + return (*GetMaxValueForSequencesRequest_SequenceMetadata)(nil) + } + r := new(GetMaxValueForSequencesRequest_SequenceMetadata) + r.BackingTableName = m.BackingTableName + r.UsingColEscaped = m.UsingColEscaped + r.UsingTableNameEscaped = m.UsingTableNameEscaped + r.UsingTableDbNameEscaped = m.UsingTableDbNameEscaped + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *GetMaxValueForSequencesRequest_SequenceMetadata) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *GetMaxValueForSequencesRequest) CloneVT() *GetMaxValueForSequencesRequest { + if m == nil { + return (*GetMaxValueForSequencesRequest)(nil) + } + r := new(GetMaxValueForSequencesRequest) + if rhs := m.Sequences; rhs != nil { + tmpContainer := make([]*GetMaxValueForSequencesRequest_SequenceMetadata, len(rhs)) + for k, v := range rhs { + tmpContainer[k] = v.CloneVT() + } + r.Sequences = tmpContainer + } + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *GetMaxValueForSequencesRequest) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *GetMaxValueForSequencesResponse) CloneVT() *GetMaxValueForSequencesResponse { + if m == nil { + return (*GetMaxValueForSequencesResponse)(nil) + } + r := new(GetMaxValueForSequencesResponse) + if rhs := m.MaxValuesBySequenceTable; rhs != nil { + tmpContainer := make(map[string]int64, len(rhs)) + for k, v := range rhs { + tmpContainer[k] = v + } + r.MaxValuesBySequenceTable = tmpContainer + } + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *GetMaxValueForSequencesResponse) CloneMessageVT() proto.Message { + return m.CloneVT() +} + func (m *TableDefinition) MarshalVT() (dAtA []byte, err error) { if m == nil { return nil, nil @@ -9467,6 +9598,18 @@ func (m *UpdateVReplicationWorkflowRequest) MarshalToSizedBufferVT(dAtA []byte) i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } + if len(m.FilterRules) > 0 { + for iNdEx := len(m.FilterRules) - 1; iNdEx >= 0; iNdEx-- { + size, err := m.FilterRules[iNdEx].MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x52 + } + } if m.Message != nil { i -= len(*m.Message) copy(dAtA[i:], *m.Message) @@ -10604,125 +10747,411 @@ func (m *ChangeTagsResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *TableDefinition) SizeVT() (n int) { +func (m *UpdateSequenceTablesRequest_SequenceMetadata) MarshalVT() (dAtA []byte, err error) { if m == nil { - return 0 + return nil, nil } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err } - l = len(m.Schema) - if l > 0 { - n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + return dAtA[:n], nil +} + +func (m *UpdateSequenceTablesRequest_SequenceMetadata) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *UpdateSequenceTablesRequest_SequenceMetadata) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil } - if len(m.Columns) > 0 { - for _, s := range m.Columns { - l = len(s) - n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) - } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) } - if len(m.PrimaryKeyColumns) > 0 { - for _, s := range m.PrimaryKeyColumns { - l = len(s) - n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) - } + if m.MaxValue != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.MaxValue)) + i-- + dAtA[i] = 0x18 } - l = len(m.Type) - if l > 0 { - n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + if len(m.BackingTableDbName) > 0 { + i -= len(m.BackingTableDbName) + copy(dAtA[i:], m.BackingTableDbName) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.BackingTableDbName))) + i-- + dAtA[i] = 0x12 } - if m.DataLength != 0 { - n += 1 + protohelpers.SizeOfVarint(uint64(m.DataLength)) + if len(m.BackingTableName) > 0 { + i -= len(m.BackingTableName) + copy(dAtA[i:], m.BackingTableName) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.BackingTableName))) + i-- + dAtA[i] = 0xa } - if m.RowCount != 0 { - n += 1 + protohelpers.SizeOfVarint(uint64(m.RowCount)) + return len(dAtA) - i, nil +} + +func (m *UpdateSequenceTablesRequest) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil } - if len(m.Fields) > 0 { - for _, e := range m.Fields { - l = e.SizeVT() - n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) - } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err } - n += len(m.unknownFields) - return n + return dAtA[:n], nil } -func (m *SchemaDefinition) SizeVT() (n int) { +func (m *UpdateSequenceTablesRequest) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *UpdateSequenceTablesRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { if m == nil { - return 0 + return 0, nil } + i := len(dAtA) + _ = i var l int _ = l - l = len(m.DatabaseSchema) - if l > 0 { - n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) } - if len(m.TableDefinitions) > 0 { - for _, e := range m.TableDefinitions { - l = e.SizeVT() - n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + if len(m.Sequences) > 0 { + for iNdEx := len(m.Sequences) - 1; iNdEx >= 0; iNdEx-- { + size, err := m.Sequences[iNdEx].MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa } } - n += len(m.unknownFields) - return n + return len(dAtA) - i, nil } -func (m *SchemaChangeResult) SizeVT() (n int) { +func (m *UpdateSequenceTablesResponse) MarshalVT() (dAtA []byte, err error) { if m == nil { - return 0 - } - var l int - _ = l - if m.BeforeSchema != nil { - l = m.BeforeSchema.SizeVT() - n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + return nil, nil } - if m.AfterSchema != nil { - l = m.AfterSchema.SizeVT() - n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err } - n += len(m.unknownFields) - return n + return dAtA[:n], nil } -func (m *UserPermission) SizeVT() (n int) { +func (m *UpdateSequenceTablesResponse) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *UpdateSequenceTablesResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { if m == nil { - return 0 + return 0, nil } + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Host) - if l > 0 { - n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) - } - l = len(m.User) - if l > 0 { - n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) - } - if m.PasswordChecksum != 0 { - n += 1 + protohelpers.SizeOfVarint(uint64(m.PasswordChecksum)) - } - if len(m.Privileges) > 0 { - for k, v := range m.Privileges { - _ = k - _ = v - mapEntrySize := 1 + len(k) + protohelpers.SizeOfVarint(uint64(len(k))) + 1 + len(v) + protohelpers.SizeOfVarint(uint64(len(v))) - n += mapEntrySize + 1 + protohelpers.SizeOfVarint(uint64(mapEntrySize)) - } + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) } - n += len(m.unknownFields) - return n + return len(dAtA) - i, nil } -func (m *DbPermission) SizeVT() (n int) { +func (m *GetMaxValueForSequencesRequest_SequenceMetadata) MarshalVT() (dAtA []byte, err error) { if m == nil { - return 0 + return nil, nil } - var l int - _ = l + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GetMaxValueForSequencesRequest_SequenceMetadata) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *GetMaxValueForSequencesRequest_SequenceMetadata) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.UsingTableDbNameEscaped) > 0 { + i -= len(m.UsingTableDbNameEscaped) + copy(dAtA[i:], m.UsingTableDbNameEscaped) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.UsingTableDbNameEscaped))) + i-- + dAtA[i] = 0x22 + } + if len(m.UsingTableNameEscaped) > 0 { + i -= len(m.UsingTableNameEscaped) + copy(dAtA[i:], m.UsingTableNameEscaped) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.UsingTableNameEscaped))) + i-- + dAtA[i] = 0x1a + } + if len(m.UsingColEscaped) > 0 { + i -= len(m.UsingColEscaped) + copy(dAtA[i:], m.UsingColEscaped) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.UsingColEscaped))) + i-- + dAtA[i] = 0x12 + } + if len(m.BackingTableName) > 0 { + i -= len(m.BackingTableName) + copy(dAtA[i:], m.BackingTableName) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.BackingTableName))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *GetMaxValueForSequencesRequest) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GetMaxValueForSequencesRequest) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *GetMaxValueForSequencesRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.Sequences) > 0 { + for iNdEx := len(m.Sequences) - 1; iNdEx >= 0; iNdEx-- { + size, err := m.Sequences[iNdEx].MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *GetMaxValueForSequencesResponse) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GetMaxValueForSequencesResponse) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *GetMaxValueForSequencesResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.MaxValuesBySequenceTable) > 0 { + for k := range m.MaxValuesBySequenceTable { + v := m.MaxValuesBySequenceTable[k] + baseI := i + i = protohelpers.EncodeVarint(dAtA, i, uint64(v)) + i-- + dAtA[i] = 0x10 + i -= len(k) + copy(dAtA[i:], k) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(k))) + i-- + dAtA[i] = 0xa + i = protohelpers.EncodeVarint(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *TableDefinition) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.Schema) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if len(m.Columns) > 0 { + for _, s := range m.Columns { + l = len(s) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + } + if len(m.PrimaryKeyColumns) > 0 { + for _, s := range m.PrimaryKeyColumns { + l = len(s) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + } + l = len(m.Type) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.DataLength != 0 { + n += 1 + protohelpers.SizeOfVarint(uint64(m.DataLength)) + } + if m.RowCount != 0 { + n += 1 + protohelpers.SizeOfVarint(uint64(m.RowCount)) + } + if len(m.Fields) > 0 { + for _, e := range m.Fields { + l = e.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + } + n += len(m.unknownFields) + return n +} + +func (m *SchemaDefinition) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DatabaseSchema) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if len(m.TableDefinitions) > 0 { + for _, e := range m.TableDefinitions { + l = e.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + } + n += len(m.unknownFields) + return n +} + +func (m *SchemaChangeResult) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.BeforeSchema != nil { + l = m.BeforeSchema.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.AfterSchema != nil { + l = m.AfterSchema.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *UserPermission) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Host) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.User) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.PasswordChecksum != 0 { + n += 1 + protohelpers.SizeOfVarint(uint64(m.PasswordChecksum)) + } + if len(m.Privileges) > 0 { + for k, v := range m.Privileges { + _ = k + _ = v + mapEntrySize := 1 + len(k) + protohelpers.SizeOfVarint(uint64(len(k))) + 1 + len(v) + protohelpers.SizeOfVarint(uint64(len(v))) + n += mapEntrySize + 1 + protohelpers.SizeOfVarint(uint64(mapEntrySize)) + } + } + n += len(m.unknownFields) + return n +} + +func (m *DbPermission) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l l = len(m.Host) if l > 0 { n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) @@ -12922,6 +13351,12 @@ func (m *UpdateVReplicationWorkflowRequest) SizeVT() (n int) { l = len(*m.Message) n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } + if len(m.FilterRules) > 0 { + for _, e := range m.FilterRules { + l = e.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + } n += len(m.unknownFields) return n } @@ -13346,19 +13781,126 @@ func (m *ChangeTagsResponse) SizeVT() (n int) { return n } -func (m *TableDefinition) UnmarshalVT(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return protohelpers.ErrIntOverflow - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } +func (m *UpdateSequenceTablesRequest_SequenceMetadata) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.BackingTableName) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.BackingTableDbName) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.MaxValue != 0 { + n += 1 + protohelpers.SizeOfVarint(uint64(m.MaxValue)) + } + n += len(m.unknownFields) + return n +} + +func (m *UpdateSequenceTablesRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Sequences) > 0 { + for _, e := range m.Sequences { + l = e.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + } + n += len(m.unknownFields) + return n +} + +func (m *UpdateSequenceTablesResponse) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += len(m.unknownFields) + return n +} + +func (m *GetMaxValueForSequencesRequest_SequenceMetadata) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.BackingTableName) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.UsingColEscaped) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.UsingTableNameEscaped) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.UsingTableDbNameEscaped) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *GetMaxValueForSequencesRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Sequences) > 0 { + for _, e := range m.Sequences { + l = e.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + } + n += len(m.unknownFields) + return n +} + +func (m *GetMaxValueForSequencesResponse) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.MaxValuesBySequenceTable) > 0 { + for k, v := range m.MaxValuesBySequenceTable { + _ = k + _ = v + mapEntrySize := 1 + len(k) + protohelpers.SizeOfVarint(uint64(len(k))) + 1 + protohelpers.SizeOfVarint(uint64(v)) + n += mapEntrySize + 1 + protohelpers.SizeOfVarint(uint64(mapEntrySize)) + } + } + n += len(m.unknownFields) + return n +} + +func (m *TableDefinition) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } b := dAtA[iNdEx] iNdEx++ wire |= uint64(b&0x7F) << shift @@ -27932,6 +28474,40 @@ func (m *UpdateVReplicationWorkflowRequest) UnmarshalVT(dAtA []byte) error { s := string(dAtA[iNdEx:postIndex]) m.Message = &s iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FilterRules", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FilterRules = append(m.FilterRules, &binlogdata.Rule{}) + if err := m.FilterRules[len(m.FilterRules)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := protohelpers.Skip(dAtA[iNdEx:]) @@ -31063,3 +31639,701 @@ func (m *ChangeTagsResponse) UnmarshalVT(dAtA []byte) error { } return nil } +func (m *UpdateSequenceTablesRequest_SequenceMetadata) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UpdateSequenceTablesRequest_SequenceMetadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UpdateSequenceTablesRequest_SequenceMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BackingTableName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BackingTableName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BackingTableDbName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BackingTableDbName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxValue", wireType) + } + m.MaxValue = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MaxValue |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *UpdateSequenceTablesRequest) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UpdateSequenceTablesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UpdateSequenceTablesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Sequences", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Sequences = append(m.Sequences, &UpdateSequenceTablesRequest_SequenceMetadata{}) + if err := m.Sequences[len(m.Sequences)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *UpdateSequenceTablesResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UpdateSequenceTablesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UpdateSequenceTablesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetMaxValueForSequencesRequest_SequenceMetadata) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetMaxValueForSequencesRequest_SequenceMetadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetMaxValueForSequencesRequest_SequenceMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BackingTableName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BackingTableName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UsingColEscaped", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UsingColEscaped = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UsingTableNameEscaped", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UsingTableNameEscaped = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UsingTableDbNameEscaped", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UsingTableDbNameEscaped = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetMaxValueForSequencesRequest) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetMaxValueForSequencesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetMaxValueForSequencesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Sequences", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Sequences = append(m.Sequences, &GetMaxValueForSequencesRequest_SequenceMetadata{}) + if err := m.Sequences[len(m.Sequences)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetMaxValueForSequencesResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetMaxValueForSequencesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetMaxValueForSequencesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxValuesBySequenceTable", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MaxValuesBySequenceTable == nil { + m.MaxValuesBySequenceTable = make(map[string]int64) + } + var mapkey string + var mapvalue int64 + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return protohelpers.ErrInvalidLength + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return protohelpers.ErrInvalidLength + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapvalue |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + } else { + iNdEx = entryPreIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.MaxValuesBySequenceTable[mapkey] = mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} diff --git a/go/vt/proto/tabletmanagerservice/tabletmanagerservice.pb.go b/go/vt/proto/tabletmanagerservice/tabletmanagerservice.pb.go index 4aacf643374..7116b2ec510 100644 --- a/go/vt/proto/tabletmanagerservice/tabletmanagerservice.pb.go +++ b/go/vt/proto/tabletmanagerservice/tabletmanagerservice.pb.go @@ -18,7 +18,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v3.21.3 // source: tabletmanagerservice.proto @@ -41,491 +41,83 @@ const ( var File_tabletmanagerservice_proto protoreflect.FileDescriptor -var file_tabletmanagerservice_proto_rawDesc = string([]byte{ - 0x0a, 0x1a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x1a, 0x17, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x9a, 0x3b, 0x0a, 0x0d, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x12, 0x49, 0x0a, - 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x1e, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x05, 0x53, 0x6c, 0x65, 0x65, - 0x70, 0x12, 0x1f, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x6c, 0x65, 0x65, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x6c, 0x65, 0x65, 0x70, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x0b, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x12, 0x23, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x67, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x28, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x13, 0x47, 0x65, 0x74, - 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x56, 0x61, 0x72, 0x73, - 0x12, 0x2d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x56, 0x61, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2e, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x56, 0x61, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x5e, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, - 0x12, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x52, - 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x61, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x57, 0x72, 0x69, 0x74, - 0x65, 0x12, 0x26, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, - 0x74, 0x52, 0x65, 0x61, 0x64, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, - 0x67, 0x73, 0x12, 0x24, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x67, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x5b, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x24, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, - 0x0a, 0x0c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x26, - 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, - 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x67, 0x0a, 0x0e, 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x12, 0x28, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, - 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x0c, 0x52, 0x65, - 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x26, 0x2e, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, - 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, - 0x0f, 0x50, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x12, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x50, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x0b, 0x41, 0x70, 0x70, - 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x70, 0x70, - 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x26, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x67, 0x0a, 0x0e, 0x52, 0x65, 0x73, - 0x65, 0x74, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, - 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0a, 0x4c, 0x6f, 0x63, 0x6b, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x12, 0x24, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x6f, 0x63, 0x6b, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x6f, 0x63, 0x6b, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x61, 0x0a, 0x0c, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, - 0x26, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, - 0x63, 0x6b, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x61, 0x0a, 0x0c, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x12, 0x26, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x11, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, - 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x62, 0x61, 0x12, 0x2b, 0x2e, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x62, 0x61, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x62, 0x61, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7f, 0x0a, 0x16, 0x45, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x62, - 0x61, 0x12, 0x30, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4d, 0x75, 0x6c, - 0x74, 0x69, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x62, 0x61, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4d, - 0x75, 0x6c, 0x74, 0x69, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x62, 0x61, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7f, 0x0a, 0x16, 0x45, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x6c, 0x6c, 0x50, 0x72, 0x69, - 0x76, 0x73, 0x12, 0x30, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, - 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x6c, 0x6c, 0x50, 0x72, 0x69, 0x76, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, - 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x6c, 0x6c, 0x50, 0x72, 0x69, 0x76, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x11, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x70, 0x70, 0x12, 0x2b, - 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, - 0x73, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x70, - 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x88, 0x01, 0x0a, 0x19, - 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x33, 0x2e, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, - 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, - 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x0f, 0x52, 0x65, 0x61, 0x64, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, - 0x61, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x73, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, - 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x6d, 0x0a, 0x10, 0x4d, 0x79, 0x73, 0x71, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x12, 0x2a, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x79, 0x73, 0x71, 0x6c, 0x48, 0x6f, 0x73, - 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2b, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x79, 0x73, 0x71, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, - 0x0a, 0x11, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x2b, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x64, 0x0a, 0x0d, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x27, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, - 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, - 0x79, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, - 0x69, 0x6d, 0x61, 0x72, 0x79, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x0f, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, - 0x72, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2a, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, - 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7f, 0x0a, 0x16, 0x53, 0x74, - 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, - 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x30, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, - 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x10, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x2a, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8b, 0x01, 0x0a, 0x1a, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, - 0x6e, 0x74, 0x69, 0x6c, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x34, 0x2e, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, - 0x74, 0x69, 0x6c, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x35, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, - 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8b, 0x01, 0x0a, 0x1a, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x34, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x8b, 0x01, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x12, 0x34, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x85, 0x01, 0x0a, 0x18, 0x48, 0x61, 0x73, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x32, 0x2e, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x48, 0x61, 0x73, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x33, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x48, 0x61, 0x73, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x85, 0x01, 0x0a, 0x18, 0x52, 0x65, 0x61, - 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x32, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, - 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x88, 0x01, 0x0a, 0x19, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x33, - 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8b, 0x01, 0x0a, 0x1a, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x34, 0x2e, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x35, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8e, 0x01, 0x0a, 0x1b, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x35, 0x2e, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x36, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x9a, 0x01, 0x0a, 0x1f, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x39, - 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x10, 0x56, 0x52, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x12, 0x2a, 0x2e, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x65, 0x63, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7f, 0x0a, 0x16, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x6f, 0x73, - 0x12, 0x30, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x6f, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x05, 0x56, 0x44, 0x69, 0x66, 0x66, - 0x12, 0x1f, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x20, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, - 0x73, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x0b, 0x49, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x6d, - 0x61, 0x72, 0x79, 0x12, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x6d, - 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x49, - 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x82, 0x01, 0x0a, 0x17, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, - 0x12, 0x31, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x82, 0x01, 0x0a, 0x17, 0x52, 0x65, - 0x61, 0x64, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, - 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x31, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x61, - 0x64, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, - 0x0a, 0x0b, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x12, 0x25, 0x2e, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x64, - 0x0a, 0x0d, 0x44, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, - 0x27, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6d, - 0x6f, 0x74, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x11, 0x55, 0x6e, 0x64, 0x6f, 0x44, 0x65, 0x6d, 0x6f, - 0x74, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x2b, 0x2e, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x6e, - 0x64, 0x6f, 0x44, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x6e, 0x64, 0x6f, 0x44, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x73, 0x0a, 0x12, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x57, 0x61, 0x73, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x12, 0x2c, 0x2e, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x57, 0x61, 0x73, 0x50, 0x72, 0x6f, 0x6d, 0x6f, - 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x57, 0x61, 0x73, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, - 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8b, 0x01, 0x0a, 0x1a, - 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x34, 0x2e, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, - 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x35, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0a, 0x46, 0x75, 0x6c, - 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x75, 0x6c, 0x6c, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x79, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2e, - 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, - 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x76, 0x0a, 0x13, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x57, 0x61, 0x73, 0x52, - 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x2d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x57, 0x61, 0x73, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x57, 0x61, 0x73, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8e, 0x01, 0x0a, 0x1b, 0x53, 0x74, - 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, - 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x35, 0x2e, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, - 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, - 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x36, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x67, 0x0a, 0x0e, 0x50, 0x72, - 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x12, 0x28, 0x2e, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, - 0x74, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x06, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x20, 0x2e, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x21, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x72, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x2b, 0x2e, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x67, 0x0a, 0x0e, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x12, 0x28, 0x2e, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x73, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, - 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, - 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, - 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x33, 0x5a, 0x31, 0x76, 0x69, 0x74, 0x65, - 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, - 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_tabletmanagerservice_proto_rawDesc = "" + + "\n" + + "\x1atabletmanagerservice.proto\x12\x14tabletmanagerservice\x1a\x17tabletmanagerdata.proto2\x9a=\n" + + "\rTabletManager\x12I\n" + + "\x04Ping\x12\x1e.tabletmanagerdata.PingRequest\x1a\x1f.tabletmanagerdata.PingResponse\"\x00\x12L\n" + + "\x05Sleep\x12\x1f.tabletmanagerdata.SleepRequest\x1a .tabletmanagerdata.SleepResponse\"\x00\x12^\n" + + "\vExecuteHook\x12%.tabletmanagerdata.ExecuteHookRequest\x1a&.tabletmanagerdata.ExecuteHookResponse\"\x00\x12X\n" + + "\tGetSchema\x12#.tabletmanagerdata.GetSchemaRequest\x1a$.tabletmanagerdata.GetSchemaResponse\"\x00\x12g\n" + + "\x0eGetPermissions\x12(.tabletmanagerdata.GetPermissionsRequest\x1a).tabletmanagerdata.GetPermissionsResponse\"\x00\x12v\n" + + "\x13GetGlobalStatusVars\x12-.tabletmanagerdata.GetGlobalStatusVarsRequest\x1a..tabletmanagerdata.GetGlobalStatusVarsResponse\"\x00\x12^\n" + + "\vSetReadOnly\x12%.tabletmanagerdata.SetReadOnlyRequest\x1a&.tabletmanagerdata.SetReadOnlyResponse\"\x00\x12a\n" + + "\fSetReadWrite\x12&.tabletmanagerdata.SetReadWriteRequest\x1a'.tabletmanagerdata.SetReadWriteResponse\"\x00\x12[\n" + + "\n" + + "ChangeTags\x12$.tabletmanagerdata.ChangeTagsRequest\x1a%.tabletmanagerdata.ChangeTagsResponse\"\x00\x12[\n" + + "\n" + + "ChangeType\x12$.tabletmanagerdata.ChangeTypeRequest\x1a%.tabletmanagerdata.ChangeTypeResponse\"\x00\x12a\n" + + "\fRefreshState\x12&.tabletmanagerdata.RefreshStateRequest\x1a'.tabletmanagerdata.RefreshStateResponse\"\x00\x12g\n" + + "\x0eRunHealthCheck\x12(.tabletmanagerdata.RunHealthCheckRequest\x1a).tabletmanagerdata.RunHealthCheckResponse\"\x00\x12a\n" + + "\fReloadSchema\x12&.tabletmanagerdata.ReloadSchemaRequest\x1a'.tabletmanagerdata.ReloadSchemaResponse\"\x00\x12j\n" + + "\x0fPreflightSchema\x12).tabletmanagerdata.PreflightSchemaRequest\x1a*.tabletmanagerdata.PreflightSchemaResponse\"\x00\x12^\n" + + "\vApplySchema\x12%.tabletmanagerdata.ApplySchemaRequest\x1a&.tabletmanagerdata.ApplySchemaResponse\"\x00\x12g\n" + + "\x0eResetSequences\x12(.tabletmanagerdata.ResetSequencesRequest\x1a).tabletmanagerdata.ResetSequencesResponse\"\x00\x12[\n" + + "\n" + + "LockTables\x12$.tabletmanagerdata.LockTablesRequest\x1a%.tabletmanagerdata.LockTablesResponse\"\x00\x12a\n" + + "\fUnlockTables\x12&.tabletmanagerdata.UnlockTablesRequest\x1a'.tabletmanagerdata.UnlockTablesResponse\"\x00\x12a\n" + + "\fExecuteQuery\x12&.tabletmanagerdata.ExecuteQueryRequest\x1a'.tabletmanagerdata.ExecuteQueryResponse\"\x00\x12p\n" + + "\x11ExecuteFetchAsDba\x12+.tabletmanagerdata.ExecuteFetchAsDbaRequest\x1a,.tabletmanagerdata.ExecuteFetchAsDbaResponse\"\x00\x12\x7f\n" + + "\x16ExecuteMultiFetchAsDba\x120.tabletmanagerdata.ExecuteMultiFetchAsDbaRequest\x1a1.tabletmanagerdata.ExecuteMultiFetchAsDbaResponse\"\x00\x12\x7f\n" + + "\x16ExecuteFetchAsAllPrivs\x120.tabletmanagerdata.ExecuteFetchAsAllPrivsRequest\x1a1.tabletmanagerdata.ExecuteFetchAsAllPrivsResponse\"\x00\x12p\n" + + "\x11ExecuteFetchAsApp\x12+.tabletmanagerdata.ExecuteFetchAsAppRequest\x1a,.tabletmanagerdata.ExecuteFetchAsAppResponse\"\x00\x12\x88\x01\n" + + "\x19GetUnresolvedTransactions\x123.tabletmanagerdata.GetUnresolvedTransactionsRequest\x1a4.tabletmanagerdata.GetUnresolvedTransactionsResponse\"\x00\x12j\n" + + "\x0fReadTransaction\x12).tabletmanagerdata.ReadTransactionRequest\x1a*.tabletmanagerdata.ReadTransactionResponse\"\x00\x12s\n" + + "\x12GetTransactionInfo\x12,.tabletmanagerdata.GetTransactionInfoRequest\x1a-.tabletmanagerdata.GetTransactionInfoResponse\"\x00\x12v\n" + + "\x13ConcludeTransaction\x12-.tabletmanagerdata.ConcludeTransactionRequest\x1a..tabletmanagerdata.ConcludeTransactionResponse\"\x00\x12m\n" + + "\x10MysqlHostMetrics\x12*.tabletmanagerdata.MysqlHostMetricsRequest\x1a+.tabletmanagerdata.MysqlHostMetricsResponse\"\x00\x12p\n" + + "\x11ReplicationStatus\x12+.tabletmanagerdata.ReplicationStatusRequest\x1a,.tabletmanagerdata.ReplicationStatusResponse\"\x00\x12d\n" + + "\rPrimaryStatus\x12'.tabletmanagerdata.PrimaryStatusRequest\x1a(.tabletmanagerdata.PrimaryStatusResponse\"\x00\x12j\n" + + "\x0fPrimaryPosition\x12).tabletmanagerdata.PrimaryPositionRequest\x1a*.tabletmanagerdata.PrimaryPositionResponse\"\x00\x12j\n" + + "\x0fWaitForPosition\x12).tabletmanagerdata.WaitForPositionRequest\x1a*.tabletmanagerdata.WaitForPositionResponse\"\x00\x12j\n" + + "\x0fStopReplication\x12).tabletmanagerdata.StopReplicationRequest\x1a*.tabletmanagerdata.StopReplicationResponse\"\x00\x12\x7f\n" + + "\x16StopReplicationMinimum\x120.tabletmanagerdata.StopReplicationMinimumRequest\x1a1.tabletmanagerdata.StopReplicationMinimumResponse\"\x00\x12m\n" + + "\x10StartReplication\x12*.tabletmanagerdata.StartReplicationRequest\x1a+.tabletmanagerdata.StartReplicationResponse\"\x00\x12\x8b\x01\n" + + "\x1aStartReplicationUntilAfter\x124.tabletmanagerdata.StartReplicationUntilAfterRequest\x1a5.tabletmanagerdata.StartReplicationUntilAfterResponse\"\x00\x12^\n" + + "\vGetReplicas\x12%.tabletmanagerdata.GetReplicasRequest\x1a&.tabletmanagerdata.GetReplicasResponse\"\x00\x12\x8b\x01\n" + + "\x1aCreateVReplicationWorkflow\x124.tabletmanagerdata.CreateVReplicationWorkflowRequest\x1a5.tabletmanagerdata.CreateVReplicationWorkflowResponse\"\x00\x12j\n" + + "\x0fDeleteTableData\x12).tabletmanagerdata.DeleteTableDataRequest\x1a*.tabletmanagerdata.DeleteTableDataResponse\"\x00\x12\x8b\x01\n" + + "\x1aDeleteVReplicationWorkflow\x124.tabletmanagerdata.DeleteVReplicationWorkflowRequest\x1a5.tabletmanagerdata.DeleteVReplicationWorkflowResponse\"\x00\x12\x85\x01\n" + + "\x18HasVReplicationWorkflows\x122.tabletmanagerdata.HasVReplicationWorkflowsRequest\x1a3.tabletmanagerdata.HasVReplicationWorkflowsResponse\"\x00\x12\x85\x01\n" + + "\x18ReadVReplicationWorkflow\x122.tabletmanagerdata.ReadVReplicationWorkflowRequest\x1a3.tabletmanagerdata.ReadVReplicationWorkflowResponse\"\x00\x12\x88\x01\n" + + "\x19ReadVReplicationWorkflows\x123.tabletmanagerdata.ReadVReplicationWorkflowsRequest\x1a4.tabletmanagerdata.ReadVReplicationWorkflowsResponse\"\x00\x12\x8b\x01\n" + + "\x1aUpdateVReplicationWorkflow\x124.tabletmanagerdata.UpdateVReplicationWorkflowRequest\x1a5.tabletmanagerdata.UpdateVReplicationWorkflowResponse\"\x00\x12\x8e\x01\n" + + "\x1bUpdateVReplicationWorkflows\x125.tabletmanagerdata.UpdateVReplicationWorkflowsRequest\x1a6.tabletmanagerdata.UpdateVReplicationWorkflowsResponse\"\x00\x12\x9a\x01\n" + + "\x1fValidateVReplicationPermissions\x129.tabletmanagerdata.ValidateVReplicationPermissionsRequest\x1a:.tabletmanagerdata.ValidateVReplicationPermissionsResponse\"\x00\x12m\n" + + "\x10VReplicationExec\x12*.tabletmanagerdata.VReplicationExecRequest\x1a+.tabletmanagerdata.VReplicationExecResponse\"\x00\x12\x7f\n" + + "\x16VReplicationWaitForPos\x120.tabletmanagerdata.VReplicationWaitForPosRequest\x1a1.tabletmanagerdata.VReplicationWaitForPosResponse\"\x00\x12y\n" + + "\x14UpdateSequenceTables\x12..tabletmanagerdata.UpdateSequenceTablesRequest\x1a/.tabletmanagerdata.UpdateSequenceTablesResponse\"\x00\x12\x82\x01\n" + + "\x17GetMaxValueForSequences\x121.tabletmanagerdata.GetMaxValueForSequencesRequest\x1a2.tabletmanagerdata.GetMaxValueForSequencesResponse\"\x00\x12L\n" + + "\x05VDiff\x12\x1f.tabletmanagerdata.VDiffRequest\x1a .tabletmanagerdata.VDiffResponse\"\x00\x12m\n" + + "\x10ResetReplication\x12*.tabletmanagerdata.ResetReplicationRequest\x1a+.tabletmanagerdata.ResetReplicationResponse\"\x00\x12^\n" + + "\vInitPrimary\x12%.tabletmanagerdata.InitPrimaryRequest\x1a&.tabletmanagerdata.InitPrimaryResponse\"\x00\x12\x82\x01\n" + + "\x17PopulateReparentJournal\x121.tabletmanagerdata.PopulateReparentJournalRequest\x1a2.tabletmanagerdata.PopulateReparentJournalResponse\"\x00\x12\x82\x01\n" + + "\x17ReadReparentJournalInfo\x121.tabletmanagerdata.ReadReparentJournalInfoRequest\x1a2.tabletmanagerdata.ReadReparentJournalInfoResponse\"\x00\x12^\n" + + "\vInitReplica\x12%.tabletmanagerdata.InitReplicaRequest\x1a&.tabletmanagerdata.InitReplicaResponse\"\x00\x12d\n" + + "\rDemotePrimary\x12'.tabletmanagerdata.DemotePrimaryRequest\x1a(.tabletmanagerdata.DemotePrimaryResponse\"\x00\x12p\n" + + "\x11UndoDemotePrimary\x12+.tabletmanagerdata.UndoDemotePrimaryRequest\x1a,.tabletmanagerdata.UndoDemotePrimaryResponse\"\x00\x12s\n" + + "\x12ReplicaWasPromoted\x12,.tabletmanagerdata.ReplicaWasPromotedRequest\x1a-.tabletmanagerdata.ReplicaWasPromotedResponse\"\x00\x12\x8b\x01\n" + + "\x1aResetReplicationParameters\x124.tabletmanagerdata.ResetReplicationParametersRequest\x1a5.tabletmanagerdata.ResetReplicationParametersResponse\"\x00\x12[\n" + + "\n" + + "FullStatus\x12$.tabletmanagerdata.FullStatusRequest\x1a%.tabletmanagerdata.FullStatusResponse\"\x00\x12y\n" + + "\x14SetReplicationSource\x12..tabletmanagerdata.SetReplicationSourceRequest\x1a/.tabletmanagerdata.SetReplicationSourceResponse\"\x00\x12v\n" + + "\x13ReplicaWasRestarted\x12-.tabletmanagerdata.ReplicaWasRestartedRequest\x1a..tabletmanagerdata.ReplicaWasRestartedResponse\"\x00\x12\x8e\x01\n" + + "\x1bStopReplicationAndGetStatus\x125.tabletmanagerdata.StopReplicationAndGetStatusRequest\x1a6.tabletmanagerdata.StopReplicationAndGetStatusResponse\"\x00\x12g\n" + + "\x0ePromoteReplica\x12(.tabletmanagerdata.PromoteReplicaRequest\x1a).tabletmanagerdata.PromoteReplicaResponse\"\x00\x12Q\n" + + "\x06Backup\x12 .tabletmanagerdata.BackupRequest\x1a!.tabletmanagerdata.BackupResponse\"\x000\x01\x12r\n" + + "\x11RestoreFromBackup\x12+.tabletmanagerdata.RestoreFromBackupRequest\x1a,.tabletmanagerdata.RestoreFromBackupResponse\"\x000\x01\x12g\n" + + "\x0eCheckThrottler\x12(.tabletmanagerdata.CheckThrottlerRequest\x1a).tabletmanagerdata.CheckThrottlerResponse\"\x00\x12s\n" + + "\x12GetThrottlerStatus\x12,.tabletmanagerdata.GetThrottlerStatusRequest\x1a-.tabletmanagerdata.GetThrottlerStatusResponse\"\x00B3Z1vitess.io/vitess/go/vt/proto/tabletmanagerserviceb\x06proto3" var file_tabletmanagerservice_proto_goTypes = []any{ (*tabletmanagerdata.PingRequest)(nil), // 0: tabletmanagerdata.PingRequest @@ -576,92 +168,96 @@ var file_tabletmanagerservice_proto_goTypes = []any{ (*tabletmanagerdata.ValidateVReplicationPermissionsRequest)(nil), // 45: tabletmanagerdata.ValidateVReplicationPermissionsRequest (*tabletmanagerdata.VReplicationExecRequest)(nil), // 46: tabletmanagerdata.VReplicationExecRequest (*tabletmanagerdata.VReplicationWaitForPosRequest)(nil), // 47: tabletmanagerdata.VReplicationWaitForPosRequest - (*tabletmanagerdata.VDiffRequest)(nil), // 48: tabletmanagerdata.VDiffRequest - (*tabletmanagerdata.ResetReplicationRequest)(nil), // 49: tabletmanagerdata.ResetReplicationRequest - (*tabletmanagerdata.InitPrimaryRequest)(nil), // 50: tabletmanagerdata.InitPrimaryRequest - (*tabletmanagerdata.PopulateReparentJournalRequest)(nil), // 51: tabletmanagerdata.PopulateReparentJournalRequest - (*tabletmanagerdata.ReadReparentJournalInfoRequest)(nil), // 52: tabletmanagerdata.ReadReparentJournalInfoRequest - (*tabletmanagerdata.InitReplicaRequest)(nil), // 53: tabletmanagerdata.InitReplicaRequest - (*tabletmanagerdata.DemotePrimaryRequest)(nil), // 54: tabletmanagerdata.DemotePrimaryRequest - (*tabletmanagerdata.UndoDemotePrimaryRequest)(nil), // 55: tabletmanagerdata.UndoDemotePrimaryRequest - (*tabletmanagerdata.ReplicaWasPromotedRequest)(nil), // 56: tabletmanagerdata.ReplicaWasPromotedRequest - (*tabletmanagerdata.ResetReplicationParametersRequest)(nil), // 57: tabletmanagerdata.ResetReplicationParametersRequest - (*tabletmanagerdata.FullStatusRequest)(nil), // 58: tabletmanagerdata.FullStatusRequest - (*tabletmanagerdata.SetReplicationSourceRequest)(nil), // 59: tabletmanagerdata.SetReplicationSourceRequest - (*tabletmanagerdata.ReplicaWasRestartedRequest)(nil), // 60: tabletmanagerdata.ReplicaWasRestartedRequest - (*tabletmanagerdata.StopReplicationAndGetStatusRequest)(nil), // 61: tabletmanagerdata.StopReplicationAndGetStatusRequest - (*tabletmanagerdata.PromoteReplicaRequest)(nil), // 62: tabletmanagerdata.PromoteReplicaRequest - (*tabletmanagerdata.BackupRequest)(nil), // 63: tabletmanagerdata.BackupRequest - (*tabletmanagerdata.RestoreFromBackupRequest)(nil), // 64: tabletmanagerdata.RestoreFromBackupRequest - (*tabletmanagerdata.CheckThrottlerRequest)(nil), // 65: tabletmanagerdata.CheckThrottlerRequest - (*tabletmanagerdata.GetThrottlerStatusRequest)(nil), // 66: tabletmanagerdata.GetThrottlerStatusRequest - (*tabletmanagerdata.PingResponse)(nil), // 67: tabletmanagerdata.PingResponse - (*tabletmanagerdata.SleepResponse)(nil), // 68: tabletmanagerdata.SleepResponse - (*tabletmanagerdata.ExecuteHookResponse)(nil), // 69: tabletmanagerdata.ExecuteHookResponse - (*tabletmanagerdata.GetSchemaResponse)(nil), // 70: tabletmanagerdata.GetSchemaResponse - (*tabletmanagerdata.GetPermissionsResponse)(nil), // 71: tabletmanagerdata.GetPermissionsResponse - (*tabletmanagerdata.GetGlobalStatusVarsResponse)(nil), // 72: tabletmanagerdata.GetGlobalStatusVarsResponse - (*tabletmanagerdata.SetReadOnlyResponse)(nil), // 73: tabletmanagerdata.SetReadOnlyResponse - (*tabletmanagerdata.SetReadWriteResponse)(nil), // 74: tabletmanagerdata.SetReadWriteResponse - (*tabletmanagerdata.ChangeTagsResponse)(nil), // 75: tabletmanagerdata.ChangeTagsResponse - (*tabletmanagerdata.ChangeTypeResponse)(nil), // 76: tabletmanagerdata.ChangeTypeResponse - (*tabletmanagerdata.RefreshStateResponse)(nil), // 77: tabletmanagerdata.RefreshStateResponse - (*tabletmanagerdata.RunHealthCheckResponse)(nil), // 78: tabletmanagerdata.RunHealthCheckResponse - (*tabletmanagerdata.ReloadSchemaResponse)(nil), // 79: tabletmanagerdata.ReloadSchemaResponse - (*tabletmanagerdata.PreflightSchemaResponse)(nil), // 80: tabletmanagerdata.PreflightSchemaResponse - (*tabletmanagerdata.ApplySchemaResponse)(nil), // 81: tabletmanagerdata.ApplySchemaResponse - (*tabletmanagerdata.ResetSequencesResponse)(nil), // 82: tabletmanagerdata.ResetSequencesResponse - (*tabletmanagerdata.LockTablesResponse)(nil), // 83: tabletmanagerdata.LockTablesResponse - (*tabletmanagerdata.UnlockTablesResponse)(nil), // 84: tabletmanagerdata.UnlockTablesResponse - (*tabletmanagerdata.ExecuteQueryResponse)(nil), // 85: tabletmanagerdata.ExecuteQueryResponse - (*tabletmanagerdata.ExecuteFetchAsDbaResponse)(nil), // 86: tabletmanagerdata.ExecuteFetchAsDbaResponse - (*tabletmanagerdata.ExecuteMultiFetchAsDbaResponse)(nil), // 87: tabletmanagerdata.ExecuteMultiFetchAsDbaResponse - (*tabletmanagerdata.ExecuteFetchAsAllPrivsResponse)(nil), // 88: tabletmanagerdata.ExecuteFetchAsAllPrivsResponse - (*tabletmanagerdata.ExecuteFetchAsAppResponse)(nil), // 89: tabletmanagerdata.ExecuteFetchAsAppResponse - (*tabletmanagerdata.GetUnresolvedTransactionsResponse)(nil), // 90: tabletmanagerdata.GetUnresolvedTransactionsResponse - (*tabletmanagerdata.ReadTransactionResponse)(nil), // 91: tabletmanagerdata.ReadTransactionResponse - (*tabletmanagerdata.GetTransactionInfoResponse)(nil), // 92: tabletmanagerdata.GetTransactionInfoResponse - (*tabletmanagerdata.ConcludeTransactionResponse)(nil), // 93: tabletmanagerdata.ConcludeTransactionResponse - (*tabletmanagerdata.MysqlHostMetricsResponse)(nil), // 94: tabletmanagerdata.MysqlHostMetricsResponse - (*tabletmanagerdata.ReplicationStatusResponse)(nil), // 95: tabletmanagerdata.ReplicationStatusResponse - (*tabletmanagerdata.PrimaryStatusResponse)(nil), // 96: tabletmanagerdata.PrimaryStatusResponse - (*tabletmanagerdata.PrimaryPositionResponse)(nil), // 97: tabletmanagerdata.PrimaryPositionResponse - (*tabletmanagerdata.WaitForPositionResponse)(nil), // 98: tabletmanagerdata.WaitForPositionResponse - (*tabletmanagerdata.StopReplicationResponse)(nil), // 99: tabletmanagerdata.StopReplicationResponse - (*tabletmanagerdata.StopReplicationMinimumResponse)(nil), // 100: tabletmanagerdata.StopReplicationMinimumResponse - (*tabletmanagerdata.StartReplicationResponse)(nil), // 101: tabletmanagerdata.StartReplicationResponse - (*tabletmanagerdata.StartReplicationUntilAfterResponse)(nil), // 102: tabletmanagerdata.StartReplicationUntilAfterResponse - (*tabletmanagerdata.GetReplicasResponse)(nil), // 103: tabletmanagerdata.GetReplicasResponse - (*tabletmanagerdata.CreateVReplicationWorkflowResponse)(nil), // 104: tabletmanagerdata.CreateVReplicationWorkflowResponse - (*tabletmanagerdata.DeleteTableDataResponse)(nil), // 105: tabletmanagerdata.DeleteTableDataResponse - (*tabletmanagerdata.DeleteVReplicationWorkflowResponse)(nil), // 106: tabletmanagerdata.DeleteVReplicationWorkflowResponse - (*tabletmanagerdata.HasVReplicationWorkflowsResponse)(nil), // 107: tabletmanagerdata.HasVReplicationWorkflowsResponse - (*tabletmanagerdata.ReadVReplicationWorkflowResponse)(nil), // 108: tabletmanagerdata.ReadVReplicationWorkflowResponse - (*tabletmanagerdata.ReadVReplicationWorkflowsResponse)(nil), // 109: tabletmanagerdata.ReadVReplicationWorkflowsResponse - (*tabletmanagerdata.UpdateVReplicationWorkflowResponse)(nil), // 110: tabletmanagerdata.UpdateVReplicationWorkflowResponse - (*tabletmanagerdata.UpdateVReplicationWorkflowsResponse)(nil), // 111: tabletmanagerdata.UpdateVReplicationWorkflowsResponse - (*tabletmanagerdata.ValidateVReplicationPermissionsResponse)(nil), // 112: tabletmanagerdata.ValidateVReplicationPermissionsResponse - (*tabletmanagerdata.VReplicationExecResponse)(nil), // 113: tabletmanagerdata.VReplicationExecResponse - (*tabletmanagerdata.VReplicationWaitForPosResponse)(nil), // 114: tabletmanagerdata.VReplicationWaitForPosResponse - (*tabletmanagerdata.VDiffResponse)(nil), // 115: tabletmanagerdata.VDiffResponse - (*tabletmanagerdata.ResetReplicationResponse)(nil), // 116: tabletmanagerdata.ResetReplicationResponse - (*tabletmanagerdata.InitPrimaryResponse)(nil), // 117: tabletmanagerdata.InitPrimaryResponse - (*tabletmanagerdata.PopulateReparentJournalResponse)(nil), // 118: tabletmanagerdata.PopulateReparentJournalResponse - (*tabletmanagerdata.ReadReparentJournalInfoResponse)(nil), // 119: tabletmanagerdata.ReadReparentJournalInfoResponse - (*tabletmanagerdata.InitReplicaResponse)(nil), // 120: tabletmanagerdata.InitReplicaResponse - (*tabletmanagerdata.DemotePrimaryResponse)(nil), // 121: tabletmanagerdata.DemotePrimaryResponse - (*tabletmanagerdata.UndoDemotePrimaryResponse)(nil), // 122: tabletmanagerdata.UndoDemotePrimaryResponse - (*tabletmanagerdata.ReplicaWasPromotedResponse)(nil), // 123: tabletmanagerdata.ReplicaWasPromotedResponse - (*tabletmanagerdata.ResetReplicationParametersResponse)(nil), // 124: tabletmanagerdata.ResetReplicationParametersResponse - (*tabletmanagerdata.FullStatusResponse)(nil), // 125: tabletmanagerdata.FullStatusResponse - (*tabletmanagerdata.SetReplicationSourceResponse)(nil), // 126: tabletmanagerdata.SetReplicationSourceResponse - (*tabletmanagerdata.ReplicaWasRestartedResponse)(nil), // 127: tabletmanagerdata.ReplicaWasRestartedResponse - (*tabletmanagerdata.StopReplicationAndGetStatusResponse)(nil), // 128: tabletmanagerdata.StopReplicationAndGetStatusResponse - (*tabletmanagerdata.PromoteReplicaResponse)(nil), // 129: tabletmanagerdata.PromoteReplicaResponse - (*tabletmanagerdata.BackupResponse)(nil), // 130: tabletmanagerdata.BackupResponse - (*tabletmanagerdata.RestoreFromBackupResponse)(nil), // 131: tabletmanagerdata.RestoreFromBackupResponse - (*tabletmanagerdata.CheckThrottlerResponse)(nil), // 132: tabletmanagerdata.CheckThrottlerResponse - (*tabletmanagerdata.GetThrottlerStatusResponse)(nil), // 133: tabletmanagerdata.GetThrottlerStatusResponse + (*tabletmanagerdata.UpdateSequenceTablesRequest)(nil), // 48: tabletmanagerdata.UpdateSequenceTablesRequest + (*tabletmanagerdata.GetMaxValueForSequencesRequest)(nil), // 49: tabletmanagerdata.GetMaxValueForSequencesRequest + (*tabletmanagerdata.VDiffRequest)(nil), // 50: tabletmanagerdata.VDiffRequest + (*tabletmanagerdata.ResetReplicationRequest)(nil), // 51: tabletmanagerdata.ResetReplicationRequest + (*tabletmanagerdata.InitPrimaryRequest)(nil), // 52: tabletmanagerdata.InitPrimaryRequest + (*tabletmanagerdata.PopulateReparentJournalRequest)(nil), // 53: tabletmanagerdata.PopulateReparentJournalRequest + (*tabletmanagerdata.ReadReparentJournalInfoRequest)(nil), // 54: tabletmanagerdata.ReadReparentJournalInfoRequest + (*tabletmanagerdata.InitReplicaRequest)(nil), // 55: tabletmanagerdata.InitReplicaRequest + (*tabletmanagerdata.DemotePrimaryRequest)(nil), // 56: tabletmanagerdata.DemotePrimaryRequest + (*tabletmanagerdata.UndoDemotePrimaryRequest)(nil), // 57: tabletmanagerdata.UndoDemotePrimaryRequest + (*tabletmanagerdata.ReplicaWasPromotedRequest)(nil), // 58: tabletmanagerdata.ReplicaWasPromotedRequest + (*tabletmanagerdata.ResetReplicationParametersRequest)(nil), // 59: tabletmanagerdata.ResetReplicationParametersRequest + (*tabletmanagerdata.FullStatusRequest)(nil), // 60: tabletmanagerdata.FullStatusRequest + (*tabletmanagerdata.SetReplicationSourceRequest)(nil), // 61: tabletmanagerdata.SetReplicationSourceRequest + (*tabletmanagerdata.ReplicaWasRestartedRequest)(nil), // 62: tabletmanagerdata.ReplicaWasRestartedRequest + (*tabletmanagerdata.StopReplicationAndGetStatusRequest)(nil), // 63: tabletmanagerdata.StopReplicationAndGetStatusRequest + (*tabletmanagerdata.PromoteReplicaRequest)(nil), // 64: tabletmanagerdata.PromoteReplicaRequest + (*tabletmanagerdata.BackupRequest)(nil), // 65: tabletmanagerdata.BackupRequest + (*tabletmanagerdata.RestoreFromBackupRequest)(nil), // 66: tabletmanagerdata.RestoreFromBackupRequest + (*tabletmanagerdata.CheckThrottlerRequest)(nil), // 67: tabletmanagerdata.CheckThrottlerRequest + (*tabletmanagerdata.GetThrottlerStatusRequest)(nil), // 68: tabletmanagerdata.GetThrottlerStatusRequest + (*tabletmanagerdata.PingResponse)(nil), // 69: tabletmanagerdata.PingResponse + (*tabletmanagerdata.SleepResponse)(nil), // 70: tabletmanagerdata.SleepResponse + (*tabletmanagerdata.ExecuteHookResponse)(nil), // 71: tabletmanagerdata.ExecuteHookResponse + (*tabletmanagerdata.GetSchemaResponse)(nil), // 72: tabletmanagerdata.GetSchemaResponse + (*tabletmanagerdata.GetPermissionsResponse)(nil), // 73: tabletmanagerdata.GetPermissionsResponse + (*tabletmanagerdata.GetGlobalStatusVarsResponse)(nil), // 74: tabletmanagerdata.GetGlobalStatusVarsResponse + (*tabletmanagerdata.SetReadOnlyResponse)(nil), // 75: tabletmanagerdata.SetReadOnlyResponse + (*tabletmanagerdata.SetReadWriteResponse)(nil), // 76: tabletmanagerdata.SetReadWriteResponse + (*tabletmanagerdata.ChangeTagsResponse)(nil), // 77: tabletmanagerdata.ChangeTagsResponse + (*tabletmanagerdata.ChangeTypeResponse)(nil), // 78: tabletmanagerdata.ChangeTypeResponse + (*tabletmanagerdata.RefreshStateResponse)(nil), // 79: tabletmanagerdata.RefreshStateResponse + (*tabletmanagerdata.RunHealthCheckResponse)(nil), // 80: tabletmanagerdata.RunHealthCheckResponse + (*tabletmanagerdata.ReloadSchemaResponse)(nil), // 81: tabletmanagerdata.ReloadSchemaResponse + (*tabletmanagerdata.PreflightSchemaResponse)(nil), // 82: tabletmanagerdata.PreflightSchemaResponse + (*tabletmanagerdata.ApplySchemaResponse)(nil), // 83: tabletmanagerdata.ApplySchemaResponse + (*tabletmanagerdata.ResetSequencesResponse)(nil), // 84: tabletmanagerdata.ResetSequencesResponse + (*tabletmanagerdata.LockTablesResponse)(nil), // 85: tabletmanagerdata.LockTablesResponse + (*tabletmanagerdata.UnlockTablesResponse)(nil), // 86: tabletmanagerdata.UnlockTablesResponse + (*tabletmanagerdata.ExecuteQueryResponse)(nil), // 87: tabletmanagerdata.ExecuteQueryResponse + (*tabletmanagerdata.ExecuteFetchAsDbaResponse)(nil), // 88: tabletmanagerdata.ExecuteFetchAsDbaResponse + (*tabletmanagerdata.ExecuteMultiFetchAsDbaResponse)(nil), // 89: tabletmanagerdata.ExecuteMultiFetchAsDbaResponse + (*tabletmanagerdata.ExecuteFetchAsAllPrivsResponse)(nil), // 90: tabletmanagerdata.ExecuteFetchAsAllPrivsResponse + (*tabletmanagerdata.ExecuteFetchAsAppResponse)(nil), // 91: tabletmanagerdata.ExecuteFetchAsAppResponse + (*tabletmanagerdata.GetUnresolvedTransactionsResponse)(nil), // 92: tabletmanagerdata.GetUnresolvedTransactionsResponse + (*tabletmanagerdata.ReadTransactionResponse)(nil), // 93: tabletmanagerdata.ReadTransactionResponse + (*tabletmanagerdata.GetTransactionInfoResponse)(nil), // 94: tabletmanagerdata.GetTransactionInfoResponse + (*tabletmanagerdata.ConcludeTransactionResponse)(nil), // 95: tabletmanagerdata.ConcludeTransactionResponse + (*tabletmanagerdata.MysqlHostMetricsResponse)(nil), // 96: tabletmanagerdata.MysqlHostMetricsResponse + (*tabletmanagerdata.ReplicationStatusResponse)(nil), // 97: tabletmanagerdata.ReplicationStatusResponse + (*tabletmanagerdata.PrimaryStatusResponse)(nil), // 98: tabletmanagerdata.PrimaryStatusResponse + (*tabletmanagerdata.PrimaryPositionResponse)(nil), // 99: tabletmanagerdata.PrimaryPositionResponse + (*tabletmanagerdata.WaitForPositionResponse)(nil), // 100: tabletmanagerdata.WaitForPositionResponse + (*tabletmanagerdata.StopReplicationResponse)(nil), // 101: tabletmanagerdata.StopReplicationResponse + (*tabletmanagerdata.StopReplicationMinimumResponse)(nil), // 102: tabletmanagerdata.StopReplicationMinimumResponse + (*tabletmanagerdata.StartReplicationResponse)(nil), // 103: tabletmanagerdata.StartReplicationResponse + (*tabletmanagerdata.StartReplicationUntilAfterResponse)(nil), // 104: tabletmanagerdata.StartReplicationUntilAfterResponse + (*tabletmanagerdata.GetReplicasResponse)(nil), // 105: tabletmanagerdata.GetReplicasResponse + (*tabletmanagerdata.CreateVReplicationWorkflowResponse)(nil), // 106: tabletmanagerdata.CreateVReplicationWorkflowResponse + (*tabletmanagerdata.DeleteTableDataResponse)(nil), // 107: tabletmanagerdata.DeleteTableDataResponse + (*tabletmanagerdata.DeleteVReplicationWorkflowResponse)(nil), // 108: tabletmanagerdata.DeleteVReplicationWorkflowResponse + (*tabletmanagerdata.HasVReplicationWorkflowsResponse)(nil), // 109: tabletmanagerdata.HasVReplicationWorkflowsResponse + (*tabletmanagerdata.ReadVReplicationWorkflowResponse)(nil), // 110: tabletmanagerdata.ReadVReplicationWorkflowResponse + (*tabletmanagerdata.ReadVReplicationWorkflowsResponse)(nil), // 111: tabletmanagerdata.ReadVReplicationWorkflowsResponse + (*tabletmanagerdata.UpdateVReplicationWorkflowResponse)(nil), // 112: tabletmanagerdata.UpdateVReplicationWorkflowResponse + (*tabletmanagerdata.UpdateVReplicationWorkflowsResponse)(nil), // 113: tabletmanagerdata.UpdateVReplicationWorkflowsResponse + (*tabletmanagerdata.ValidateVReplicationPermissionsResponse)(nil), // 114: tabletmanagerdata.ValidateVReplicationPermissionsResponse + (*tabletmanagerdata.VReplicationExecResponse)(nil), // 115: tabletmanagerdata.VReplicationExecResponse + (*tabletmanagerdata.VReplicationWaitForPosResponse)(nil), // 116: tabletmanagerdata.VReplicationWaitForPosResponse + (*tabletmanagerdata.UpdateSequenceTablesResponse)(nil), // 117: tabletmanagerdata.UpdateSequenceTablesResponse + (*tabletmanagerdata.GetMaxValueForSequencesResponse)(nil), // 118: tabletmanagerdata.GetMaxValueForSequencesResponse + (*tabletmanagerdata.VDiffResponse)(nil), // 119: tabletmanagerdata.VDiffResponse + (*tabletmanagerdata.ResetReplicationResponse)(nil), // 120: tabletmanagerdata.ResetReplicationResponse + (*tabletmanagerdata.InitPrimaryResponse)(nil), // 121: tabletmanagerdata.InitPrimaryResponse + (*tabletmanagerdata.PopulateReparentJournalResponse)(nil), // 122: tabletmanagerdata.PopulateReparentJournalResponse + (*tabletmanagerdata.ReadReparentJournalInfoResponse)(nil), // 123: tabletmanagerdata.ReadReparentJournalInfoResponse + (*tabletmanagerdata.InitReplicaResponse)(nil), // 124: tabletmanagerdata.InitReplicaResponse + (*tabletmanagerdata.DemotePrimaryResponse)(nil), // 125: tabletmanagerdata.DemotePrimaryResponse + (*tabletmanagerdata.UndoDemotePrimaryResponse)(nil), // 126: tabletmanagerdata.UndoDemotePrimaryResponse + (*tabletmanagerdata.ReplicaWasPromotedResponse)(nil), // 127: tabletmanagerdata.ReplicaWasPromotedResponse + (*tabletmanagerdata.ResetReplicationParametersResponse)(nil), // 128: tabletmanagerdata.ResetReplicationParametersResponse + (*tabletmanagerdata.FullStatusResponse)(nil), // 129: tabletmanagerdata.FullStatusResponse + (*tabletmanagerdata.SetReplicationSourceResponse)(nil), // 130: tabletmanagerdata.SetReplicationSourceResponse + (*tabletmanagerdata.ReplicaWasRestartedResponse)(nil), // 131: tabletmanagerdata.ReplicaWasRestartedResponse + (*tabletmanagerdata.StopReplicationAndGetStatusResponse)(nil), // 132: tabletmanagerdata.StopReplicationAndGetStatusResponse + (*tabletmanagerdata.PromoteReplicaResponse)(nil), // 133: tabletmanagerdata.PromoteReplicaResponse + (*tabletmanagerdata.BackupResponse)(nil), // 134: tabletmanagerdata.BackupResponse + (*tabletmanagerdata.RestoreFromBackupResponse)(nil), // 135: tabletmanagerdata.RestoreFromBackupResponse + (*tabletmanagerdata.CheckThrottlerResponse)(nil), // 136: tabletmanagerdata.CheckThrottlerResponse + (*tabletmanagerdata.GetThrottlerStatusResponse)(nil), // 137: tabletmanagerdata.GetThrottlerStatusResponse } var file_tabletmanagerservice_proto_depIdxs = []int32{ 0, // 0: tabletmanagerservice.TabletManager.Ping:input_type -> tabletmanagerdata.PingRequest @@ -712,94 +308,98 @@ var file_tabletmanagerservice_proto_depIdxs = []int32{ 45, // 45: tabletmanagerservice.TabletManager.ValidateVReplicationPermissions:input_type -> tabletmanagerdata.ValidateVReplicationPermissionsRequest 46, // 46: tabletmanagerservice.TabletManager.VReplicationExec:input_type -> tabletmanagerdata.VReplicationExecRequest 47, // 47: tabletmanagerservice.TabletManager.VReplicationWaitForPos:input_type -> tabletmanagerdata.VReplicationWaitForPosRequest - 48, // 48: tabletmanagerservice.TabletManager.VDiff:input_type -> tabletmanagerdata.VDiffRequest - 49, // 49: tabletmanagerservice.TabletManager.ResetReplication:input_type -> tabletmanagerdata.ResetReplicationRequest - 50, // 50: tabletmanagerservice.TabletManager.InitPrimary:input_type -> tabletmanagerdata.InitPrimaryRequest - 51, // 51: tabletmanagerservice.TabletManager.PopulateReparentJournal:input_type -> tabletmanagerdata.PopulateReparentJournalRequest - 52, // 52: tabletmanagerservice.TabletManager.ReadReparentJournalInfo:input_type -> tabletmanagerdata.ReadReparentJournalInfoRequest - 53, // 53: tabletmanagerservice.TabletManager.InitReplica:input_type -> tabletmanagerdata.InitReplicaRequest - 54, // 54: tabletmanagerservice.TabletManager.DemotePrimary:input_type -> tabletmanagerdata.DemotePrimaryRequest - 55, // 55: tabletmanagerservice.TabletManager.UndoDemotePrimary:input_type -> tabletmanagerdata.UndoDemotePrimaryRequest - 56, // 56: tabletmanagerservice.TabletManager.ReplicaWasPromoted:input_type -> tabletmanagerdata.ReplicaWasPromotedRequest - 57, // 57: tabletmanagerservice.TabletManager.ResetReplicationParameters:input_type -> tabletmanagerdata.ResetReplicationParametersRequest - 58, // 58: tabletmanagerservice.TabletManager.FullStatus:input_type -> tabletmanagerdata.FullStatusRequest - 59, // 59: tabletmanagerservice.TabletManager.SetReplicationSource:input_type -> tabletmanagerdata.SetReplicationSourceRequest - 60, // 60: tabletmanagerservice.TabletManager.ReplicaWasRestarted:input_type -> tabletmanagerdata.ReplicaWasRestartedRequest - 61, // 61: tabletmanagerservice.TabletManager.StopReplicationAndGetStatus:input_type -> tabletmanagerdata.StopReplicationAndGetStatusRequest - 62, // 62: tabletmanagerservice.TabletManager.PromoteReplica:input_type -> tabletmanagerdata.PromoteReplicaRequest - 63, // 63: tabletmanagerservice.TabletManager.Backup:input_type -> tabletmanagerdata.BackupRequest - 64, // 64: tabletmanagerservice.TabletManager.RestoreFromBackup:input_type -> tabletmanagerdata.RestoreFromBackupRequest - 65, // 65: tabletmanagerservice.TabletManager.CheckThrottler:input_type -> tabletmanagerdata.CheckThrottlerRequest - 66, // 66: tabletmanagerservice.TabletManager.GetThrottlerStatus:input_type -> tabletmanagerdata.GetThrottlerStatusRequest - 67, // 67: tabletmanagerservice.TabletManager.Ping:output_type -> tabletmanagerdata.PingResponse - 68, // 68: tabletmanagerservice.TabletManager.Sleep:output_type -> tabletmanagerdata.SleepResponse - 69, // 69: tabletmanagerservice.TabletManager.ExecuteHook:output_type -> tabletmanagerdata.ExecuteHookResponse - 70, // 70: tabletmanagerservice.TabletManager.GetSchema:output_type -> tabletmanagerdata.GetSchemaResponse - 71, // 71: tabletmanagerservice.TabletManager.GetPermissions:output_type -> tabletmanagerdata.GetPermissionsResponse - 72, // 72: tabletmanagerservice.TabletManager.GetGlobalStatusVars:output_type -> tabletmanagerdata.GetGlobalStatusVarsResponse - 73, // 73: tabletmanagerservice.TabletManager.SetReadOnly:output_type -> tabletmanagerdata.SetReadOnlyResponse - 74, // 74: tabletmanagerservice.TabletManager.SetReadWrite:output_type -> tabletmanagerdata.SetReadWriteResponse - 75, // 75: tabletmanagerservice.TabletManager.ChangeTags:output_type -> tabletmanagerdata.ChangeTagsResponse - 76, // 76: tabletmanagerservice.TabletManager.ChangeType:output_type -> tabletmanagerdata.ChangeTypeResponse - 77, // 77: tabletmanagerservice.TabletManager.RefreshState:output_type -> tabletmanagerdata.RefreshStateResponse - 78, // 78: tabletmanagerservice.TabletManager.RunHealthCheck:output_type -> tabletmanagerdata.RunHealthCheckResponse - 79, // 79: tabletmanagerservice.TabletManager.ReloadSchema:output_type -> tabletmanagerdata.ReloadSchemaResponse - 80, // 80: tabletmanagerservice.TabletManager.PreflightSchema:output_type -> tabletmanagerdata.PreflightSchemaResponse - 81, // 81: tabletmanagerservice.TabletManager.ApplySchema:output_type -> tabletmanagerdata.ApplySchemaResponse - 82, // 82: tabletmanagerservice.TabletManager.ResetSequences:output_type -> tabletmanagerdata.ResetSequencesResponse - 83, // 83: tabletmanagerservice.TabletManager.LockTables:output_type -> tabletmanagerdata.LockTablesResponse - 84, // 84: tabletmanagerservice.TabletManager.UnlockTables:output_type -> tabletmanagerdata.UnlockTablesResponse - 85, // 85: tabletmanagerservice.TabletManager.ExecuteQuery:output_type -> tabletmanagerdata.ExecuteQueryResponse - 86, // 86: tabletmanagerservice.TabletManager.ExecuteFetchAsDba:output_type -> tabletmanagerdata.ExecuteFetchAsDbaResponse - 87, // 87: tabletmanagerservice.TabletManager.ExecuteMultiFetchAsDba:output_type -> tabletmanagerdata.ExecuteMultiFetchAsDbaResponse - 88, // 88: tabletmanagerservice.TabletManager.ExecuteFetchAsAllPrivs:output_type -> tabletmanagerdata.ExecuteFetchAsAllPrivsResponse - 89, // 89: tabletmanagerservice.TabletManager.ExecuteFetchAsApp:output_type -> tabletmanagerdata.ExecuteFetchAsAppResponse - 90, // 90: tabletmanagerservice.TabletManager.GetUnresolvedTransactions:output_type -> tabletmanagerdata.GetUnresolvedTransactionsResponse - 91, // 91: tabletmanagerservice.TabletManager.ReadTransaction:output_type -> tabletmanagerdata.ReadTransactionResponse - 92, // 92: tabletmanagerservice.TabletManager.GetTransactionInfo:output_type -> tabletmanagerdata.GetTransactionInfoResponse - 93, // 93: tabletmanagerservice.TabletManager.ConcludeTransaction:output_type -> tabletmanagerdata.ConcludeTransactionResponse - 94, // 94: tabletmanagerservice.TabletManager.MysqlHostMetrics:output_type -> tabletmanagerdata.MysqlHostMetricsResponse - 95, // 95: tabletmanagerservice.TabletManager.ReplicationStatus:output_type -> tabletmanagerdata.ReplicationStatusResponse - 96, // 96: tabletmanagerservice.TabletManager.PrimaryStatus:output_type -> tabletmanagerdata.PrimaryStatusResponse - 97, // 97: tabletmanagerservice.TabletManager.PrimaryPosition:output_type -> tabletmanagerdata.PrimaryPositionResponse - 98, // 98: tabletmanagerservice.TabletManager.WaitForPosition:output_type -> tabletmanagerdata.WaitForPositionResponse - 99, // 99: tabletmanagerservice.TabletManager.StopReplication:output_type -> tabletmanagerdata.StopReplicationResponse - 100, // 100: tabletmanagerservice.TabletManager.StopReplicationMinimum:output_type -> tabletmanagerdata.StopReplicationMinimumResponse - 101, // 101: tabletmanagerservice.TabletManager.StartReplication:output_type -> tabletmanagerdata.StartReplicationResponse - 102, // 102: tabletmanagerservice.TabletManager.StartReplicationUntilAfter:output_type -> tabletmanagerdata.StartReplicationUntilAfterResponse - 103, // 103: tabletmanagerservice.TabletManager.GetReplicas:output_type -> tabletmanagerdata.GetReplicasResponse - 104, // 104: tabletmanagerservice.TabletManager.CreateVReplicationWorkflow:output_type -> tabletmanagerdata.CreateVReplicationWorkflowResponse - 105, // 105: tabletmanagerservice.TabletManager.DeleteTableData:output_type -> tabletmanagerdata.DeleteTableDataResponse - 106, // 106: tabletmanagerservice.TabletManager.DeleteVReplicationWorkflow:output_type -> tabletmanagerdata.DeleteVReplicationWorkflowResponse - 107, // 107: tabletmanagerservice.TabletManager.HasVReplicationWorkflows:output_type -> tabletmanagerdata.HasVReplicationWorkflowsResponse - 108, // 108: tabletmanagerservice.TabletManager.ReadVReplicationWorkflow:output_type -> tabletmanagerdata.ReadVReplicationWorkflowResponse - 109, // 109: tabletmanagerservice.TabletManager.ReadVReplicationWorkflows:output_type -> tabletmanagerdata.ReadVReplicationWorkflowsResponse - 110, // 110: tabletmanagerservice.TabletManager.UpdateVReplicationWorkflow:output_type -> tabletmanagerdata.UpdateVReplicationWorkflowResponse - 111, // 111: tabletmanagerservice.TabletManager.UpdateVReplicationWorkflows:output_type -> tabletmanagerdata.UpdateVReplicationWorkflowsResponse - 112, // 112: tabletmanagerservice.TabletManager.ValidateVReplicationPermissions:output_type -> tabletmanagerdata.ValidateVReplicationPermissionsResponse - 113, // 113: tabletmanagerservice.TabletManager.VReplicationExec:output_type -> tabletmanagerdata.VReplicationExecResponse - 114, // 114: tabletmanagerservice.TabletManager.VReplicationWaitForPos:output_type -> tabletmanagerdata.VReplicationWaitForPosResponse - 115, // 115: tabletmanagerservice.TabletManager.VDiff:output_type -> tabletmanagerdata.VDiffResponse - 116, // 116: tabletmanagerservice.TabletManager.ResetReplication:output_type -> tabletmanagerdata.ResetReplicationResponse - 117, // 117: tabletmanagerservice.TabletManager.InitPrimary:output_type -> tabletmanagerdata.InitPrimaryResponse - 118, // 118: tabletmanagerservice.TabletManager.PopulateReparentJournal:output_type -> tabletmanagerdata.PopulateReparentJournalResponse - 119, // 119: tabletmanagerservice.TabletManager.ReadReparentJournalInfo:output_type -> tabletmanagerdata.ReadReparentJournalInfoResponse - 120, // 120: tabletmanagerservice.TabletManager.InitReplica:output_type -> tabletmanagerdata.InitReplicaResponse - 121, // 121: tabletmanagerservice.TabletManager.DemotePrimary:output_type -> tabletmanagerdata.DemotePrimaryResponse - 122, // 122: tabletmanagerservice.TabletManager.UndoDemotePrimary:output_type -> tabletmanagerdata.UndoDemotePrimaryResponse - 123, // 123: tabletmanagerservice.TabletManager.ReplicaWasPromoted:output_type -> tabletmanagerdata.ReplicaWasPromotedResponse - 124, // 124: tabletmanagerservice.TabletManager.ResetReplicationParameters:output_type -> tabletmanagerdata.ResetReplicationParametersResponse - 125, // 125: tabletmanagerservice.TabletManager.FullStatus:output_type -> tabletmanagerdata.FullStatusResponse - 126, // 126: tabletmanagerservice.TabletManager.SetReplicationSource:output_type -> tabletmanagerdata.SetReplicationSourceResponse - 127, // 127: tabletmanagerservice.TabletManager.ReplicaWasRestarted:output_type -> tabletmanagerdata.ReplicaWasRestartedResponse - 128, // 128: tabletmanagerservice.TabletManager.StopReplicationAndGetStatus:output_type -> tabletmanagerdata.StopReplicationAndGetStatusResponse - 129, // 129: tabletmanagerservice.TabletManager.PromoteReplica:output_type -> tabletmanagerdata.PromoteReplicaResponse - 130, // 130: tabletmanagerservice.TabletManager.Backup:output_type -> tabletmanagerdata.BackupResponse - 131, // 131: tabletmanagerservice.TabletManager.RestoreFromBackup:output_type -> tabletmanagerdata.RestoreFromBackupResponse - 132, // 132: tabletmanagerservice.TabletManager.CheckThrottler:output_type -> tabletmanagerdata.CheckThrottlerResponse - 133, // 133: tabletmanagerservice.TabletManager.GetThrottlerStatus:output_type -> tabletmanagerdata.GetThrottlerStatusResponse - 67, // [67:134] is the sub-list for method output_type - 0, // [0:67] is the sub-list for method input_type + 48, // 48: tabletmanagerservice.TabletManager.UpdateSequenceTables:input_type -> tabletmanagerdata.UpdateSequenceTablesRequest + 49, // 49: tabletmanagerservice.TabletManager.GetMaxValueForSequences:input_type -> tabletmanagerdata.GetMaxValueForSequencesRequest + 50, // 50: tabletmanagerservice.TabletManager.VDiff:input_type -> tabletmanagerdata.VDiffRequest + 51, // 51: tabletmanagerservice.TabletManager.ResetReplication:input_type -> tabletmanagerdata.ResetReplicationRequest + 52, // 52: tabletmanagerservice.TabletManager.InitPrimary:input_type -> tabletmanagerdata.InitPrimaryRequest + 53, // 53: tabletmanagerservice.TabletManager.PopulateReparentJournal:input_type -> tabletmanagerdata.PopulateReparentJournalRequest + 54, // 54: tabletmanagerservice.TabletManager.ReadReparentJournalInfo:input_type -> tabletmanagerdata.ReadReparentJournalInfoRequest + 55, // 55: tabletmanagerservice.TabletManager.InitReplica:input_type -> tabletmanagerdata.InitReplicaRequest + 56, // 56: tabletmanagerservice.TabletManager.DemotePrimary:input_type -> tabletmanagerdata.DemotePrimaryRequest + 57, // 57: tabletmanagerservice.TabletManager.UndoDemotePrimary:input_type -> tabletmanagerdata.UndoDemotePrimaryRequest + 58, // 58: tabletmanagerservice.TabletManager.ReplicaWasPromoted:input_type -> tabletmanagerdata.ReplicaWasPromotedRequest + 59, // 59: tabletmanagerservice.TabletManager.ResetReplicationParameters:input_type -> tabletmanagerdata.ResetReplicationParametersRequest + 60, // 60: tabletmanagerservice.TabletManager.FullStatus:input_type -> tabletmanagerdata.FullStatusRequest + 61, // 61: tabletmanagerservice.TabletManager.SetReplicationSource:input_type -> tabletmanagerdata.SetReplicationSourceRequest + 62, // 62: tabletmanagerservice.TabletManager.ReplicaWasRestarted:input_type -> tabletmanagerdata.ReplicaWasRestartedRequest + 63, // 63: tabletmanagerservice.TabletManager.StopReplicationAndGetStatus:input_type -> tabletmanagerdata.StopReplicationAndGetStatusRequest + 64, // 64: tabletmanagerservice.TabletManager.PromoteReplica:input_type -> tabletmanagerdata.PromoteReplicaRequest + 65, // 65: tabletmanagerservice.TabletManager.Backup:input_type -> tabletmanagerdata.BackupRequest + 66, // 66: tabletmanagerservice.TabletManager.RestoreFromBackup:input_type -> tabletmanagerdata.RestoreFromBackupRequest + 67, // 67: tabletmanagerservice.TabletManager.CheckThrottler:input_type -> tabletmanagerdata.CheckThrottlerRequest + 68, // 68: tabletmanagerservice.TabletManager.GetThrottlerStatus:input_type -> tabletmanagerdata.GetThrottlerStatusRequest + 69, // 69: tabletmanagerservice.TabletManager.Ping:output_type -> tabletmanagerdata.PingResponse + 70, // 70: tabletmanagerservice.TabletManager.Sleep:output_type -> tabletmanagerdata.SleepResponse + 71, // 71: tabletmanagerservice.TabletManager.ExecuteHook:output_type -> tabletmanagerdata.ExecuteHookResponse + 72, // 72: tabletmanagerservice.TabletManager.GetSchema:output_type -> tabletmanagerdata.GetSchemaResponse + 73, // 73: tabletmanagerservice.TabletManager.GetPermissions:output_type -> tabletmanagerdata.GetPermissionsResponse + 74, // 74: tabletmanagerservice.TabletManager.GetGlobalStatusVars:output_type -> tabletmanagerdata.GetGlobalStatusVarsResponse + 75, // 75: tabletmanagerservice.TabletManager.SetReadOnly:output_type -> tabletmanagerdata.SetReadOnlyResponse + 76, // 76: tabletmanagerservice.TabletManager.SetReadWrite:output_type -> tabletmanagerdata.SetReadWriteResponse + 77, // 77: tabletmanagerservice.TabletManager.ChangeTags:output_type -> tabletmanagerdata.ChangeTagsResponse + 78, // 78: tabletmanagerservice.TabletManager.ChangeType:output_type -> tabletmanagerdata.ChangeTypeResponse + 79, // 79: tabletmanagerservice.TabletManager.RefreshState:output_type -> tabletmanagerdata.RefreshStateResponse + 80, // 80: tabletmanagerservice.TabletManager.RunHealthCheck:output_type -> tabletmanagerdata.RunHealthCheckResponse + 81, // 81: tabletmanagerservice.TabletManager.ReloadSchema:output_type -> tabletmanagerdata.ReloadSchemaResponse + 82, // 82: tabletmanagerservice.TabletManager.PreflightSchema:output_type -> tabletmanagerdata.PreflightSchemaResponse + 83, // 83: tabletmanagerservice.TabletManager.ApplySchema:output_type -> tabletmanagerdata.ApplySchemaResponse + 84, // 84: tabletmanagerservice.TabletManager.ResetSequences:output_type -> tabletmanagerdata.ResetSequencesResponse + 85, // 85: tabletmanagerservice.TabletManager.LockTables:output_type -> tabletmanagerdata.LockTablesResponse + 86, // 86: tabletmanagerservice.TabletManager.UnlockTables:output_type -> tabletmanagerdata.UnlockTablesResponse + 87, // 87: tabletmanagerservice.TabletManager.ExecuteQuery:output_type -> tabletmanagerdata.ExecuteQueryResponse + 88, // 88: tabletmanagerservice.TabletManager.ExecuteFetchAsDba:output_type -> tabletmanagerdata.ExecuteFetchAsDbaResponse + 89, // 89: tabletmanagerservice.TabletManager.ExecuteMultiFetchAsDba:output_type -> tabletmanagerdata.ExecuteMultiFetchAsDbaResponse + 90, // 90: tabletmanagerservice.TabletManager.ExecuteFetchAsAllPrivs:output_type -> tabletmanagerdata.ExecuteFetchAsAllPrivsResponse + 91, // 91: tabletmanagerservice.TabletManager.ExecuteFetchAsApp:output_type -> tabletmanagerdata.ExecuteFetchAsAppResponse + 92, // 92: tabletmanagerservice.TabletManager.GetUnresolvedTransactions:output_type -> tabletmanagerdata.GetUnresolvedTransactionsResponse + 93, // 93: tabletmanagerservice.TabletManager.ReadTransaction:output_type -> tabletmanagerdata.ReadTransactionResponse + 94, // 94: tabletmanagerservice.TabletManager.GetTransactionInfo:output_type -> tabletmanagerdata.GetTransactionInfoResponse + 95, // 95: tabletmanagerservice.TabletManager.ConcludeTransaction:output_type -> tabletmanagerdata.ConcludeTransactionResponse + 96, // 96: tabletmanagerservice.TabletManager.MysqlHostMetrics:output_type -> tabletmanagerdata.MysqlHostMetricsResponse + 97, // 97: tabletmanagerservice.TabletManager.ReplicationStatus:output_type -> tabletmanagerdata.ReplicationStatusResponse + 98, // 98: tabletmanagerservice.TabletManager.PrimaryStatus:output_type -> tabletmanagerdata.PrimaryStatusResponse + 99, // 99: tabletmanagerservice.TabletManager.PrimaryPosition:output_type -> tabletmanagerdata.PrimaryPositionResponse + 100, // 100: tabletmanagerservice.TabletManager.WaitForPosition:output_type -> tabletmanagerdata.WaitForPositionResponse + 101, // 101: tabletmanagerservice.TabletManager.StopReplication:output_type -> tabletmanagerdata.StopReplicationResponse + 102, // 102: tabletmanagerservice.TabletManager.StopReplicationMinimum:output_type -> tabletmanagerdata.StopReplicationMinimumResponse + 103, // 103: tabletmanagerservice.TabletManager.StartReplication:output_type -> tabletmanagerdata.StartReplicationResponse + 104, // 104: tabletmanagerservice.TabletManager.StartReplicationUntilAfter:output_type -> tabletmanagerdata.StartReplicationUntilAfterResponse + 105, // 105: tabletmanagerservice.TabletManager.GetReplicas:output_type -> tabletmanagerdata.GetReplicasResponse + 106, // 106: tabletmanagerservice.TabletManager.CreateVReplicationWorkflow:output_type -> tabletmanagerdata.CreateVReplicationWorkflowResponse + 107, // 107: tabletmanagerservice.TabletManager.DeleteTableData:output_type -> tabletmanagerdata.DeleteTableDataResponse + 108, // 108: tabletmanagerservice.TabletManager.DeleteVReplicationWorkflow:output_type -> tabletmanagerdata.DeleteVReplicationWorkflowResponse + 109, // 109: tabletmanagerservice.TabletManager.HasVReplicationWorkflows:output_type -> tabletmanagerdata.HasVReplicationWorkflowsResponse + 110, // 110: tabletmanagerservice.TabletManager.ReadVReplicationWorkflow:output_type -> tabletmanagerdata.ReadVReplicationWorkflowResponse + 111, // 111: tabletmanagerservice.TabletManager.ReadVReplicationWorkflows:output_type -> tabletmanagerdata.ReadVReplicationWorkflowsResponse + 112, // 112: tabletmanagerservice.TabletManager.UpdateVReplicationWorkflow:output_type -> tabletmanagerdata.UpdateVReplicationWorkflowResponse + 113, // 113: tabletmanagerservice.TabletManager.UpdateVReplicationWorkflows:output_type -> tabletmanagerdata.UpdateVReplicationWorkflowsResponse + 114, // 114: tabletmanagerservice.TabletManager.ValidateVReplicationPermissions:output_type -> tabletmanagerdata.ValidateVReplicationPermissionsResponse + 115, // 115: tabletmanagerservice.TabletManager.VReplicationExec:output_type -> tabletmanagerdata.VReplicationExecResponse + 116, // 116: tabletmanagerservice.TabletManager.VReplicationWaitForPos:output_type -> tabletmanagerdata.VReplicationWaitForPosResponse + 117, // 117: tabletmanagerservice.TabletManager.UpdateSequenceTables:output_type -> tabletmanagerdata.UpdateSequenceTablesResponse + 118, // 118: tabletmanagerservice.TabletManager.GetMaxValueForSequences:output_type -> tabletmanagerdata.GetMaxValueForSequencesResponse + 119, // 119: tabletmanagerservice.TabletManager.VDiff:output_type -> tabletmanagerdata.VDiffResponse + 120, // 120: tabletmanagerservice.TabletManager.ResetReplication:output_type -> tabletmanagerdata.ResetReplicationResponse + 121, // 121: tabletmanagerservice.TabletManager.InitPrimary:output_type -> tabletmanagerdata.InitPrimaryResponse + 122, // 122: tabletmanagerservice.TabletManager.PopulateReparentJournal:output_type -> tabletmanagerdata.PopulateReparentJournalResponse + 123, // 123: tabletmanagerservice.TabletManager.ReadReparentJournalInfo:output_type -> tabletmanagerdata.ReadReparentJournalInfoResponse + 124, // 124: tabletmanagerservice.TabletManager.InitReplica:output_type -> tabletmanagerdata.InitReplicaResponse + 125, // 125: tabletmanagerservice.TabletManager.DemotePrimary:output_type -> tabletmanagerdata.DemotePrimaryResponse + 126, // 126: tabletmanagerservice.TabletManager.UndoDemotePrimary:output_type -> tabletmanagerdata.UndoDemotePrimaryResponse + 127, // 127: tabletmanagerservice.TabletManager.ReplicaWasPromoted:output_type -> tabletmanagerdata.ReplicaWasPromotedResponse + 128, // 128: tabletmanagerservice.TabletManager.ResetReplicationParameters:output_type -> tabletmanagerdata.ResetReplicationParametersResponse + 129, // 129: tabletmanagerservice.TabletManager.FullStatus:output_type -> tabletmanagerdata.FullStatusResponse + 130, // 130: tabletmanagerservice.TabletManager.SetReplicationSource:output_type -> tabletmanagerdata.SetReplicationSourceResponse + 131, // 131: tabletmanagerservice.TabletManager.ReplicaWasRestarted:output_type -> tabletmanagerdata.ReplicaWasRestartedResponse + 132, // 132: tabletmanagerservice.TabletManager.StopReplicationAndGetStatus:output_type -> tabletmanagerdata.StopReplicationAndGetStatusResponse + 133, // 133: tabletmanagerservice.TabletManager.PromoteReplica:output_type -> tabletmanagerdata.PromoteReplicaResponse + 134, // 134: tabletmanagerservice.TabletManager.Backup:output_type -> tabletmanagerdata.BackupResponse + 135, // 135: tabletmanagerservice.TabletManager.RestoreFromBackup:output_type -> tabletmanagerdata.RestoreFromBackupResponse + 136, // 136: tabletmanagerservice.TabletManager.CheckThrottler:output_type -> tabletmanagerdata.CheckThrottlerResponse + 137, // 137: tabletmanagerservice.TabletManager.GetThrottlerStatus:output_type -> tabletmanagerdata.GetThrottlerStatusResponse + 69, // [69:138] is the sub-list for method output_type + 0, // [0:69] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name 0, // [0:0] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name diff --git a/go/vt/proto/tabletmanagerservice/tabletmanagerservice_grpc.pb.go b/go/vt/proto/tabletmanagerservice/tabletmanagerservice_grpc.pb.go index 53acff14ea5..74556cd7824 100644 --- a/go/vt/proto/tabletmanagerservice/tabletmanagerservice_grpc.pb.go +++ b/go/vt/proto/tabletmanagerservice/tabletmanagerservice_grpc.pb.go @@ -92,6 +92,8 @@ type TabletManagerClient interface { ValidateVReplicationPermissions(ctx context.Context, in *tabletmanagerdata.ValidateVReplicationPermissionsRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ValidateVReplicationPermissionsResponse, error) VReplicationExec(ctx context.Context, in *tabletmanagerdata.VReplicationExecRequest, opts ...grpc.CallOption) (*tabletmanagerdata.VReplicationExecResponse, error) VReplicationWaitForPos(ctx context.Context, in *tabletmanagerdata.VReplicationWaitForPosRequest, opts ...grpc.CallOption) (*tabletmanagerdata.VReplicationWaitForPosResponse, error) + UpdateSequenceTables(ctx context.Context, in *tabletmanagerdata.UpdateSequenceTablesRequest, opts ...grpc.CallOption) (*tabletmanagerdata.UpdateSequenceTablesResponse, error) + GetMaxValueForSequences(ctx context.Context, in *tabletmanagerdata.GetMaxValueForSequencesRequest, opts ...grpc.CallOption) (*tabletmanagerdata.GetMaxValueForSequencesResponse, error) // VDiff API VDiff(ctx context.Context, in *tabletmanagerdata.VDiffRequest, opts ...grpc.CallOption) (*tabletmanagerdata.VDiffResponse, error) // ResetReplication makes the target not replicating @@ -573,6 +575,24 @@ func (c *tabletManagerClient) VReplicationWaitForPos(ctx context.Context, in *ta return out, nil } +func (c *tabletManagerClient) UpdateSequenceTables(ctx context.Context, in *tabletmanagerdata.UpdateSequenceTablesRequest, opts ...grpc.CallOption) (*tabletmanagerdata.UpdateSequenceTablesResponse, error) { + out := new(tabletmanagerdata.UpdateSequenceTablesResponse) + err := c.cc.Invoke(ctx, "/tabletmanagerservice.TabletManager/UpdateSequenceTables", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *tabletManagerClient) GetMaxValueForSequences(ctx context.Context, in *tabletmanagerdata.GetMaxValueForSequencesRequest, opts ...grpc.CallOption) (*tabletmanagerdata.GetMaxValueForSequencesResponse, error) { + out := new(tabletmanagerdata.GetMaxValueForSequencesResponse) + err := c.cc.Invoke(ctx, "/tabletmanagerservice.TabletManager/GetMaxValueForSequences", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *tabletManagerClient) VDiff(ctx context.Context, in *tabletmanagerdata.VDiffRequest, opts ...grpc.CallOption) (*tabletmanagerdata.VDiffResponse, error) { out := new(tabletmanagerdata.VDiffResponse) err := c.cc.Invoke(ctx, "/tabletmanagerservice.TabletManager/VDiff", in, out, opts...) @@ -863,6 +883,8 @@ type TabletManagerServer interface { ValidateVReplicationPermissions(context.Context, *tabletmanagerdata.ValidateVReplicationPermissionsRequest) (*tabletmanagerdata.ValidateVReplicationPermissionsResponse, error) VReplicationExec(context.Context, *tabletmanagerdata.VReplicationExecRequest) (*tabletmanagerdata.VReplicationExecResponse, error) VReplicationWaitForPos(context.Context, *tabletmanagerdata.VReplicationWaitForPosRequest) (*tabletmanagerdata.VReplicationWaitForPosResponse, error) + UpdateSequenceTables(context.Context, *tabletmanagerdata.UpdateSequenceTablesRequest) (*tabletmanagerdata.UpdateSequenceTablesResponse, error) + GetMaxValueForSequences(context.Context, *tabletmanagerdata.GetMaxValueForSequencesRequest) (*tabletmanagerdata.GetMaxValueForSequencesResponse, error) // VDiff API VDiff(context.Context, *tabletmanagerdata.VDiffRequest) (*tabletmanagerdata.VDiffResponse, error) // ResetReplication makes the target not replicating @@ -1053,6 +1075,12 @@ func (UnimplementedTabletManagerServer) VReplicationExec(context.Context, *table func (UnimplementedTabletManagerServer) VReplicationWaitForPos(context.Context, *tabletmanagerdata.VReplicationWaitForPosRequest) (*tabletmanagerdata.VReplicationWaitForPosResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method VReplicationWaitForPos not implemented") } +func (UnimplementedTabletManagerServer) UpdateSequenceTables(context.Context, *tabletmanagerdata.UpdateSequenceTablesRequest) (*tabletmanagerdata.UpdateSequenceTablesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateSequenceTables not implemented") +} +func (UnimplementedTabletManagerServer) GetMaxValueForSequences(context.Context, *tabletmanagerdata.GetMaxValueForSequencesRequest) (*tabletmanagerdata.GetMaxValueForSequencesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetMaxValueForSequences not implemented") +} func (UnimplementedTabletManagerServer) VDiff(context.Context, *tabletmanagerdata.VDiffRequest) (*tabletmanagerdata.VDiffResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method VDiff not implemented") } @@ -1987,6 +2015,42 @@ func _TabletManager_VReplicationWaitForPos_Handler(srv interface{}, ctx context. return interceptor(ctx, in, info, handler) } +func _TabletManager_UpdateSequenceTables_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(tabletmanagerdata.UpdateSequenceTablesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TabletManagerServer).UpdateSequenceTables(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/tabletmanagerservice.TabletManager/UpdateSequenceTables", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TabletManagerServer).UpdateSequenceTables(ctx, req.(*tabletmanagerdata.UpdateSequenceTablesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TabletManager_GetMaxValueForSequences_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(tabletmanagerdata.GetMaxValueForSequencesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TabletManagerServer).GetMaxValueForSequences(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/tabletmanagerservice.TabletManager/GetMaxValueForSequences", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TabletManagerServer).GetMaxValueForSequences(ctx, req.(*tabletmanagerdata.GetMaxValueForSequencesRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _TabletManager_VDiff_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(tabletmanagerdata.VDiffRequest) if err := dec(in); err != nil { @@ -2534,6 +2598,14 @@ var TabletManager_ServiceDesc = grpc.ServiceDesc{ MethodName: "VReplicationWaitForPos", Handler: _TabletManager_VReplicationWaitForPos_Handler, }, + { + MethodName: "UpdateSequenceTables", + Handler: _TabletManager_UpdateSequenceTables_Handler, + }, + { + MethodName: "GetMaxValueForSequences", + Handler: _TabletManager_GetMaxValueForSequences_Handler, + }, { MethodName: "VDiff", Handler: _TabletManager_VDiff_Handler, diff --git a/go/vt/proto/throttlerdata/throttlerdata.pb.go b/go/vt/proto/throttlerdata/throttlerdata.pb.go index 2664d13f516..67339e24151 100644 --- a/go/vt/proto/throttlerdata/throttlerdata.pb.go +++ b/go/vt/proto/throttlerdata/throttlerdata.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v3.21.3 // source: throttlerdata.proto @@ -728,121 +728,53 @@ func (x *ResetConfigurationResponse) GetNames() []string { var File_throttlerdata_proto protoreflect.FileDescriptor -var file_throttlerdata_proto_rawDesc = string([]byte{ - 0x0a, 0x13, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0d, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x22, 0x11, 0x0a, 0x0f, 0x4d, 0x61, 0x78, 0x52, 0x61, 0x74, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x8e, 0x01, 0x0a, 0x10, 0x4d, 0x61, 0x78, 0x52, - 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x05, - 0x72, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x74, 0x68, - 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x61, 0x78, 0x52, - 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x61, 0x74, - 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x72, 0x61, 0x74, 0x65, 0x73, 0x1a, 0x38, - 0x0a, 0x0a, 0x52, 0x61, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x27, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x4d, - 0x61, 0x78, 0x52, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x72, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x72, 0x61, 0x74, - 0x65, 0x22, 0x2a, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x4d, 0x61, 0x78, 0x52, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0xaa, 0x06, - 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x3b, 0x0a, 0x1a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x17, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, 0x53, 0x65, 0x63, 0x12, 0x35, 0x0a, 0x17, - 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6c, 0x61, 0x67, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x6d, - 0x61, 0x78, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, - 0x53, 0x65, 0x63, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x72, - 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x69, 0x6e, 0x69, 0x74, 0x69, - 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x6e, - 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x6d, 0x61, - 0x78, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x65, 0x6d, 0x65, - 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x64, 0x65, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x11, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, - 0x44, 0x65, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x22, 0x6d, 0x69, 0x6e, 0x5f, - 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, - 0x5f, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x1e, 0x6d, 0x69, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, - 0x73, 0x53, 0x65, 0x63, 0x12, 0x4a, 0x0a, 0x22, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x5f, 0x69, 0x6e, 0x63, - 0x72, 0x65, 0x61, 0x73, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x1e, 0x6d, 0x61, 0x78, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x65, 0x74, - 0x77, 0x65, 0x65, 0x6e, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x73, 0x53, 0x65, 0x63, - 0x12, 0x4a, 0x0a, 0x22, 0x6d, 0x69, 0x6e, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x72, 0x65, 0x61, 0x73, - 0x65, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1e, 0x6d, 0x69, - 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, - 0x44, 0x65, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x73, 0x53, 0x65, 0x63, 0x12, 0x39, 0x0a, 0x19, - 0x73, 0x70, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x6c, 0x6f, 0x67, 0x5f, 0x61, - 0x63, 0x72, 0x6f, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x16, 0x73, 0x70, 0x72, 0x65, 0x61, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x6c, 0x6f, 0x67, 0x41, 0x63, - 0x72, 0x6f, 0x73, 0x73, 0x53, 0x65, 0x63, 0x12, 0x39, 0x0a, 0x19, 0x69, 0x67, 0x6e, 0x6f, 0x72, - 0x65, 0x5f, 0x6e, 0x5f, 0x73, 0x6c, 0x6f, 0x77, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x69, 0x67, 0x6e, 0x6f, - 0x72, 0x65, 0x4e, 0x53, 0x6c, 0x6f, 0x77, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x73, 0x12, 0x37, 0x0a, 0x18, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x5f, 0x73, - 0x6c, 0x6f, 0x77, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x73, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4e, 0x53, 0x6c, 0x6f, - 0x77, 0x65, 0x73, 0x74, 0x52, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x73, 0x12, 0x32, 0x0a, 0x16, 0x61, - 0x67, 0x65, 0x5f, 0x62, 0x61, 0x64, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, - 0x72, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x61, 0x67, 0x65, - 0x42, 0x61, 0x64, 0x52, 0x61, 0x74, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x53, 0x65, 0x63, 0x12, - 0x2a, 0x0a, 0x11, 0x62, 0x61, 0x64, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x63, 0x72, - 0x65, 0x61, 0x73, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x62, 0x61, 0x64, 0x52, - 0x61, 0x74, 0x65, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x6d, - 0x61, 0x78, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x61, 0x63, 0x68, - 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x01, - 0x52, 0x18, 0x6d, 0x61, 0x78, 0x52, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x61, 0x63, - 0x68, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x40, 0x0a, 0x17, 0x47, 0x65, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, - 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, - 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xe0, 0x01, 0x0a, - 0x18, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x3b, 0x2e, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x5f, - 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, - 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0xb1, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, - 0x0a, 0x0e, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, - 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x74, - 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x70, - 0x79, 0x5f, 0x7a, 0x65, 0x72, 0x6f, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0e, 0x63, 0x6f, 0x70, 0x79, 0x5a, 0x65, 0x72, 0x6f, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x22, 0x33, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x42, 0x0a, 0x19, 0x52, 0x65, 0x73, 0x65, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, - 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, - 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x32, 0x0a, 0x1a, - 0x52, 0x65, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x42, 0x2c, 0x5a, 0x2a, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, - 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_throttlerdata_proto_rawDesc = "" + + "\n" + + "\x13throttlerdata.proto\x12\rthrottlerdata\"\x11\n" + + "\x0fMaxRatesRequest\"\x8e\x01\n" + + "\x10MaxRatesResponse\x12@\n" + + "\x05rates\x18\x01 \x03(\v2*.throttlerdata.MaxRatesResponse.RatesEntryR\x05rates\x1a8\n" + + "\n" + + "RatesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\x03R\x05value:\x028\x01\"'\n" + + "\x11SetMaxRateRequest\x12\x12\n" + + "\x04rate\x18\x01 \x01(\x03R\x04rate\"*\n" + + "\x12SetMaxRateResponse\x12\x14\n" + + "\x05names\x18\x01 \x03(\tR\x05names\"\xaa\x06\n" + + "\rConfiguration\x12;\n" + + "\x1atarget_replication_lag_sec\x18\x01 \x01(\x03R\x17targetReplicationLagSec\x125\n" + + "\x17max_replication_lag_sec\x18\x02 \x01(\x03R\x14maxReplicationLagSec\x12!\n" + + "\finitial_rate\x18\x03 \x01(\x03R\vinitialRate\x12!\n" + + "\fmax_increase\x18\x04 \x01(\x01R\vmaxIncrease\x12-\n" + + "\x12emergency_decrease\x18\x05 \x01(\x01R\x11emergencyDecrease\x12J\n" + + "\"min_duration_between_increases_sec\x18\x06 \x01(\x03R\x1eminDurationBetweenIncreasesSec\x12J\n" + + "\"max_duration_between_increases_sec\x18\a \x01(\x03R\x1emaxDurationBetweenIncreasesSec\x12J\n" + + "\"min_duration_between_decreases_sec\x18\b \x01(\x03R\x1eminDurationBetweenDecreasesSec\x129\n" + + "\x19spread_backlog_across_sec\x18\t \x01(\x03R\x16spreadBacklogAcrossSec\x129\n" + + "\x19ignore_n_slowest_replicas\x18\n" + + " \x01(\x05R\x16ignoreNSlowestReplicas\x127\n" + + "\x18ignore_n_slowest_rdonlys\x18\v \x01(\x05R\x15ignoreNSlowestRdonlys\x122\n" + + "\x16age_bad_rate_after_sec\x18\f \x01(\x03R\x12ageBadRateAfterSec\x12*\n" + + "\x11bad_rate_increase\x18\r \x01(\x01R\x0fbadRateIncrease\x12=\n" + + "\x1bmax_rate_approach_threshold\x18\x0e \x01(\x01R\x18maxRateApproachThreshold\"@\n" + + "\x17GetConfigurationRequest\x12%\n" + + "\x0ethrottler_name\x18\x01 \x01(\tR\rthrottlerName\"\xe0\x01\n" + + "\x18GetConfigurationResponse\x12c\n" + + "\x0econfigurations\x18\x01 \x03(\v2;.throttlerdata.GetConfigurationResponse.ConfigurationsEntryR\x0econfigurations\x1a_\n" + + "\x13ConfigurationsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x122\n" + + "\x05value\x18\x02 \x01(\v2\x1c.throttlerdata.ConfigurationR\x05value:\x028\x01\"\xb1\x01\n" + + "\x1aUpdateConfigurationRequest\x12%\n" + + "\x0ethrottler_name\x18\x01 \x01(\tR\rthrottlerName\x12B\n" + + "\rconfiguration\x18\x02 \x01(\v2\x1c.throttlerdata.ConfigurationR\rconfiguration\x12(\n" + + "\x10copy_zero_values\x18\x03 \x01(\bR\x0ecopyZeroValues\"3\n" + + "\x1bUpdateConfigurationResponse\x12\x14\n" + + "\x05names\x18\x01 \x03(\tR\x05names\"B\n" + + "\x19ResetConfigurationRequest\x12%\n" + + "\x0ethrottler_name\x18\x01 \x01(\tR\rthrottlerName\"2\n" + + "\x1aResetConfigurationResponse\x12\x14\n" + + "\x05names\x18\x01 \x03(\tR\x05namesB,Z*vitess.io/vitess/go/vt/proto/throttlerdatab\x06proto3" var ( file_throttlerdata_proto_rawDescOnce sync.Once diff --git a/go/vt/proto/throttlerservice/throttlerservice.pb.go b/go/vt/proto/throttlerservice/throttlerservice.pb.go index 13de8696cd4..190730f3a8c 100644 --- a/go/vt/proto/throttlerservice/throttlerservice.pb.go +++ b/go/vt/proto/throttlerservice/throttlerservice.pb.go @@ -18,7 +18,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v3.21.3 // source: throttlerservice.proto @@ -41,47 +41,16 @@ const ( var File_throttlerservice_proto protoreflect.FileDescriptor -var file_throttlerservice_proto_rawDesc = string([]byte{ - 0x0a, 0x16, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, - 0x6c, 0x65, 0x72, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x1a, 0x13, 0x74, 0x68, 0x72, 0x6f, - 0x74, 0x74, 0x6c, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, - 0xf3, 0x03, 0x0a, 0x09, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x12, 0x4d, 0x0a, - 0x08, 0x4d, 0x61, 0x78, 0x52, 0x61, 0x74, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x74, 0x68, 0x72, 0x6f, - 0x74, 0x74, 0x6c, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x61, 0x78, 0x52, 0x61, 0x74, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x74, 0x68, 0x72, 0x6f, - 0x74, 0x74, 0x6c, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x61, 0x78, 0x52, 0x61, 0x74, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x0a, - 0x53, 0x65, 0x74, 0x4d, 0x61, 0x78, 0x52, 0x61, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x74, 0x68, 0x72, - 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x61, - 0x78, 0x52, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x74, - 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74, - 0x4d, 0x61, 0x78, 0x52, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x65, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, - 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, - 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6e, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x29, 0x2e, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x74, 0x68, 0x72, - 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6b, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x65, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, - 0x2e, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, - 0x65, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x74, 0x68, 0x72, 0x6f, 0x74, - 0x74, 0x6c, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x2f, 0x5a, 0x2d, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, - 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_throttlerservice_proto_rawDesc = "" + + "\n" + + "\x16throttlerservice.proto\x12\x10throttlerservice\x1a\x13throttlerdata.proto2\xf3\x03\n" + + "\tThrottler\x12M\n" + + "\bMaxRates\x12\x1e.throttlerdata.MaxRatesRequest\x1a\x1f.throttlerdata.MaxRatesResponse\"\x00\x12S\n" + + "\n" + + "SetMaxRate\x12 .throttlerdata.SetMaxRateRequest\x1a!.throttlerdata.SetMaxRateResponse\"\x00\x12e\n" + + "\x10GetConfiguration\x12&.throttlerdata.GetConfigurationRequest\x1a'.throttlerdata.GetConfigurationResponse\"\x00\x12n\n" + + "\x13UpdateConfiguration\x12).throttlerdata.UpdateConfigurationRequest\x1a*.throttlerdata.UpdateConfigurationResponse\"\x00\x12k\n" + + "\x12ResetConfiguration\x12(.throttlerdata.ResetConfigurationRequest\x1a).throttlerdata.ResetConfigurationResponse\"\x00B/Z-vitess.io/vitess/go/vt/proto/throttlerserviceb\x06proto3" var file_throttlerservice_proto_goTypes = []any{ (*throttlerdata.MaxRatesRequest)(nil), // 0: throttlerdata.MaxRatesRequest diff --git a/go/vt/proto/topodata/topodata.pb.go b/go/vt/proto/topodata/topodata.pb.go index fef052c2da2..890fba90b1a 100644 --- a/go/vt/proto/topodata/topodata.pb.go +++ b/go/vt/proto/topodata/topodata.pb.go @@ -20,7 +20,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v3.21.3 // source: topodata.proto @@ -1764,283 +1764,154 @@ func (x *SrvKeyspace_KeyspacePartition) GetShardTabletControls() []*ShardTabletC var File_topodata_proto protoreflect.FileDescriptor -var file_topodata_proto_rawDesc = string([]byte{ - 0x0a, 0x0e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x08, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x0c, 0x76, 0x74, 0x74, 0x69, - 0x6d, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x32, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x52, - 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0x33, 0x0a, 0x0b, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, - 0x65, 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x12, - 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x75, 0x69, - 0x64, 0x22, 0xba, 0x05, 0x0a, 0x06, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x2b, 0x0a, 0x05, - 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, - 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, - 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, - 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, - 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x08, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x6d, 0x61, - 0x70, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x4d, 0x61, - 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x61, 0x70, 0x12, - 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, - 0x68, 0x61, 0x72, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, - 0x64, 0x12, 0x2f, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x4b, 0x65, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x52, 0x61, 0x6e, - 0x67, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x10, - 0x64, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x4f, 0x76, - 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x0a, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x5f, - 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, - 0x0a, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x43, 0x0a, 0x17, - 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x74, 0x65, 0x72, 0x6d, 0x5f, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, - 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x14, 0x70, 0x72, 0x69, - 0x6d, 0x61, 0x72, 0x79, 0x54, 0x65, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, - 0x65, 0x12, 0x34, 0x0a, 0x16, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x63, 0x6f, 0x6e, - 0x6e, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x14, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x43, 0x6f, - 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x3a, 0x0a, 0x0c, 0x50, 0x6f, 0x72, 0x74, 0x4d, - 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x37, 0x0a, 0x09, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x03, - 0x10, 0x04, 0x4a, 0x04, 0x08, 0x0b, 0x10, 0x0c, 0x4a, 0x04, 0x08, 0x0f, 0x10, 0x10, 0x22, 0xbc, - 0x05, 0x0a, 0x05, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x3a, 0x0a, 0x0d, 0x70, 0x72, 0x69, 0x6d, - 0x61, 0x72, 0x79, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0c, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x41, - 0x6c, 0x69, 0x61, 0x73, 0x12, 0x43, 0x0a, 0x17, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, - 0x74, 0x65, 0x72, 0x6d, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x52, 0x14, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x54, 0x65, 0x72, 0x6d, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x6b, 0x65, 0x79, - 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, - 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, - 0x52, 0x08, 0x6b, 0x65, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x40, 0x0a, 0x0d, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, - 0x72, 0x64, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x0c, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x46, 0x0a, 0x0f, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x73, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, - 0x72, 0x6f, 0x6c, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x69, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, - 0x72, 0x79, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x10, 0x69, 0x73, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x6e, 0x67, 0x1a, 0x9a, 0x01, 0x0a, 0x0b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, - 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x03, 0x75, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x2f, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x5f, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x6f, 0x70, 0x6f, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x08, 0x6b, - 0x65, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x1a, - 0x9f, 0x01, 0x0a, 0x0d, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x12, 0x35, 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x23, - 0x0a, 0x0d, 0x64, 0x65, 0x6e, 0x69, 0x65, 0x64, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x6e, 0x69, 0x65, 0x64, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x72, 0x6f, 0x7a, 0x65, 0x6e, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x06, 0x66, 0x72, 0x6f, 0x7a, 0x65, 0x6e, 0x4a, 0x04, 0x08, 0x03, 0x10, - 0x04, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0xd2, 0x02, - 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x3b, 0x0a, 0x0d, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x16, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x6b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x61, 0x73, 0x65, 0x5f, - 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x62, 0x61, 0x73, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x31, 0x0a, 0x0d, - 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x52, 0x0c, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, - 0x2b, 0x0a, 0x11, 0x64, 0x75, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x64, 0x75, 0x72, 0x61, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x44, 0x0a, 0x10, - 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x0f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x5f, 0x64, 0x62, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x69, 0x64, - 0x65, 0x63, 0x61, 0x72, 0x44, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, - 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x04, - 0x10, 0x05, 0x22, 0x8b, 0x01, 0x0a, 0x10, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x1a, 0x40, - 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, - 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, - 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, - 0x22, 0xc6, 0x01, 0x0a, 0x15, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x38, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, - 0x6c, 0x69, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, - 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, - 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x39, - 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, - 0x4e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, - 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x54, 0x4f, 0x50, 0x4f, 0x4c, 0x4f, 0x47, 0x59, 0x5f, 0x4d, - 0x49, 0x53, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0x02, 0x22, 0x55, 0x0a, 0x0e, 0x53, 0x68, 0x61, - 0x72, 0x64, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x2f, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, - 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, - 0x22, 0x8f, 0x01, 0x0a, 0x12, 0x53, 0x68, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x6b, - 0x65, 0x79, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x61, 0x6e, - 0x67, 0x65, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x16, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x69, - 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x22, 0x81, 0x01, 0x0a, 0x10, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, - 0x41, 0x70, 0x70, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x12, 0x2b, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x52, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x12, 0x16, - 0x0a, 0x06, 0x65, 0x78, 0x65, 0x6d, 0x70, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, - 0x65, 0x78, 0x65, 0x6d, 0x70, 0x74, 0x22, 0xe5, 0x05, 0x0a, 0x0f, 0x54, 0x68, 0x72, 0x6f, 0x74, - 0x74, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, - 0x6c, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2d, 0x0a, 0x13, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x61, - 0x73, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x10, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x53, 0x65, 0x6c, 0x66, 0x12, 0x53, 0x0a, 0x0e, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, - 0x64, 0x5f, 0x61, 0x70, 0x70, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x74, - 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, - 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, - 0x64, 0x41, 0x70, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x74, 0x68, 0x72, 0x6f, - 0x74, 0x74, 0x6c, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x60, 0x0a, 0x13, 0x61, 0x70, 0x70, - 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x41, 0x70, 0x70, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x61, 0x70, 0x70, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x5c, 0x0a, 0x11, 0x6d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, - 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, - 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, - 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x1a, 0x5c, 0x0a, 0x12, 0x54, 0x68, 0x72, - 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x68, 0x72, 0x6f, - 0x74, 0x74, 0x6c, 0x65, 0x64, 0x41, 0x70, 0x70, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x23, 0x0a, 0x0b, 0x4d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x1a, 0x6b, 0x0a, 0x16, - 0x41, 0x70, 0x70, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x43, 0x0a, 0x15, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x98, - 0x03, 0x0a, 0x0b, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x47, - 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x72, - 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x44, 0x0a, 0x10, 0x74, 0x68, 0x72, 0x6f, 0x74, - 0x74, 0x6c, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x68, 0x72, - 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0f, 0x74, 0x68, - 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0xe1, 0x01, - 0x0a, 0x11, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x43, 0x0a, 0x10, 0x73, 0x68, - 0x61, 0x72, 0x64, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0f, - 0x73, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, - 0x50, 0x0a, 0x15, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, - 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x13, 0x73, 0x68, - 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x73, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, - 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0x4b, 0x0a, 0x08, 0x43, 0x65, 0x6c, - 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, - 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, - 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x22, 0x0a, 0x0a, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, - 0x6c, 0x69, 0x61, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x55, 0x0a, 0x0a, 0x54, 0x6f, - 0x70, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x70, 0x6f, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x70, - 0x6f, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x12, 0x0a, - 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6f, - 0x74, 0x22, 0x4e, 0x0a, 0x15, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x56, 0x69, 0x74, - 0x65, 0x73, 0x73, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x35, 0x0a, 0x0b, 0x74, 0x6f, - 0x70, 0x6f, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x6f, 0x70, 0x6f, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x74, 0x6f, 0x70, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x22, 0x5a, 0x0a, 0x10, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x46, 0x0a, 0x0e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x5f, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x56, 0x69, 0x74, 0x65, 0x73, 0x73, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x0d, - 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2a, 0x28, 0x0a, - 0x0c, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, - 0x06, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x4e, 0x41, - 0x50, 0x53, 0x48, 0x4f, 0x54, 0x10, 0x01, 0x2a, 0x9d, 0x01, 0x0a, 0x0a, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, - 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x49, 0x4d, 0x41, 0x52, 0x59, 0x10, 0x01, - 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x41, 0x53, 0x54, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, - 0x52, 0x45, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x44, 0x4f, - 0x4e, 0x4c, 0x59, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x41, 0x54, 0x43, 0x48, 0x10, 0x03, - 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x41, 0x52, 0x45, 0x10, 0x04, 0x12, 0x10, 0x0a, 0x0c, 0x45, - 0x58, 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, 0x41, 0x4c, 0x10, 0x05, 0x12, 0x0a, 0x0a, - 0x06, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x53, - 0x54, 0x4f, 0x52, 0x45, 0x10, 0x07, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x52, 0x41, 0x49, 0x4e, 0x45, - 0x44, 0x10, 0x08, 0x1a, 0x02, 0x10, 0x01, 0x42, 0x38, 0x0a, 0x0f, 0x69, 0x6f, 0x2e, 0x76, 0x69, - 0x74, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x25, 0x76, 0x69, 0x74, 0x65, - 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, - 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, - 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_topodata_proto_rawDesc = "" + + "\n" + + "\x0etopodata.proto\x12\btopodata\x1a\fvttime.proto\"2\n" + + "\bKeyRange\x12\x14\n" + + "\x05start\x18\x01 \x01(\fR\x05start\x12\x10\n" + + "\x03end\x18\x02 \x01(\fR\x03end\"3\n" + + "\vTabletAlias\x12\x12\n" + + "\x04cell\x18\x01 \x01(\tR\x04cell\x12\x10\n" + + "\x03uid\x18\x02 \x01(\rR\x03uid\"\xba\x05\n" + + "\x06Tablet\x12+\n" + + "\x05alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\x05alias\x12\x1a\n" + + "\bhostname\x18\x02 \x01(\tR\bhostname\x128\n" + + "\bport_map\x18\x04 \x03(\v2\x1d.topodata.Tablet.PortMapEntryR\aportMap\x12\x1a\n" + + "\bkeyspace\x18\x05 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x06 \x01(\tR\x05shard\x12/\n" + + "\tkey_range\x18\a \x01(\v2\x12.topodata.KeyRangeR\bkeyRange\x12(\n" + + "\x04type\x18\b \x01(\x0e2\x14.topodata.TabletTypeR\x04type\x12(\n" + + "\x10db_name_override\x18\t \x01(\tR\x0edbNameOverride\x12.\n" + + "\x04tags\x18\n" + + " \x03(\v2\x1a.topodata.Tablet.TagsEntryR\x04tags\x12%\n" + + "\x0emysql_hostname\x18\f \x01(\tR\rmysqlHostname\x12\x1d\n" + + "\n" + + "mysql_port\x18\r \x01(\x05R\tmysqlPort\x12C\n" + + "\x17primary_term_start_time\x18\x0e \x01(\v2\f.vttime.TimeR\x14primaryTermStartTime\x124\n" + + "\x16default_conn_collation\x18\x10 \x01(\rR\x14defaultConnCollation\x1a:\n" + + "\fPortMapEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\x05R\x05value:\x028\x01\x1a7\n" + + "\tTagsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01J\x04\b\x03\x10\x04J\x04\b\v\x10\fJ\x04\b\x0f\x10\x10\"\xbc\x05\n" + + "\x05Shard\x12:\n" + + "\rprimary_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\fprimaryAlias\x12C\n" + + "\x17primary_term_start_time\x18\b \x01(\v2\f.vttime.TimeR\x14primaryTermStartTime\x12/\n" + + "\tkey_range\x18\x02 \x01(\v2\x12.topodata.KeyRangeR\bkeyRange\x12@\n" + + "\rsource_shards\x18\x04 \x03(\v2\x1b.topodata.Shard.SourceShardR\fsourceShards\x12F\n" + + "\x0ftablet_controls\x18\x06 \x03(\v2\x1d.topodata.Shard.TabletControlR\x0etabletControls\x12,\n" + + "\x12is_primary_serving\x18\a \x01(\bR\x10isPrimaryServing\x1a\x9a\x01\n" + + "\vSourceShard\x12\x10\n" + + "\x03uid\x18\x01 \x01(\x05R\x03uid\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x03 \x01(\tR\x05shard\x12/\n" + + "\tkey_range\x18\x04 \x01(\v2\x12.topodata.KeyRangeR\bkeyRange\x12\x16\n" + + "\x06tables\x18\x05 \x03(\tR\x06tables\x1a\x9f\x01\n" + + "\rTabletControl\x125\n" + + "\vtablet_type\x18\x01 \x01(\x0e2\x14.topodata.TabletTypeR\n" + + "tabletType\x12\x14\n" + + "\x05cells\x18\x02 \x03(\tR\x05cells\x12#\n" + + "\rdenied_tables\x18\x04 \x03(\tR\fdeniedTables\x12\x16\n" + + "\x06frozen\x18\x05 \x01(\bR\x06frozenJ\x04\b\x03\x10\x04J\x04\b\x03\x10\x04J\x04\b\x05\x10\x06\"\xd2\x02\n" + + "\bKeyspace\x12;\n" + + "\rkeyspace_type\x18\x05 \x01(\x0e2\x16.topodata.KeyspaceTypeR\fkeyspaceType\x12#\n" + + "\rbase_keyspace\x18\x06 \x01(\tR\fbaseKeyspace\x121\n" + + "\rsnapshot_time\x18\a \x01(\v2\f.vttime.TimeR\fsnapshotTime\x12+\n" + + "\x11durability_policy\x18\b \x01(\tR\x10durabilityPolicy\x12D\n" + + "\x10throttler_config\x18\t \x01(\v2\x19.topodata.ThrottlerConfigR\x0fthrottlerConfig\x12&\n" + + "\x0fsidecar_db_name\x18\n" + + " \x01(\tR\rsidecarDbNameJ\x04\b\x01\x10\x02J\x04\b\x02\x10\x03J\x04\b\x03\x10\x04J\x04\b\x04\x10\x05\"\x8b\x01\n" + + "\x10ShardReplication\x125\n" + + "\x05nodes\x18\x01 \x03(\v2\x1f.topodata.ShardReplication.NodeR\x05nodes\x1a@\n" + + "\x04Node\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\"\xc6\x01\n" + + "\x15ShardReplicationError\x128\n" + + "\x04type\x18\x01 \x01(\x0e2$.topodata.ShardReplicationError.TypeR\x04type\x128\n" + + "\ftablet_alias\x18\x02 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\"9\n" + + "\x04Type\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\r\n" + + "\tNOT_FOUND\x10\x01\x12\x15\n" + + "\x11TOPOLOGY_MISMATCH\x10\x02\"U\n" + + "\x0eShardReference\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12/\n" + + "\tkey_range\x18\x02 \x01(\v2\x12.topodata.KeyRangeR\bkeyRange\"\x8f\x01\n" + + "\x12ShardTabletControl\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12/\n" + + "\tkey_range\x18\x02 \x01(\v2\x12.topodata.KeyRangeR\bkeyRange\x124\n" + + "\x16query_service_disabled\x18\x03 \x01(\bR\x14queryServiceDisabled\"\x81\x01\n" + + "\x10ThrottledAppRule\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n" + + "\x05ratio\x18\x02 \x01(\x01R\x05ratio\x12+\n" + + "\n" + + "expires_at\x18\x03 \x01(\v2\f.vttime.TimeR\texpiresAt\x12\x16\n" + + "\x06exempt\x18\x04 \x01(\bR\x06exempt\"\xe5\x05\n" + + "\x0fThrottlerConfig\x12\x18\n" + + "\aenabled\x18\x01 \x01(\bR\aenabled\x12\x1c\n" + + "\tthreshold\x18\x02 \x01(\x01R\tthreshold\x12!\n" + + "\fcustom_query\x18\x03 \x01(\tR\vcustomQuery\x12-\n" + + "\x13check_as_check_self\x18\x04 \x01(\bR\x10checkAsCheckSelf\x12S\n" + + "\x0ethrottled_apps\x18\x05 \x03(\v2,.topodata.ThrottlerConfig.ThrottledAppsEntryR\rthrottledApps\x12`\n" + + "\x13app_checked_metrics\x18\x06 \x03(\v20.topodata.ThrottlerConfig.AppCheckedMetricsEntryR\x11appCheckedMetrics\x12\\\n" + + "\x11metric_thresholds\x18\a \x03(\v2/.topodata.ThrottlerConfig.MetricThresholdsEntryR\x10metricThresholds\x1a\\\n" + + "\x12ThrottledAppsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x120\n" + + "\x05value\x18\x02 \x01(\v2\x1a.topodata.ThrottledAppRuleR\x05value:\x028\x01\x1a#\n" + + "\vMetricNames\x12\x14\n" + + "\x05names\x18\x01 \x03(\tR\x05names\x1ak\n" + + "\x16AppCheckedMetricsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12;\n" + + "\x05value\x18\x02 \x01(\v2%.topodata.ThrottlerConfig.MetricNamesR\x05value:\x028\x01\x1aC\n" + + "\x15MetricThresholdsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\x01R\x05value:\x028\x01\"\x98\x03\n" + + "\vSrvKeyspace\x12G\n" + + "\n" + + "partitions\x18\x01 \x03(\v2'.topodata.SrvKeyspace.KeyspacePartitionR\n" + + "partitions\x12D\n" + + "\x10throttler_config\x18\x06 \x01(\v2\x19.topodata.ThrottlerConfigR\x0fthrottlerConfig\x1a\xe1\x01\n" + + "\x11KeyspacePartition\x125\n" + + "\vserved_type\x18\x01 \x01(\x0e2\x14.topodata.TabletTypeR\n" + + "servedType\x12C\n" + + "\x10shard_references\x18\x02 \x03(\v2\x18.topodata.ShardReferenceR\x0fshardReferences\x12P\n" + + "\x15shard_tablet_controls\x18\x03 \x03(\v2\x1c.topodata.ShardTabletControlR\x13shardTabletControlsJ\x04\b\x02\x10\x03J\x04\b\x03\x10\x04J\x04\b\x04\x10\x05J\x04\b\x05\x10\x06\"K\n" + + "\bCellInfo\x12%\n" + + "\x0eserver_address\x18\x01 \x01(\tR\rserverAddress\x12\x12\n" + + "\x04root\x18\x02 \x01(\tR\x04rootJ\x04\b\x03\x10\x04\"\"\n" + + "\n" + + "CellsAlias\x12\x14\n" + + "\x05cells\x18\x02 \x03(\tR\x05cells\"U\n" + + "\n" + + "TopoConfig\x12\x1b\n" + + "\ttopo_type\x18\x01 \x01(\tR\btopoType\x12\x16\n" + + "\x06server\x18\x02 \x01(\tR\x06server\x12\x12\n" + + "\x04root\x18\x03 \x01(\tR\x04root\"N\n" + + "\x15ExternalVitessCluster\x125\n" + + "\vtopo_config\x18\x01 \x01(\v2\x14.topodata.TopoConfigR\n" + + "topoConfig\"Z\n" + + "\x10ExternalClusters\x12F\n" + + "\x0evitess_cluster\x18\x01 \x03(\v2\x1f.topodata.ExternalVitessClusterR\rvitessCluster*(\n" + + "\fKeyspaceType\x12\n" + + "\n" + + "\x06NORMAL\x10\x00\x12\f\n" + + "\bSNAPSHOT\x10\x01*\x9d\x01\n" + + "\n" + + "TabletType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\v\n" + + "\aPRIMARY\x10\x01\x12\n" + + "\n" + + "\x06MASTER\x10\x01\x12\v\n" + + "\aREPLICA\x10\x02\x12\n" + + "\n" + + "\x06RDONLY\x10\x03\x12\t\n" + + "\x05BATCH\x10\x03\x12\t\n" + + "\x05SPARE\x10\x04\x12\x10\n" + + "\fEXPERIMENTAL\x10\x05\x12\n" + + "\n" + + "\x06BACKUP\x10\x06\x12\v\n" + + "\aRESTORE\x10\a\x12\v\n" + + "\aDRAINED\x10\b\x1a\x02\x10\x01B8\n" + + "\x0fio.vitess.protoZ%vitess.io/vitess/go/vt/proto/topodatab\x06proto3" var ( file_topodata_proto_rawDescOnce sync.Once diff --git a/go/vt/proto/vschema/vschema.pb.go b/go/vt/proto/vschema/vschema.pb.go index bf223b13cc0..7a407ea5b0f 100644 --- a/go/vt/proto/vschema/vschema.pb.go +++ b/go/vt/proto/vschema/vschema.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v3.21.3 // source: vschema.proto @@ -1138,183 +1138,100 @@ func (x *MirrorRule) GetPercent() float32 { var File_vschema_proto protoreflect.FileDescriptor -var file_vschema_proto_rawDesc = string([]byte{ - 0x0a, 0x0d, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x07, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x1a, 0x0b, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x3a, 0x0a, 0x0c, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, - 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, - 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x22, 0x49, 0x0a, 0x0b, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, - 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0xca, 0x04, 0x0a, - 0x08, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x68, 0x61, - 0x72, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x68, 0x61, 0x72, - 0x64, 0x65, 0x64, 0x12, 0x3b, 0x0a, 0x08, 0x76, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x76, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, - 0x12, 0x35, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x72, 0x65, 0x71, 0x75, 0x69, - 0x72, 0x65, 0x5f, 0x65, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x74, - 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x72, 0x65, 0x71, 0x75, 0x69, - 0x72, 0x65, 0x45, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, - 0x67, 0x12, 0x4a, 0x0a, 0x10, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x5f, 0x6b, 0x65, 0x79, - 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x76, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x46, - 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0e, 0x66, - 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x44, 0x0a, - 0x11, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x73, 0x70, - 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x53, 0x70, - 0x65, 0x63, 0x52, 0x0f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x53, - 0x70, 0x65, 0x63, 0x1a, 0x4c, 0x0a, 0x0d, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x25, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x49, 0x0a, 0x0b, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x24, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0e, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4b, 0x0a, 0x0e, - 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x0f, - 0x0a, 0x0b, 0x75, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x10, 0x00, 0x12, - 0x0c, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x10, 0x01, 0x12, 0x0d, 0x0a, - 0x09, 0x75, 0x6e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x10, 0x03, 0x22, 0x84, 0x01, 0x0a, 0x0f, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x31, 0x0a, - 0x15, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x3e, 0x0a, 0x15, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x5f, 0x63, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x0b, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x12, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, - 0x22, 0xa2, 0x01, 0x0a, 0x06, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x33, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x1a, 0x39, 0x0a, 0x0b, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xb1, 0x02, 0x0a, 0x05, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x12, 0x3e, 0x0a, 0x0f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x76, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x76, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x56, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x56, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x65, 0x73, 0x12, 0x3d, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x69, 0x6e, 0x63, 0x72, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x76, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x0d, 0x61, 0x75, 0x74, 0x6f, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x16, 0x0a, - 0x06, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, - 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x3a, 0x0a, 0x19, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, - 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x54, 0x0a, 0x0c, 0x43, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x22, - 0x43, 0x0a, 0x0d, 0x41, 0x75, 0x74, 0x6f, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, - 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, - 0x65, 0x6e, 0x63, 0x65, 0x22, 0x8c, 0x02, 0x0a, 0x06, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x0b, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x6e, 0x76, 0x69, 0x73, 0x69, 0x62, - 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x25, 0x0a, 0x0e, - 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x61, 0x6c, 0x65, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x1f, 0x0a, - 0x08, 0x6e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x48, - 0x00, 0x52, 0x08, 0x6e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x16, - 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x22, 0xb5, 0x03, 0x0a, 0x0a, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x12, 0x40, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x0d, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x76, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, - 0x65, 0x73, 0x52, 0x0c, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, - 0x12, 0x4a, 0x0a, 0x13, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, - 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, - 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x11, 0x73, 0x68, 0x61, 0x72, 0x64, - 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x53, 0x0a, 0x16, - 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, - 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x76, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, - 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x14, 0x6b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, - 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x0b, 0x6d, - 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x1a, 0x4f, 0x0a, 0x0e, 0x4b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x27, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, - 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x44, 0x0a, 0x11, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, - 0x12, 0x2f, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, - 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x22, 0x6e, 0x0a, 0x10, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, - 0x67, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x72, - 0x6f, 0x6d, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, - 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, - 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, - 0x64, 0x22, 0x4a, 0x0a, 0x14, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, - 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, - 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x5b, 0x0a, - 0x13, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, - 0x52, 0x75, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x72, 0x6f, - 0x6d, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x5f, - 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x38, 0x0a, 0x0b, 0x4d, 0x69, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x05, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x22, 0x60, 0x0a, 0x0a, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x75, - 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x6f, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x70, - 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x26, 0x5a, 0x24, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, - 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_vschema_proto_rawDesc = "" + + "\n" + + "\rvschema.proto\x12\avschema\x1a\vquery.proto\":\n" + + "\fRoutingRules\x12*\n" + + "\x05rules\x18\x01 \x03(\v2\x14.vschema.RoutingRuleR\x05rules\"I\n" + + "\vRoutingRule\x12\x1d\n" + + "\n" + + "from_table\x18\x01 \x01(\tR\tfromTable\x12\x1b\n" + + "\tto_tables\x18\x02 \x03(\tR\btoTables\"\xca\x04\n" + + "\bKeyspace\x12\x18\n" + + "\asharded\x18\x01 \x01(\bR\asharded\x12;\n" + + "\bvindexes\x18\x02 \x03(\v2\x1f.vschema.Keyspace.VindexesEntryR\bvindexes\x125\n" + + "\x06tables\x18\x03 \x03(\v2\x1d.vschema.Keyspace.TablesEntryR\x06tables\x128\n" + + "\x18require_explicit_routing\x18\x04 \x01(\bR\x16requireExplicitRouting\x12J\n" + + "\x10foreign_key_mode\x18\x05 \x01(\x0e2 .vschema.Keyspace.ForeignKeyModeR\x0eforeignKeyMode\x12D\n" + + "\x11multi_tenant_spec\x18\x06 \x01(\v2\x18.vschema.MultiTenantSpecR\x0fmultiTenantSpec\x1aL\n" + + "\rVindexesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12%\n" + + "\x05value\x18\x02 \x01(\v2\x0f.vschema.VindexR\x05value:\x028\x01\x1aI\n" + + "\vTablesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12$\n" + + "\x05value\x18\x02 \x01(\v2\x0e.vschema.TableR\x05value:\x028\x01\"K\n" + + "\x0eForeignKeyMode\x12\x0f\n" + + "\vunspecified\x10\x00\x12\f\n" + + "\bdisallow\x10\x01\x12\r\n" + + "\tunmanaged\x10\x02\x12\v\n" + + "\amanaged\x10\x03\"\x84\x01\n" + + "\x0fMultiTenantSpec\x121\n" + + "\x15tenant_id_column_name\x18\x01 \x01(\tR\x12tenantIdColumnName\x12>\n" + + "\x15tenant_id_column_type\x18\x02 \x01(\x0e2\v.query.TypeR\x12tenantIdColumnType\"\xa2\x01\n" + + "\x06Vindex\x12\x12\n" + + "\x04type\x18\x01 \x01(\tR\x04type\x123\n" + + "\x06params\x18\x02 \x03(\v2\x1b.vschema.Vindex.ParamsEntryR\x06params\x12\x14\n" + + "\x05owner\x18\x03 \x01(\tR\x05owner\x1a9\n" + + "\vParamsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xb1\x02\n" + + "\x05Table\x12\x12\n" + + "\x04type\x18\x01 \x01(\tR\x04type\x12>\n" + + "\x0fcolumn_vindexes\x18\x02 \x03(\v2\x15.vschema.ColumnVindexR\x0ecolumnVindexes\x12=\n" + + "\x0eauto_increment\x18\x03 \x01(\v2\x16.vschema.AutoIncrementR\rautoIncrement\x12)\n" + + "\acolumns\x18\x04 \x03(\v2\x0f.vschema.ColumnR\acolumns\x12\x16\n" + + "\x06pinned\x18\x05 \x01(\tR\x06pinned\x12:\n" + + "\x19column_list_authoritative\x18\x06 \x01(\bR\x17columnListAuthoritative\x12\x16\n" + + "\x06source\x18\a \x01(\tR\x06source\"T\n" + + "\fColumnVindex\x12\x16\n" + + "\x06column\x18\x01 \x01(\tR\x06column\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12\x18\n" + + "\acolumns\x18\x03 \x03(\tR\acolumns\"C\n" + + "\rAutoIncrement\x12\x16\n" + + "\x06column\x18\x01 \x01(\tR\x06column\x12\x1a\n" + + "\bsequence\x18\x02 \x01(\tR\bsequence\"\x8c\x02\n" + + "\x06Column\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x1f\n" + + "\x04type\x18\x02 \x01(\x0e2\v.query.TypeR\x04type\x12\x1c\n" + + "\tinvisible\x18\x03 \x01(\bR\tinvisible\x12\x18\n" + + "\adefault\x18\x04 \x01(\tR\adefault\x12%\n" + + "\x0ecollation_name\x18\x05 \x01(\tR\rcollationName\x12\x12\n" + + "\x04size\x18\x06 \x01(\x05R\x04size\x12\x14\n" + + "\x05scale\x18\a \x01(\x05R\x05scale\x12\x1f\n" + + "\bnullable\x18\b \x01(\bH\x00R\bnullable\x88\x01\x01\x12\x16\n" + + "\x06values\x18\t \x03(\tR\x06valuesB\v\n" + + "\t_nullable\"\xb5\x03\n" + + "\n" + + "SrvVSchema\x12@\n" + + "\tkeyspaces\x18\x01 \x03(\v2\".vschema.SrvVSchema.KeyspacesEntryR\tkeyspaces\x12:\n" + + "\rrouting_rules\x18\x02 \x01(\v2\x15.vschema.RoutingRulesR\froutingRules\x12J\n" + + "\x13shard_routing_rules\x18\x03 \x01(\v2\x1a.vschema.ShardRoutingRulesR\x11shardRoutingRules\x12S\n" + + "\x16keyspace_routing_rules\x18\x04 \x01(\v2\x1d.vschema.KeyspaceRoutingRulesR\x14keyspaceRoutingRules\x127\n" + + "\fmirror_rules\x18\x05 \x01(\v2\x14.vschema.MirrorRulesR\vmirrorRules\x1aO\n" + + "\x0eKeyspacesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12'\n" + + "\x05value\x18\x02 \x01(\v2\x11.vschema.KeyspaceR\x05value:\x028\x01\"D\n" + + "\x11ShardRoutingRules\x12/\n" + + "\x05rules\x18\x01 \x03(\v2\x19.vschema.ShardRoutingRuleR\x05rules\"n\n" + + "\x10ShardRoutingRule\x12#\n" + + "\rfrom_keyspace\x18\x01 \x01(\tR\ffromKeyspace\x12\x1f\n" + + "\vto_keyspace\x18\x02 \x01(\tR\n" + + "toKeyspace\x12\x14\n" + + "\x05shard\x18\x03 \x01(\tR\x05shard\"J\n" + + "\x14KeyspaceRoutingRules\x122\n" + + "\x05rules\x18\x01 \x03(\v2\x1c.vschema.KeyspaceRoutingRuleR\x05rules\"[\n" + + "\x13KeyspaceRoutingRule\x12#\n" + + "\rfrom_keyspace\x18\x01 \x01(\tR\ffromKeyspace\x12\x1f\n" + + "\vto_keyspace\x18\x02 \x01(\tR\n" + + "toKeyspace\"8\n" + + "\vMirrorRules\x12)\n" + + "\x05rules\x18\x01 \x03(\v2\x13.vschema.MirrorRuleR\x05rules\"`\n" + + "\n" + + "MirrorRule\x12\x1d\n" + + "\n" + + "from_table\x18\x01 \x01(\tR\tfromTable\x12\x19\n" + + "\bto_table\x18\x02 \x01(\tR\atoTable\x12\x18\n" + + "\apercent\x18\x03 \x01(\x02R\apercentB&Z$vitess.io/vitess/go/vt/proto/vschemab\x06proto3" var ( file_vschema_proto_rawDescOnce sync.Once diff --git a/go/vt/proto/vtadmin/vtadmin.pb.go b/go/vt/proto/vtadmin/vtadmin.pb.go index 4f65c097d72..69c4bbf98f7 100644 --- a/go/vt/proto/vtadmin/vtadmin.pb.go +++ b/go/vt/proto/vtadmin/vtadmin.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v3.21.3 // source: vtadmin.proto @@ -7525,1416 +7525,642 @@ func (x *ReloadSchemasResponse_TabletResult) GetResult() string { var File_vtadmin_proto protoreflect.FileDescriptor -var file_vtadmin_proto_rawDesc = string([]byte{ - 0x0a, 0x0d, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x07, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x1a, 0x0d, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0e, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x63, 0x74, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x0e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x0d, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x0f, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x2d, 0x0a, 0x07, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, - 0x69, 0x0a, 0x0d, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x06, - 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, - 0x79, 0x73, 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x06, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x22, 0xd8, 0x01, 0x0a, 0x13, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, - 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x43, - 0x0a, 0x07, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x41, 0x6c, - 0x69, 0x61, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x61, 0x6c, 0x69, 0x61, - 0x73, 0x65, 0x73, 0x1a, 0x50, 0x0a, 0x0c, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x82, 0x01, 0x0a, 0x0f, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x63, 0x65, 0x6c, - 0x6c, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, - 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x08, 0x63, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xd2, 0x01, 0x0a, 0x1f, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, - 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x51, 0x0a, 0x0d, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x22, - 0x5f, 0x0a, 0x10, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x73, 0x12, 0x2f, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, - 0x22, 0xeb, 0x01, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2a, 0x0a, - 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x08, 0x6b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x76, 0x74, - 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x35, 0x0a, 0x06, 0x73, 0x68, - 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x76, 0x74, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x68, - 0x61, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, - 0x73, 0x1a, 0x4b, 0x0a, 0x0b, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, - 0x61, 0x72, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf8, - 0x04, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x12, 0x4f, 0x0a, 0x11, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x10, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x40, 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, - 0x7a, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, - 0x69, 0x7a, 0x65, 0x73, 0x1a, 0x58, 0x0a, 0x0f, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, - 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, - 0x69, 0x7a, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4e, - 0x0a, 0x0e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x77, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x08, 0x72, 0x6f, 0x77, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1f, 0x0a, - 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x1a, 0xe8, - 0x01, 0x0a, 0x09, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1b, 0x0a, 0x09, - 0x72, 0x6f, 0x77, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x08, 0x72, 0x6f, 0x77, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x61, 0x74, - 0x61, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, - 0x64, 0x61, 0x74, 0x61, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x41, 0x0a, 0x08, 0x62, 0x79, - 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x76, - 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x2e, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x62, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x1a, 0x5a, 0x0a, - 0x0c, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x34, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, - 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x53, 0x68, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x84, 0x01, 0x0a, 0x0f, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, - 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x10, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x5f, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x5b, 0x0a, 0x05, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x22, 0x83, 0x01, - 0x0a, 0x0a, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x12, 0x0a, 0x04, - 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x65, 0x6c, 0x6c, - 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x35, 0x0a, 0x0c, - 0x73, 0x72, 0x76, 0x5f, 0x76, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x72, 0x76, - 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0a, 0x73, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x22, 0xe1, 0x01, 0x0a, 0x06, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x2a, - 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x06, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x6f, 0x70, - 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x46, 0x51, 0x44, 0x4e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x46, 0x51, 0x44, 0x4e, 0x22, 0x39, 0x0a, 0x0c, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, - 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x45, 0x52, - 0x56, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x45, - 0x52, 0x56, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x22, 0x77, 0x0a, 0x07, 0x56, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x76, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x07, 0x76, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x22, 0x64, 0x0a, 0x06, 0x56, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, - 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, - 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x46, 0x51, 0x44, 0x4e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x46, 0x51, 0x44, 0x4e, 0x22, 0xaa, 0x01, 0x0a, 0x06, 0x56, 0x54, 0x47, 0x61, 0x74, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x70, 0x6f, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x6f, 0x6f, - 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, - 0x12, 0x0a, 0x04, 0x46, 0x51, 0x44, 0x4e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x46, - 0x51, 0x44, 0x4e, 0x22, 0x83, 0x01, 0x0a, 0x08, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, - 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x76, 0x74, 0x63, - 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, - 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, 0x72, 0x0a, 0x15, 0x57, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x3a, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x80, 0x01, - 0x0a, 0x1c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, - 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x41, 0x0a, - 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, - 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x9b, 0x01, 0x0a, 0x12, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x71, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x6c, - 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x80, - 0x01, 0x0a, 0x1c, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, - 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x41, - 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x61, 0x6e, 0x63, - 0x65, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0x82, 0x01, 0x0a, 0x1d, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x42, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x84, 0x01, 0x0a, 0x1e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, - 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4f, 0x0a, - 0x1a, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x74, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, 0x64, 0x22, 0x72, - 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x22, 0x47, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x08, - 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x6c, 0x0a, 0x12, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x37, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x72, 0x0a, 0x15, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x3a, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x6e, 0x0a, - 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x88, 0x01, - 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, - 0x61, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x49, 0x64, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x72, 0x69, - 0x6d, 0x61, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x5a, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x22, 0x82, 0x01, 0x0a, 0x1d, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, - 0x63, 0x79, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe8, 0x01, 0x0a, 0x1e, 0x45, 0x6d, - 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x07, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, - 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, - 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x40, 0x0a, 0x10, 0x70, 0x72, - 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0f, 0x70, 0x72, 0x6f, - 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x26, 0x0a, 0x06, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, - 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x22, 0x9c, 0x01, 0x0a, 0x11, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, - 0x73, 0x12, 0x50, 0x0a, 0x12, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x10, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x22, 0xc2, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0e, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, - 0x73, 0x12, 0x45, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x76, 0x74, 0x63, - 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x46, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, - 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, - 0x22, 0x6b, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x1d, - 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x4f, 0x0a, - 0x14, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0a, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x69, 0x6e, - 0x66, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x76, 0x74, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x65, 0x6c, 0x6c, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x63, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x22, 0x39, - 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x51, 0x0a, 0x17, 0x47, 0x65, 0x74, - 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, - 0x73, 0x65, 0x73, 0x52, 0x07, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x22, 0x14, 0x0a, 0x12, - 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x43, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x08, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x22, 0x62, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x46, 0x75, - 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2b, - 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, - 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x32, 0x0a, 0x0f, 0x47, - 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, - 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, - 0x39, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x67, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x54, 0x47, - 0x61, 0x74, 0x65, 0x52, 0x05, 0x67, 0x61, 0x74, 0x65, 0x73, 0x22, 0x4f, 0x0a, 0x12, 0x47, 0x65, - 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x36, 0x0a, 0x13, 0x47, - 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x49, 0x64, 0x73, 0x22, 0x47, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x6b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0xb5, 0x01, 0x0a, - 0x10, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x12, 0x50, 0x0a, 0x12, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x10, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x50, 0x0a, 0x12, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x53, 0x69, 0x7a, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x10, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3f, 0x0a, - 0x12, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x22, 0xed, - 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5d, 0x0a, - 0x10, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x1a, 0x70, 0x0a, 0x0e, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3f, 0x0a, - 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x64, - 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, - 0x11, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x10, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x8d, 0x01, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, - 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, - 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x6b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x68, - 0x61, 0x72, 0x64, 0x73, 0x22, 0x85, 0x01, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, - 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, - 0x15, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x76, - 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x68, - 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x68, 0x0a, 0x15, - 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x4f, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, - 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, - 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0xd7, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53, - 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x0d, 0x73, 0x72, 0x76, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x76, 0x74, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x72, 0x76, - 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, - 0x73, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x1a, 0x63, 0x0a, 0x11, - 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x38, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, - 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0x49, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x65, 0x6c, 0x6c, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x22, 0x4e, 0x0a, 0x15, - 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x51, 0x0a, 0x16, - 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0d, 0x73, 0x72, 0x76, 0x5f, 0x76, 0x5f, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x52, 0x0b, 0x73, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x22, - 0x81, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x0a, - 0x0f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x53, 0x69, 0x7a, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x1a, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x5f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x68, - 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x4e, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x53, 0x68, 0x61, - 0x72, 0x64, 0x73, 0x22, 0x60, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, - 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x34, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x3f, 0x0a, 0x12, 0x47, - 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x29, 0x0a, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x22, 0x4b, 0x0a, 0x16, - 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x50, 0x61, 0x74, 0x68, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x7a, 0x0a, 0x19, 0x47, 0x65, 0x74, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3e, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x7e, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, - 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x62, 0x61, 0x6e, 0x64, 0x6f, 0x6e, 0x5f, - 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x61, 0x62, 0x61, 0x6e, 0x64, - 0x6f, 0x6e, 0x41, 0x67, 0x65, 0x22, 0x4e, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x56, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x35, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x56, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x44, 0x0a, 0x13, - 0x47, 0x65, 0x74, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x09, 0x76, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x2e, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x08, 0x76, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x73, 0x22, 0x34, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x56, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x3f, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x56, - 0x74, 0x63, 0x74, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, - 0x0a, 0x07, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x74, 0x63, 0x74, 0x6c, 0x64, - 0x52, 0x07, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x73, 0x22, 0x84, 0x01, 0x0a, 0x12, 0x47, 0x65, - 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4f, 0x6e, 0x6c, 0x79, - 0x22, 0x69, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6d, 0x0a, 0x14, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, 0x6c, 0x0a, 0x13, 0x53, 0x74, - 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, 0xa0, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, - 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, - 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4f, 0x6e, - 0x6c, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x12, 0x29, 0x0a, 0x10, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x69, 0x67, 0x6e, 0x6f, - 0x72, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0xe1, 0x01, 0x0a, 0x14, - 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x14, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x73, 0x5f, 0x62, 0x79, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, - 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x42, 0x79, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x77, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x73, 0x42, 0x79, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x1a, 0x60, 0x0a, - 0x17, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x42, 0x79, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x76, 0x74, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x57, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x80, 0x01, 0x0a, 0x1c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x41, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x61, 0x75, - 0x6e, 0x63, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x9f, 0x01, 0x0a, 0x18, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, - 0x7a, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, - 0x0a, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3d, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0x7a, 0x0a, 0x19, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x3e, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, - 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x76, 0x0a, 0x17, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x07, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x76, 0x74, - 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, - 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x61, 0x0a, 0x11, 0x50, 0x69, 0x6e, 0x67, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, - 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, - 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, - 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x58, 0x0a, 0x12, 0x50, - 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x7e, 0x0a, 0x1b, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, - 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe6, 0x01, 0x0a, 0x1c, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, - 0x64, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, - 0x68, 0x61, 0x72, 0x64, 0x12, 0x40, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, - 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x50, - 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, - 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x93, - 0x01, 0x0a, 0x1b, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, - 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, - 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x61, 0x72, - 0x74, 0x69, 0x61, 0x6c, 0x22, 0x36, 0x0a, 0x1c, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x63, 0x0a, 0x13, - 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, - 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, - 0x73, 0x22, 0x5a, 0x0a, 0x14, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x9f, 0x02, - 0x0a, 0x14, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x6b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x2f, 0x0a, - 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x1f, - 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, - 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, - 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x61, 0x69, 0x74, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x22, - 0xad, 0x04, 0x0a, 0x15, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x10, 0x6b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, - 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x52, 0x0f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x73, 0x12, 0x4f, 0x0a, 0x0d, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x76, 0x74, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x73, 0x12, 0x52, 0x0a, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x76, - 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x1a, 0x67, 0x0a, 0x0e, 0x4b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x08, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76, - 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, - 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75, - 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x1a, 0x5b, 0x0a, 0x0b, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x12, 0x24, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, - 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, - 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x4f, - 0x0a, 0x0c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x27, - 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, - 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, - 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, - 0xdb, 0x01, 0x0a, 0x18, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x23, 0x0a, - 0x0d, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x61, 0x69, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, 0x72, - 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x63, - 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x43, 0x0a, - 0x19, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x68, 0x61, - 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, - 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x22, 0x75, 0x0a, 0x25, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05, 0x61, - 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, - 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, - 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0xb7, 0x01, 0x0a, 0x26, 0x52, 0x65, - 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x2f, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, - 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x07, - 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x22, 0x9e, 0x01, 0x0a, 0x19, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x65, 0x6c, 0x6c, - 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, - 0x69, 0x76, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, - 0x73, 0x69, 0x76, 0x65, 0x22, 0x34, 0x0a, 0x1a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x7e, 0x0a, 0x1b, 0x52, 0x65, - 0x74, 0x72, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x65, 0x0a, 0x15, 0x52, 0x75, - 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, - 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, - 0x73, 0x22, 0x5c, 0x0a, 0x16, 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, - 0x70, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x68, 0x61, 0x72, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x68, 0x61, 0x72, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0x62, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, - 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, - 0x4f, 0x6e, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x63, 0x0a, 0x13, - 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, - 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, - 0x73, 0x22, 0x16, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x57, 0x72, 0x69, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x67, 0x0a, 0x17, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, - 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, - 0x64, 0x73, 0x22, 0x5e, 0x0a, 0x18, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x22, 0x66, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05, - 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, - 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, - 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x5d, 0x0a, 0x17, 0x53, 0x74, - 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, - 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x6f, 0x0a, 0x1f, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x50, 0x72, 0x6f, - 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05, - 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, - 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, - 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0xf0, 0x01, 0x0a, 0x20, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x50, - 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x36, 0x0a, - 0x0b, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0a, 0x6e, 0x65, 0x77, 0x50, 0x72, - 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x36, 0x0a, 0x0b, 0x6f, 0x6c, 0x64, 0x5f, 0x70, 0x72, 0x69, - 0x6d, 0x61, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, - 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, - 0x73, 0x52, 0x0a, 0x6f, 0x6c, 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x71, 0x0a, - 0x21, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, - 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, - 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, - 0x22, 0x53, 0x0a, 0x0f, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x69, 0x6e, 0x67, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x73, 0x22, 0x77, 0x0a, 0x17, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, - 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0b, 0x70, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x22, 0x5a, - 0x0a, 0x1d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x14, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, - 0x68, 0x61, 0x72, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x69, 0x6e, 0x67, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x22, 0x5b, 0x0a, 0x1e, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x22, 0x6e, 0x0a, 0x1b, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, - 0x68, 0x61, 0x72, 0x64, 0x22, 0x6c, 0x0a, 0x12, 0x56, 0x44, 0x69, 0x66, 0x66, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x07, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x76, 0x74, 0x63, - 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x68, 0x0a, 0x10, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, 0x68, 0x6f, 0x77, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x41, 0x0a, 0x0d, - 0x56, 0x44, 0x69, 0x66, 0x66, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1e, 0x0a, - 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x01, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, - 0x03, 0x65, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x65, 0x74, 0x61, 0x22, - 0xe6, 0x01, 0x0a, 0x10, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x6f, - 0x77, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x72, 0x6f, 0x77, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x64, 0x12, - 0x21, 0x0a, 0x0c, 0x68, 0x61, 0x73, 0x5f, 0x6d, 0x69, 0x73, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x68, 0x61, 0x73, 0x4d, 0x69, 0x73, 0x6d, 0x61, 0x74, - 0x63, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, - 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x22, 0xbe, 0x01, 0x0a, 0x11, 0x56, 0x44, 0x69, - 0x66, 0x66, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, - 0x0a, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, - 0x44, 0x69, 0x66, 0x66, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0b, 0x73, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x1a, 0x59, - 0x0a, 0x10, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x44, - 0x69, 0x66, 0x66, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x5a, 0x0a, 0x10, 0x56, 0x54, 0x45, - 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, - 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x73, 0x71, 0x6c, 0x22, 0x2f, 0x0a, 0x11, 0x56, 0x54, 0x45, 0x78, 0x70, 0x6c, 0x61, - 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5e, 0x0a, 0x0f, 0x56, 0x45, 0x78, 0x70, 0x6c, 0x61, - 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x73, 0x71, 0x6c, 0x22, 0x2e, 0x0a, 0x10, 0x56, 0x45, 0x78, 0x70, 0x6c, 0x61, - 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x80, 0x32, 0x0a, 0x07, 0x56, 0x54, 0x41, 0x64, 0x6d, - 0x69, 0x6e, 0x12, 0x4c, 0x0a, 0x0b, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x41, 0x70, 0x70, 0x6c, - 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, - 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x6a, 0x0a, 0x15, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x76, 0x74, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x61, 0x6e, - 0x63, 0x65, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x16, - 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, - 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, - 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x17, 0x43, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, - 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x64, 0x0a, - 0x13, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, - 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1e, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1e, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, - 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x1c, 0x2e, - 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, - 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x76, 0x74, - 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, - 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4d, - 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x1c, - 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x76, - 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6b, 0x0a, - 0x16, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, - 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x26, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x46, 0x61, 0x69, 0x6c, 0x6f, - 0x76, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x27, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, - 0x6e, 0x63, 0x79, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x0a, 0x46, 0x69, - 0x6e, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1a, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x73, 0x12, 0x1a, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, - 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1b, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x4d, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x73, - 0x12, 0x1c, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x65, - 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, - 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, - 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x56, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, - 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, - 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, - 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, - 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, - 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x47, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x47, 0x61, - 0x74, 0x65, 0x73, 0x12, 0x18, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, - 0x74, 0x47, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, - 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x0b, 0x47, 0x65, - 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x0c, 0x47, - 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x1c, 0x2e, 0x76, 0x74, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x76, 0x74, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x09, 0x47, 0x65, - 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x19, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x73, 0x12, 0x1a, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1b, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x62, - 0x0a, 0x13, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x23, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x76, 0x74, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x7d, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x2c, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, - 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2d, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, - 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x56, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x1e, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x0f, 0x47, 0x65, 0x74, - 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x76, - 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, - 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x45, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, - 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x13, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x72, 0x76, 0x56, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, - 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x12, 0x1e, 0x2e, 0x76, 0x74, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x76, 0x74, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x39, 0x0a, - 0x09, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x76, 0x74, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x1a, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x58, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, - 0x50, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, - 0x65, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x50, 0x61, 0x74, - 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x12, 0x47, - 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, - 0x0a, 0x19, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x2e, 0x76, 0x74, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1a, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, - 0x65, 0x74, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x56, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x73, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, - 0x74, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1c, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x47, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x73, 0x12, 0x1a, - 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x76, 0x74, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x0b, 0x47, 0x65, 0x74, - 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, - 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x0c, 0x47, 0x65, - 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x1c, 0x2e, 0x76, 0x74, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x11, 0x47, 0x65, 0x74, - 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, - 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c, 0x53, - 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x1c, 0x2e, 0x76, 0x74, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, - 0x0a, 0x15, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, - 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x12, 0x4d, 0x6f, - 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, - 0x12, 0x22, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x59, 0x0a, - 0x10, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x4d, 0x6f, 0x76, 0x65, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x11, 0x4d, 0x61, 0x74, 0x65, - 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, - 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x69, 0x7a, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x61, 0x74, - 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x0a, 0x50, 0x69, 0x6e, 0x67, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x50, 0x69, 0x6e, - 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x65, 0x0a, 0x14, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x46, 0x61, 0x69, 0x6c, - 0x6f, 0x76, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x24, 0x2e, 0x76, 0x74, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x6f, - 0x76, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x25, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, - 0x64, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x65, 0x0a, 0x14, 0x52, 0x65, 0x62, 0x75, - 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, - 0x12, 0x24, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x2e, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x4d, 0x0a, 0x0c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x1c, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, - 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, - 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, - 0x01, 0x0a, 0x1e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x12, 0x2e, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x66, 0x72, - 0x65, 0x73, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2f, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x66, 0x72, - 0x65, 0x73, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x0d, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x73, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, - 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, - 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x11, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x21, 0x2e, 0x76, 0x74, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, - 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x5f, 0x0a, 0x12, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, - 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x67, 0x0a, 0x14, 0x52, 0x65, 0x74, 0x72, 0x79, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, - 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x52, 0x65, 0x74, 0x72, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x53, - 0x0a, 0x0e, 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x12, 0x1e, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x75, 0x6e, 0x48, 0x65, - 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1f, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x75, 0x6e, 0x48, 0x65, - 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x68, 0x61, 0x72, 0x64, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, - 0x65, 0x73, 0x68, 0x61, 0x72, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x52, - 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, - 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x12, 0x1c, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, - 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x74, - 0x52, 0x65, 0x61, 0x64, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x59, 0x0a, 0x10, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x56, - 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x1f, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x70, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x74, 0x6f, - 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x18, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, - 0x65, 0x64, 0x12, 0x28, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x50, 0x72, 0x6f, - 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x76, - 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x08, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5b, - 0x0a, 0x10, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x16, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x26, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0d, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x1d, 0x2e, 0x76, 0x74, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, - 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x76, 0x74, 0x63, - 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, - 0x0a, 0x17, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x27, 0x2e, 0x76, 0x74, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x67, 0x0a, 0x14, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x24, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, - 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, 0x56, 0x44, 0x69, - 0x66, 0x66, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x09, 0x56, 0x44, 0x69, 0x66, 0x66, - 0x53, 0x68, 0x6f, 0x77, 0x12, 0x19, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, - 0x44, 0x69, 0x66, 0x66, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1a, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, - 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x44, 0x0a, - 0x09, 0x56, 0x54, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x12, 0x19, 0x2e, 0x76, 0x74, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x54, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, - 0x56, 0x54, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x08, 0x56, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x12, - 0x18, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x45, 0x78, 0x70, 0x6c, 0x61, - 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x76, 0x74, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1e, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, - 0x15, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x54, - 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x12, 0x25, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x54, - 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x26, 0x5a, 0x24, 0x76, 0x69, 0x74, - 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, - 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_vtadmin_proto_rawDesc = "" + + "\n" + + "\rvtadmin.proto\x12\avtadmin\x1a\rlogutil.proto\x1a\x0emysqlctl.proto\x1a\x17tabletmanagerdata.proto\x1a\x0etopodata.proto\x1a\rvschema.proto\x1a\x0fvtctldata.proto\"-\n" + + "\aCluster\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\"i\n" + + "\rClusterBackup\x12*\n" + + "\acluster\x18\x01 \x01(\v2\x10.vtadmin.ClusterR\acluster\x12,\n" + + "\x06backup\x18\x02 \x01(\v2\x14.mysqlctl.BackupInfoR\x06backup\"\xd8\x01\n" + + "\x13ClusterCellsAliases\x12*\n" + + "\acluster\x18\x01 \x01(\v2\x10.vtadmin.ClusterR\acluster\x12C\n" + + "\aaliases\x18\x02 \x03(\v2).vtadmin.ClusterCellsAliases.AliasesEntryR\aaliases\x1aP\n" + + "\fAliasesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12*\n" + + "\x05value\x18\x02 \x01(\v2\x14.topodata.CellsAliasR\x05value:\x028\x01\"\x82\x01\n" + + "\x0fClusterCellInfo\x12*\n" + + "\acluster\x18\x01 \x01(\v2\x10.vtadmin.ClusterR\acluster\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12/\n" + + "\tcell_info\x18\x03 \x01(\v2\x12.topodata.CellInfoR\bcellInfo\"\xd2\x01\n" + + "\x1fClusterShardReplicationPosition\x12*\n" + + "\acluster\x18\x01 \x01(\v2\x10.vtadmin.ClusterR\acluster\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x03 \x01(\tR\x05shard\x12Q\n" + + "\rposition_info\x18\x04 \x01(\v2,.vtctldata.ShardReplicationPositionsResponseR\fpositionInfo\"_\n" + + "\x10ClusterWorkflows\x12/\n" + + "\tworkflows\x18\x01 \x03(\v2\x11.vtadmin.WorkflowR\tworkflows\x12\x1a\n" + + "\bwarnings\x18\x02 \x03(\tR\bwarnings\"\xeb\x01\n" + + "\bKeyspace\x12*\n" + + "\acluster\x18\x01 \x01(\v2\x10.vtadmin.ClusterR\acluster\x12/\n" + + "\bkeyspace\x18\x02 \x01(\v2\x13.vtctldata.KeyspaceR\bkeyspace\x125\n" + + "\x06shards\x18\x03 \x03(\v2\x1d.vtadmin.Keyspace.ShardsEntryR\x06shards\x1aK\n" + + "\vShardsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12&\n" + + "\x05value\x18\x02 \x01(\v2\x10.vtctldata.ShardR\x05value:\x028\x01\"\xf8\x04\n" + + "\x06Schema\x12*\n" + + "\acluster\x18\x01 \x01(\v2\x10.vtadmin.ClusterR\acluster\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12O\n" + + "\x11table_definitions\x18\x03 \x03(\v2\".tabletmanagerdata.TableDefinitionR\x10tableDefinitions\x12@\n" + + "\vtable_sizes\x18\x04 \x03(\v2\x1f.vtadmin.Schema.TableSizesEntryR\n" + + "tableSizes\x1aX\n" + + "\x0fTableSizesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12/\n" + + "\x05value\x18\x02 \x01(\v2\x19.vtadmin.Schema.TableSizeR\x05value:\x028\x01\x1aN\n" + + "\x0eShardTableSize\x12\x1b\n" + + "\trow_count\x18\x01 \x01(\x04R\browCount\x12\x1f\n" + + "\vdata_length\x18\x02 \x01(\x04R\n" + + "dataLength\x1a\xe8\x01\n" + + "\tTableSize\x12\x1b\n" + + "\trow_count\x18\x01 \x01(\x04R\browCount\x12\x1f\n" + + "\vdata_length\x18\x02 \x01(\x04R\n" + + "dataLength\x12A\n" + + "\bby_shard\x18\x03 \x03(\v2&.vtadmin.Schema.TableSize.ByShardEntryR\abyShard\x1aZ\n" + + "\fByShardEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x124\n" + + "\x05value\x18\x02 \x01(\v2\x1e.vtadmin.Schema.ShardTableSizeR\x05value:\x028\x01\"\x84\x01\n" + + "\x0fSchemaMigration\x12*\n" + + "\acluster\x18\x01 \x01(\v2\x10.vtadmin.ClusterR\acluster\x12E\n" + + "\x10schema_migration\x18\x02 \x01(\v2\x1a.vtctldata.SchemaMigrationR\x0fschemaMigration\"[\n" + + "\x05Shard\x12*\n" + + "\acluster\x18\x01 \x01(\v2\x10.vtadmin.ClusterR\acluster\x12&\n" + + "\x05shard\x18\x02 \x01(\v2\x10.vtctldata.ShardR\x05shard\"\x83\x01\n" + + "\n" + + "SrvVSchema\x12\x12\n" + + "\x04cell\x18\x01 \x01(\tR\x04cell\x12*\n" + + "\acluster\x18\x02 \x01(\v2\x10.vtadmin.ClusterR\acluster\x125\n" + + "\fsrv_v_schema\x18\x03 \x01(\v2\x13.vschema.SrvVSchemaR\n" + + "srvVSchema\"\xe1\x01\n" + + "\x06Tablet\x12*\n" + + "\acluster\x18\x01 \x01(\v2\x10.vtadmin.ClusterR\acluster\x12(\n" + + "\x06tablet\x18\x02 \x01(\v2\x10.topodata.TabletR\x06tablet\x122\n" + + "\x05state\x18\x03 \x01(\x0e2\x1c.vtadmin.Tablet.ServingStateR\x05state\x12\x12\n" + + "\x04FQDN\x18\x04 \x01(\tR\x04FQDN\"9\n" + + "\fServingState\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\v\n" + + "\aSERVING\x10\x01\x12\x0f\n" + + "\vNOT_SERVING\x10\x02\"w\n" + + "\aVSchema\x12*\n" + + "\acluster\x18\x01 \x01(\v2\x10.vtadmin.ClusterR\acluster\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12,\n" + + "\bv_schema\x18\x03 \x01(\v2\x11.vschema.KeyspaceR\avSchema\"d\n" + + "\x06Vtctld\x12\x1a\n" + + "\bhostname\x18\x01 \x01(\tR\bhostname\x12*\n" + + "\acluster\x18\x02 \x01(\v2\x10.vtadmin.ClusterR\acluster\x12\x12\n" + + "\x04FQDN\x18\x03 \x01(\tR\x04FQDN\"\xaa\x01\n" + + "\x06VTGate\x12\x1a\n" + + "\bhostname\x18\x01 \x01(\tR\bhostname\x12\x12\n" + + "\x04pool\x18\x02 \x01(\tR\x04pool\x12\x12\n" + + "\x04cell\x18\x03 \x01(\tR\x04cell\x12*\n" + + "\acluster\x18\x04 \x01(\v2\x10.vtadmin.ClusterR\acluster\x12\x1c\n" + + "\tkeyspaces\x18\x05 \x03(\tR\tkeyspaces\x12\x12\n" + + "\x04FQDN\x18\x06 \x01(\tR\x04FQDN\"\x83\x01\n" + + "\bWorkflow\x12*\n" + + "\acluster\x18\x01 \x01(\v2\x10.vtadmin.ClusterR\acluster\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12/\n" + + "\bworkflow\x18\x03 \x01(\v2\x13.vtctldata.WorkflowR\bworkflow\"r\n" + + "\x15WorkflowDeleteRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12:\n" + + "\arequest\x18\x02 \x01(\v2 .vtctldata.WorkflowDeleteRequestR\arequest\"\x80\x01\n" + + "\x1cWorkflowSwitchTrafficRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12A\n" + + "\arequest\x18\x02 \x01(\v2'.vtctldata.WorkflowSwitchTrafficRequestR\arequest\"\x9b\x01\n" + + "\x12ApplySchemaRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12\x10\n" + + "\x03sql\x18\x02 \x01(\tR\x03sql\x12\x1b\n" + + "\tcaller_id\x18\x03 \x01(\tR\bcallerId\x127\n" + + "\arequest\x18\x04 \x01(\v2\x1d.vtctldata.ApplySchemaRequestR\arequest\"\x80\x01\n" + + "\x1cCancelSchemaMigrationRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12A\n" + + "\arequest\x18\x02 \x01(\v2'.vtctldata.CancelSchemaMigrationRequestR\arequest\"\x82\x01\n" + + "\x1dCleanupSchemaMigrationRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12B\n" + + "\arequest\x18\x02 \x01(\v2(.vtctldata.CleanupSchemaMigrationRequestR\arequest\"\x84\x01\n" + + "\x1eCompleteSchemaMigrationRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12C\n" + + "\arequest\x18\x02 \x01(\v2).vtctldata.CompleteSchemaMigrationRequestR\arequest\"O\n" + + "\x1aConcludeTransactionRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12\x12\n" + + "\x04dtid\x18\x02 \x01(\tR\x04dtid\"r\n" + + "\x15CreateKeyspaceRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12:\n" + + "\aoptions\x18\x02 \x01(\v2 .vtctldata.CreateKeyspaceRequestR\aoptions\"G\n" + + "\x16CreateKeyspaceResponse\x12-\n" + + "\bkeyspace\x18\x01 \x01(\v2\x11.vtadmin.KeyspaceR\bkeyspace\"l\n" + + "\x12CreateShardRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x127\n" + + "\aoptions\x18\x02 \x01(\v2\x1d.vtctldata.CreateShardRequestR\aoptions\"r\n" + + "\x15DeleteKeyspaceRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12:\n" + + "\aoptions\x18\x02 \x01(\v2 .vtctldata.DeleteKeyspaceRequestR\aoptions\"n\n" + + "\x13DeleteShardsRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x128\n" + + "\aoptions\x18\x02 \x01(\v2\x1e.vtctldata.DeleteShardsRequestR\aoptions\"\x88\x01\n" + + "\x13DeleteTabletRequest\x12+\n" + + "\x05alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\x05alias\x12\x1f\n" + + "\vcluster_ids\x18\x02 \x03(\tR\n" + + "clusterIds\x12#\n" + + "\rallow_primary\x18\x03 \x01(\bR\fallowPrimary\"Z\n" + + "\x14DeleteTabletResponse\x12\x16\n" + + "\x06status\x18\x01 \x01(\tR\x06status\x12*\n" + + "\acluster\x18\x02 \x01(\v2\x10.vtadmin.ClusterR\acluster\"\x82\x01\n" + + "\x1dEmergencyFailoverShardRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12B\n" + + "\aoptions\x18\x02 \x01(\v2(.vtctldata.EmergencyReparentShardRequestR\aoptions\"\xe8\x01\n" + + "\x1eEmergencyFailoverShardResponse\x12*\n" + + "\acluster\x18\x01 \x01(\v2\x10.vtadmin.ClusterR\acluster\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x03 \x01(\tR\x05shard\x12@\n" + + "\x10promoted_primary\x18\x04 \x01(\v2\x15.topodata.TabletAliasR\x0fpromotedPrimary\x12&\n" + + "\x06events\x18\x05 \x03(\v2\x0e.logutil.EventR\x06events\"\x9c\x01\n" + + "\x11FindSchemaRequest\x12\x14\n" + + "\x05table\x18\x01 \x01(\tR\x05table\x12\x1f\n" + + "\vcluster_ids\x18\x02 \x03(\tR\n" + + "clusterIds\x12P\n" + + "\x12table_size_options\x18\x03 \x01(\v2\".vtadmin.GetSchemaTableSizeOptionsR\x10tableSizeOptions\"\xc2\x01\n" + + "\x11GetBackupsRequest\x12\x1f\n" + + "\vcluster_ids\x18\x01 \x03(\tR\n" + + "clusterIds\x12\x1c\n" + + "\tkeyspaces\x18\x02 \x03(\tR\tkeyspaces\x12'\n" + + "\x0fkeyspace_shards\x18\x03 \x03(\tR\x0ekeyspaceShards\x12E\n" + + "\x0frequest_options\x18\x04 \x01(\v2\x1c.vtctldata.GetBackupsRequestR\x0erequestOptions\"F\n" + + "\x12GetBackupsResponse\x120\n" + + "\abackups\x18\x01 \x03(\v2\x16.vtadmin.ClusterBackupR\abackups\"k\n" + + "\x13GetCellInfosRequest\x12\x1f\n" + + "\vcluster_ids\x18\x01 \x03(\tR\n" + + "clusterIds\x12\x14\n" + + "\x05cells\x18\x02 \x03(\tR\x05cells\x12\x1d\n" + + "\n" + + "names_only\x18\x03 \x01(\bR\tnamesOnly\"O\n" + + "\x14GetCellInfosResponse\x127\n" + + "\n" + + "cell_infos\x18\x01 \x03(\v2\x18.vtadmin.ClusterCellInfoR\tcellInfos\"9\n" + + "\x16GetCellsAliasesRequest\x12\x1f\n" + + "\vcluster_ids\x18\x01 \x03(\tR\n" + + "clusterIds\"Q\n" + + "\x17GetCellsAliasesResponse\x126\n" + + "\aaliases\x18\x01 \x03(\v2\x1c.vtadmin.ClusterCellsAliasesR\aaliases\"\x14\n" + + "\x12GetClustersRequest\"C\n" + + "\x13GetClustersResponse\x12,\n" + + "\bclusters\x18\x01 \x03(\v2\x10.vtadmin.ClusterR\bclusters\"b\n" + + "\x14GetFullStatusRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12+\n" + + "\x05alias\x18\x02 \x01(\v2\x15.topodata.TabletAliasR\x05alias\"2\n" + + "\x0fGetGatesRequest\x12\x1f\n" + + "\vcluster_ids\x18\x01 \x03(\tR\n" + + "clusterIds\"9\n" + + "\x10GetGatesResponse\x12%\n" + + "\x05gates\x18\x01 \x03(\v2\x0f.vtadmin.VTGateR\x05gates\"O\n" + + "\x12GetKeyspaceRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\"6\n" + + "\x13GetKeyspacesRequest\x12\x1f\n" + + "\vcluster_ids\x18\x01 \x03(\tR\n" + + "clusterIds\"G\n" + + "\x14GetKeyspacesResponse\x12/\n" + + "\tkeyspaces\x18\x01 \x03(\v2\x11.vtadmin.KeyspaceR\tkeyspaces\"\xb5\x01\n" + + "\x10GetSchemaRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05table\x18\x03 \x01(\tR\x05table\x12P\n" + + "\x12table_size_options\x18\x04 \x01(\v2\".vtadmin.GetSchemaTableSizeOptionsR\x10tableSizeOptions\"\x86\x01\n" + + "\x11GetSchemasRequest\x12\x1f\n" + + "\vcluster_ids\x18\x01 \x03(\tR\n" + + "clusterIds\x12P\n" + + "\x12table_size_options\x18\x02 \x01(\v2\".vtadmin.GetSchemaTableSizeOptionsR\x10tableSizeOptions\"?\n" + + "\x12GetSchemasResponse\x12)\n" + + "\aschemas\x18\x01 \x03(\v2\x0f.vtadmin.SchemaR\aschemas\"\xed\x01\n" + + "\x1aGetSchemaMigrationsRequest\x12]\n" + + "\x10cluster_requests\x18\x01 \x03(\v22.vtadmin.GetSchemaMigrationsRequest.ClusterRequestR\x0fclusterRequests\x1ap\n" + + "\x0eClusterRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12?\n" + + "\arequest\x18\x02 \x01(\v2%.vtctldata.GetSchemaMigrationsRequestR\arequest\"d\n" + + "\x1bGetSchemaMigrationsResponse\x12E\n" + + "\x11schema_migrations\x18\x01 \x03(\v2\x18.vtadmin.SchemaMigrationR\x10schemaMigrations\"\x8d\x01\n" + + "#GetShardReplicationPositionsRequest\x12\x1f\n" + + "\vcluster_ids\x18\x01 \x03(\tR\n" + + "clusterIds\x12\x1c\n" + + "\tkeyspaces\x18\x02 \x03(\tR\tkeyspaces\x12'\n" + + "\x0fkeyspace_shards\x18\x03 \x03(\tR\x0ekeyspaceShards\"\x85\x01\n" + + "$GetShardReplicationPositionsResponse\x12]\n" + + "\x15replication_positions\x18\x01 \x03(\v2(.vtadmin.ClusterShardReplicationPositionR\x14replicationPositions\"h\n" + + "\x15GetSrvKeyspaceRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05cells\x18\x03 \x03(\tR\x05cells\"O\n" + + "\x16GetSrvKeyspacesRequest\x12\x1f\n" + + "\vcluster_ids\x18\x01 \x03(\tR\n" + + "clusterIds\x12\x14\n" + + "\x05cells\x18\x02 \x03(\tR\x05cells\"\xd7\x01\n" + + "\x17GetSrvKeyspacesResponse\x12W\n" + + "\rsrv_keyspaces\x18\x01 \x03(\v22.vtadmin.GetSrvKeyspacesResponse.SrvKeyspacesEntryR\fsrvKeyspaces\x1ac\n" + + "\x11SrvKeyspacesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x128\n" + + "\x05value\x18\x02 \x01(\v2\".vtctldata.GetSrvKeyspacesResponseR\x05value:\x028\x01\"I\n" + + "\x14GetSrvVSchemaRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12\x12\n" + + "\x04cell\x18\x02 \x01(\tR\x04cell\"N\n" + + "\x15GetSrvVSchemasRequest\x12\x1f\n" + + "\vcluster_ids\x18\x01 \x03(\tR\n" + + "clusterIds\x12\x14\n" + + "\x05cells\x18\x02 \x03(\tR\x05cells\"Q\n" + + "\x16GetSrvVSchemasResponse\x127\n" + + "\rsrv_v_schemas\x18\x01 \x03(\v2\x13.vtadmin.SrvVSchemaR\vsrvVSchemas\"\x81\x01\n" + + "\x19GetSchemaTableSizeOptions\x12'\n" + + "\x0faggregate_sizes\x18\x01 \x01(\bR\x0eaggregateSizes\x12;\n" + + "\x1ainclude_non_serving_shards\x18\x02 \x01(\bR\x17includeNonServingShards\"`\n" + + "\x10GetTabletRequest\x12+\n" + + "\x05alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\x05alias\x12\x1f\n" + + "\vcluster_ids\x18\x02 \x03(\tR\n" + + "clusterIds\"4\n" + + "\x11GetTabletsRequest\x12\x1f\n" + + "\vcluster_ids\x18\x01 \x03(\tR\n" + + "clusterIds\"?\n" + + "\x12GetTabletsResponse\x12)\n" + + "\atablets\x18\x01 \x03(\v2\x0f.vtadmin.TabletR\atablets\"K\n" + + "\x16GetTopologyPathRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12\x12\n" + + "\x04path\x18\x02 \x01(\tR\x04path\"z\n" + + "\x19GetTransactionInfoRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12>\n" + + "\arequest\x18\x02 \x01(\v2$.vtctldata.GetTransactionInfoRequestR\arequest\"~\n" + + " GetUnresolvedTransactionsRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12\x1f\n" + + "\vabandon_age\x18\x03 \x01(\x03R\n" + + "abandonAge\"N\n" + + "\x11GetVSchemaRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\"5\n" + + "\x12GetVSchemasRequest\x12\x1f\n" + + "\vcluster_ids\x18\x01 \x03(\tR\n" + + "clusterIds\"D\n" + + "\x13GetVSchemasResponse\x12-\n" + + "\tv_schemas\x18\x01 \x03(\v2\x10.vtadmin.VSchemaR\bvSchemas\"4\n" + + "\x11GetVtctldsRequest\x12\x1f\n" + + "\vcluster_ids\x18\x01 \x03(\tR\n" + + "clusterIds\"?\n" + + "\x12GetVtctldsResponse\x12)\n" + + "\avtctlds\x18\x01 \x03(\v2\x0f.vtadmin.VtctldR\avtctlds\"\x84\x01\n" + + "\x12GetWorkflowRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12\x12\n" + + "\x04name\x18\x03 \x01(\tR\x04name\x12\x1f\n" + + "\vactive_only\x18\x04 \x01(\bR\n" + + "activeOnly\"i\n" + + "\x18GetWorkflowStatusRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12\x12\n" + + "\x04name\x18\x03 \x01(\tR\x04name\"m\n" + + "\x14StartWorkflowRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12\x1a\n" + + "\bworkflow\x18\x03 \x01(\tR\bworkflow\"l\n" + + "\x13StopWorkflowRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12\x1a\n" + + "\bworkflow\x18\x03 \x01(\tR\bworkflow\"\xa0\x01\n" + + "\x13GetWorkflowsRequest\x12\x1f\n" + + "\vcluster_ids\x18\x01 \x03(\tR\n" + + "clusterIds\x12\x1f\n" + + "\vactive_only\x18\x02 \x01(\bR\n" + + "activeOnly\x12\x1c\n" + + "\tkeyspaces\x18\x03 \x03(\tR\tkeyspaces\x12)\n" + + "\x10ignore_keyspaces\x18\x04 \x03(\tR\x0fignoreKeyspaces\"\xe1\x01\n" + + "\x14GetWorkflowsResponse\x12g\n" + + "\x14workflows_by_cluster\x18\x01 \x03(\v25.vtadmin.GetWorkflowsResponse.WorkflowsByClusterEntryR\x12workflowsByCluster\x1a`\n" + + "\x17WorkflowsByClusterEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12/\n" + + "\x05value\x18\x02 \x01(\v2\x19.vtadmin.ClusterWorkflowsR\x05value:\x028\x01\"\x80\x01\n" + + "\x1cLaunchSchemaMigrationRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12A\n" + + "\arequest\x18\x02 \x01(\v2'.vtctldata.LaunchSchemaMigrationRequestR\arequest\"\x9f\x01\n" + + "\x18MaterializeCreateRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12%\n" + + "\x0etable_settings\x18\x02 \x01(\tR\rtableSettings\x12=\n" + + "\arequest\x18\x03 \x01(\v2#.vtctldata.MaterializeCreateRequestR\arequest\"z\n" + + "\x19MoveTablesCompleteRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12>\n" + + "\arequest\x18\x02 \x01(\v2$.vtctldata.MoveTablesCompleteRequestR\arequest\"v\n" + + "\x17MoveTablesCreateRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12<\n" + + "\arequest\x18\x02 \x01(\v2\".vtctldata.MoveTablesCreateRequestR\arequest\"a\n" + + "\x11PingTabletRequest\x12+\n" + + "\x05alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\x05alias\x12\x1f\n" + + "\vcluster_ids\x18\x02 \x03(\tR\n" + + "clusterIds\"X\n" + + "\x12PingTabletResponse\x12\x16\n" + + "\x06status\x18\x01 \x01(\tR\x06status\x12*\n" + + "\acluster\x18\x02 \x01(\v2\x10.vtadmin.ClusterR\acluster\"~\n" + + "\x1bPlannedFailoverShardRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12@\n" + + "\aoptions\x18\x02 \x01(\v2&.vtctldata.PlannedReparentShardRequestR\aoptions\"\xe6\x01\n" + + "\x1cPlannedFailoverShardResponse\x12*\n" + + "\acluster\x18\x01 \x01(\v2\x10.vtadmin.ClusterR\acluster\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x03 \x01(\tR\x05shard\x12@\n" + + "\x10promoted_primary\x18\x04 \x01(\v2\x15.topodata.TabletAliasR\x0fpromotedPrimary\x12&\n" + + "\x06events\x18\x05 \x03(\v2\x0e.logutil.EventR\x06events\"\x93\x01\n" + + "\x1bRebuildKeyspaceGraphRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05cells\x18\x03 \x03(\tR\x05cells\x12#\n" + + "\rallow_partial\x18\x04 \x01(\bR\fallowPartial\"6\n" + + "\x1cRebuildKeyspaceGraphResponse\x12\x16\n" + + "\x06status\x18\x01 \x01(\tR\x06status\"c\n" + + "\x13RefreshStateRequest\x12+\n" + + "\x05alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\x05alias\x12\x1f\n" + + "\vcluster_ids\x18\x02 \x03(\tR\n" + + "clusterIds\"Z\n" + + "\x14RefreshStateResponse\x12\x16\n" + + "\x06status\x18\x01 \x01(\tR\x06status\x12*\n" + + "\acluster\x18\x02 \x01(\v2\x10.vtadmin.ClusterR\acluster\"\x9f\x02\n" + + "\x14ReloadSchemasRequest\x12\x1c\n" + + "\tkeyspaces\x18\x01 \x03(\tR\tkeyspaces\x12'\n" + + "\x0fkeyspace_shards\x18\x02 \x03(\tR\x0ekeyspaceShards\x12/\n" + + "\atablets\x18\x03 \x03(\v2\x15.topodata.TabletAliasR\atablets\x12\x1f\n" + + "\vcluster_ids\x18\x04 \x03(\tR\n" + + "clusterIds\x12 \n" + + "\vconcurrency\x18\x05 \x01(\x05R\vconcurrency\x12#\n" + + "\rwait_position\x18\x06 \x01(\tR\fwaitPosition\x12'\n" + + "\x0finclude_primary\x18\a \x01(\bR\x0eincludePrimary\"\xad\x04\n" + + "\x15ReloadSchemasResponse\x12X\n" + + "\x10keyspace_results\x18\x01 \x03(\v2-.vtadmin.ReloadSchemasResponse.KeyspaceResultR\x0fkeyspaceResults\x12O\n" + + "\rshard_results\x18\x02 \x03(\v2*.vtadmin.ReloadSchemasResponse.ShardResultR\fshardResults\x12R\n" + + "\x0etablet_results\x18\x03 \x03(\v2+.vtadmin.ReloadSchemasResponse.TabletResultR\rtabletResults\x1ag\n" + + "\x0eKeyspaceResult\x12-\n" + + "\bkeyspace\x18\x01 \x01(\v2\x11.vtadmin.KeyspaceR\bkeyspace\x12&\n" + + "\x06events\x18\x02 \x03(\v2\x0e.logutil.EventR\x06events\x1a[\n" + + "\vShardResult\x12$\n" + + "\x05shard\x18\x01 \x01(\v2\x0e.vtadmin.ShardR\x05shard\x12&\n" + + "\x06events\x18\x02 \x03(\v2\x0e.logutil.EventR\x06events\x1aO\n" + + "\fTabletResult\x12'\n" + + "\x06tablet\x18\x01 \x01(\v2\x0f.vtadmin.TabletR\x06tablet\x12\x16\n" + + "\x06result\x18\x02 \x01(\tR\x06result\"\xdb\x01\n" + + "\x18ReloadSchemaShardRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x03 \x01(\tR\x05shard\x12#\n" + + "\rwait_position\x18\x04 \x01(\tR\fwaitPosition\x12'\n" + + "\x0finclude_primary\x18\x05 \x01(\bR\x0eincludePrimary\x12 \n" + + "\vconcurrency\x18\x06 \x01(\x05R\vconcurrency\"C\n" + + "\x19ReloadSchemaShardResponse\x12&\n" + + "\x06events\x18\x01 \x03(\v2\x0e.logutil.EventR\x06events\"u\n" + + "%RefreshTabletReplicationSourceRequest\x12+\n" + + "\x05alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\x05alias\x12\x1f\n" + + "\vcluster_ids\x18\x02 \x03(\tR\n" + + "clusterIds\"\xb7\x01\n" + + "&RefreshTabletReplicationSourceResponse\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x12/\n" + + "\aprimary\x18\x03 \x01(\v2\x15.topodata.TabletAliasR\aprimary\x12*\n" + + "\acluster\x18\x04 \x01(\v2\x10.vtadmin.ClusterR\acluster\"\x9e\x01\n" + + "\x19RemoveKeyspaceCellRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12\x12\n" + + "\x04cell\x18\x03 \x01(\tR\x04cell\x12\x14\n" + + "\x05force\x18\x04 \x01(\bR\x05force\x12\x1c\n" + + "\trecursive\x18\x05 \x01(\bR\trecursive\"4\n" + + "\x1aRemoveKeyspaceCellResponse\x12\x16\n" + + "\x06status\x18\x01 \x01(\tR\x06status\"~\n" + + "\x1bRetrySchemaMigrationRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12@\n" + + "\arequest\x18\x02 \x01(\v2&.vtctldata.RetrySchemaMigrationRequestR\arequest\"e\n" + + "\x15RunHealthCheckRequest\x12+\n" + + "\x05alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\x05alias\x12\x1f\n" + + "\vcluster_ids\x18\x02 \x03(\tR\n" + + "clusterIds\"\\\n" + + "\x16RunHealthCheckResponse\x12\x16\n" + + "\x06status\x18\x01 \x01(\tR\x06status\x12*\n" + + "\acluster\x18\x02 \x01(\v2\x10.vtadmin.ClusterR\acluster\"p\n" + + "\x14ReshardCreateRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x129\n" + + "\arequest\x18\x02 \x01(\v2\x1f.vtctldata.ReshardCreateRequestR\arequest\"b\n" + + "\x12SetReadOnlyRequest\x12+\n" + + "\x05alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\x05alias\x12\x1f\n" + + "\vcluster_ids\x18\x02 \x03(\tR\n" + + "clusterIds\"\x15\n" + + "\x13SetReadOnlyResponse\"c\n" + + "\x13SetReadWriteRequest\x12+\n" + + "\x05alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\x05alias\x12\x1f\n" + + "\vcluster_ids\x18\x02 \x03(\tR\n" + + "clusterIds\"\x16\n" + + "\x14SetReadWriteResponse\"g\n" + + "\x17StartReplicationRequest\x12+\n" + + "\x05alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\x05alias\x12\x1f\n" + + "\vcluster_ids\x18\x02 \x03(\tR\n" + + "clusterIds\"^\n" + + "\x18StartReplicationResponse\x12\x16\n" + + "\x06status\x18\x01 \x01(\tR\x06status\x12*\n" + + "\acluster\x18\x02 \x01(\v2\x10.vtadmin.ClusterR\acluster\"f\n" + + "\x16StopReplicationRequest\x12+\n" + + "\x05alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\x05alias\x12\x1f\n" + + "\vcluster_ids\x18\x02 \x03(\tR\n" + + "clusterIds\"]\n" + + "\x17StopReplicationResponse\x12\x16\n" + + "\x06status\x18\x01 \x01(\tR\x06status\x12*\n" + + "\acluster\x18\x02 \x01(\v2\x10.vtadmin.ClusterR\acluster\"o\n" + + "\x1fTabletExternallyPromotedRequest\x12+\n" + + "\x05alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\x05alias\x12\x1f\n" + + "\vcluster_ids\x18\x02 \x03(\tR\n" + + "clusterIds\"\xf0\x01\n" + + " TabletExternallyPromotedResponse\x12*\n" + + "\acluster\x18\x01 \x01(\v2\x10.vtadmin.ClusterR\acluster\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x03 \x01(\tR\x05shard\x126\n" + + "\vnew_primary\x18\x04 \x01(\v2\x15.topodata.TabletAliasR\n" + + "newPrimary\x126\n" + + "\vold_primary\x18\x05 \x01(\v2\x15.topodata.TabletAliasR\n" + + "oldPrimary\"q\n" + + "!TabletExternallyReparentedRequest\x12+\n" + + "\x05alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\x05alias\x12\x1f\n" + + "\vcluster_ids\x18\x02 \x03(\tR\n" + + "clusterIds\"S\n" + + "\x0fValidateRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12!\n" + + "\fping_tablets\x18\x02 \x01(\bR\vpingTablets\"w\n" + + "\x17ValidateKeyspaceRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12!\n" + + "\fping_tablets\x18\x03 \x01(\bR\vpingTablets\"Z\n" + + "\x1dValidateSchemaKeyspaceRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\"\x8a\x01\n" + + "\x14ValidateShardRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x03 \x01(\tR\x05shard\x12!\n" + + "\fping_tablets\x18\x04 \x01(\bR\vpingTablets\"[\n" + + "\x1eValidateVersionKeyspaceRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\"n\n" + + "\x1bValidateVersionShardRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x03 \x01(\tR\x05shard\"l\n" + + "\x12VDiffCreateRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x127\n" + + "\arequest\x18\x02 \x01(\v2\x1d.vtctldata.VDiffCreateRequestR\arequest\"h\n" + + "\x10VDiffShowRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x125\n" + + "\arequest\x18\x02 \x01(\v2\x1b.vtctldata.VDiffShowRequestR\arequest\"A\n" + + "\rVDiffProgress\x12\x1e\n" + + "\n" + + "percentage\x18\x01 \x01(\x01R\n" + + "percentage\x12\x10\n" + + "\x03eta\x18\x02 \x01(\tR\x03eta\"\xe6\x01\n" + + "\x10VDiffShardReport\x12\x14\n" + + "\x05state\x18\x01 \x01(\tR\x05state\x12#\n" + + "\rrows_compared\x18\x02 \x01(\x03R\frowsCompared\x12!\n" + + "\fhas_mismatch\x18\x03 \x01(\bR\vhasMismatch\x12\x1d\n" + + "\n" + + "started_at\x18\x04 \x01(\tR\tstartedAt\x12!\n" + + "\fcompleted_at\x18\x05 \x01(\tR\vcompletedAt\x122\n" + + "\bprogress\x18\x06 \x01(\v2\x16.vtadmin.VDiffProgressR\bprogress\"\xbe\x01\n" + + "\x11VDiffShowResponse\x12N\n" + + "\fshard_report\x18\x01 \x03(\v2+.vtadmin.VDiffShowResponse.ShardReportEntryR\vshardReport\x1aY\n" + + "\x10ShardReportEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12/\n" + + "\x05value\x18\x02 \x01(\v2\x19.vtadmin.VDiffShardReportR\x05value:\x028\x01\"Z\n" + + "\x10VTExplainRequest\x12\x18\n" + + "\acluster\x18\x01 \x01(\tR\acluster\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12\x10\n" + + "\x03sql\x18\x03 \x01(\tR\x03sql\"/\n" + + "\x11VTExplainResponse\x12\x1a\n" + + "\bresponse\x18\x01 \x01(\tR\bresponse\"^\n" + + "\x0fVExplainRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12\x10\n" + + "\x03sql\x18\x03 \x01(\tR\x03sql\".\n" + + "\x10VExplainResponse\x12\x1a\n" + + "\bresponse\x18\x01 \x01(\tR\bresponse2\x802\n" + + "\aVTAdmin\x12L\n" + + "\vApplySchema\x12\x1b.vtadmin.ApplySchemaRequest\x1a\x1e.vtctldata.ApplySchemaResponse\"\x00\x12j\n" + + "\x15CancelSchemaMigration\x12%.vtadmin.CancelSchemaMigrationRequest\x1a(.vtctldata.CancelSchemaMigrationResponse\"\x00\x12m\n" + + "\x16CleanupSchemaMigration\x12&.vtadmin.CleanupSchemaMigrationRequest\x1a).vtctldata.CleanupSchemaMigrationResponse\"\x00\x12p\n" + + "\x17CompleteSchemaMigration\x12'.vtadmin.CompleteSchemaMigrationRequest\x1a*.vtctldata.CompleteSchemaMigrationResponse\"\x00\x12d\n" + + "\x13ConcludeTransaction\x12#.vtadmin.ConcludeTransactionRequest\x1a&.vtctldata.ConcludeTransactionResponse\"\x00\x12S\n" + + "\x0eCreateKeyspace\x12\x1e.vtadmin.CreateKeyspaceRequest\x1a\x1f.vtadmin.CreateKeyspaceResponse\"\x00\x12L\n" + + "\vCreateShard\x12\x1b.vtadmin.CreateShardRequest\x1a\x1e.vtctldata.CreateShardResponse\"\x00\x12U\n" + + "\x0eDeleteKeyspace\x12\x1e.vtadmin.DeleteKeyspaceRequest\x1a!.vtctldata.DeleteKeyspaceResponse\"\x00\x12O\n" + + "\fDeleteShards\x12\x1c.vtadmin.DeleteShardsRequest\x1a\x1f.vtctldata.DeleteShardsResponse\"\x00\x12M\n" + + "\fDeleteTablet\x12\x1c.vtadmin.DeleteTabletRequest\x1a\x1d.vtadmin.DeleteTabletResponse\"\x00\x12k\n" + + "\x16EmergencyFailoverShard\x12&.vtadmin.EmergencyFailoverShardRequest\x1a'.vtadmin.EmergencyFailoverShardResponse\"\x00\x12;\n" + + "\n" + + "FindSchema\x12\x1a.vtadmin.FindSchemaRequest\x1a\x0f.vtadmin.Schema\"\x00\x12G\n" + + "\n" + + "GetBackups\x12\x1a.vtadmin.GetBackupsRequest\x1a\x1b.vtadmin.GetBackupsResponse\"\x00\x12M\n" + + "\fGetCellInfos\x12\x1c.vtadmin.GetCellInfosRequest\x1a\x1d.vtadmin.GetCellInfosResponse\"\x00\x12V\n" + + "\x0fGetCellsAliases\x12\x1f.vtadmin.GetCellsAliasesRequest\x1a .vtadmin.GetCellsAliasesResponse\"\x00\x12J\n" + + "\vGetClusters\x12\x1b.vtadmin.GetClustersRequest\x1a\x1c.vtadmin.GetClustersResponse\"\x00\x12R\n" + + "\rGetFullStatus\x12\x1d.vtadmin.GetFullStatusRequest\x1a .vtctldata.GetFullStatusResponse\"\x00\x12A\n" + + "\bGetGates\x12\x18.vtadmin.GetGatesRequest\x1a\x19.vtadmin.GetGatesResponse\"\x00\x12?\n" + + "\vGetKeyspace\x12\x1b.vtadmin.GetKeyspaceRequest\x1a\x11.vtadmin.Keyspace\"\x00\x12M\n" + + "\fGetKeyspaces\x12\x1c.vtadmin.GetKeyspacesRequest\x1a\x1d.vtadmin.GetKeyspacesResponse\"\x00\x129\n" + + "\tGetSchema\x12\x19.vtadmin.GetSchemaRequest\x1a\x0f.vtadmin.Schema\"\x00\x12G\n" + + "\n" + + "GetSchemas\x12\x1a.vtadmin.GetSchemasRequest\x1a\x1b.vtadmin.GetSchemasResponse\"\x00\x12b\n" + + "\x13GetSchemaMigrations\x12#.vtadmin.GetSchemaMigrationsRequest\x1a$.vtadmin.GetSchemaMigrationsResponse\"\x00\x12}\n" + + "\x1cGetShardReplicationPositions\x12,.vtadmin.GetShardReplicationPositionsRequest\x1a-.vtadmin.GetShardReplicationPositionsResponse\"\x00\x12V\n" + + "\x0eGetSrvKeyspace\x12\x1e.vtadmin.GetSrvKeyspaceRequest\x1a\".vtctldata.GetSrvKeyspacesResponse\"\x00\x12V\n" + + "\x0fGetSrvKeyspaces\x12\x1f.vtadmin.GetSrvKeyspacesRequest\x1a .vtadmin.GetSrvKeyspacesResponse\"\x00\x12E\n" + + "\rGetSrvVSchema\x12\x1d.vtadmin.GetSrvVSchemaRequest\x1a\x13.vtadmin.SrvVSchema\"\x00\x12S\n" + + "\x0eGetSrvVSchemas\x12\x1e.vtadmin.GetSrvVSchemasRequest\x1a\x1f.vtadmin.GetSrvVSchemasResponse\"\x00\x129\n" + + "\tGetTablet\x12\x19.vtadmin.GetTabletRequest\x1a\x0f.vtadmin.Tablet\"\x00\x12G\n" + + "\n" + + "GetTablets\x12\x1a.vtadmin.GetTabletsRequest\x1a\x1b.vtadmin.GetTabletsResponse\"\x00\x12X\n" + + "\x0fGetTopologyPath\x12\x1f.vtadmin.GetTopologyPathRequest\x1a\".vtctldata.GetTopologyPathResponse\"\x00\x12a\n" + + "\x12GetTransactionInfo\x12\".vtadmin.GetTransactionInfoRequest\x1a%.vtctldata.GetTransactionInfoResponse\"\x00\x12v\n" + + "\x19GetUnresolvedTransactions\x12).vtadmin.GetUnresolvedTransactionsRequest\x1a,.vtctldata.GetUnresolvedTransactionsResponse\"\x00\x12<\n" + + "\n" + + "GetVSchema\x12\x1a.vtadmin.GetVSchemaRequest\x1a\x10.vtadmin.VSchema\"\x00\x12J\n" + + "\vGetVSchemas\x12\x1b.vtadmin.GetVSchemasRequest\x1a\x1c.vtadmin.GetVSchemasResponse\"\x00\x12G\n" + + "\n" + + "GetVtctlds\x12\x1a.vtadmin.GetVtctldsRequest\x1a\x1b.vtadmin.GetVtctldsResponse\"\x00\x12?\n" + + "\vGetWorkflow\x12\x1b.vtadmin.GetWorkflowRequest\x1a\x11.vtadmin.Workflow\"\x00\x12M\n" + + "\fGetWorkflows\x12\x1c.vtadmin.GetWorkflowsRequest\x1a\x1d.vtadmin.GetWorkflowsResponse\"\x00\x12[\n" + + "\x11GetWorkflowStatus\x12!.vtadmin.GetWorkflowStatusRequest\x1a!.vtctldata.WorkflowStatusResponse\"\x00\x12S\n" + + "\rStartWorkflow\x12\x1d.vtadmin.StartWorkflowRequest\x1a!.vtctldata.WorkflowUpdateResponse\"\x00\x12Q\n" + + "\fStopWorkflow\x12\x1c.vtadmin.StopWorkflowRequest\x1a!.vtctldata.WorkflowUpdateResponse\"\x00\x12j\n" + + "\x15LaunchSchemaMigration\x12%.vtadmin.LaunchSchemaMigrationRequest\x1a(.vtctldata.LaunchSchemaMigrationResponse\"\x00\x12a\n" + + "\x12MoveTablesComplete\x12\".vtadmin.MoveTablesCompleteRequest\x1a%.vtctldata.MoveTablesCompleteResponse\"\x00\x12Y\n" + + "\x10MoveTablesCreate\x12 .vtadmin.MoveTablesCreateRequest\x1a!.vtctldata.WorkflowStatusResponse\"\x00\x12^\n" + + "\x11MaterializeCreate\x12!.vtadmin.MaterializeCreateRequest\x1a$.vtctldata.MaterializeCreateResponse\"\x00\x12G\n" + + "\n" + + "PingTablet\x12\x1a.vtadmin.PingTabletRequest\x1a\x1b.vtadmin.PingTabletResponse\"\x00\x12e\n" + + "\x14PlannedFailoverShard\x12$.vtadmin.PlannedFailoverShardRequest\x1a%.vtadmin.PlannedFailoverShardResponse\"\x00\x12e\n" + + "\x14RebuildKeyspaceGraph\x12$.vtadmin.RebuildKeyspaceGraphRequest\x1a%.vtadmin.RebuildKeyspaceGraphResponse\"\x00\x12M\n" + + "\fRefreshState\x12\x1c.vtadmin.RefreshStateRequest\x1a\x1d.vtadmin.RefreshStateResponse\"\x00\x12\x83\x01\n" + + "\x1eRefreshTabletReplicationSource\x12..vtadmin.RefreshTabletReplicationSourceRequest\x1a/.vtadmin.RefreshTabletReplicationSourceResponse\"\x00\x12P\n" + + "\rReloadSchemas\x12\x1d.vtadmin.ReloadSchemasRequest\x1a\x1e.vtadmin.ReloadSchemasResponse\"\x00\x12\\\n" + + "\x11ReloadSchemaShard\x12!.vtadmin.ReloadSchemaShardRequest\x1a\".vtadmin.ReloadSchemaShardResponse\"\x00\x12_\n" + + "\x12RemoveKeyspaceCell\x12\".vtadmin.RemoveKeyspaceCellRequest\x1a#.vtadmin.RemoveKeyspaceCellResponse\"\x00\x12g\n" + + "\x14RetrySchemaMigration\x12$.vtadmin.RetrySchemaMigrationRequest\x1a'.vtctldata.RetrySchemaMigrationResponse\"\x00\x12S\n" + + "\x0eRunHealthCheck\x12\x1e.vtadmin.RunHealthCheckRequest\x1a\x1f.vtadmin.RunHealthCheckResponse\"\x00\x12S\n" + + "\rReshardCreate\x12\x1d.vtadmin.ReshardCreateRequest\x1a!.vtctldata.WorkflowStatusResponse\"\x00\x12J\n" + + "\vSetReadOnly\x12\x1b.vtadmin.SetReadOnlyRequest\x1a\x1c.vtadmin.SetReadOnlyResponse\"\x00\x12M\n" + + "\fSetReadWrite\x12\x1c.vtadmin.SetReadWriteRequest\x1a\x1d.vtadmin.SetReadWriteResponse\"\x00\x12Y\n" + + "\x10StartReplication\x12 .vtadmin.StartReplicationRequest\x1a!.vtadmin.StartReplicationResponse\"\x00\x12V\n" + + "\x0fStopReplication\x12\x1f.vtadmin.StopReplicationRequest\x1a .vtadmin.StopReplicationResponse\"\x00\x12q\n" + + "\x18TabletExternallyPromoted\x12(.vtadmin.TabletExternallyPromotedRequest\x1a).vtadmin.TabletExternallyPromotedResponse\"\x00\x12C\n" + + "\bValidate\x12\x18.vtadmin.ValidateRequest\x1a\x1b.vtctldata.ValidateResponse\"\x00\x12[\n" + + "\x10ValidateKeyspace\x12 .vtadmin.ValidateKeyspaceRequest\x1a#.vtctldata.ValidateKeyspaceResponse\"\x00\x12m\n" + + "\x16ValidateSchemaKeyspace\x12&.vtadmin.ValidateSchemaKeyspaceRequest\x1a).vtctldata.ValidateSchemaKeyspaceResponse\"\x00\x12R\n" + + "\rValidateShard\x12\x1d.vtadmin.ValidateShardRequest\x1a .vtctldata.ValidateShardResponse\"\x00\x12p\n" + + "\x17ValidateVersionKeyspace\x12'.vtadmin.ValidateVersionKeyspaceRequest\x1a*.vtctldata.ValidateVersionKeyspaceResponse\"\x00\x12g\n" + + "\x14ValidateVersionShard\x12$.vtadmin.ValidateVersionShardRequest\x1a'.vtctldata.ValidateVersionShardResponse\"\x00\x12L\n" + + "\vVDiffCreate\x12\x1b.vtadmin.VDiffCreateRequest\x1a\x1e.vtctldata.VDiffCreateResponse\"\x00\x12D\n" + + "\tVDiffShow\x12\x19.vtadmin.VDiffShowRequest\x1a\x1a.vtadmin.VDiffShowResponse\"\x00\x12D\n" + + "\tVTExplain\x12\x19.vtadmin.VTExplainRequest\x1a\x1a.vtadmin.VTExplainResponse\"\x00\x12A\n" + + "\bVExplain\x12\x18.vtadmin.VExplainRequest\x1a\x19.vtadmin.VExplainResponse\"\x00\x12U\n" + + "\x0eWorkflowDelete\x12\x1e.vtadmin.WorkflowDeleteRequest\x1a!.vtctldata.WorkflowDeleteResponse\"\x00\x12j\n" + + "\x15WorkflowSwitchTraffic\x12%.vtadmin.WorkflowSwitchTrafficRequest\x1a(.vtctldata.WorkflowSwitchTrafficResponse\"\x00B&Z$vitess.io/vitess/go/vt/proto/vtadminb\x06proto3" var ( file_vtadmin_proto_rawDescOnce sync.Once diff --git a/go/vt/proto/vtctldata/vtctldata.pb.go b/go/vt/proto/vtctldata/vtctldata.pb.go index d092db0cd1a..60908ba6901 100644 --- a/go/vt/proto/vtctldata/vtctldata.pb.go +++ b/go/vt/proto/vtctldata/vtctldata.pb.go @@ -18,7 +18,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v3.21.3 // source: vtctldata.proto @@ -59,6 +59,8 @@ const ( MaterializationIntent_MOVETABLES MaterializationIntent = 1 // CREATELOOKUPINDEX is when we are creating a CreateLookupIndex flow MaterializationIntent_CREATELOOKUPINDEX MaterializationIntent = 2 + // REFERENCE is when we are creating a materialization for reference tables + MaterializationIntent_REFERENCE MaterializationIntent = 3 ) // Enum value maps for MaterializationIntent. @@ -67,11 +69,13 @@ var ( 0: "CUSTOM", 1: "MOVETABLES", 2: "CREATELOOKUPINDEX", + 3: "REFERENCE", } MaterializationIntent_value = map[string]int32{ "CUSTOM": 0, "MOVETABLES": 1, "CREATELOOKUPINDEX": 2, + "REFERENCE": 3, } ) @@ -1276,6 +1280,8 @@ type WorkflowOptions struct { // Where to create any related schema and vschema objects such as // sequence tables. GlobalKeyspace string `protobuf:"bytes,5,opt,name=global_keyspace,json=globalKeyspace,proto3" json:"global_keyspace,omitempty"` + // Lookup Vindexes that are being backfilled by the workflow. + LookupVindexes []string `protobuf:"bytes,6,rep,name=lookup_vindexes,json=lookupVindexes,proto3" json:"lookup_vindexes,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1345,6 +1351,13 @@ func (x *WorkflowOptions) GetGlobalKeyspace() string { return "" } +func (x *WorkflowOptions) GetLookupVindexes() []string { + if x != nil { + return x.LookupVindexes + } + return nil +} + // TODO: comment the hell out of this. type Workflow struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -9024,6 +9037,110 @@ func (*MaterializeCreateResponse) Descriptor() ([]byte, []int) { return file_vtctldata_proto_rawDescGZIP(), []int{145} } +type WorkflowAddTablesRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Workflow string `protobuf:"bytes,1,opt,name=workflow,proto3" json:"workflow,omitempty"` + Keyspace string `protobuf:"bytes,2,opt,name=keyspace,proto3" json:"keyspace,omitempty"` + TableSettings []*TableMaterializeSettings `protobuf:"bytes,3,rep,name=table_settings,json=tableSettings,proto3" json:"table_settings,omitempty"` + MaterializationIntent MaterializationIntent `protobuf:"varint,4,opt,name=materialization_intent,json=materializationIntent,proto3,enum=vtctldata.MaterializationIntent" json:"materialization_intent,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *WorkflowAddTablesRequest) Reset() { + *x = WorkflowAddTablesRequest{} + mi := &file_vtctldata_proto_msgTypes[146] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WorkflowAddTablesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkflowAddTablesRequest) ProtoMessage() {} + +func (x *WorkflowAddTablesRequest) ProtoReflect() protoreflect.Message { + mi := &file_vtctldata_proto_msgTypes[146] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WorkflowAddTablesRequest.ProtoReflect.Descriptor instead. +func (*WorkflowAddTablesRequest) Descriptor() ([]byte, []int) { + return file_vtctldata_proto_rawDescGZIP(), []int{146} +} + +func (x *WorkflowAddTablesRequest) GetWorkflow() string { + if x != nil { + return x.Workflow + } + return "" +} + +func (x *WorkflowAddTablesRequest) GetKeyspace() string { + if x != nil { + return x.Keyspace + } + return "" +} + +func (x *WorkflowAddTablesRequest) GetTableSettings() []*TableMaterializeSettings { + if x != nil { + return x.TableSettings + } + return nil +} + +func (x *WorkflowAddTablesRequest) GetMaterializationIntent() MaterializationIntent { + if x != nil { + return x.MaterializationIntent + } + return MaterializationIntent_CUSTOM +} + +type WorkflowAddTablesResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *WorkflowAddTablesResponse) Reset() { + *x = WorkflowAddTablesResponse{} + mi := &file_vtctldata_proto_msgTypes[147] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WorkflowAddTablesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkflowAddTablesResponse) ProtoMessage() {} + +func (x *WorkflowAddTablesResponse) ProtoReflect() protoreflect.Message { + mi := &file_vtctldata_proto_msgTypes[147] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WorkflowAddTablesResponse.ProtoReflect.Descriptor instead. +func (*WorkflowAddTablesResponse) Descriptor() ([]byte, []int) { + return file_vtctldata_proto_rawDescGZIP(), []int{147} +} + type MigrateCreateRequest struct { state protoimpl.MessageState `protogen:"open.v1"` // The necessary info gets passed on to each primary tablet involved @@ -9058,7 +9175,7 @@ type MigrateCreateRequest struct { func (x *MigrateCreateRequest) Reset() { *x = MigrateCreateRequest{} - mi := &file_vtctldata_proto_msgTypes[146] + mi := &file_vtctldata_proto_msgTypes[148] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9070,7 +9187,7 @@ func (x *MigrateCreateRequest) String() string { func (*MigrateCreateRequest) ProtoMessage() {} func (x *MigrateCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[146] + mi := &file_vtctldata_proto_msgTypes[148] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9083,7 +9200,7 @@ func (x *MigrateCreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MigrateCreateRequest.ProtoReflect.Descriptor instead. func (*MigrateCreateRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{146} + return file_vtctldata_proto_rawDescGZIP(), []int{148} } func (x *MigrateCreateRequest) GetWorkflow() string { @@ -9219,7 +9336,7 @@ type MigrateCompleteRequest struct { func (x *MigrateCompleteRequest) Reset() { *x = MigrateCompleteRequest{} - mi := &file_vtctldata_proto_msgTypes[147] + mi := &file_vtctldata_proto_msgTypes[149] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9231,7 +9348,7 @@ func (x *MigrateCompleteRequest) String() string { func (*MigrateCompleteRequest) ProtoMessage() {} func (x *MigrateCompleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[147] + mi := &file_vtctldata_proto_msgTypes[149] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9244,7 +9361,7 @@ func (x *MigrateCompleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MigrateCompleteRequest.ProtoReflect.Descriptor instead. func (*MigrateCompleteRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{147} + return file_vtctldata_proto_rawDescGZIP(), []int{149} } func (x *MigrateCompleteRequest) GetWorkflow() string { @@ -9299,7 +9416,7 @@ type MigrateCompleteResponse struct { func (x *MigrateCompleteResponse) Reset() { *x = MigrateCompleteResponse{} - mi := &file_vtctldata_proto_msgTypes[148] + mi := &file_vtctldata_proto_msgTypes[150] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9311,7 +9428,7 @@ func (x *MigrateCompleteResponse) String() string { func (*MigrateCompleteResponse) ProtoMessage() {} func (x *MigrateCompleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[148] + mi := &file_vtctldata_proto_msgTypes[150] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9324,7 +9441,7 @@ func (x *MigrateCompleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MigrateCompleteResponse.ProtoReflect.Descriptor instead. func (*MigrateCompleteResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{148} + return file_vtctldata_proto_rawDescGZIP(), []int{150} } func (x *MigrateCompleteResponse) GetSummary() string { @@ -9353,7 +9470,7 @@ type MountRegisterRequest struct { func (x *MountRegisterRequest) Reset() { *x = MountRegisterRequest{} - mi := &file_vtctldata_proto_msgTypes[149] + mi := &file_vtctldata_proto_msgTypes[151] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9365,7 +9482,7 @@ func (x *MountRegisterRequest) String() string { func (*MountRegisterRequest) ProtoMessage() {} func (x *MountRegisterRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[149] + mi := &file_vtctldata_proto_msgTypes[151] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9378,7 +9495,7 @@ func (x *MountRegisterRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MountRegisterRequest.ProtoReflect.Descriptor instead. func (*MountRegisterRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{149} + return file_vtctldata_proto_rawDescGZIP(), []int{151} } func (x *MountRegisterRequest) GetTopoType() string { @@ -9417,7 +9534,7 @@ type MountRegisterResponse struct { func (x *MountRegisterResponse) Reset() { *x = MountRegisterResponse{} - mi := &file_vtctldata_proto_msgTypes[150] + mi := &file_vtctldata_proto_msgTypes[152] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9429,7 +9546,7 @@ func (x *MountRegisterResponse) String() string { func (*MountRegisterResponse) ProtoMessage() {} func (x *MountRegisterResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[150] + mi := &file_vtctldata_proto_msgTypes[152] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9442,7 +9559,7 @@ func (x *MountRegisterResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MountRegisterResponse.ProtoReflect.Descriptor instead. func (*MountRegisterResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{150} + return file_vtctldata_proto_rawDescGZIP(), []int{152} } type MountUnregisterRequest struct { @@ -9454,7 +9571,7 @@ type MountUnregisterRequest struct { func (x *MountUnregisterRequest) Reset() { *x = MountUnregisterRequest{} - mi := &file_vtctldata_proto_msgTypes[151] + mi := &file_vtctldata_proto_msgTypes[153] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9466,7 +9583,7 @@ func (x *MountUnregisterRequest) String() string { func (*MountUnregisterRequest) ProtoMessage() {} func (x *MountUnregisterRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[151] + mi := &file_vtctldata_proto_msgTypes[153] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9479,7 +9596,7 @@ func (x *MountUnregisterRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MountUnregisterRequest.ProtoReflect.Descriptor instead. func (*MountUnregisterRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{151} + return file_vtctldata_proto_rawDescGZIP(), []int{153} } func (x *MountUnregisterRequest) GetName() string { @@ -9497,7 +9614,7 @@ type MountUnregisterResponse struct { func (x *MountUnregisterResponse) Reset() { *x = MountUnregisterResponse{} - mi := &file_vtctldata_proto_msgTypes[152] + mi := &file_vtctldata_proto_msgTypes[154] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9509,7 +9626,7 @@ func (x *MountUnregisterResponse) String() string { func (*MountUnregisterResponse) ProtoMessage() {} func (x *MountUnregisterResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[152] + mi := &file_vtctldata_proto_msgTypes[154] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9522,7 +9639,7 @@ func (x *MountUnregisterResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MountUnregisterResponse.ProtoReflect.Descriptor instead. func (*MountUnregisterResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{152} + return file_vtctldata_proto_rawDescGZIP(), []int{154} } type MountShowRequest struct { @@ -9534,7 +9651,7 @@ type MountShowRequest struct { func (x *MountShowRequest) Reset() { *x = MountShowRequest{} - mi := &file_vtctldata_proto_msgTypes[153] + mi := &file_vtctldata_proto_msgTypes[155] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9546,7 +9663,7 @@ func (x *MountShowRequest) String() string { func (*MountShowRequest) ProtoMessage() {} func (x *MountShowRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[153] + mi := &file_vtctldata_proto_msgTypes[155] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9559,7 +9676,7 @@ func (x *MountShowRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MountShowRequest.ProtoReflect.Descriptor instead. func (*MountShowRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{153} + return file_vtctldata_proto_rawDescGZIP(), []int{155} } func (x *MountShowRequest) GetName() string { @@ -9581,7 +9698,7 @@ type MountShowResponse struct { func (x *MountShowResponse) Reset() { *x = MountShowResponse{} - mi := &file_vtctldata_proto_msgTypes[154] + mi := &file_vtctldata_proto_msgTypes[156] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9593,7 +9710,7 @@ func (x *MountShowResponse) String() string { func (*MountShowResponse) ProtoMessage() {} func (x *MountShowResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[154] + mi := &file_vtctldata_proto_msgTypes[156] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9606,7 +9723,7 @@ func (x *MountShowResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MountShowResponse.ProtoReflect.Descriptor instead. func (*MountShowResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{154} + return file_vtctldata_proto_rawDescGZIP(), []int{156} } func (x *MountShowResponse) GetTopoType() string { @@ -9645,7 +9762,7 @@ type MountListRequest struct { func (x *MountListRequest) Reset() { *x = MountListRequest{} - mi := &file_vtctldata_proto_msgTypes[155] + mi := &file_vtctldata_proto_msgTypes[157] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9657,7 +9774,7 @@ func (x *MountListRequest) String() string { func (*MountListRequest) ProtoMessage() {} func (x *MountListRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[155] + mi := &file_vtctldata_proto_msgTypes[157] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9670,7 +9787,7 @@ func (x *MountListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MountListRequest.ProtoReflect.Descriptor instead. func (*MountListRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{155} + return file_vtctldata_proto_rawDescGZIP(), []int{157} } type MountListResponse struct { @@ -9682,7 +9799,7 @@ type MountListResponse struct { func (x *MountListResponse) Reset() { *x = MountListResponse{} - mi := &file_vtctldata_proto_msgTypes[156] + mi := &file_vtctldata_proto_msgTypes[158] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9694,7 +9811,7 @@ func (x *MountListResponse) String() string { func (*MountListResponse) ProtoMessage() {} func (x *MountListResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[156] + mi := &file_vtctldata_proto_msgTypes[158] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9707,7 +9824,7 @@ func (x *MountListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MountListResponse.ProtoReflect.Descriptor instead. func (*MountListResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{156} + return file_vtctldata_proto_rawDescGZIP(), []int{158} } func (x *MountListResponse) GetNames() []string { @@ -9756,7 +9873,7 @@ type MoveTablesCreateRequest struct { func (x *MoveTablesCreateRequest) Reset() { *x = MoveTablesCreateRequest{} - mi := &file_vtctldata_proto_msgTypes[157] + mi := &file_vtctldata_proto_msgTypes[159] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9768,7 +9885,7 @@ func (x *MoveTablesCreateRequest) String() string { func (*MoveTablesCreateRequest) ProtoMessage() {} func (x *MoveTablesCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[157] + mi := &file_vtctldata_proto_msgTypes[159] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9781,7 +9898,7 @@ func (x *MoveTablesCreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MoveTablesCreateRequest.ProtoReflect.Descriptor instead. func (*MoveTablesCreateRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{157} + return file_vtctldata_proto_rawDescGZIP(), []int{159} } func (x *MoveTablesCreateRequest) GetWorkflow() string { @@ -9934,7 +10051,7 @@ type MoveTablesCreateResponse struct { func (x *MoveTablesCreateResponse) Reset() { *x = MoveTablesCreateResponse{} - mi := &file_vtctldata_proto_msgTypes[158] + mi := &file_vtctldata_proto_msgTypes[160] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9946,7 +10063,7 @@ func (x *MoveTablesCreateResponse) String() string { func (*MoveTablesCreateResponse) ProtoMessage() {} func (x *MoveTablesCreateResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[158] + mi := &file_vtctldata_proto_msgTypes[160] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9959,7 +10076,7 @@ func (x *MoveTablesCreateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MoveTablesCreateResponse.ProtoReflect.Descriptor instead. func (*MoveTablesCreateResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{158} + return file_vtctldata_proto_rawDescGZIP(), []int{160} } func (x *MoveTablesCreateResponse) GetSummary() string { @@ -9994,7 +10111,7 @@ type MoveTablesCompleteRequest struct { func (x *MoveTablesCompleteRequest) Reset() { *x = MoveTablesCompleteRequest{} - mi := &file_vtctldata_proto_msgTypes[159] + mi := &file_vtctldata_proto_msgTypes[161] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10006,7 +10123,7 @@ func (x *MoveTablesCompleteRequest) String() string { func (*MoveTablesCompleteRequest) ProtoMessage() {} func (x *MoveTablesCompleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[159] + mi := &file_vtctldata_proto_msgTypes[161] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10019,7 +10136,7 @@ func (x *MoveTablesCompleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MoveTablesCompleteRequest.ProtoReflect.Descriptor instead. func (*MoveTablesCompleteRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{159} + return file_vtctldata_proto_rawDescGZIP(), []int{161} } func (x *MoveTablesCompleteRequest) GetWorkflow() string { @@ -10088,7 +10205,7 @@ type MoveTablesCompleteResponse struct { func (x *MoveTablesCompleteResponse) Reset() { *x = MoveTablesCompleteResponse{} - mi := &file_vtctldata_proto_msgTypes[160] + mi := &file_vtctldata_proto_msgTypes[162] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10100,7 +10217,7 @@ func (x *MoveTablesCompleteResponse) String() string { func (*MoveTablesCompleteResponse) ProtoMessage() {} func (x *MoveTablesCompleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[160] + mi := &file_vtctldata_proto_msgTypes[162] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10113,7 +10230,7 @@ func (x *MoveTablesCompleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MoveTablesCompleteResponse.ProtoReflect.Descriptor instead. func (*MoveTablesCompleteResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{160} + return file_vtctldata_proto_rawDescGZIP(), []int{162} } func (x *MoveTablesCompleteResponse) GetSummary() string { @@ -10139,7 +10256,7 @@ type PingTabletRequest struct { func (x *PingTabletRequest) Reset() { *x = PingTabletRequest{} - mi := &file_vtctldata_proto_msgTypes[161] + mi := &file_vtctldata_proto_msgTypes[163] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10151,7 +10268,7 @@ func (x *PingTabletRequest) String() string { func (*PingTabletRequest) ProtoMessage() {} func (x *PingTabletRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[161] + mi := &file_vtctldata_proto_msgTypes[163] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10164,7 +10281,7 @@ func (x *PingTabletRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PingTabletRequest.ProtoReflect.Descriptor instead. func (*PingTabletRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{161} + return file_vtctldata_proto_rawDescGZIP(), []int{163} } func (x *PingTabletRequest) GetTabletAlias() *topodata.TabletAlias { @@ -10182,7 +10299,7 @@ type PingTabletResponse struct { func (x *PingTabletResponse) Reset() { *x = PingTabletResponse{} - mi := &file_vtctldata_proto_msgTypes[162] + mi := &file_vtctldata_proto_msgTypes[164] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10194,7 +10311,7 @@ func (x *PingTabletResponse) String() string { func (*PingTabletResponse) ProtoMessage() {} func (x *PingTabletResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[162] + mi := &file_vtctldata_proto_msgTypes[164] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10207,7 +10324,7 @@ func (x *PingTabletResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PingTabletResponse.ProtoReflect.Descriptor instead. func (*PingTabletResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{162} + return file_vtctldata_proto_rawDescGZIP(), []int{164} } type PlannedReparentShardRequest struct { @@ -10249,7 +10366,7 @@ type PlannedReparentShardRequest struct { func (x *PlannedReparentShardRequest) Reset() { *x = PlannedReparentShardRequest{} - mi := &file_vtctldata_proto_msgTypes[163] + mi := &file_vtctldata_proto_msgTypes[165] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10261,7 +10378,7 @@ func (x *PlannedReparentShardRequest) String() string { func (*PlannedReparentShardRequest) ProtoMessage() {} func (x *PlannedReparentShardRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[163] + mi := &file_vtctldata_proto_msgTypes[165] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10274,7 +10391,7 @@ func (x *PlannedReparentShardRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PlannedReparentShardRequest.ProtoReflect.Descriptor instead. func (*PlannedReparentShardRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{163} + return file_vtctldata_proto_rawDescGZIP(), []int{165} } func (x *PlannedReparentShardRequest) GetKeyspace() string { @@ -10351,7 +10468,7 @@ type PlannedReparentShardResponse struct { func (x *PlannedReparentShardResponse) Reset() { *x = PlannedReparentShardResponse{} - mi := &file_vtctldata_proto_msgTypes[164] + mi := &file_vtctldata_proto_msgTypes[166] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10363,7 +10480,7 @@ func (x *PlannedReparentShardResponse) String() string { func (*PlannedReparentShardResponse) ProtoMessage() {} func (x *PlannedReparentShardResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[164] + mi := &file_vtctldata_proto_msgTypes[166] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10376,7 +10493,7 @@ func (x *PlannedReparentShardResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PlannedReparentShardResponse.ProtoReflect.Descriptor instead. func (*PlannedReparentShardResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{164} + return file_vtctldata_proto_rawDescGZIP(), []int{166} } func (x *PlannedReparentShardResponse) GetKeyspace() string { @@ -10420,7 +10537,7 @@ type RebuildKeyspaceGraphRequest struct { func (x *RebuildKeyspaceGraphRequest) Reset() { *x = RebuildKeyspaceGraphRequest{} - mi := &file_vtctldata_proto_msgTypes[165] + mi := &file_vtctldata_proto_msgTypes[167] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10432,7 +10549,7 @@ func (x *RebuildKeyspaceGraphRequest) String() string { func (*RebuildKeyspaceGraphRequest) ProtoMessage() {} func (x *RebuildKeyspaceGraphRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[165] + mi := &file_vtctldata_proto_msgTypes[167] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10445,7 +10562,7 @@ func (x *RebuildKeyspaceGraphRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RebuildKeyspaceGraphRequest.ProtoReflect.Descriptor instead. func (*RebuildKeyspaceGraphRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{165} + return file_vtctldata_proto_rawDescGZIP(), []int{167} } func (x *RebuildKeyspaceGraphRequest) GetKeyspace() string { @@ -10477,7 +10594,7 @@ type RebuildKeyspaceGraphResponse struct { func (x *RebuildKeyspaceGraphResponse) Reset() { *x = RebuildKeyspaceGraphResponse{} - mi := &file_vtctldata_proto_msgTypes[166] + mi := &file_vtctldata_proto_msgTypes[168] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10489,7 +10606,7 @@ func (x *RebuildKeyspaceGraphResponse) String() string { func (*RebuildKeyspaceGraphResponse) ProtoMessage() {} func (x *RebuildKeyspaceGraphResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[166] + mi := &file_vtctldata_proto_msgTypes[168] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10502,7 +10619,7 @@ func (x *RebuildKeyspaceGraphResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RebuildKeyspaceGraphResponse.ProtoReflect.Descriptor instead. func (*RebuildKeyspaceGraphResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{166} + return file_vtctldata_proto_rawDescGZIP(), []int{168} } type RebuildVSchemaGraphRequest struct { @@ -10516,7 +10633,7 @@ type RebuildVSchemaGraphRequest struct { func (x *RebuildVSchemaGraphRequest) Reset() { *x = RebuildVSchemaGraphRequest{} - mi := &file_vtctldata_proto_msgTypes[167] + mi := &file_vtctldata_proto_msgTypes[169] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10528,7 +10645,7 @@ func (x *RebuildVSchemaGraphRequest) String() string { func (*RebuildVSchemaGraphRequest) ProtoMessage() {} func (x *RebuildVSchemaGraphRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[167] + mi := &file_vtctldata_proto_msgTypes[169] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10541,7 +10658,7 @@ func (x *RebuildVSchemaGraphRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RebuildVSchemaGraphRequest.ProtoReflect.Descriptor instead. func (*RebuildVSchemaGraphRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{167} + return file_vtctldata_proto_rawDescGZIP(), []int{169} } func (x *RebuildVSchemaGraphRequest) GetCells() []string { @@ -10559,7 +10676,7 @@ type RebuildVSchemaGraphResponse struct { func (x *RebuildVSchemaGraphResponse) Reset() { *x = RebuildVSchemaGraphResponse{} - mi := &file_vtctldata_proto_msgTypes[168] + mi := &file_vtctldata_proto_msgTypes[170] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10571,7 +10688,7 @@ func (x *RebuildVSchemaGraphResponse) String() string { func (*RebuildVSchemaGraphResponse) ProtoMessage() {} func (x *RebuildVSchemaGraphResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[168] + mi := &file_vtctldata_proto_msgTypes[170] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10584,7 +10701,7 @@ func (x *RebuildVSchemaGraphResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RebuildVSchemaGraphResponse.ProtoReflect.Descriptor instead. func (*RebuildVSchemaGraphResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{168} + return file_vtctldata_proto_rawDescGZIP(), []int{170} } type RefreshStateRequest struct { @@ -10596,7 +10713,7 @@ type RefreshStateRequest struct { func (x *RefreshStateRequest) Reset() { *x = RefreshStateRequest{} - mi := &file_vtctldata_proto_msgTypes[169] + mi := &file_vtctldata_proto_msgTypes[171] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10608,7 +10725,7 @@ func (x *RefreshStateRequest) String() string { func (*RefreshStateRequest) ProtoMessage() {} func (x *RefreshStateRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[169] + mi := &file_vtctldata_proto_msgTypes[171] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10621,7 +10738,7 @@ func (x *RefreshStateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RefreshStateRequest.ProtoReflect.Descriptor instead. func (*RefreshStateRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{169} + return file_vtctldata_proto_rawDescGZIP(), []int{171} } func (x *RefreshStateRequest) GetTabletAlias() *topodata.TabletAlias { @@ -10639,7 +10756,7 @@ type RefreshStateResponse struct { func (x *RefreshStateResponse) Reset() { *x = RefreshStateResponse{} - mi := &file_vtctldata_proto_msgTypes[170] + mi := &file_vtctldata_proto_msgTypes[172] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10651,7 +10768,7 @@ func (x *RefreshStateResponse) String() string { func (*RefreshStateResponse) ProtoMessage() {} func (x *RefreshStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[170] + mi := &file_vtctldata_proto_msgTypes[172] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10664,7 +10781,7 @@ func (x *RefreshStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RefreshStateResponse.ProtoReflect.Descriptor instead. func (*RefreshStateResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{170} + return file_vtctldata_proto_rawDescGZIP(), []int{172} } type RefreshStateByShardRequest struct { @@ -10678,7 +10795,7 @@ type RefreshStateByShardRequest struct { func (x *RefreshStateByShardRequest) Reset() { *x = RefreshStateByShardRequest{} - mi := &file_vtctldata_proto_msgTypes[171] + mi := &file_vtctldata_proto_msgTypes[173] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10690,7 +10807,7 @@ func (x *RefreshStateByShardRequest) String() string { func (*RefreshStateByShardRequest) ProtoMessage() {} func (x *RefreshStateByShardRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[171] + mi := &file_vtctldata_proto_msgTypes[173] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10703,7 +10820,7 @@ func (x *RefreshStateByShardRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RefreshStateByShardRequest.ProtoReflect.Descriptor instead. func (*RefreshStateByShardRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{171} + return file_vtctldata_proto_rawDescGZIP(), []int{173} } func (x *RefreshStateByShardRequest) GetKeyspace() string { @@ -10738,7 +10855,7 @@ type RefreshStateByShardResponse struct { func (x *RefreshStateByShardResponse) Reset() { *x = RefreshStateByShardResponse{} - mi := &file_vtctldata_proto_msgTypes[172] + mi := &file_vtctldata_proto_msgTypes[174] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10750,7 +10867,7 @@ func (x *RefreshStateByShardResponse) String() string { func (*RefreshStateByShardResponse) ProtoMessage() {} func (x *RefreshStateByShardResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[172] + mi := &file_vtctldata_proto_msgTypes[174] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10763,7 +10880,7 @@ func (x *RefreshStateByShardResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RefreshStateByShardResponse.ProtoReflect.Descriptor instead. func (*RefreshStateByShardResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{172} + return file_vtctldata_proto_rawDescGZIP(), []int{174} } func (x *RefreshStateByShardResponse) GetIsPartialRefresh() bool { @@ -10789,7 +10906,7 @@ type ReloadSchemaRequest struct { func (x *ReloadSchemaRequest) Reset() { *x = ReloadSchemaRequest{} - mi := &file_vtctldata_proto_msgTypes[173] + mi := &file_vtctldata_proto_msgTypes[175] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10801,7 +10918,7 @@ func (x *ReloadSchemaRequest) String() string { func (*ReloadSchemaRequest) ProtoMessage() {} func (x *ReloadSchemaRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[173] + mi := &file_vtctldata_proto_msgTypes[175] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10814,7 +10931,7 @@ func (x *ReloadSchemaRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReloadSchemaRequest.ProtoReflect.Descriptor instead. func (*ReloadSchemaRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{173} + return file_vtctldata_proto_rawDescGZIP(), []int{175} } func (x *ReloadSchemaRequest) GetTabletAlias() *topodata.TabletAlias { @@ -10832,7 +10949,7 @@ type ReloadSchemaResponse struct { func (x *ReloadSchemaResponse) Reset() { *x = ReloadSchemaResponse{} - mi := &file_vtctldata_proto_msgTypes[174] + mi := &file_vtctldata_proto_msgTypes[176] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10844,7 +10961,7 @@ func (x *ReloadSchemaResponse) String() string { func (*ReloadSchemaResponse) ProtoMessage() {} func (x *ReloadSchemaResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[174] + mi := &file_vtctldata_proto_msgTypes[176] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10857,7 +10974,7 @@ func (x *ReloadSchemaResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReloadSchemaResponse.ProtoReflect.Descriptor instead. func (*ReloadSchemaResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{174} + return file_vtctldata_proto_rawDescGZIP(), []int{176} } type ReloadSchemaKeyspaceRequest struct { @@ -10875,7 +10992,7 @@ type ReloadSchemaKeyspaceRequest struct { func (x *ReloadSchemaKeyspaceRequest) Reset() { *x = ReloadSchemaKeyspaceRequest{} - mi := &file_vtctldata_proto_msgTypes[175] + mi := &file_vtctldata_proto_msgTypes[177] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10887,7 +11004,7 @@ func (x *ReloadSchemaKeyspaceRequest) String() string { func (*ReloadSchemaKeyspaceRequest) ProtoMessage() {} func (x *ReloadSchemaKeyspaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[175] + mi := &file_vtctldata_proto_msgTypes[177] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10900,7 +11017,7 @@ func (x *ReloadSchemaKeyspaceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReloadSchemaKeyspaceRequest.ProtoReflect.Descriptor instead. func (*ReloadSchemaKeyspaceRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{175} + return file_vtctldata_proto_rawDescGZIP(), []int{177} } func (x *ReloadSchemaKeyspaceRequest) GetKeyspace() string { @@ -10940,7 +11057,7 @@ type ReloadSchemaKeyspaceResponse struct { func (x *ReloadSchemaKeyspaceResponse) Reset() { *x = ReloadSchemaKeyspaceResponse{} - mi := &file_vtctldata_proto_msgTypes[176] + mi := &file_vtctldata_proto_msgTypes[178] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10952,7 +11069,7 @@ func (x *ReloadSchemaKeyspaceResponse) String() string { func (*ReloadSchemaKeyspaceResponse) ProtoMessage() {} func (x *ReloadSchemaKeyspaceResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[176] + mi := &file_vtctldata_proto_msgTypes[178] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10965,7 +11082,7 @@ func (x *ReloadSchemaKeyspaceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReloadSchemaKeyspaceResponse.ProtoReflect.Descriptor instead. func (*ReloadSchemaKeyspaceResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{176} + return file_vtctldata_proto_rawDescGZIP(), []int{178} } func (x *ReloadSchemaKeyspaceResponse) GetEvents() []*logutil.Event { @@ -10989,7 +11106,7 @@ type ReloadSchemaShardRequest struct { func (x *ReloadSchemaShardRequest) Reset() { *x = ReloadSchemaShardRequest{} - mi := &file_vtctldata_proto_msgTypes[177] + mi := &file_vtctldata_proto_msgTypes[179] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11001,7 +11118,7 @@ func (x *ReloadSchemaShardRequest) String() string { func (*ReloadSchemaShardRequest) ProtoMessage() {} func (x *ReloadSchemaShardRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[177] + mi := &file_vtctldata_proto_msgTypes[179] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11014,7 +11131,7 @@ func (x *ReloadSchemaShardRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReloadSchemaShardRequest.ProtoReflect.Descriptor instead. func (*ReloadSchemaShardRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{177} + return file_vtctldata_proto_rawDescGZIP(), []int{179} } func (x *ReloadSchemaShardRequest) GetKeyspace() string { @@ -11061,7 +11178,7 @@ type ReloadSchemaShardResponse struct { func (x *ReloadSchemaShardResponse) Reset() { *x = ReloadSchemaShardResponse{} - mi := &file_vtctldata_proto_msgTypes[178] + mi := &file_vtctldata_proto_msgTypes[180] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11073,7 +11190,7 @@ func (x *ReloadSchemaShardResponse) String() string { func (*ReloadSchemaShardResponse) ProtoMessage() {} func (x *ReloadSchemaShardResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[178] + mi := &file_vtctldata_proto_msgTypes[180] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11086,7 +11203,7 @@ func (x *ReloadSchemaShardResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReloadSchemaShardResponse.ProtoReflect.Descriptor instead. func (*ReloadSchemaShardResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{178} + return file_vtctldata_proto_rawDescGZIP(), []int{180} } func (x *ReloadSchemaShardResponse) GetEvents() []*logutil.Event { @@ -11107,7 +11224,7 @@ type RemoveBackupRequest struct { func (x *RemoveBackupRequest) Reset() { *x = RemoveBackupRequest{} - mi := &file_vtctldata_proto_msgTypes[179] + mi := &file_vtctldata_proto_msgTypes[181] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11119,7 +11236,7 @@ func (x *RemoveBackupRequest) String() string { func (*RemoveBackupRequest) ProtoMessage() {} func (x *RemoveBackupRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[179] + mi := &file_vtctldata_proto_msgTypes[181] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11132,7 +11249,7 @@ func (x *RemoveBackupRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveBackupRequest.ProtoReflect.Descriptor instead. func (*RemoveBackupRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{179} + return file_vtctldata_proto_rawDescGZIP(), []int{181} } func (x *RemoveBackupRequest) GetKeyspace() string { @@ -11164,7 +11281,7 @@ type RemoveBackupResponse struct { func (x *RemoveBackupResponse) Reset() { *x = RemoveBackupResponse{} - mi := &file_vtctldata_proto_msgTypes[180] + mi := &file_vtctldata_proto_msgTypes[182] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11176,7 +11293,7 @@ func (x *RemoveBackupResponse) String() string { func (*RemoveBackupResponse) ProtoMessage() {} func (x *RemoveBackupResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[180] + mi := &file_vtctldata_proto_msgTypes[182] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11189,7 +11306,7 @@ func (x *RemoveBackupResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveBackupResponse.ProtoReflect.Descriptor instead. func (*RemoveBackupResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{180} + return file_vtctldata_proto_rawDescGZIP(), []int{182} } type RemoveKeyspaceCellRequest struct { @@ -11209,7 +11326,7 @@ type RemoveKeyspaceCellRequest struct { func (x *RemoveKeyspaceCellRequest) Reset() { *x = RemoveKeyspaceCellRequest{} - mi := &file_vtctldata_proto_msgTypes[181] + mi := &file_vtctldata_proto_msgTypes[183] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11221,7 +11338,7 @@ func (x *RemoveKeyspaceCellRequest) String() string { func (*RemoveKeyspaceCellRequest) ProtoMessage() {} func (x *RemoveKeyspaceCellRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[181] + mi := &file_vtctldata_proto_msgTypes[183] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11234,7 +11351,7 @@ func (x *RemoveKeyspaceCellRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveKeyspaceCellRequest.ProtoReflect.Descriptor instead. func (*RemoveKeyspaceCellRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{181} + return file_vtctldata_proto_rawDescGZIP(), []int{183} } func (x *RemoveKeyspaceCellRequest) GetKeyspace() string { @@ -11273,7 +11390,7 @@ type RemoveKeyspaceCellResponse struct { func (x *RemoveKeyspaceCellResponse) Reset() { *x = RemoveKeyspaceCellResponse{} - mi := &file_vtctldata_proto_msgTypes[182] + mi := &file_vtctldata_proto_msgTypes[184] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11285,7 +11402,7 @@ func (x *RemoveKeyspaceCellResponse) String() string { func (*RemoveKeyspaceCellResponse) ProtoMessage() {} func (x *RemoveKeyspaceCellResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[182] + mi := &file_vtctldata_proto_msgTypes[184] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11298,7 +11415,7 @@ func (x *RemoveKeyspaceCellResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveKeyspaceCellResponse.ProtoReflect.Descriptor instead. func (*RemoveKeyspaceCellResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{182} + return file_vtctldata_proto_rawDescGZIP(), []int{184} } type RemoveShardCellRequest struct { @@ -11319,7 +11436,7 @@ type RemoveShardCellRequest struct { func (x *RemoveShardCellRequest) Reset() { *x = RemoveShardCellRequest{} - mi := &file_vtctldata_proto_msgTypes[183] + mi := &file_vtctldata_proto_msgTypes[185] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11331,7 +11448,7 @@ func (x *RemoveShardCellRequest) String() string { func (*RemoveShardCellRequest) ProtoMessage() {} func (x *RemoveShardCellRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[183] + mi := &file_vtctldata_proto_msgTypes[185] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11344,7 +11461,7 @@ func (x *RemoveShardCellRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveShardCellRequest.ProtoReflect.Descriptor instead. func (*RemoveShardCellRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{183} + return file_vtctldata_proto_rawDescGZIP(), []int{185} } func (x *RemoveShardCellRequest) GetKeyspace() string { @@ -11390,7 +11507,7 @@ type RemoveShardCellResponse struct { func (x *RemoveShardCellResponse) Reset() { *x = RemoveShardCellResponse{} - mi := &file_vtctldata_proto_msgTypes[184] + mi := &file_vtctldata_proto_msgTypes[186] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11402,7 +11519,7 @@ func (x *RemoveShardCellResponse) String() string { func (*RemoveShardCellResponse) ProtoMessage() {} func (x *RemoveShardCellResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[184] + mi := &file_vtctldata_proto_msgTypes[186] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11415,7 +11532,7 @@ func (x *RemoveShardCellResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveShardCellResponse.ProtoReflect.Descriptor instead. func (*RemoveShardCellResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{184} + return file_vtctldata_proto_rawDescGZIP(), []int{186} } type ReparentTabletRequest struct { @@ -11429,7 +11546,7 @@ type ReparentTabletRequest struct { func (x *ReparentTabletRequest) Reset() { *x = ReparentTabletRequest{} - mi := &file_vtctldata_proto_msgTypes[185] + mi := &file_vtctldata_proto_msgTypes[187] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11441,7 +11558,7 @@ func (x *ReparentTabletRequest) String() string { func (*ReparentTabletRequest) ProtoMessage() {} func (x *ReparentTabletRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[185] + mi := &file_vtctldata_proto_msgTypes[187] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11454,7 +11571,7 @@ func (x *ReparentTabletRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReparentTabletRequest.ProtoReflect.Descriptor instead. func (*ReparentTabletRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{185} + return file_vtctldata_proto_rawDescGZIP(), []int{187} } func (x *ReparentTabletRequest) GetTablet() *topodata.TabletAlias { @@ -11478,7 +11595,7 @@ type ReparentTabletResponse struct { func (x *ReparentTabletResponse) Reset() { *x = ReparentTabletResponse{} - mi := &file_vtctldata_proto_msgTypes[186] + mi := &file_vtctldata_proto_msgTypes[188] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11490,7 +11607,7 @@ func (x *ReparentTabletResponse) String() string { func (*ReparentTabletResponse) ProtoMessage() {} func (x *ReparentTabletResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[186] + mi := &file_vtctldata_proto_msgTypes[188] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11503,7 +11620,7 @@ func (x *ReparentTabletResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReparentTabletResponse.ProtoReflect.Descriptor instead. func (*ReparentTabletResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{186} + return file_vtctldata_proto_rawDescGZIP(), []int{188} } func (x *ReparentTabletResponse) GetKeyspace() string { @@ -11554,7 +11671,7 @@ type ReshardCreateRequest struct { func (x *ReshardCreateRequest) Reset() { *x = ReshardCreateRequest{} - mi := &file_vtctldata_proto_msgTypes[187] + mi := &file_vtctldata_proto_msgTypes[189] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11566,7 +11683,7 @@ func (x *ReshardCreateRequest) String() string { func (*ReshardCreateRequest) ProtoMessage() {} func (x *ReshardCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[187] + mi := &file_vtctldata_proto_msgTypes[189] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11579,7 +11696,7 @@ func (x *ReshardCreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReshardCreateRequest.ProtoReflect.Descriptor instead. func (*ReshardCreateRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{187} + return file_vtctldata_proto_rawDescGZIP(), []int{189} } func (x *ReshardCreateRequest) GetWorkflow() string { @@ -11696,7 +11813,7 @@ type RestoreFromBackupRequest struct { func (x *RestoreFromBackupRequest) Reset() { *x = RestoreFromBackupRequest{} - mi := &file_vtctldata_proto_msgTypes[188] + mi := &file_vtctldata_proto_msgTypes[190] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11708,7 +11825,7 @@ func (x *RestoreFromBackupRequest) String() string { func (*RestoreFromBackupRequest) ProtoMessage() {} func (x *RestoreFromBackupRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[188] + mi := &file_vtctldata_proto_msgTypes[190] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11721,7 +11838,7 @@ func (x *RestoreFromBackupRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RestoreFromBackupRequest.ProtoReflect.Descriptor instead. func (*RestoreFromBackupRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{188} + return file_vtctldata_proto_rawDescGZIP(), []int{190} } func (x *RestoreFromBackupRequest) GetTabletAlias() *topodata.TabletAlias { @@ -11779,7 +11896,7 @@ type RestoreFromBackupResponse struct { func (x *RestoreFromBackupResponse) Reset() { *x = RestoreFromBackupResponse{} - mi := &file_vtctldata_proto_msgTypes[189] + mi := &file_vtctldata_proto_msgTypes[191] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11791,7 +11908,7 @@ func (x *RestoreFromBackupResponse) String() string { func (*RestoreFromBackupResponse) ProtoMessage() {} func (x *RestoreFromBackupResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[189] + mi := &file_vtctldata_proto_msgTypes[191] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11804,7 +11921,7 @@ func (x *RestoreFromBackupResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RestoreFromBackupResponse.ProtoReflect.Descriptor instead. func (*RestoreFromBackupResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{189} + return file_vtctldata_proto_rawDescGZIP(), []int{191} } func (x *RestoreFromBackupResponse) GetTabletAlias() *topodata.TabletAlias { @@ -11848,7 +11965,7 @@ type RetrySchemaMigrationRequest struct { func (x *RetrySchemaMigrationRequest) Reset() { *x = RetrySchemaMigrationRequest{} - mi := &file_vtctldata_proto_msgTypes[190] + mi := &file_vtctldata_proto_msgTypes[192] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11860,7 +11977,7 @@ func (x *RetrySchemaMigrationRequest) String() string { func (*RetrySchemaMigrationRequest) ProtoMessage() {} func (x *RetrySchemaMigrationRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[190] + mi := &file_vtctldata_proto_msgTypes[192] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11873,7 +11990,7 @@ func (x *RetrySchemaMigrationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RetrySchemaMigrationRequest.ProtoReflect.Descriptor instead. func (*RetrySchemaMigrationRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{190} + return file_vtctldata_proto_rawDescGZIP(), []int{192} } func (x *RetrySchemaMigrationRequest) GetKeyspace() string { @@ -11906,7 +12023,7 @@ type RetrySchemaMigrationResponse struct { func (x *RetrySchemaMigrationResponse) Reset() { *x = RetrySchemaMigrationResponse{} - mi := &file_vtctldata_proto_msgTypes[191] + mi := &file_vtctldata_proto_msgTypes[193] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11918,7 +12035,7 @@ func (x *RetrySchemaMigrationResponse) String() string { func (*RetrySchemaMigrationResponse) ProtoMessage() {} func (x *RetrySchemaMigrationResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[191] + mi := &file_vtctldata_proto_msgTypes[193] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11931,7 +12048,7 @@ func (x *RetrySchemaMigrationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RetrySchemaMigrationResponse.ProtoReflect.Descriptor instead. func (*RetrySchemaMigrationResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{191} + return file_vtctldata_proto_rawDescGZIP(), []int{193} } func (x *RetrySchemaMigrationResponse) GetRowsAffectedByShard() map[string]uint64 { @@ -11950,7 +12067,7 @@ type RunHealthCheckRequest struct { func (x *RunHealthCheckRequest) Reset() { *x = RunHealthCheckRequest{} - mi := &file_vtctldata_proto_msgTypes[192] + mi := &file_vtctldata_proto_msgTypes[194] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11962,7 +12079,7 @@ func (x *RunHealthCheckRequest) String() string { func (*RunHealthCheckRequest) ProtoMessage() {} func (x *RunHealthCheckRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[192] + mi := &file_vtctldata_proto_msgTypes[194] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11975,7 +12092,7 @@ func (x *RunHealthCheckRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RunHealthCheckRequest.ProtoReflect.Descriptor instead. func (*RunHealthCheckRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{192} + return file_vtctldata_proto_rawDescGZIP(), []int{194} } func (x *RunHealthCheckRequest) GetTabletAlias() *topodata.TabletAlias { @@ -11993,7 +12110,7 @@ type RunHealthCheckResponse struct { func (x *RunHealthCheckResponse) Reset() { *x = RunHealthCheckResponse{} - mi := &file_vtctldata_proto_msgTypes[193] + mi := &file_vtctldata_proto_msgTypes[195] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12005,7 +12122,7 @@ func (x *RunHealthCheckResponse) String() string { func (*RunHealthCheckResponse) ProtoMessage() {} func (x *RunHealthCheckResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[193] + mi := &file_vtctldata_proto_msgTypes[195] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12018,7 +12135,7 @@ func (x *RunHealthCheckResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RunHealthCheckResponse.ProtoReflect.Descriptor instead. func (*RunHealthCheckResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{193} + return file_vtctldata_proto_rawDescGZIP(), []int{195} } type SetKeyspaceDurabilityPolicyRequest struct { @@ -12031,7 +12148,7 @@ type SetKeyspaceDurabilityPolicyRequest struct { func (x *SetKeyspaceDurabilityPolicyRequest) Reset() { *x = SetKeyspaceDurabilityPolicyRequest{} - mi := &file_vtctldata_proto_msgTypes[194] + mi := &file_vtctldata_proto_msgTypes[196] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12043,7 +12160,7 @@ func (x *SetKeyspaceDurabilityPolicyRequest) String() string { func (*SetKeyspaceDurabilityPolicyRequest) ProtoMessage() {} func (x *SetKeyspaceDurabilityPolicyRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[194] + mi := &file_vtctldata_proto_msgTypes[196] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12056,7 +12173,7 @@ func (x *SetKeyspaceDurabilityPolicyRequest) ProtoReflect() protoreflect.Message // Deprecated: Use SetKeyspaceDurabilityPolicyRequest.ProtoReflect.Descriptor instead. func (*SetKeyspaceDurabilityPolicyRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{194} + return file_vtctldata_proto_rawDescGZIP(), []int{196} } func (x *SetKeyspaceDurabilityPolicyRequest) GetKeyspace() string { @@ -12083,7 +12200,7 @@ type SetKeyspaceDurabilityPolicyResponse struct { func (x *SetKeyspaceDurabilityPolicyResponse) Reset() { *x = SetKeyspaceDurabilityPolicyResponse{} - mi := &file_vtctldata_proto_msgTypes[195] + mi := &file_vtctldata_proto_msgTypes[197] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12095,7 +12212,7 @@ func (x *SetKeyspaceDurabilityPolicyResponse) String() string { func (*SetKeyspaceDurabilityPolicyResponse) ProtoMessage() {} func (x *SetKeyspaceDurabilityPolicyResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[195] + mi := &file_vtctldata_proto_msgTypes[197] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12108,7 +12225,7 @@ func (x *SetKeyspaceDurabilityPolicyResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use SetKeyspaceDurabilityPolicyResponse.ProtoReflect.Descriptor instead. func (*SetKeyspaceDurabilityPolicyResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{195} + return file_vtctldata_proto_rawDescGZIP(), []int{197} } func (x *SetKeyspaceDurabilityPolicyResponse) GetKeyspace() *topodata.Keyspace { @@ -12128,7 +12245,7 @@ type SetKeyspaceShardingInfoRequest struct { func (x *SetKeyspaceShardingInfoRequest) Reset() { *x = SetKeyspaceShardingInfoRequest{} - mi := &file_vtctldata_proto_msgTypes[196] + mi := &file_vtctldata_proto_msgTypes[198] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12140,7 +12257,7 @@ func (x *SetKeyspaceShardingInfoRequest) String() string { func (*SetKeyspaceShardingInfoRequest) ProtoMessage() {} func (x *SetKeyspaceShardingInfoRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[196] + mi := &file_vtctldata_proto_msgTypes[198] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12153,7 +12270,7 @@ func (x *SetKeyspaceShardingInfoRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetKeyspaceShardingInfoRequest.ProtoReflect.Descriptor instead. func (*SetKeyspaceShardingInfoRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{196} + return file_vtctldata_proto_rawDescGZIP(), []int{198} } func (x *SetKeyspaceShardingInfoRequest) GetKeyspace() string { @@ -12180,7 +12297,7 @@ type SetKeyspaceShardingInfoResponse struct { func (x *SetKeyspaceShardingInfoResponse) Reset() { *x = SetKeyspaceShardingInfoResponse{} - mi := &file_vtctldata_proto_msgTypes[197] + mi := &file_vtctldata_proto_msgTypes[199] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12192,7 +12309,7 @@ func (x *SetKeyspaceShardingInfoResponse) String() string { func (*SetKeyspaceShardingInfoResponse) ProtoMessage() {} func (x *SetKeyspaceShardingInfoResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[197] + mi := &file_vtctldata_proto_msgTypes[199] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12205,7 +12322,7 @@ func (x *SetKeyspaceShardingInfoResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetKeyspaceShardingInfoResponse.ProtoReflect.Descriptor instead. func (*SetKeyspaceShardingInfoResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{197} + return file_vtctldata_proto_rawDescGZIP(), []int{199} } func (x *SetKeyspaceShardingInfoResponse) GetKeyspace() *topodata.Keyspace { @@ -12226,7 +12343,7 @@ type SetShardIsPrimaryServingRequest struct { func (x *SetShardIsPrimaryServingRequest) Reset() { *x = SetShardIsPrimaryServingRequest{} - mi := &file_vtctldata_proto_msgTypes[198] + mi := &file_vtctldata_proto_msgTypes[200] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12238,7 +12355,7 @@ func (x *SetShardIsPrimaryServingRequest) String() string { func (*SetShardIsPrimaryServingRequest) ProtoMessage() {} func (x *SetShardIsPrimaryServingRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[198] + mi := &file_vtctldata_proto_msgTypes[200] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12251,7 +12368,7 @@ func (x *SetShardIsPrimaryServingRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetShardIsPrimaryServingRequest.ProtoReflect.Descriptor instead. func (*SetShardIsPrimaryServingRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{198} + return file_vtctldata_proto_rawDescGZIP(), []int{200} } func (x *SetShardIsPrimaryServingRequest) GetKeyspace() string { @@ -12285,7 +12402,7 @@ type SetShardIsPrimaryServingResponse struct { func (x *SetShardIsPrimaryServingResponse) Reset() { *x = SetShardIsPrimaryServingResponse{} - mi := &file_vtctldata_proto_msgTypes[199] + mi := &file_vtctldata_proto_msgTypes[201] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12297,7 +12414,7 @@ func (x *SetShardIsPrimaryServingResponse) String() string { func (*SetShardIsPrimaryServingResponse) ProtoMessage() {} func (x *SetShardIsPrimaryServingResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[199] + mi := &file_vtctldata_proto_msgTypes[201] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12310,7 +12427,7 @@ func (x *SetShardIsPrimaryServingResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetShardIsPrimaryServingResponse.ProtoReflect.Descriptor instead. func (*SetShardIsPrimaryServingResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{199} + return file_vtctldata_proto_rawDescGZIP(), []int{201} } func (x *SetShardIsPrimaryServingResponse) GetShard() *topodata.Shard { @@ -12349,7 +12466,7 @@ type SetShardTabletControlRequest struct { func (x *SetShardTabletControlRequest) Reset() { *x = SetShardTabletControlRequest{} - mi := &file_vtctldata_proto_msgTypes[200] + mi := &file_vtctldata_proto_msgTypes[202] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12361,7 +12478,7 @@ func (x *SetShardTabletControlRequest) String() string { func (*SetShardTabletControlRequest) ProtoMessage() {} func (x *SetShardTabletControlRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[200] + mi := &file_vtctldata_proto_msgTypes[202] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12374,7 +12491,7 @@ func (x *SetShardTabletControlRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetShardTabletControlRequest.ProtoReflect.Descriptor instead. func (*SetShardTabletControlRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{200} + return file_vtctldata_proto_rawDescGZIP(), []int{202} } func (x *SetShardTabletControlRequest) GetKeyspace() string { @@ -12436,7 +12553,7 @@ type SetShardTabletControlResponse struct { func (x *SetShardTabletControlResponse) Reset() { *x = SetShardTabletControlResponse{} - mi := &file_vtctldata_proto_msgTypes[201] + mi := &file_vtctldata_proto_msgTypes[203] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12448,7 +12565,7 @@ func (x *SetShardTabletControlResponse) String() string { func (*SetShardTabletControlResponse) ProtoMessage() {} func (x *SetShardTabletControlResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[201] + mi := &file_vtctldata_proto_msgTypes[203] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12461,7 +12578,7 @@ func (x *SetShardTabletControlResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetShardTabletControlResponse.ProtoReflect.Descriptor instead. func (*SetShardTabletControlResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{201} + return file_vtctldata_proto_rawDescGZIP(), []int{203} } func (x *SetShardTabletControlResponse) GetShard() *topodata.Shard { @@ -12481,7 +12598,7 @@ type SetWritableRequest struct { func (x *SetWritableRequest) Reset() { *x = SetWritableRequest{} - mi := &file_vtctldata_proto_msgTypes[202] + mi := &file_vtctldata_proto_msgTypes[204] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12493,7 +12610,7 @@ func (x *SetWritableRequest) String() string { func (*SetWritableRequest) ProtoMessage() {} func (x *SetWritableRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[202] + mi := &file_vtctldata_proto_msgTypes[204] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12506,7 +12623,7 @@ func (x *SetWritableRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetWritableRequest.ProtoReflect.Descriptor instead. func (*SetWritableRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{202} + return file_vtctldata_proto_rawDescGZIP(), []int{204} } func (x *SetWritableRequest) GetTabletAlias() *topodata.TabletAlias { @@ -12531,7 +12648,7 @@ type SetWritableResponse struct { func (x *SetWritableResponse) Reset() { *x = SetWritableResponse{} - mi := &file_vtctldata_proto_msgTypes[203] + mi := &file_vtctldata_proto_msgTypes[205] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12543,7 +12660,7 @@ func (x *SetWritableResponse) String() string { func (*SetWritableResponse) ProtoMessage() {} func (x *SetWritableResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[203] + mi := &file_vtctldata_proto_msgTypes[205] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12556,7 +12673,7 @@ func (x *SetWritableResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetWritableResponse.ProtoReflect.Descriptor instead. func (*SetWritableResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{203} + return file_vtctldata_proto_rawDescGZIP(), []int{205} } type ShardReplicationAddRequest struct { @@ -12570,7 +12687,7 @@ type ShardReplicationAddRequest struct { func (x *ShardReplicationAddRequest) Reset() { *x = ShardReplicationAddRequest{} - mi := &file_vtctldata_proto_msgTypes[204] + mi := &file_vtctldata_proto_msgTypes[206] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12582,7 +12699,7 @@ func (x *ShardReplicationAddRequest) String() string { func (*ShardReplicationAddRequest) ProtoMessage() {} func (x *ShardReplicationAddRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[204] + mi := &file_vtctldata_proto_msgTypes[206] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12595,7 +12712,7 @@ func (x *ShardReplicationAddRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ShardReplicationAddRequest.ProtoReflect.Descriptor instead. func (*ShardReplicationAddRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{204} + return file_vtctldata_proto_rawDescGZIP(), []int{206} } func (x *ShardReplicationAddRequest) GetKeyspace() string { @@ -12627,7 +12744,7 @@ type ShardReplicationAddResponse struct { func (x *ShardReplicationAddResponse) Reset() { *x = ShardReplicationAddResponse{} - mi := &file_vtctldata_proto_msgTypes[205] + mi := &file_vtctldata_proto_msgTypes[207] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12639,7 +12756,7 @@ func (x *ShardReplicationAddResponse) String() string { func (*ShardReplicationAddResponse) ProtoMessage() {} func (x *ShardReplicationAddResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[205] + mi := &file_vtctldata_proto_msgTypes[207] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12652,7 +12769,7 @@ func (x *ShardReplicationAddResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ShardReplicationAddResponse.ProtoReflect.Descriptor instead. func (*ShardReplicationAddResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{205} + return file_vtctldata_proto_rawDescGZIP(), []int{207} } type ShardReplicationFixRequest struct { @@ -12666,7 +12783,7 @@ type ShardReplicationFixRequest struct { func (x *ShardReplicationFixRequest) Reset() { *x = ShardReplicationFixRequest{} - mi := &file_vtctldata_proto_msgTypes[206] + mi := &file_vtctldata_proto_msgTypes[208] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12678,7 +12795,7 @@ func (x *ShardReplicationFixRequest) String() string { func (*ShardReplicationFixRequest) ProtoMessage() {} func (x *ShardReplicationFixRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[206] + mi := &file_vtctldata_proto_msgTypes[208] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12691,7 +12808,7 @@ func (x *ShardReplicationFixRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ShardReplicationFixRequest.ProtoReflect.Descriptor instead. func (*ShardReplicationFixRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{206} + return file_vtctldata_proto_rawDescGZIP(), []int{208} } func (x *ShardReplicationFixRequest) GetKeyspace() string { @@ -12727,7 +12844,7 @@ type ShardReplicationFixResponse struct { func (x *ShardReplicationFixResponse) Reset() { *x = ShardReplicationFixResponse{} - mi := &file_vtctldata_proto_msgTypes[207] + mi := &file_vtctldata_proto_msgTypes[209] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12739,7 +12856,7 @@ func (x *ShardReplicationFixResponse) String() string { func (*ShardReplicationFixResponse) ProtoMessage() {} func (x *ShardReplicationFixResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[207] + mi := &file_vtctldata_proto_msgTypes[209] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12752,7 +12869,7 @@ func (x *ShardReplicationFixResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ShardReplicationFixResponse.ProtoReflect.Descriptor instead. func (*ShardReplicationFixResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{207} + return file_vtctldata_proto_rawDescGZIP(), []int{209} } func (x *ShardReplicationFixResponse) GetError() *topodata.ShardReplicationError { @@ -12772,7 +12889,7 @@ type ShardReplicationPositionsRequest struct { func (x *ShardReplicationPositionsRequest) Reset() { *x = ShardReplicationPositionsRequest{} - mi := &file_vtctldata_proto_msgTypes[208] + mi := &file_vtctldata_proto_msgTypes[210] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12784,7 +12901,7 @@ func (x *ShardReplicationPositionsRequest) String() string { func (*ShardReplicationPositionsRequest) ProtoMessage() {} func (x *ShardReplicationPositionsRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[208] + mi := &file_vtctldata_proto_msgTypes[210] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12797,7 +12914,7 @@ func (x *ShardReplicationPositionsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ShardReplicationPositionsRequest.ProtoReflect.Descriptor instead. func (*ShardReplicationPositionsRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{208} + return file_vtctldata_proto_rawDescGZIP(), []int{210} } func (x *ShardReplicationPositionsRequest) GetKeyspace() string { @@ -12828,7 +12945,7 @@ type ShardReplicationPositionsResponse struct { func (x *ShardReplicationPositionsResponse) Reset() { *x = ShardReplicationPositionsResponse{} - mi := &file_vtctldata_proto_msgTypes[209] + mi := &file_vtctldata_proto_msgTypes[211] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12840,7 +12957,7 @@ func (x *ShardReplicationPositionsResponse) String() string { func (*ShardReplicationPositionsResponse) ProtoMessage() {} func (x *ShardReplicationPositionsResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[209] + mi := &file_vtctldata_proto_msgTypes[211] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12853,7 +12970,7 @@ func (x *ShardReplicationPositionsResponse) ProtoReflect() protoreflect.Message // Deprecated: Use ShardReplicationPositionsResponse.ProtoReflect.Descriptor instead. func (*ShardReplicationPositionsResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{209} + return file_vtctldata_proto_rawDescGZIP(), []int{211} } func (x *ShardReplicationPositionsResponse) GetReplicationStatuses() map[string]*replicationdata.Status { @@ -12881,7 +12998,7 @@ type ShardReplicationRemoveRequest struct { func (x *ShardReplicationRemoveRequest) Reset() { *x = ShardReplicationRemoveRequest{} - mi := &file_vtctldata_proto_msgTypes[210] + mi := &file_vtctldata_proto_msgTypes[212] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12893,7 +13010,7 @@ func (x *ShardReplicationRemoveRequest) String() string { func (*ShardReplicationRemoveRequest) ProtoMessage() {} func (x *ShardReplicationRemoveRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[210] + mi := &file_vtctldata_proto_msgTypes[212] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12906,7 +13023,7 @@ func (x *ShardReplicationRemoveRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ShardReplicationRemoveRequest.ProtoReflect.Descriptor instead. func (*ShardReplicationRemoveRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{210} + return file_vtctldata_proto_rawDescGZIP(), []int{212} } func (x *ShardReplicationRemoveRequest) GetKeyspace() string { @@ -12938,7 +13055,7 @@ type ShardReplicationRemoveResponse struct { func (x *ShardReplicationRemoveResponse) Reset() { *x = ShardReplicationRemoveResponse{} - mi := &file_vtctldata_proto_msgTypes[211] + mi := &file_vtctldata_proto_msgTypes[213] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12950,7 +13067,7 @@ func (x *ShardReplicationRemoveResponse) String() string { func (*ShardReplicationRemoveResponse) ProtoMessage() {} func (x *ShardReplicationRemoveResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[211] + mi := &file_vtctldata_proto_msgTypes[213] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12963,7 +13080,7 @@ func (x *ShardReplicationRemoveResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ShardReplicationRemoveResponse.ProtoReflect.Descriptor instead. func (*ShardReplicationRemoveResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{211} + return file_vtctldata_proto_rawDescGZIP(), []int{213} } type SleepTabletRequest struct { @@ -12976,7 +13093,7 @@ type SleepTabletRequest struct { func (x *SleepTabletRequest) Reset() { *x = SleepTabletRequest{} - mi := &file_vtctldata_proto_msgTypes[212] + mi := &file_vtctldata_proto_msgTypes[214] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12988,7 +13105,7 @@ func (x *SleepTabletRequest) String() string { func (*SleepTabletRequest) ProtoMessage() {} func (x *SleepTabletRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[212] + mi := &file_vtctldata_proto_msgTypes[214] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13001,7 +13118,7 @@ func (x *SleepTabletRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SleepTabletRequest.ProtoReflect.Descriptor instead. func (*SleepTabletRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{212} + return file_vtctldata_proto_rawDescGZIP(), []int{214} } func (x *SleepTabletRequest) GetTabletAlias() *topodata.TabletAlias { @@ -13026,7 +13143,7 @@ type SleepTabletResponse struct { func (x *SleepTabletResponse) Reset() { *x = SleepTabletResponse{} - mi := &file_vtctldata_proto_msgTypes[213] + mi := &file_vtctldata_proto_msgTypes[215] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13038,7 +13155,7 @@ func (x *SleepTabletResponse) String() string { func (*SleepTabletResponse) ProtoMessage() {} func (x *SleepTabletResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[213] + mi := &file_vtctldata_proto_msgTypes[215] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13051,7 +13168,7 @@ func (x *SleepTabletResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SleepTabletResponse.ProtoReflect.Descriptor instead. func (*SleepTabletResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{213} + return file_vtctldata_proto_rawDescGZIP(), []int{215} } type SourceShardAddRequest struct { @@ -13073,7 +13190,7 @@ type SourceShardAddRequest struct { func (x *SourceShardAddRequest) Reset() { *x = SourceShardAddRequest{} - mi := &file_vtctldata_proto_msgTypes[214] + mi := &file_vtctldata_proto_msgTypes[216] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13085,7 +13202,7 @@ func (x *SourceShardAddRequest) String() string { func (*SourceShardAddRequest) ProtoMessage() {} func (x *SourceShardAddRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[214] + mi := &file_vtctldata_proto_msgTypes[216] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13098,7 +13215,7 @@ func (x *SourceShardAddRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SourceShardAddRequest.ProtoReflect.Descriptor instead. func (*SourceShardAddRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{214} + return file_vtctldata_proto_rawDescGZIP(), []int{216} } func (x *SourceShardAddRequest) GetKeyspace() string { @@ -13160,7 +13277,7 @@ type SourceShardAddResponse struct { func (x *SourceShardAddResponse) Reset() { *x = SourceShardAddResponse{} - mi := &file_vtctldata_proto_msgTypes[215] + mi := &file_vtctldata_proto_msgTypes[217] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13172,7 +13289,7 @@ func (x *SourceShardAddResponse) String() string { func (*SourceShardAddResponse) ProtoMessage() {} func (x *SourceShardAddResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[215] + mi := &file_vtctldata_proto_msgTypes[217] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13185,7 +13302,7 @@ func (x *SourceShardAddResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SourceShardAddResponse.ProtoReflect.Descriptor instead. func (*SourceShardAddResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{215} + return file_vtctldata_proto_rawDescGZIP(), []int{217} } func (x *SourceShardAddResponse) GetShard() *topodata.Shard { @@ -13206,7 +13323,7 @@ type SourceShardDeleteRequest struct { func (x *SourceShardDeleteRequest) Reset() { *x = SourceShardDeleteRequest{} - mi := &file_vtctldata_proto_msgTypes[216] + mi := &file_vtctldata_proto_msgTypes[218] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13218,7 +13335,7 @@ func (x *SourceShardDeleteRequest) String() string { func (*SourceShardDeleteRequest) ProtoMessage() {} func (x *SourceShardDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[216] + mi := &file_vtctldata_proto_msgTypes[218] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13231,7 +13348,7 @@ func (x *SourceShardDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SourceShardDeleteRequest.ProtoReflect.Descriptor instead. func (*SourceShardDeleteRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{216} + return file_vtctldata_proto_rawDescGZIP(), []int{218} } func (x *SourceShardDeleteRequest) GetKeyspace() string { @@ -13265,7 +13382,7 @@ type SourceShardDeleteResponse struct { func (x *SourceShardDeleteResponse) Reset() { *x = SourceShardDeleteResponse{} - mi := &file_vtctldata_proto_msgTypes[217] + mi := &file_vtctldata_proto_msgTypes[219] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13277,7 +13394,7 @@ func (x *SourceShardDeleteResponse) String() string { func (*SourceShardDeleteResponse) ProtoMessage() {} func (x *SourceShardDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[217] + mi := &file_vtctldata_proto_msgTypes[219] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13290,7 +13407,7 @@ func (x *SourceShardDeleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SourceShardDeleteResponse.ProtoReflect.Descriptor instead. func (*SourceShardDeleteResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{217} + return file_vtctldata_proto_rawDescGZIP(), []int{219} } func (x *SourceShardDeleteResponse) GetShard() *topodata.Shard { @@ -13309,7 +13426,7 @@ type StartReplicationRequest struct { func (x *StartReplicationRequest) Reset() { *x = StartReplicationRequest{} - mi := &file_vtctldata_proto_msgTypes[218] + mi := &file_vtctldata_proto_msgTypes[220] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13321,7 +13438,7 @@ func (x *StartReplicationRequest) String() string { func (*StartReplicationRequest) ProtoMessage() {} func (x *StartReplicationRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[218] + mi := &file_vtctldata_proto_msgTypes[220] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13334,7 +13451,7 @@ func (x *StartReplicationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StartReplicationRequest.ProtoReflect.Descriptor instead. func (*StartReplicationRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{218} + return file_vtctldata_proto_rawDescGZIP(), []int{220} } func (x *StartReplicationRequest) GetTabletAlias() *topodata.TabletAlias { @@ -13352,7 +13469,7 @@ type StartReplicationResponse struct { func (x *StartReplicationResponse) Reset() { *x = StartReplicationResponse{} - mi := &file_vtctldata_proto_msgTypes[219] + mi := &file_vtctldata_proto_msgTypes[221] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13364,7 +13481,7 @@ func (x *StartReplicationResponse) String() string { func (*StartReplicationResponse) ProtoMessage() {} func (x *StartReplicationResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[219] + mi := &file_vtctldata_proto_msgTypes[221] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13377,7 +13494,7 @@ func (x *StartReplicationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StartReplicationResponse.ProtoReflect.Descriptor instead. func (*StartReplicationResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{219} + return file_vtctldata_proto_rawDescGZIP(), []int{221} } type StopReplicationRequest struct { @@ -13389,7 +13506,7 @@ type StopReplicationRequest struct { func (x *StopReplicationRequest) Reset() { *x = StopReplicationRequest{} - mi := &file_vtctldata_proto_msgTypes[220] + mi := &file_vtctldata_proto_msgTypes[222] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13401,7 +13518,7 @@ func (x *StopReplicationRequest) String() string { func (*StopReplicationRequest) ProtoMessage() {} func (x *StopReplicationRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[220] + mi := &file_vtctldata_proto_msgTypes[222] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13414,7 +13531,7 @@ func (x *StopReplicationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StopReplicationRequest.ProtoReflect.Descriptor instead. func (*StopReplicationRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{220} + return file_vtctldata_proto_rawDescGZIP(), []int{222} } func (x *StopReplicationRequest) GetTabletAlias() *topodata.TabletAlias { @@ -13432,7 +13549,7 @@ type StopReplicationResponse struct { func (x *StopReplicationResponse) Reset() { *x = StopReplicationResponse{} - mi := &file_vtctldata_proto_msgTypes[221] + mi := &file_vtctldata_proto_msgTypes[223] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13444,7 +13561,7 @@ func (x *StopReplicationResponse) String() string { func (*StopReplicationResponse) ProtoMessage() {} func (x *StopReplicationResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[221] + mi := &file_vtctldata_proto_msgTypes[223] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13457,7 +13574,7 @@ func (x *StopReplicationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StopReplicationResponse.ProtoReflect.Descriptor instead. func (*StopReplicationResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{221} + return file_vtctldata_proto_rawDescGZIP(), []int{223} } type TabletExternallyReparentedRequest struct { @@ -13471,7 +13588,7 @@ type TabletExternallyReparentedRequest struct { func (x *TabletExternallyReparentedRequest) Reset() { *x = TabletExternallyReparentedRequest{} - mi := &file_vtctldata_proto_msgTypes[222] + mi := &file_vtctldata_proto_msgTypes[224] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13483,7 +13600,7 @@ func (x *TabletExternallyReparentedRequest) String() string { func (*TabletExternallyReparentedRequest) ProtoMessage() {} func (x *TabletExternallyReparentedRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[222] + mi := &file_vtctldata_proto_msgTypes[224] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13496,7 +13613,7 @@ func (x *TabletExternallyReparentedRequest) ProtoReflect() protoreflect.Message // Deprecated: Use TabletExternallyReparentedRequest.ProtoReflect.Descriptor instead. func (*TabletExternallyReparentedRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{222} + return file_vtctldata_proto_rawDescGZIP(), []int{224} } func (x *TabletExternallyReparentedRequest) GetTablet() *topodata.TabletAlias { @@ -13518,7 +13635,7 @@ type TabletExternallyReparentedResponse struct { func (x *TabletExternallyReparentedResponse) Reset() { *x = TabletExternallyReparentedResponse{} - mi := &file_vtctldata_proto_msgTypes[223] + mi := &file_vtctldata_proto_msgTypes[225] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13530,7 +13647,7 @@ func (x *TabletExternallyReparentedResponse) String() string { func (*TabletExternallyReparentedResponse) ProtoMessage() {} func (x *TabletExternallyReparentedResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[223] + mi := &file_vtctldata_proto_msgTypes[225] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13543,7 +13660,7 @@ func (x *TabletExternallyReparentedResponse) ProtoReflect() protoreflect.Message // Deprecated: Use TabletExternallyReparentedResponse.ProtoReflect.Descriptor instead. func (*TabletExternallyReparentedResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{223} + return file_vtctldata_proto_rawDescGZIP(), []int{225} } func (x *TabletExternallyReparentedResponse) GetKeyspace() string { @@ -13584,7 +13701,7 @@ type UpdateCellInfoRequest struct { func (x *UpdateCellInfoRequest) Reset() { *x = UpdateCellInfoRequest{} - mi := &file_vtctldata_proto_msgTypes[224] + mi := &file_vtctldata_proto_msgTypes[226] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13596,7 +13713,7 @@ func (x *UpdateCellInfoRequest) String() string { func (*UpdateCellInfoRequest) ProtoMessage() {} func (x *UpdateCellInfoRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[224] + mi := &file_vtctldata_proto_msgTypes[226] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13609,7 +13726,7 @@ func (x *UpdateCellInfoRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateCellInfoRequest.ProtoReflect.Descriptor instead. func (*UpdateCellInfoRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{224} + return file_vtctldata_proto_rawDescGZIP(), []int{226} } func (x *UpdateCellInfoRequest) GetName() string { @@ -13636,7 +13753,7 @@ type UpdateCellInfoResponse struct { func (x *UpdateCellInfoResponse) Reset() { *x = UpdateCellInfoResponse{} - mi := &file_vtctldata_proto_msgTypes[225] + mi := &file_vtctldata_proto_msgTypes[227] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13648,7 +13765,7 @@ func (x *UpdateCellInfoResponse) String() string { func (*UpdateCellInfoResponse) ProtoMessage() {} func (x *UpdateCellInfoResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[225] + mi := &file_vtctldata_proto_msgTypes[227] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13661,7 +13778,7 @@ func (x *UpdateCellInfoResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateCellInfoResponse.ProtoReflect.Descriptor instead. func (*UpdateCellInfoResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{225} + return file_vtctldata_proto_rawDescGZIP(), []int{227} } func (x *UpdateCellInfoResponse) GetName() string { @@ -13688,7 +13805,7 @@ type UpdateCellsAliasRequest struct { func (x *UpdateCellsAliasRequest) Reset() { *x = UpdateCellsAliasRequest{} - mi := &file_vtctldata_proto_msgTypes[226] + mi := &file_vtctldata_proto_msgTypes[228] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13700,7 +13817,7 @@ func (x *UpdateCellsAliasRequest) String() string { func (*UpdateCellsAliasRequest) ProtoMessage() {} func (x *UpdateCellsAliasRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[226] + mi := &file_vtctldata_proto_msgTypes[228] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13713,7 +13830,7 @@ func (x *UpdateCellsAliasRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateCellsAliasRequest.ProtoReflect.Descriptor instead. func (*UpdateCellsAliasRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{226} + return file_vtctldata_proto_rawDescGZIP(), []int{228} } func (x *UpdateCellsAliasRequest) GetName() string { @@ -13740,7 +13857,7 @@ type UpdateCellsAliasResponse struct { func (x *UpdateCellsAliasResponse) Reset() { *x = UpdateCellsAliasResponse{} - mi := &file_vtctldata_proto_msgTypes[227] + mi := &file_vtctldata_proto_msgTypes[229] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13752,7 +13869,7 @@ func (x *UpdateCellsAliasResponse) String() string { func (*UpdateCellsAliasResponse) ProtoMessage() {} func (x *UpdateCellsAliasResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[227] + mi := &file_vtctldata_proto_msgTypes[229] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13765,7 +13882,7 @@ func (x *UpdateCellsAliasResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateCellsAliasResponse.ProtoReflect.Descriptor instead. func (*UpdateCellsAliasResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{227} + return file_vtctldata_proto_rawDescGZIP(), []int{229} } func (x *UpdateCellsAliasResponse) GetName() string { @@ -13791,7 +13908,7 @@ type ValidateRequest struct { func (x *ValidateRequest) Reset() { *x = ValidateRequest{} - mi := &file_vtctldata_proto_msgTypes[228] + mi := &file_vtctldata_proto_msgTypes[230] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13803,7 +13920,7 @@ func (x *ValidateRequest) String() string { func (*ValidateRequest) ProtoMessage() {} func (x *ValidateRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[228] + mi := &file_vtctldata_proto_msgTypes[230] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13816,7 +13933,7 @@ func (x *ValidateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateRequest.ProtoReflect.Descriptor instead. func (*ValidateRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{228} + return file_vtctldata_proto_rawDescGZIP(), []int{230} } func (x *ValidateRequest) GetPingTablets() bool { @@ -13836,7 +13953,7 @@ type ValidateResponse struct { func (x *ValidateResponse) Reset() { *x = ValidateResponse{} - mi := &file_vtctldata_proto_msgTypes[229] + mi := &file_vtctldata_proto_msgTypes[231] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13848,7 +13965,7 @@ func (x *ValidateResponse) String() string { func (*ValidateResponse) ProtoMessage() {} func (x *ValidateResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[229] + mi := &file_vtctldata_proto_msgTypes[231] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13861,7 +13978,7 @@ func (x *ValidateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateResponse.ProtoReflect.Descriptor instead. func (*ValidateResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{229} + return file_vtctldata_proto_rawDescGZIP(), []int{231} } func (x *ValidateResponse) GetResults() []string { @@ -13888,7 +14005,7 @@ type ValidateKeyspaceRequest struct { func (x *ValidateKeyspaceRequest) Reset() { *x = ValidateKeyspaceRequest{} - mi := &file_vtctldata_proto_msgTypes[230] + mi := &file_vtctldata_proto_msgTypes[232] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13900,7 +14017,7 @@ func (x *ValidateKeyspaceRequest) String() string { func (*ValidateKeyspaceRequest) ProtoMessage() {} func (x *ValidateKeyspaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[230] + mi := &file_vtctldata_proto_msgTypes[232] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13913,7 +14030,7 @@ func (x *ValidateKeyspaceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateKeyspaceRequest.ProtoReflect.Descriptor instead. func (*ValidateKeyspaceRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{230} + return file_vtctldata_proto_rawDescGZIP(), []int{232} } func (x *ValidateKeyspaceRequest) GetKeyspace() string { @@ -13940,7 +14057,7 @@ type ValidateKeyspaceResponse struct { func (x *ValidateKeyspaceResponse) Reset() { *x = ValidateKeyspaceResponse{} - mi := &file_vtctldata_proto_msgTypes[231] + mi := &file_vtctldata_proto_msgTypes[233] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13952,7 +14069,7 @@ func (x *ValidateKeyspaceResponse) String() string { func (*ValidateKeyspaceResponse) ProtoMessage() {} func (x *ValidateKeyspaceResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[231] + mi := &file_vtctldata_proto_msgTypes[233] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13965,7 +14082,7 @@ func (x *ValidateKeyspaceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateKeyspaceResponse.ProtoReflect.Descriptor instead. func (*ValidateKeyspaceResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{231} + return file_vtctldata_proto_rawDescGZIP(), []int{233} } func (x *ValidateKeyspaceResponse) GetResults() []string { @@ -13994,7 +14111,7 @@ type ValidatePermissionsKeyspaceRequest struct { func (x *ValidatePermissionsKeyspaceRequest) Reset() { *x = ValidatePermissionsKeyspaceRequest{} - mi := &file_vtctldata_proto_msgTypes[232] + mi := &file_vtctldata_proto_msgTypes[234] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14006,7 +14123,7 @@ func (x *ValidatePermissionsKeyspaceRequest) String() string { func (*ValidatePermissionsKeyspaceRequest) ProtoMessage() {} func (x *ValidatePermissionsKeyspaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[232] + mi := &file_vtctldata_proto_msgTypes[234] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14019,7 +14136,7 @@ func (x *ValidatePermissionsKeyspaceRequest) ProtoReflect() protoreflect.Message // Deprecated: Use ValidatePermissionsKeyspaceRequest.ProtoReflect.Descriptor instead. func (*ValidatePermissionsKeyspaceRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{232} + return file_vtctldata_proto_rawDescGZIP(), []int{234} } func (x *ValidatePermissionsKeyspaceRequest) GetKeyspace() string { @@ -14044,7 +14161,7 @@ type ValidatePermissionsKeyspaceResponse struct { func (x *ValidatePermissionsKeyspaceResponse) Reset() { *x = ValidatePermissionsKeyspaceResponse{} - mi := &file_vtctldata_proto_msgTypes[233] + mi := &file_vtctldata_proto_msgTypes[235] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14056,7 +14173,7 @@ func (x *ValidatePermissionsKeyspaceResponse) String() string { func (*ValidatePermissionsKeyspaceResponse) ProtoMessage() {} func (x *ValidatePermissionsKeyspaceResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[233] + mi := &file_vtctldata_proto_msgTypes[235] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14069,7 +14186,7 @@ func (x *ValidatePermissionsKeyspaceResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use ValidatePermissionsKeyspaceResponse.ProtoReflect.Descriptor instead. func (*ValidatePermissionsKeyspaceResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{233} + return file_vtctldata_proto_rawDescGZIP(), []int{235} } type ValidateSchemaKeyspaceRequest struct { @@ -14088,7 +14205,7 @@ type ValidateSchemaKeyspaceRequest struct { func (x *ValidateSchemaKeyspaceRequest) Reset() { *x = ValidateSchemaKeyspaceRequest{} - mi := &file_vtctldata_proto_msgTypes[234] + mi := &file_vtctldata_proto_msgTypes[236] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14100,7 +14217,7 @@ func (x *ValidateSchemaKeyspaceRequest) String() string { func (*ValidateSchemaKeyspaceRequest) ProtoMessage() {} func (x *ValidateSchemaKeyspaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[234] + mi := &file_vtctldata_proto_msgTypes[236] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14113,7 +14230,7 @@ func (x *ValidateSchemaKeyspaceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateSchemaKeyspaceRequest.ProtoReflect.Descriptor instead. func (*ValidateSchemaKeyspaceRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{234} + return file_vtctldata_proto_rawDescGZIP(), []int{236} } func (x *ValidateSchemaKeyspaceRequest) GetKeyspace() string { @@ -14168,7 +14285,7 @@ type ValidateSchemaKeyspaceResponse struct { func (x *ValidateSchemaKeyspaceResponse) Reset() { *x = ValidateSchemaKeyspaceResponse{} - mi := &file_vtctldata_proto_msgTypes[235] + mi := &file_vtctldata_proto_msgTypes[237] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14180,7 +14297,7 @@ func (x *ValidateSchemaKeyspaceResponse) String() string { func (*ValidateSchemaKeyspaceResponse) ProtoMessage() {} func (x *ValidateSchemaKeyspaceResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[235] + mi := &file_vtctldata_proto_msgTypes[237] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14193,7 +14310,7 @@ func (x *ValidateSchemaKeyspaceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateSchemaKeyspaceResponse.ProtoReflect.Descriptor instead. func (*ValidateSchemaKeyspaceResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{235} + return file_vtctldata_proto_rawDescGZIP(), []int{237} } func (x *ValidateSchemaKeyspaceResponse) GetResults() []string { @@ -14221,7 +14338,7 @@ type ValidateShardRequest struct { func (x *ValidateShardRequest) Reset() { *x = ValidateShardRequest{} - mi := &file_vtctldata_proto_msgTypes[236] + mi := &file_vtctldata_proto_msgTypes[238] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14233,7 +14350,7 @@ func (x *ValidateShardRequest) String() string { func (*ValidateShardRequest) ProtoMessage() {} func (x *ValidateShardRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[236] + mi := &file_vtctldata_proto_msgTypes[238] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14246,7 +14363,7 @@ func (x *ValidateShardRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateShardRequest.ProtoReflect.Descriptor instead. func (*ValidateShardRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{236} + return file_vtctldata_proto_rawDescGZIP(), []int{238} } func (x *ValidateShardRequest) GetKeyspace() string { @@ -14279,7 +14396,7 @@ type ValidateShardResponse struct { func (x *ValidateShardResponse) Reset() { *x = ValidateShardResponse{} - mi := &file_vtctldata_proto_msgTypes[237] + mi := &file_vtctldata_proto_msgTypes[239] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14291,7 +14408,7 @@ func (x *ValidateShardResponse) String() string { func (*ValidateShardResponse) ProtoMessage() {} func (x *ValidateShardResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[237] + mi := &file_vtctldata_proto_msgTypes[239] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14304,7 +14421,7 @@ func (x *ValidateShardResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateShardResponse.ProtoReflect.Descriptor instead. func (*ValidateShardResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{237} + return file_vtctldata_proto_rawDescGZIP(), []int{239} } func (x *ValidateShardResponse) GetResults() []string { @@ -14323,7 +14440,7 @@ type ValidateVersionKeyspaceRequest struct { func (x *ValidateVersionKeyspaceRequest) Reset() { *x = ValidateVersionKeyspaceRequest{} - mi := &file_vtctldata_proto_msgTypes[238] + mi := &file_vtctldata_proto_msgTypes[240] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14335,7 +14452,7 @@ func (x *ValidateVersionKeyspaceRequest) String() string { func (*ValidateVersionKeyspaceRequest) ProtoMessage() {} func (x *ValidateVersionKeyspaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[238] + mi := &file_vtctldata_proto_msgTypes[240] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14348,7 +14465,7 @@ func (x *ValidateVersionKeyspaceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateVersionKeyspaceRequest.ProtoReflect.Descriptor instead. func (*ValidateVersionKeyspaceRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{238} + return file_vtctldata_proto_rawDescGZIP(), []int{240} } func (x *ValidateVersionKeyspaceRequest) GetKeyspace() string { @@ -14368,7 +14485,7 @@ type ValidateVersionKeyspaceResponse struct { func (x *ValidateVersionKeyspaceResponse) Reset() { *x = ValidateVersionKeyspaceResponse{} - mi := &file_vtctldata_proto_msgTypes[239] + mi := &file_vtctldata_proto_msgTypes[241] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14380,7 +14497,7 @@ func (x *ValidateVersionKeyspaceResponse) String() string { func (*ValidateVersionKeyspaceResponse) ProtoMessage() {} func (x *ValidateVersionKeyspaceResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[239] + mi := &file_vtctldata_proto_msgTypes[241] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14393,7 +14510,7 @@ func (x *ValidateVersionKeyspaceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateVersionKeyspaceResponse.ProtoReflect.Descriptor instead. func (*ValidateVersionKeyspaceResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{239} + return file_vtctldata_proto_rawDescGZIP(), []int{241} } func (x *ValidateVersionKeyspaceResponse) GetResults() []string { @@ -14420,7 +14537,7 @@ type ValidateVersionShardRequest struct { func (x *ValidateVersionShardRequest) Reset() { *x = ValidateVersionShardRequest{} - mi := &file_vtctldata_proto_msgTypes[240] + mi := &file_vtctldata_proto_msgTypes[242] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14432,7 +14549,7 @@ func (x *ValidateVersionShardRequest) String() string { func (*ValidateVersionShardRequest) ProtoMessage() {} func (x *ValidateVersionShardRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[240] + mi := &file_vtctldata_proto_msgTypes[242] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14445,7 +14562,7 @@ func (x *ValidateVersionShardRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateVersionShardRequest.ProtoReflect.Descriptor instead. func (*ValidateVersionShardRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{240} + return file_vtctldata_proto_rawDescGZIP(), []int{242} } func (x *ValidateVersionShardRequest) GetKeyspace() string { @@ -14471,7 +14588,7 @@ type ValidateVersionShardResponse struct { func (x *ValidateVersionShardResponse) Reset() { *x = ValidateVersionShardResponse{} - mi := &file_vtctldata_proto_msgTypes[241] + mi := &file_vtctldata_proto_msgTypes[243] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14483,7 +14600,7 @@ func (x *ValidateVersionShardResponse) String() string { func (*ValidateVersionShardResponse) ProtoMessage() {} func (x *ValidateVersionShardResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[241] + mi := &file_vtctldata_proto_msgTypes[243] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14496,7 +14613,7 @@ func (x *ValidateVersionShardResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateVersionShardResponse.ProtoReflect.Descriptor instead. func (*ValidateVersionShardResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{241} + return file_vtctldata_proto_rawDescGZIP(), []int{243} } func (x *ValidateVersionShardResponse) GetResults() []string { @@ -14518,7 +14635,7 @@ type ValidateVSchemaRequest struct { func (x *ValidateVSchemaRequest) Reset() { *x = ValidateVSchemaRequest{} - mi := &file_vtctldata_proto_msgTypes[242] + mi := &file_vtctldata_proto_msgTypes[244] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14530,7 +14647,7 @@ func (x *ValidateVSchemaRequest) String() string { func (*ValidateVSchemaRequest) ProtoMessage() {} func (x *ValidateVSchemaRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[242] + mi := &file_vtctldata_proto_msgTypes[244] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14543,7 +14660,7 @@ func (x *ValidateVSchemaRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateVSchemaRequest.ProtoReflect.Descriptor instead. func (*ValidateVSchemaRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{242} + return file_vtctldata_proto_rawDescGZIP(), []int{244} } func (x *ValidateVSchemaRequest) GetKeyspace() string { @@ -14584,7 +14701,7 @@ type ValidateVSchemaResponse struct { func (x *ValidateVSchemaResponse) Reset() { *x = ValidateVSchemaResponse{} - mi := &file_vtctldata_proto_msgTypes[243] + mi := &file_vtctldata_proto_msgTypes[245] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14596,7 +14713,7 @@ func (x *ValidateVSchemaResponse) String() string { func (*ValidateVSchemaResponse) ProtoMessage() {} func (x *ValidateVSchemaResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[243] + mi := &file_vtctldata_proto_msgTypes[245] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14609,7 +14726,7 @@ func (x *ValidateVSchemaResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateVSchemaResponse.ProtoReflect.Descriptor instead. func (*ValidateVSchemaResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{243} + return file_vtctldata_proto_rawDescGZIP(), []int{245} } func (x *ValidateVSchemaResponse) GetResults() []string { @@ -14714,7 +14831,7 @@ type VDiffCreateRequest struct { func (x *VDiffCreateRequest) Reset() { *x = VDiffCreateRequest{} - mi := &file_vtctldata_proto_msgTypes[244] + mi := &file_vtctldata_proto_msgTypes[246] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14726,7 +14843,7 @@ func (x *VDiffCreateRequest) String() string { func (*VDiffCreateRequest) ProtoMessage() {} func (x *VDiffCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[244] + mi := &file_vtctldata_proto_msgTypes[246] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14739,7 +14856,7 @@ func (x *VDiffCreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VDiffCreateRequest.ProtoReflect.Descriptor instead. func (*VDiffCreateRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{244} + return file_vtctldata_proto_rawDescGZIP(), []int{246} } func (x *VDiffCreateRequest) GetWorkflow() string { @@ -14907,7 +15024,7 @@ type VDiffCreateResponse struct { func (x *VDiffCreateResponse) Reset() { *x = VDiffCreateResponse{} - mi := &file_vtctldata_proto_msgTypes[245] + mi := &file_vtctldata_proto_msgTypes[247] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14919,7 +15036,7 @@ func (x *VDiffCreateResponse) String() string { func (*VDiffCreateResponse) ProtoMessage() {} func (x *VDiffCreateResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[245] + mi := &file_vtctldata_proto_msgTypes[247] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14932,7 +15049,7 @@ func (x *VDiffCreateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VDiffCreateResponse.ProtoReflect.Descriptor instead. func (*VDiffCreateResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{245} + return file_vtctldata_proto_rawDescGZIP(), []int{247} } func (x *VDiffCreateResponse) GetUUID() string { @@ -14954,7 +15071,7 @@ type VDiffDeleteRequest struct { func (x *VDiffDeleteRequest) Reset() { *x = VDiffDeleteRequest{} - mi := &file_vtctldata_proto_msgTypes[246] + mi := &file_vtctldata_proto_msgTypes[248] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14966,7 +15083,7 @@ func (x *VDiffDeleteRequest) String() string { func (*VDiffDeleteRequest) ProtoMessage() {} func (x *VDiffDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[246] + mi := &file_vtctldata_proto_msgTypes[248] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14979,7 +15096,7 @@ func (x *VDiffDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VDiffDeleteRequest.ProtoReflect.Descriptor instead. func (*VDiffDeleteRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{246} + return file_vtctldata_proto_rawDescGZIP(), []int{248} } func (x *VDiffDeleteRequest) GetWorkflow() string { @@ -15011,7 +15128,7 @@ type VDiffDeleteResponse struct { func (x *VDiffDeleteResponse) Reset() { *x = VDiffDeleteResponse{} - mi := &file_vtctldata_proto_msgTypes[247] + mi := &file_vtctldata_proto_msgTypes[249] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15023,7 +15140,7 @@ func (x *VDiffDeleteResponse) String() string { func (*VDiffDeleteResponse) ProtoMessage() {} func (x *VDiffDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[247] + mi := &file_vtctldata_proto_msgTypes[249] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15036,7 +15153,7 @@ func (x *VDiffDeleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VDiffDeleteResponse.ProtoReflect.Descriptor instead. func (*VDiffDeleteResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{247} + return file_vtctldata_proto_rawDescGZIP(), []int{249} } type VDiffResumeRequest struct { @@ -15051,7 +15168,7 @@ type VDiffResumeRequest struct { func (x *VDiffResumeRequest) Reset() { *x = VDiffResumeRequest{} - mi := &file_vtctldata_proto_msgTypes[248] + mi := &file_vtctldata_proto_msgTypes[250] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15063,7 +15180,7 @@ func (x *VDiffResumeRequest) String() string { func (*VDiffResumeRequest) ProtoMessage() {} func (x *VDiffResumeRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[248] + mi := &file_vtctldata_proto_msgTypes[250] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15076,7 +15193,7 @@ func (x *VDiffResumeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VDiffResumeRequest.ProtoReflect.Descriptor instead. func (*VDiffResumeRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{248} + return file_vtctldata_proto_rawDescGZIP(), []int{250} } func (x *VDiffResumeRequest) GetWorkflow() string { @@ -15115,7 +15232,7 @@ type VDiffResumeResponse struct { func (x *VDiffResumeResponse) Reset() { *x = VDiffResumeResponse{} - mi := &file_vtctldata_proto_msgTypes[249] + mi := &file_vtctldata_proto_msgTypes[251] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15127,7 +15244,7 @@ func (x *VDiffResumeResponse) String() string { func (*VDiffResumeResponse) ProtoMessage() {} func (x *VDiffResumeResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[249] + mi := &file_vtctldata_proto_msgTypes[251] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15140,7 +15257,7 @@ func (x *VDiffResumeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VDiffResumeResponse.ProtoReflect.Descriptor instead. func (*VDiffResumeResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{249} + return file_vtctldata_proto_rawDescGZIP(), []int{251} } type VDiffShowRequest struct { @@ -15155,7 +15272,7 @@ type VDiffShowRequest struct { func (x *VDiffShowRequest) Reset() { *x = VDiffShowRequest{} - mi := &file_vtctldata_proto_msgTypes[250] + mi := &file_vtctldata_proto_msgTypes[252] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15167,7 +15284,7 @@ func (x *VDiffShowRequest) String() string { func (*VDiffShowRequest) ProtoMessage() {} func (x *VDiffShowRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[250] + mi := &file_vtctldata_proto_msgTypes[252] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15180,7 +15297,7 @@ func (x *VDiffShowRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VDiffShowRequest.ProtoReflect.Descriptor instead. func (*VDiffShowRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{250} + return file_vtctldata_proto_rawDescGZIP(), []int{252} } func (x *VDiffShowRequest) GetWorkflow() string { @@ -15214,7 +15331,7 @@ type VDiffShowResponse struct { func (x *VDiffShowResponse) Reset() { *x = VDiffShowResponse{} - mi := &file_vtctldata_proto_msgTypes[251] + mi := &file_vtctldata_proto_msgTypes[253] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15226,7 +15343,7 @@ func (x *VDiffShowResponse) String() string { func (*VDiffShowResponse) ProtoMessage() {} func (x *VDiffShowResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[251] + mi := &file_vtctldata_proto_msgTypes[253] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15239,7 +15356,7 @@ func (x *VDiffShowResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VDiffShowResponse.ProtoReflect.Descriptor instead. func (*VDiffShowResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{251} + return file_vtctldata_proto_rawDescGZIP(), []int{253} } func (x *VDiffShowResponse) GetTabletResponses() map[string]*tabletmanagerdata.VDiffResponse { @@ -15261,7 +15378,7 @@ type VDiffStopRequest struct { func (x *VDiffStopRequest) Reset() { *x = VDiffStopRequest{} - mi := &file_vtctldata_proto_msgTypes[252] + mi := &file_vtctldata_proto_msgTypes[254] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15273,7 +15390,7 @@ func (x *VDiffStopRequest) String() string { func (*VDiffStopRequest) ProtoMessage() {} func (x *VDiffStopRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[252] + mi := &file_vtctldata_proto_msgTypes[254] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15286,7 +15403,7 @@ func (x *VDiffStopRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VDiffStopRequest.ProtoReflect.Descriptor instead. func (*VDiffStopRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{252} + return file_vtctldata_proto_rawDescGZIP(), []int{254} } func (x *VDiffStopRequest) GetWorkflow() string { @@ -15325,7 +15442,7 @@ type VDiffStopResponse struct { func (x *VDiffStopResponse) Reset() { *x = VDiffStopResponse{} - mi := &file_vtctldata_proto_msgTypes[253] + mi := &file_vtctldata_proto_msgTypes[255] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15337,7 +15454,7 @@ func (x *VDiffStopResponse) String() string { func (*VDiffStopResponse) ProtoMessage() {} func (x *VDiffStopResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[253] + mi := &file_vtctldata_proto_msgTypes[255] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15350,7 +15467,7 @@ func (x *VDiffStopResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VDiffStopResponse.ProtoReflect.Descriptor instead. func (*VDiffStopResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{253} + return file_vtctldata_proto_rawDescGZIP(), []int{255} } type WorkflowDeleteRequest struct { @@ -15374,7 +15491,7 @@ type WorkflowDeleteRequest struct { func (x *WorkflowDeleteRequest) Reset() { *x = WorkflowDeleteRequest{} - mi := &file_vtctldata_proto_msgTypes[254] + mi := &file_vtctldata_proto_msgTypes[256] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15386,7 +15503,7 @@ func (x *WorkflowDeleteRequest) String() string { func (*WorkflowDeleteRequest) ProtoMessage() {} func (x *WorkflowDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[254] + mi := &file_vtctldata_proto_msgTypes[256] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15399,7 +15516,7 @@ func (x *WorkflowDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkflowDeleteRequest.ProtoReflect.Descriptor instead. func (*WorkflowDeleteRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{254} + return file_vtctldata_proto_rawDescGZIP(), []int{256} } func (x *WorkflowDeleteRequest) GetKeyspace() string { @@ -15461,7 +15578,7 @@ type WorkflowDeleteResponse struct { func (x *WorkflowDeleteResponse) Reset() { *x = WorkflowDeleteResponse{} - mi := &file_vtctldata_proto_msgTypes[255] + mi := &file_vtctldata_proto_msgTypes[257] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15473,7 +15590,7 @@ func (x *WorkflowDeleteResponse) String() string { func (*WorkflowDeleteResponse) ProtoMessage() {} func (x *WorkflowDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[255] + mi := &file_vtctldata_proto_msgTypes[257] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15486,7 +15603,7 @@ func (x *WorkflowDeleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkflowDeleteResponse.ProtoReflect.Descriptor instead. func (*WorkflowDeleteResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{255} + return file_vtctldata_proto_rawDescGZIP(), []int{257} } func (x *WorkflowDeleteResponse) GetSummary() string { @@ -15514,7 +15631,7 @@ type WorkflowStatusRequest struct { func (x *WorkflowStatusRequest) Reset() { *x = WorkflowStatusRequest{} - mi := &file_vtctldata_proto_msgTypes[256] + mi := &file_vtctldata_proto_msgTypes[258] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15526,7 +15643,7 @@ func (x *WorkflowStatusRequest) String() string { func (*WorkflowStatusRequest) ProtoMessage() {} func (x *WorkflowStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[256] + mi := &file_vtctldata_proto_msgTypes[258] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15539,7 +15656,7 @@ func (x *WorkflowStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkflowStatusRequest.ProtoReflect.Descriptor instead. func (*WorkflowStatusRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{256} + return file_vtctldata_proto_rawDescGZIP(), []int{258} } func (x *WorkflowStatusRequest) GetKeyspace() string { @@ -15575,7 +15692,7 @@ type WorkflowStatusResponse struct { func (x *WorkflowStatusResponse) Reset() { *x = WorkflowStatusResponse{} - mi := &file_vtctldata_proto_msgTypes[257] + mi := &file_vtctldata_proto_msgTypes[259] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15587,7 +15704,7 @@ func (x *WorkflowStatusResponse) String() string { func (*WorkflowStatusResponse) ProtoMessage() {} func (x *WorkflowStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[257] + mi := &file_vtctldata_proto_msgTypes[259] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15600,7 +15717,7 @@ func (x *WorkflowStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkflowStatusResponse.ProtoReflect.Descriptor instead. func (*WorkflowStatusResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{257} + return file_vtctldata_proto_rawDescGZIP(), []int{259} } func (x *WorkflowStatusResponse) GetTableCopyState() map[string]*WorkflowStatusResponse_TableCopyState { @@ -15644,7 +15761,7 @@ type WorkflowSwitchTrafficRequest struct { func (x *WorkflowSwitchTrafficRequest) Reset() { *x = WorkflowSwitchTrafficRequest{} - mi := &file_vtctldata_proto_msgTypes[258] + mi := &file_vtctldata_proto_msgTypes[260] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15656,7 +15773,7 @@ func (x *WorkflowSwitchTrafficRequest) String() string { func (*WorkflowSwitchTrafficRequest) ProtoMessage() {} func (x *WorkflowSwitchTrafficRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[258] + mi := &file_vtctldata_proto_msgTypes[260] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15669,7 +15786,7 @@ func (x *WorkflowSwitchTrafficRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkflowSwitchTrafficRequest.ProtoReflect.Descriptor instead. func (*WorkflowSwitchTrafficRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{258} + return file_vtctldata_proto_rawDescGZIP(), []int{260} } func (x *WorkflowSwitchTrafficRequest) GetKeyspace() string { @@ -15768,7 +15885,7 @@ type WorkflowSwitchTrafficResponse struct { func (x *WorkflowSwitchTrafficResponse) Reset() { *x = WorkflowSwitchTrafficResponse{} - mi := &file_vtctldata_proto_msgTypes[259] + mi := &file_vtctldata_proto_msgTypes[261] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15780,7 +15897,7 @@ func (x *WorkflowSwitchTrafficResponse) String() string { func (*WorkflowSwitchTrafficResponse) ProtoMessage() {} func (x *WorkflowSwitchTrafficResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[259] + mi := &file_vtctldata_proto_msgTypes[261] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15793,7 +15910,7 @@ func (x *WorkflowSwitchTrafficResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkflowSwitchTrafficResponse.ProtoReflect.Descriptor instead. func (*WorkflowSwitchTrafficResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{259} + return file_vtctldata_proto_rawDescGZIP(), []int{261} } func (x *WorkflowSwitchTrafficResponse) GetSummary() string { @@ -15836,7 +15953,7 @@ type WorkflowUpdateRequest struct { func (x *WorkflowUpdateRequest) Reset() { *x = WorkflowUpdateRequest{} - mi := &file_vtctldata_proto_msgTypes[260] + mi := &file_vtctldata_proto_msgTypes[262] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15848,7 +15965,7 @@ func (x *WorkflowUpdateRequest) String() string { func (*WorkflowUpdateRequest) ProtoMessage() {} func (x *WorkflowUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[260] + mi := &file_vtctldata_proto_msgTypes[262] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15861,7 +15978,7 @@ func (x *WorkflowUpdateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkflowUpdateRequest.ProtoReflect.Descriptor instead. func (*WorkflowUpdateRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{260} + return file_vtctldata_proto_rawDescGZIP(), []int{262} } func (x *WorkflowUpdateRequest) GetKeyspace() string { @@ -15888,7 +16005,7 @@ type WorkflowUpdateResponse struct { func (x *WorkflowUpdateResponse) Reset() { *x = WorkflowUpdateResponse{} - mi := &file_vtctldata_proto_msgTypes[261] + mi := &file_vtctldata_proto_msgTypes[263] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15900,7 +16017,7 @@ func (x *WorkflowUpdateResponse) String() string { func (*WorkflowUpdateResponse) ProtoMessage() {} func (x *WorkflowUpdateResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[261] + mi := &file_vtctldata_proto_msgTypes[263] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15913,7 +16030,7 @@ func (x *WorkflowUpdateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkflowUpdateResponse.ProtoReflect.Descriptor instead. func (*WorkflowUpdateResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{261} + return file_vtctldata_proto_rawDescGZIP(), []int{263} } func (x *WorkflowUpdateResponse) GetSummary() string { @@ -15938,7 +16055,7 @@ type GetMirrorRulesRequest struct { func (x *GetMirrorRulesRequest) Reset() { *x = GetMirrorRulesRequest{} - mi := &file_vtctldata_proto_msgTypes[262] + mi := &file_vtctldata_proto_msgTypes[264] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15950,7 +16067,7 @@ func (x *GetMirrorRulesRequest) String() string { func (*GetMirrorRulesRequest) ProtoMessage() {} func (x *GetMirrorRulesRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[262] + mi := &file_vtctldata_proto_msgTypes[264] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15963,7 +16080,7 @@ func (x *GetMirrorRulesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetMirrorRulesRequest.ProtoReflect.Descriptor instead. func (*GetMirrorRulesRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{262} + return file_vtctldata_proto_rawDescGZIP(), []int{264} } type GetMirrorRulesResponse struct { @@ -15975,7 +16092,7 @@ type GetMirrorRulesResponse struct { func (x *GetMirrorRulesResponse) Reset() { *x = GetMirrorRulesResponse{} - mi := &file_vtctldata_proto_msgTypes[263] + mi := &file_vtctldata_proto_msgTypes[265] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15987,7 +16104,7 @@ func (x *GetMirrorRulesResponse) String() string { func (*GetMirrorRulesResponse) ProtoMessage() {} func (x *GetMirrorRulesResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[263] + mi := &file_vtctldata_proto_msgTypes[265] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16000,7 +16117,7 @@ func (x *GetMirrorRulesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetMirrorRulesResponse.ProtoReflect.Descriptor instead. func (*GetMirrorRulesResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{263} + return file_vtctldata_proto_rawDescGZIP(), []int{265} } func (x *GetMirrorRulesResponse) GetMirrorRules() *vschema.MirrorRules { @@ -16022,7 +16139,7 @@ type WorkflowMirrorTrafficRequest struct { func (x *WorkflowMirrorTrafficRequest) Reset() { *x = WorkflowMirrorTrafficRequest{} - mi := &file_vtctldata_proto_msgTypes[264] + mi := &file_vtctldata_proto_msgTypes[266] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16034,7 +16151,7 @@ func (x *WorkflowMirrorTrafficRequest) String() string { func (*WorkflowMirrorTrafficRequest) ProtoMessage() {} func (x *WorkflowMirrorTrafficRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[264] + mi := &file_vtctldata_proto_msgTypes[266] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16047,7 +16164,7 @@ func (x *WorkflowMirrorTrafficRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkflowMirrorTrafficRequest.ProtoReflect.Descriptor instead. func (*WorkflowMirrorTrafficRequest) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{264} + return file_vtctldata_proto_rawDescGZIP(), []int{266} } func (x *WorkflowMirrorTrafficRequest) GetKeyspace() string { @@ -16089,7 +16206,7 @@ type WorkflowMirrorTrafficResponse struct { func (x *WorkflowMirrorTrafficResponse) Reset() { *x = WorkflowMirrorTrafficResponse{} - mi := &file_vtctldata_proto_msgTypes[265] + mi := &file_vtctldata_proto_msgTypes[267] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16101,7 +16218,7 @@ func (x *WorkflowMirrorTrafficResponse) String() string { func (*WorkflowMirrorTrafficResponse) ProtoMessage() {} func (x *WorkflowMirrorTrafficResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[265] + mi := &file_vtctldata_proto_msgTypes[267] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16114,7 +16231,7 @@ func (x *WorkflowMirrorTrafficResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkflowMirrorTrafficResponse.ProtoReflect.Descriptor instead. func (*WorkflowMirrorTrafficResponse) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{265} + return file_vtctldata_proto_rawDescGZIP(), []int{267} } func (x *WorkflowMirrorTrafficResponse) GetSummary() string { @@ -16148,7 +16265,7 @@ type Workflow_ReplicationLocation struct { func (x *Workflow_ReplicationLocation) Reset() { *x = Workflow_ReplicationLocation{} - mi := &file_vtctldata_proto_msgTypes[268] + mi := &file_vtctldata_proto_msgTypes[270] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16160,7 +16277,7 @@ func (x *Workflow_ReplicationLocation) String() string { func (*Workflow_ReplicationLocation) ProtoMessage() {} func (x *Workflow_ReplicationLocation) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[268] + mi := &file_vtctldata_proto_msgTypes[270] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16201,7 +16318,7 @@ type Workflow_ShardStream struct { func (x *Workflow_ShardStream) Reset() { *x = Workflow_ShardStream{} - mi := &file_vtctldata_proto_msgTypes[269] + mi := &file_vtctldata_proto_msgTypes[271] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16213,7 +16330,7 @@ func (x *Workflow_ShardStream) String() string { func (*Workflow_ShardStream) ProtoMessage() {} func (x *Workflow_ShardStream) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[269] + mi := &file_vtctldata_proto_msgTypes[271] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16286,7 +16403,7 @@ type Workflow_Stream struct { func (x *Workflow_Stream) Reset() { *x = Workflow_Stream{} - mi := &file_vtctldata_proto_msgTypes[270] + mi := &file_vtctldata_proto_msgTypes[272] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16298,7 +16415,7 @@ func (x *Workflow_Stream) String() string { func (*Workflow_Stream) ProtoMessage() {} func (x *Workflow_Stream) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[270] + mi := &file_vtctldata_proto_msgTypes[272] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16465,7 +16582,7 @@ type Workflow_Stream_CopyState struct { func (x *Workflow_Stream_CopyState) Reset() { *x = Workflow_Stream_CopyState{} - mi := &file_vtctldata_proto_msgTypes[271] + mi := &file_vtctldata_proto_msgTypes[273] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16477,7 +16594,7 @@ func (x *Workflow_Stream_CopyState) String() string { func (*Workflow_Stream_CopyState) ProtoMessage() {} func (x *Workflow_Stream_CopyState) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[271] + mi := &file_vtctldata_proto_msgTypes[273] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16530,7 +16647,7 @@ type Workflow_Stream_Log struct { func (x *Workflow_Stream_Log) Reset() { *x = Workflow_Stream_Log{} - mi := &file_vtctldata_proto_msgTypes[272] + mi := &file_vtctldata_proto_msgTypes[274] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16542,7 +16659,7 @@ func (x *Workflow_Stream_Log) String() string { func (*Workflow_Stream_Log) ProtoMessage() {} func (x *Workflow_Stream_Log) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[272] + mi := &file_vtctldata_proto_msgTypes[274] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16624,7 +16741,7 @@ type Workflow_Stream_ThrottlerStatus struct { func (x *Workflow_Stream_ThrottlerStatus) Reset() { *x = Workflow_Stream_ThrottlerStatus{} - mi := &file_vtctldata_proto_msgTypes[273] + mi := &file_vtctldata_proto_msgTypes[275] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16636,7 +16753,7 @@ func (x *Workflow_Stream_ThrottlerStatus) String() string { func (*Workflow_Stream_ThrottlerStatus) ProtoMessage() {} func (x *Workflow_Stream_ThrottlerStatus) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[273] + mi := &file_vtctldata_proto_msgTypes[275] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16675,7 +16792,7 @@ type ApplyVSchemaResponse_ParamList struct { func (x *ApplyVSchemaResponse_ParamList) Reset() { *x = ApplyVSchemaResponse_ParamList{} - mi := &file_vtctldata_proto_msgTypes[276] + mi := &file_vtctldata_proto_msgTypes[278] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16687,7 +16804,7 @@ func (x *ApplyVSchemaResponse_ParamList) String() string { func (*ApplyVSchemaResponse_ParamList) ProtoMessage() {} func (x *ApplyVSchemaResponse_ParamList) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[276] + mi := &file_vtctldata_proto_msgTypes[278] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16719,7 +16836,7 @@ type GetSrvKeyspaceNamesResponse_NameList struct { func (x *GetSrvKeyspaceNamesResponse_NameList) Reset() { *x = GetSrvKeyspaceNamesResponse_NameList{} - mi := &file_vtctldata_proto_msgTypes[288] + mi := &file_vtctldata_proto_msgTypes[290] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16731,7 +16848,7 @@ func (x *GetSrvKeyspaceNamesResponse_NameList) String() string { func (*GetSrvKeyspaceNamesResponse_NameList) ProtoMessage() {} func (x *GetSrvKeyspaceNamesResponse_NameList) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[288] + mi := &file_vtctldata_proto_msgTypes[290] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16765,7 +16882,7 @@ type MoveTablesCreateResponse_TabletInfo struct { func (x *MoveTablesCreateResponse_TabletInfo) Reset() { *x = MoveTablesCreateResponse_TabletInfo{} - mi := &file_vtctldata_proto_msgTypes[292] + mi := &file_vtctldata_proto_msgTypes[294] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16777,7 +16894,7 @@ func (x *MoveTablesCreateResponse_TabletInfo) String() string { func (*MoveTablesCreateResponse_TabletInfo) ProtoMessage() {} func (x *MoveTablesCreateResponse_TabletInfo) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[292] + mi := &file_vtctldata_proto_msgTypes[294] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16790,7 +16907,7 @@ func (x *MoveTablesCreateResponse_TabletInfo) ProtoReflect() protoreflect.Messag // Deprecated: Use MoveTablesCreateResponse_TabletInfo.ProtoReflect.Descriptor instead. func (*MoveTablesCreateResponse_TabletInfo) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{158, 0} + return file_vtctldata_proto_rawDescGZIP(), []int{160, 0} } func (x *MoveTablesCreateResponse_TabletInfo) GetTablet() *topodata.TabletAlias { @@ -16818,7 +16935,7 @@ type WorkflowDeleteResponse_TabletInfo struct { func (x *WorkflowDeleteResponse_TabletInfo) Reset() { *x = WorkflowDeleteResponse_TabletInfo{} - mi := &file_vtctldata_proto_msgTypes[302] + mi := &file_vtctldata_proto_msgTypes[304] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16830,7 +16947,7 @@ func (x *WorkflowDeleteResponse_TabletInfo) String() string { func (*WorkflowDeleteResponse_TabletInfo) ProtoMessage() {} func (x *WorkflowDeleteResponse_TabletInfo) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[302] + mi := &file_vtctldata_proto_msgTypes[304] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16843,7 +16960,7 @@ func (x *WorkflowDeleteResponse_TabletInfo) ProtoReflect() protoreflect.Message // Deprecated: Use WorkflowDeleteResponse_TabletInfo.ProtoReflect.Descriptor instead. func (*WorkflowDeleteResponse_TabletInfo) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{255, 0} + return file_vtctldata_proto_rawDescGZIP(), []int{257, 0} } func (x *WorkflowDeleteResponse_TabletInfo) GetTablet() *topodata.TabletAlias { @@ -16874,7 +16991,7 @@ type WorkflowStatusResponse_TableCopyState struct { func (x *WorkflowStatusResponse_TableCopyState) Reset() { *x = WorkflowStatusResponse_TableCopyState{} - mi := &file_vtctldata_proto_msgTypes[303] + mi := &file_vtctldata_proto_msgTypes[305] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16886,7 +17003,7 @@ func (x *WorkflowStatusResponse_TableCopyState) String() string { func (*WorkflowStatusResponse_TableCopyState) ProtoMessage() {} func (x *WorkflowStatusResponse_TableCopyState) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[303] + mi := &file_vtctldata_proto_msgTypes[305] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16899,7 +17016,7 @@ func (x *WorkflowStatusResponse_TableCopyState) ProtoReflect() protoreflect.Mess // Deprecated: Use WorkflowStatusResponse_TableCopyState.ProtoReflect.Descriptor instead. func (*WorkflowStatusResponse_TableCopyState) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{257, 0} + return file_vtctldata_proto_rawDescGZIP(), []int{259, 0} } func (x *WorkflowStatusResponse_TableCopyState) GetRowsCopied() int64 { @@ -16958,7 +17075,7 @@ type WorkflowStatusResponse_ShardStreamState struct { func (x *WorkflowStatusResponse_ShardStreamState) Reset() { *x = WorkflowStatusResponse_ShardStreamState{} - mi := &file_vtctldata_proto_msgTypes[304] + mi := &file_vtctldata_proto_msgTypes[306] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16970,7 +17087,7 @@ func (x *WorkflowStatusResponse_ShardStreamState) String() string { func (*WorkflowStatusResponse_ShardStreamState) ProtoMessage() {} func (x *WorkflowStatusResponse_ShardStreamState) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[304] + mi := &file_vtctldata_proto_msgTypes[306] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16983,7 +17100,7 @@ func (x *WorkflowStatusResponse_ShardStreamState) ProtoReflect() protoreflect.Me // Deprecated: Use WorkflowStatusResponse_ShardStreamState.ProtoReflect.Descriptor instead. func (*WorkflowStatusResponse_ShardStreamState) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{257, 1} + return file_vtctldata_proto_rawDescGZIP(), []int{259, 1} } func (x *WorkflowStatusResponse_ShardStreamState) GetId() int32 { @@ -17037,7 +17154,7 @@ type WorkflowStatusResponse_ShardStreams struct { func (x *WorkflowStatusResponse_ShardStreams) Reset() { *x = WorkflowStatusResponse_ShardStreams{} - mi := &file_vtctldata_proto_msgTypes[305] + mi := &file_vtctldata_proto_msgTypes[307] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -17049,7 +17166,7 @@ func (x *WorkflowStatusResponse_ShardStreams) String() string { func (*WorkflowStatusResponse_ShardStreams) ProtoMessage() {} func (x *WorkflowStatusResponse_ShardStreams) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[305] + mi := &file_vtctldata_proto_msgTypes[307] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17062,7 +17179,7 @@ func (x *WorkflowStatusResponse_ShardStreams) ProtoReflect() protoreflect.Messag // Deprecated: Use WorkflowStatusResponse_ShardStreams.ProtoReflect.Descriptor instead. func (*WorkflowStatusResponse_ShardStreams) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{257, 2} + return file_vtctldata_proto_rawDescGZIP(), []int{259, 2} } func (x *WorkflowStatusResponse_ShardStreams) GetStreams() []*WorkflowStatusResponse_ShardStreamState { @@ -17084,7 +17201,7 @@ type WorkflowUpdateResponse_TabletInfo struct { func (x *WorkflowUpdateResponse_TabletInfo) Reset() { *x = WorkflowUpdateResponse_TabletInfo{} - mi := &file_vtctldata_proto_msgTypes[308] + mi := &file_vtctldata_proto_msgTypes[310] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -17096,7 +17213,7 @@ func (x *WorkflowUpdateResponse_TabletInfo) String() string { func (*WorkflowUpdateResponse_TabletInfo) ProtoMessage() {} func (x *WorkflowUpdateResponse_TabletInfo) ProtoReflect() protoreflect.Message { - mi := &file_vtctldata_proto_msgTypes[308] + mi := &file_vtctldata_proto_msgTypes[310] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17109,7 +17226,7 @@ func (x *WorkflowUpdateResponse_TabletInfo) ProtoReflect() protoreflect.Message // Deprecated: Use WorkflowUpdateResponse_TabletInfo.ProtoReflect.Descriptor instead. func (*WorkflowUpdateResponse_TabletInfo) Descriptor() ([]byte, []int) { - return file_vtctldata_proto_rawDescGZIP(), []int{261, 0} + return file_vtctldata_proto_rawDescGZIP(), []int{263, 0} } func (x *WorkflowUpdateResponse_TabletInfo) GetTablet() *topodata.TabletAlias { @@ -17128,2678 +17245,1270 @@ func (x *WorkflowUpdateResponse_TabletInfo) GetChanged() bool { var File_vtctldata_proto protoreflect.FileDescriptor -var file_vtctldata_proto_rawDesc = string([]byte{ - 0x0a, 0x0f, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x09, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x10, 0x62, 0x69, - 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0d, - 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0e, 0x6d, - 0x79, 0x73, 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0b, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x72, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x17, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0e, 0x74, 0x6f, 0x70, 0x6f, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0d, 0x76, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0b, 0x76, 0x74, 0x72, 0x70, 0x63, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0c, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x57, 0x0a, 0x1a, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x56, - 0x74, 0x63, 0x74, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0x43, 0x0a, - 0x1b, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x56, 0x74, 0x63, 0x74, 0x6c, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x05, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, - 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x22, 0x89, 0x01, 0x0a, 0x18, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x61, 0x74, 0x65, - 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, - 0x21, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x65, 0x78, 0x70, - 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x64, 0x6c, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x64, 0x6c, 0x22, 0xf5, - 0x06, 0x0a, 0x13, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x66, 0x74, - 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, - 0x74, 0x6f, 0x70, 0x41, 0x66, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x70, 0x79, 0x12, 0x4a, 0x0a, 0x0e, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, - 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x65, 0x6c, 0x6c, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x12, 0x21, 0x0a, 0x0c, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, - 0x29, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x57, 0x0a, 0x16, 0x6d, 0x61, - 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x76, 0x74, 0x63, - 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x15, 0x6d, 0x61, - 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x5f, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x12, 0x28, 0x0a, - 0x10, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x7a, 0x6f, 0x6e, - 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x15, 0x0a, 0x06, - 0x6f, 0x6e, 0x5f, 0x64, 0x64, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x6e, - 0x44, 0x64, 0x6c, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x65, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x12, 0x64, 0x65, 0x66, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, - 0x79, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x6c, 0x0a, 0x1b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x19, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, 0x63, 0x6f, - 0x70, 0x79, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, - 0x43, 0x6f, 0x70, 0x79, 0x12, 0x45, 0x0a, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0f, 0x77, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x72, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, - 0x12, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0x4e, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x08, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0xb6, 0x13, 0x0a, 0x0f, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, - 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x2f, - 0x0a, 0x13, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6d, 0x69, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x3f, 0x0a, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x74, - 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, - 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x08, 0x61, 0x64, - 0x64, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, - 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x07, 0x61, 0x64, 0x64, 0x65, - 0x64, 0x41, 0x74, 0x12, 0x2f, 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, - 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x12, 0x27, 0x0a, 0x08, 0x72, 0x65, 0x61, 0x64, 0x79, 0x5f, 0x61, 0x74, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x52, 0x07, 0x72, 0x65, 0x61, 0x64, 0x79, 0x41, 0x74, 0x12, 0x2b, 0x0a, - 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, - 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x3b, 0x0a, 0x12, 0x6c, 0x69, - 0x76, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x52, 0x11, 0x6c, 0x69, 0x76, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2f, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x6c, - 0x65, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, - 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0b, 0x63, 0x6f, 0x6d, - 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x30, 0x0a, 0x0d, 0x63, 0x6c, 0x65, 0x61, - 0x6e, 0x65, 0x64, 0x5f, 0x75, 0x70, 0x5f, 0x61, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0b, 0x63, - 0x6c, 0x65, 0x61, 0x6e, 0x65, 0x64, 0x55, 0x70, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x76, 0x74, 0x63, - 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x6f, 0x67, 0x5f, 0x70, 0x61, 0x74, - 0x68, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x50, 0x61, 0x74, 0x68, - 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x12, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x18, - 0x0a, 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, - 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x02, - 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x6d, 0x69, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, - 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x64, 0x6c, 0x5f, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x64, 0x6c, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x74, 0x61, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, - 0x1a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x65, 0x74, 0x61, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, - 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x64, - 0x18, 0x1b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x72, 0x6f, 0x77, 0x73, 0x43, 0x6f, 0x70, 0x69, - 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x6f, 0x77, 0x73, - 0x18, 0x1c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, - 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x64, 0x64, 0x65, 0x64, 0x5f, 0x75, 0x6e, 0x69, 0x71, 0x75, - 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x61, 0x64, - 0x64, 0x65, 0x64, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x2e, 0x0a, - 0x13, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x5f, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, - 0x6b, 0x65, 0x79, 0x73, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x72, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x64, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x19, 0x0a, - 0x08, 0x6c, 0x6f, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x6c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x3f, 0x0a, 0x12, 0x61, 0x72, 0x74, 0x69, - 0x66, 0x61, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x20, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, - 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x13, 0x70, 0x6f, 0x73, - 0x74, 0x70, 0x6f, 0x6e, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x21, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x70, 0x6f, 0x73, 0x74, 0x70, 0x6f, 0x6e, 0x65, - 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x18, 0x72, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x5f, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x6b, 0x65, 0x79, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x22, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x72, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x1f, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6e, - 0x6f, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x23, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1b, 0x64, 0x72, - 0x6f, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x6f, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x78, 0x70, - 0x61, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x18, 0x24, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, - 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x29, 0x0a, - 0x10, 0x72, 0x65, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x65, - 0x73, 0x18, 0x25, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x76, 0x65, 0x72, 0x74, 0x69, - 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x5f, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x26, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, 0x5f, - 0x75, 0x75, 0x69, 0x64, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x65, - 0x72, 0x74, 0x65, 0x64, 0x55, 0x75, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x76, - 0x69, 0x65, 0x77, 0x18, 0x28, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x56, 0x69, 0x65, - 0x77, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x61, 0x64, 0x79, 0x5f, 0x74, 0x6f, 0x5f, 0x63, 0x6f, - 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x72, 0x65, - 0x61, 0x64, 0x79, 0x54, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x3a, 0x0a, - 0x19, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x76, 0x65, 0x6e, 0x65, 0x73, 0x73, - 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x17, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x76, 0x65, 0x6e, 0x65, 0x73, 0x73, - 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2e, 0x0a, 0x13, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x18, 0x2b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x75, 0x73, 0x65, 0x72, 0x54, 0x68, 0x72, 0x6f, - 0x74, 0x74, 0x6c, 0x65, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x70, 0x65, - 0x63, 0x69, 0x61, 0x6c, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x38, 0x0a, 0x11, - 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, - 0x74, 0x6c, 0x65, 0x64, 0x41, 0x74, 0x12, 0x2f, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x18, 0x2e, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x54, 0x68, - 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x0c, 0x63, 0x61, 0x6e, 0x63, 0x65, - 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, - 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0b, 0x63, 0x61, 0x6e, - 0x63, 0x65, 0x6c, 0x6c, 0x65, 0x64, 0x41, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x6f, 0x73, 0x74, - 0x70, 0x6f, 0x6e, 0x65, 0x5f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x18, 0x30, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0e, 0x70, 0x6f, 0x73, 0x74, 0x70, 0x6f, 0x6e, 0x65, 0x4c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x18, 0x31, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x75, 0x74, 0x6f, 0x76, - 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x18, 0x32, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0f, 0x63, 0x75, 0x74, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, - 0x74, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x69, 0x73, 0x5f, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, - 0x74, 0x65, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x33, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x14, 0x69, 0x73, 0x49, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x4f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, - 0x65, 0x77, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, - 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x76, - 0x69, 0x65, 0x77, 0x65, 0x64, 0x41, 0x74, 0x12, 0x3d, 0x0a, 0x14, 0x72, 0x65, 0x61, 0x64, 0x79, - 0x5f, 0x74, 0x6f, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x61, 0x74, 0x18, - 0x35, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x52, 0x11, 0x72, 0x65, 0x61, 0x64, 0x79, 0x54, 0x6f, 0x43, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x19, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x18, 0x36, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x72, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x64, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x22, 0x49, 0x0a, 0x08, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x0a, 0x0a, - 0x06, 0x56, 0x49, 0x54, 0x45, 0x53, 0x53, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x4e, 0x4c, - 0x49, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x10, - 0x03, 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x10, 0x04, 0x1a, 0x02, 0x10, 0x01, - 0x22, 0x04, 0x08, 0x01, 0x10, 0x01, 0x22, 0x04, 0x08, 0x02, 0x10, 0x02, 0x22, 0x71, 0x0a, 0x06, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, - 0x4e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x45, 0x44, - 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x4c, 0x45, 0x44, 0x10, - 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x51, 0x55, 0x45, 0x55, 0x45, 0x44, 0x10, 0x03, 0x12, 0x09, 0x0a, - 0x05, 0x52, 0x45, 0x41, 0x44, 0x59, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55, 0x4e, 0x4e, - 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, - 0x45, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x07, 0x22, - 0x5e, 0x0a, 0x05, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x22, - 0xda, 0x02, 0x0a, 0x0f, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, - 0x12, 0x6e, 0x0a, 0x1f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x65, 0x64, 0x5f, 0x61, 0x75, 0x74, 0x6f, - 0x5f, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, - 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x65, 0x64, 0x41, 0x75, 0x74, - 0x6f, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x69, - 0x6e, 0x67, 0x52, 0x1c, 0x73, 0x68, 0x61, 0x72, 0x64, 0x65, 0x64, 0x41, 0x75, 0x74, 0x6f, 0x49, - 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x69, 0x6e, 0x67, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x3e, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x27, 0x0a, 0x0f, 0x67, 0x6c, 0x6f, 0x62, - 0x61, 0x6c, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xcf, 0x11, 0x0a, - 0x08, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, - 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x3f, - 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, - 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, - 0x31, 0x0a, 0x15, 0x6d, 0x61, 0x78, 0x5f, 0x76, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, - 0x6d, 0x61, 0x78, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, - 0x61, 0x67, 0x12, 0x4a, 0x0a, 0x0d, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x23, - 0x0a, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, - 0x73, 0x75, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, - 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x48, 0x0a, 0x21, 0x6d, 0x61, 0x78, 0x5f, 0x76, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6c, 0x61, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1d, 0x6d, 0x61, 0x78, 0x56, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x65, 0x66, - 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, - 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x64, 0x65, 0x66, 0x65, 0x72, 0x53, 0x65, - 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x34, 0x0a, 0x07, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x76, - 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x1a, 0x60, 0x0a, 0x11, 0x53, 0x68, 0x61, 0x72, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x35, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x61, - 0x72, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x49, 0x0a, 0x13, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x1a, 0xb9, - 0x01, 0x0a, 0x0b, 0x53, 0x68, 0x61, 0x72, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x34, - 0x0a, 0x07, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x07, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x73, 0x12, 0x46, 0x0a, 0x0f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x2e, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x0e, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x73, 0x12, 0x2c, 0x0a, 0x12, - 0x69, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x73, 0x50, 0x72, 0x69, 0x6d, - 0x61, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x1a, 0xc1, 0x0a, 0x0a, 0x06, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x2d, 0x0a, 0x06, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, - 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, - 0x61, 0x73, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x3d, 0x0a, 0x0d, 0x62, 0x69, - 0x6e, 0x6c, 0x6f, 0x67, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x42, - 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0c, 0x62, 0x69, 0x6e, - 0x6c, 0x6f, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, - 0x6f, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x17, 0x0a, 0x07, 0x64, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x64, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x15, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, - 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2f, 0x0a, 0x0c, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x45, 0x0a, 0x0b, 0x63, 0x6f, 0x70, 0x79, 0x5f, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x76, - 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x0a, 0x63, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x32, - 0x0a, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x76, - 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x4c, 0x6f, 0x67, 0x52, 0x04, 0x6c, 0x6f, - 0x67, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x6f, 0x67, 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, 0x5f, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x6f, 0x67, - 0x46, 0x65, 0x74, 0x63, 0x68, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, - 0x67, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x1f, - 0x0a, 0x0b, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x64, 0x18, 0x10, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x6f, 0x77, 0x73, 0x43, 0x6f, 0x70, 0x69, 0x65, 0x64, 0x12, - 0x55, 0x0a, 0x10, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, - 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, - 0x6c, 0x0a, 0x1b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x13, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x52, 0x19, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, - 0x6c, 0x6c, 0x73, 0x1a, 0x57, 0x0a, 0x09, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x70, - 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x12, - 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x08, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x1a, 0xe6, 0x01, 0x0a, - 0x03, 0x4c, 0x6f, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x0a, 0x0a, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x09, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x2b, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, - 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x77, 0x0a, 0x0f, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, - 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2f, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x0e, 0x74, 0x69, 0x6d, - 0x65, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, - 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x22, 0x59, - 0x0a, 0x12, 0x41, 0x64, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x63, 0x65, 0x6c, 0x6c, - 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x6f, - 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x08, 0x63, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x15, 0x0a, 0x13, 0x41, 0x64, 0x64, - 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x40, 0x0a, 0x14, 0x41, 0x64, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, - 0x6c, 0x73, 0x22, 0x17, 0x0a, 0x15, 0x41, 0x64, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, - 0x69, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xbf, 0x01, 0x0a, 0x20, - 0x41, 0x70, 0x70, 0x6c, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, - 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x53, 0x0a, 0x16, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x72, 0x6f, 0x75, - 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, - 0x14, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, - 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x72, 0x65, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x73, 0x6b, 0x69, - 0x70, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x62, 0x75, - 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0c, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x78, 0x0a, - 0x21, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, - 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x53, 0x0a, 0x16, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x72, - 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, - 0x73, 0x52, 0x14, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, - 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x9e, 0x01, 0x0a, 0x18, 0x41, 0x70, 0x70, 0x6c, - 0x79, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x0d, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x76, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, - 0x65, 0x73, 0x52, 0x0c, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, - 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x73, 0x6b, 0x69, 0x70, 0x52, 0x65, 0x62, 0x75, - 0x69, 0x6c, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, - 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x62, 0x75, - 0x69, 0x6c, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x1b, 0x0a, 0x19, 0x41, 0x70, 0x70, 0x6c, - 0x79, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb3, 0x01, 0x0a, 0x1d, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x13, 0x73, 0x68, 0x61, 0x72, 0x64, - 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, - 0x52, 0x11, 0x73, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, - 0x6c, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x72, 0x65, 0x62, 0x75, - 0x69, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x73, 0x6b, 0x69, 0x70, 0x52, - 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, - 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x20, 0x0a, 0x1e, 0x41, - 0x70, 0x70, 0x6c, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, - 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xce, 0x02, - 0x0a, 0x12, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x73, - 0x71, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x64, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, - 0x67, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x64, 0x6c, 0x53, 0x74, 0x72, - 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x75, 0x69, 0x64, 0x5f, 0x6c, 0x69, - 0x73, 0x74, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x75, 0x75, 0x69, 0x64, 0x4c, 0x69, - 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6d, - 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, - 0x44, 0x0a, 0x15, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x13, 0x77, 0x61, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x54, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x2c, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, - 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x62, 0x61, 0x74, 0x63, 0x68, 0x53, 0x69, - 0x7a, 0x65, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x22, 0xe8, - 0x01, 0x0a, 0x13, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x75, 0x69, 0x64, 0x5f, 0x6c, - 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x75, 0x75, 0x69, 0x64, 0x4c, - 0x69, 0x73, 0x74, 0x12, 0x6c, 0x0a, 0x16, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x72, 0x6f, - 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, - 0x64, 0x1a, 0x46, 0x0a, 0x18, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xdb, 0x01, 0x0a, 0x13, 0x41, 0x70, - 0x70, 0x6c, 0x79, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, - 0x0c, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0b, 0x73, 0x6b, 0x69, 0x70, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x06, 0x64, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, - 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, - 0x2c, 0x0a, 0x08, 0x76, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x07, 0x76, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x10, 0x0a, - 0x03, 0x73, 0x71, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x71, 0x6c, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x06, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x22, 0xca, 0x02, 0x0a, 0x14, 0x41, 0x70, 0x70, 0x6c, - 0x79, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2c, 0x0a, 0x08, 0x76, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x07, 0x76, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x6c, - 0x0a, 0x15, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x76, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x56, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x55, - 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, - 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x71, 0x0a, 0x18, - 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3f, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x56, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x23, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x22, 0xe9, 0x02, 0x0a, 0x0d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, - 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, - 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, - 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, - 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x72, - 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x6e, 0x63, 0x72, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x70, 0x6f, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x6c, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x6f, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x70, 0x67, - 0x72, 0x61, 0x64, 0x65, 0x5f, 0x73, 0x61, 0x66, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0b, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x53, 0x61, 0x66, 0x65, 0x12, 0x28, 0x0a, 0x0d, - 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x45, 0x6e, 0x67, - 0x69, 0x6e, 0x65, 0x88, 0x01, 0x01, 0x12, 0x46, 0x0a, 0x16, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x5f, - 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x53, - 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x10, - 0x0a, 0x0e, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, - 0x22, 0xa2, 0x01, 0x0a, 0x0e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, - 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, - 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1a, 0x0a, - 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, - 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, - 0x24, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, - 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x05, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0xaa, 0x02, 0x0a, 0x12, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, - 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x23, - 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x72, 0x69, 0x6d, - 0x61, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x63, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, - 0x5f, 0x73, 0x61, 0x66, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x70, 0x67, - 0x72, 0x61, 0x64, 0x65, 0x53, 0x61, 0x66, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x6e, 0x63, 0x72, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x70, 0x6f, 0x73, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x61, 0x6c, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x6f, 0x73, 0x12, 0x46, 0x0a, 0x16, 0x6d, 0x79, - 0x73, 0x71, 0x6c, 0x5f, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, - 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x6d, 0x79, - 0x73, 0x71, 0x6c, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x22, 0x7c, 0x0a, 0x1c, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, - 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, - 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, - 0x22, 0xdf, 0x01, 0x0a, 0x1d, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x76, 0x0a, 0x16, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, - 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x6f, 0x77, - 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x72, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x1a, 0x46, 0x0a, 0x18, 0x52, 0x6f, - 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, - 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0xe8, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, - 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x40, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, - 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x70, - 0x6c, 0x61, 0x63, 0x65, 0x1a, 0x37, 0x0a, 0x09, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc0, 0x02, - 0x0a, 0x18, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x61, - 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x0b, 0x62, 0x65, - 0x66, 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x33, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x54, 0x61, 0x67, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x54, 0x61, 0x67, 0x73, - 0x12, 0x51, 0x0a, 0x0a, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x61, 0x67, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x66, 0x74, 0x65, 0x72, 0x54, - 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x61, 0x66, 0x74, 0x65, 0x72, 0x54, - 0x61, 0x67, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x54, 0x61, 0x67, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x41, 0x66, 0x74, 0x65, 0x72, 0x54, 0x61, 0x67, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0x9b, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x2d, 0x0a, 0x07, 0x64, 0x62, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x64, - 0x62, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x22, 0xa6, - 0x01, 0x0a, 0x18, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x0d, 0x62, - 0x65, 0x66, 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x52, 0x0c, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x12, 0x33, 0x0a, 0x0c, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x0b, 0x61, 0x66, 0x74, 0x65, - 0x72, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x1e, 0x0a, 0x0b, 0x77, 0x61, 0x73, 0x5f, 0x64, - 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x77, 0x61, - 0x73, 0x44, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x22, 0xe3, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, - 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, - 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x36, 0x0a, 0x17, - 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, - 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x73, - 0x6b, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, - 0x65, 0x61, 0x74, 0x73, 0x12, 0x27, 0x0a, 0x10, 0x6f, 0x6b, 0x5f, 0x69, 0x66, 0x5f, 0x6e, 0x6f, - 0x74, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, - 0x6f, 0x6b, 0x49, 0x66, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0x93, 0x01, - 0x0a, 0x16, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, - 0x61, 0x73, 0x12, 0x3f, 0x0a, 0x05, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, - 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x22, 0x7d, 0x0a, 0x1d, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x75, 0x75, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, - 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, - 0x49, 0x64, 0x22, 0xe1, 0x01, 0x0a, 0x1e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x16, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66, - 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, - 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x72, 0x6f, 0x77, 0x73, 0x41, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x1a, 0x46, - 0x0a, 0x18, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, - 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7e, 0x0a, 0x1e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, - 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x08, 0x63, 0x61, - 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x22, 0xe3, 0x01, 0x0a, 0x1f, 0x43, 0x6f, 0x6d, 0x70, 0x6c, - 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, 0x16, 0x72, 0x6f, - 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x73, - 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x76, 0x74, 0x63, - 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x13, 0x72, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x1a, 0x46, 0x0a, 0x18, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8a, 0x03, 0x0a, - 0x16, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x45, 0x0a, 0x13, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x11, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x16, - 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, - 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x23, 0x0a, - 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x56, 0x69, 0x65, - 0x77, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, - 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, - 0x69, 0x66, 0x79, 0x12, 0x44, 0x0a, 0x15, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x77, 0x61, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x31, 0x0a, 0x14, 0x64, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x11, - 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x68, 0x61, 0x72, - 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x22, 0x19, 0x0a, 0x17, 0x43, 0x6f, 0x70, - 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xdd, 0x02, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x2f, 0x0a, 0x14, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x76, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x2a, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x61, - 0x73, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x31, 0x0a, 0x0d, 0x73, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, - 0x0c, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2b, 0x0a, - 0x11, 0x64, 0x75, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x64, 0x75, 0x72, 0x61, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x69, - 0x64, 0x65, 0x63, 0x61, 0x72, 0x5f, 0x64, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x44, 0x62, 0x4e, 0x61, - 0x6d, 0x65, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, - 0x08, 0x06, 0x10, 0x07, 0x22, 0x49, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, - 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, - 0x8c, 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x61, 0x72, 0x64, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x22, 0xa0, - 0x01, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x08, 0x6b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x26, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, - 0x30, 0x0a, 0x14, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, - 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x73, - 0x68, 0x61, 0x72, 0x64, 0x41, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x45, 0x78, 0x69, 0x73, 0x74, - 0x73, 0x22, 0x41, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, - 0x6f, 0x72, 0x63, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, - 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, - 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, - 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x1a, 0x0a, - 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x67, 0x0a, 0x15, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, - 0x63, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9b, 0x01, 0x0a, - 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x1c, - 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, 0x26, 0x0a, 0x0f, - 0x65, 0x76, 0x65, 0x6e, 0x5f, 0x69, 0x66, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x65, 0x76, 0x65, 0x6e, 0x49, 0x66, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x2d, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x72, 0x76, 0x56, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x65, 0x6c, - 0x6c, 0x22, 0x1a, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x72, 0x76, 0x56, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x79, 0x0a, - 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, - 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, - 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, - 0x73, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x72, 0x69, - 0x6d, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x17, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0xc3, 0x03, 0x0a, 0x1d, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, - 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x36, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x72, 0x69, - 0x6d, 0x61, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, - 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, - 0x73, 0x52, 0x0a, 0x6e, 0x65, 0x77, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x3e, 0x0a, - 0x0f, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0e, 0x69, - 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x44, 0x0a, - 0x15, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, - 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, - 0x77, 0x61, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x54, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x63, - 0x72, 0x6f, 0x73, 0x73, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x70, 0x72, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x65, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x6d, 0x6f, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x14, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x66, 0x6f, 0x72, - 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x11, 0x77, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x41, 0x6c, 0x6c, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x40, 0x0a, 0x10, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0f, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x22, 0xbc, 0x01, 0x0a, 0x1e, 0x45, 0x6d, 0x65, 0x72, - 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x61, - 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x40, 0x0a, 0x10, - 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0f, 0x70, - 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x26, - 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, - 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xa0, 0x01, 0x0a, 0x18, 0x45, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, - 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, - 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x14, 0x0a, - 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x19, - 0x0a, 0x08, 0x75, 0x73, 0x65, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x75, 0x73, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x47, 0x0a, 0x19, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x70, 0x70, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x22, 0xd3, 0x01, 0x0a, 0x18, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, - 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x42, 0x41, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, - 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x69, - 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x6c, - 0x6f, 0x67, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x6f, - 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0x47, 0x0a, 0x19, 0x45, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x42, 0x41, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0xa5, 0x01, 0x0a, 0x12, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x48, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, - 0x61, 0x73, 0x12, 0x55, 0x0a, 0x13, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x68, 0x6f, 0x6f, - 0x6b, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x11, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x48, 0x6f, - 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5e, 0x0a, 0x13, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x47, 0x0a, 0x0b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x68, - 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xd4, 0x01, 0x0a, 0x1d, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, - 0x73, 0x44, 0x42, 0x41, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x73, 0x71, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x72, - 0x6f, 0x77, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x52, 0x6f, - 0x77, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x69, - 0x6e, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x69, 0x73, - 0x61, 0x62, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, - 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x22, 0x4e, 0x0a, 0x1e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x42, 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, - 0x22, 0x3c, 0x0a, 0x1e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x64, - 0x73, 0x49, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0xbe, - 0x01, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, - 0x49, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, - 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x49, 0x6e, 0x4b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, - 0x64, 0x73, 0x1a, 0x4b, 0x0a, 0x0b, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x82, 0x01, 0x0a, 0x22, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x43, 0x75, 0x74, 0x4f, 0x76, 0x65, 0x72, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, - 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, - 0x65, 0x72, 0x49, 0x64, 0x22, 0xeb, 0x01, 0x0a, 0x23, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x43, 0x75, - 0x74, 0x4f, 0x76, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7c, 0x0a, 0x16, - 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, - 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x76, - 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x43, 0x75, - 0x74, 0x4f, 0x76, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x6f, 0x77, - 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x72, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x1a, 0x46, 0x0a, 0x18, 0x52, 0x6f, - 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, - 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0x9e, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x08, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x22, 0x44, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x62, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x79, 0x73, - 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x22, 0x28, 0x0a, 0x12, 0x47, 0x65, 0x74, - 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, - 0x65, 0x6c, 0x6c, 0x22, 0x46, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x63, 0x65, - 0x6c, 0x6c, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x08, 0x63, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x19, 0x0a, 0x17, 0x47, - 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x30, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, - 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x18, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, - 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0xb6, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, - 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, - 0x0a, 0x07, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x43, - 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x07, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x1a, 0x50, 0x0a, 0x0c, 0x41, 0x6c, 0x69, - 0x61, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, - 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x50, 0x0a, 0x14, 0x47, - 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, - 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, - 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x4c, 0x0a, - 0x15, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x15, 0x0a, 0x13, 0x47, - 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x49, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x09, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0x30, 0x0a, - 0x12, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, - 0x46, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x08, 0x6b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x51, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x65, - 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x5a, 0x0a, 0x16, 0x47, 0x65, - 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x65, - 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x20, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x76, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x4b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, - 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x16, 0x6b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x76, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, - 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x14, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, - 0x22, 0x18, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, - 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x55, 0x0a, 0x17, 0x47, 0x65, - 0x74, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x0d, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, - 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x76, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, - 0x6c, 0x65, 0x73, 0x52, 0x0c, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, - 0x73, 0x22, 0xb0, 0x02, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, - 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, - 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, - 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, - 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x56, - 0x69, 0x65, 0x77, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x28, - 0x0a, 0x10, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x73, 0x5f, 0x6f, 0x6e, - 0x6c, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, - 0x69, 0x7a, 0x65, 0x73, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x50, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0xb8, 0x02, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x10, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x78, 0x74, 0x12, 0x39, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x28, 0x0a, - 0x06, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, - 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x06, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, - 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x73, 0x6b, 0x69, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6b, 0x69, - 0x70, 0x22, 0x59, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x3a, 0x0a, 0x0a, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x0a, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x64, 0x0a, 0x1a, - 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, - 0x6c, 0x73, 0x22, 0x83, 0x02, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x19, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x79, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, - 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x79, - 0x43, 0x65, 0x6c, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x73, 0x68, 0x61, 0x72, 0x64, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x43, 0x65, 0x6c, - 0x6c, 0x1a, 0x65, 0x0a, 0x1b, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x43, 0x65, 0x6c, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, - 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4c, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x64, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x61, - 0x72, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, - 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x05, 0x73, 0x68, - 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x05, 0x73, 0x68, 0x61, - 0x72, 0x64, 0x22, 0x1d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, - 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0x6a, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, - 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x4a, 0x0a, 0x13, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x69, - 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, - 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x11, 0x73, 0x68, 0x61, 0x72, - 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x32, 0x0a, - 0x1a, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, - 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, - 0x73, 0x22, 0xf3, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x47, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, - 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x1a, 0x69, 0x0a, 0x0a, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x45, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x20, 0x0a, 0x08, 0x4e, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x4a, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x72, - 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, - 0x6c, 0x6c, 0x73, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x59, 0x0a, 0x0d, 0x73, 0x72, 0x76, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x72, 0x76, 0x4b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x72, - 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x1a, 0x56, 0x0a, 0x11, 0x53, 0x72, - 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x2b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x72, 0x76, 0x4b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0xe4, 0x03, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x68, 0x72, - 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x69, 0x73, 0x61, 0x62, - 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, - 0x21, 0x0a, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x63, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x74, 0x12, 0x2d, 0x0a, 0x13, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x61, 0x73, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x73, - 0x65, 0x6c, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x41, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x65, 0x6c, 0x66, 0x12, 0x2f, 0x0a, 0x14, 0x63, - 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x61, 0x73, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x73, 0x68, - 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x41, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x3f, 0x0a, 0x0d, - 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, - 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x41, 0x70, 0x70, 0x52, 0x75, 0x6c, 0x65, 0x52, - 0x0c, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x41, 0x70, 0x70, 0x12, 0x1f, 0x0a, - 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, - 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x61, 0x70, 0x70, - 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x61, 0x70, 0x70, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x1f, 0x0a, 0x1d, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x65, - 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x22, 0x4e, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, - 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x35, 0x0a, 0x0c, 0x73, 0x72, 0x76, 0x5f, 0x76, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0a, 0x73, 0x72, 0x76, 0x56, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0x2d, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, - 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, - 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0xc5, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, - 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x56, 0x0a, 0x0d, 0x73, 0x72, 0x76, 0x5f, 0x76, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x72, 0x76, 0x56, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x73, 0x72, 0x76, - 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x1a, 0x53, 0x0a, 0x10, 0x53, 0x72, 0x76, 0x56, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4c, 0x0a, - 0x10, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x3d, 0x0a, 0x11, 0x47, - 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x28, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x22, 0xe8, 0x01, 0x0a, 0x11, 0x47, - 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, - 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, - 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, - 0x12, 0x3c, 0x0a, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, - 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, - 0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x12, 0x35, - 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x22, 0x40, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, - 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x07, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x22, 0x55, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x54, 0x68, - 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, - 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, - 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, - 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x63, - 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x22, 0x5f, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, - 0x67, 0x79, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, - 0x68, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x61, - 0x73, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x73, - 0x4a, 0x73, 0x6f, 0x6e, 0x22, 0x46, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, - 0x6f, 0x67, 0x79, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2b, 0x0a, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, - 0x67, 0x79, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x22, 0x80, 0x01, 0x0a, - 0x0c, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x43, 0x65, 0x6c, 0x6c, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x69, - 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x69, - 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, - 0x5f, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x1f, 0x0a, 0x0b, 0x61, 0x62, 0x61, 0x6e, 0x64, 0x6f, 0x6e, 0x5f, 0x61, 0x67, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x61, 0x62, 0x61, 0x6e, 0x64, 0x6f, 0x6e, 0x41, 0x67, 0x65, - 0x22, 0x63, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, - 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x2f, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x74, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x64, 0x74, 0x69, 0x64, 0x22, 0xa0, 0x01, 0x0a, 0x15, 0x53, 0x68, 0x61, 0x72, 0x64, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x69, - 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x1a, 0x47, 0x65, - 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x43, 0x0a, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x73, 0x68, 0x61, 0x72, 0x64, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x73, 0x22, 0x63, 0x0a, 0x1a, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x74, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, 0x64, 0x12, 0x31, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x0c, 0x70, 0x61, - 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x22, 0x1d, 0x0a, 0x1b, 0x43, 0x6f, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x0a, 0x11, 0x47, 0x65, 0x74, - 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x4d, 0x0a, 0x11, 0x47, 0x65, - 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x2e, 0x0a, 0x12, 0x47, 0x65, 0x74, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x42, 0x0a, 0x12, 0x47, 0x65, 0x74, - 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2c, 0x0a, 0x08, 0x76, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x07, 0x76, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0xc6, 0x01, - 0x0a, 0x13, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4f, 0x6e, - 0x6c, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, 0x61, 0x6d, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x12, - 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x21, 0x0a, 0x0c, 0x69, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0b, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x22, 0x49, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, - 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x73, 0x22, 0xfb, 0x01, 0x0a, 0x17, 0x49, 0x6e, 0x69, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x50, - 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, - 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, - 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, - 0x52, 0x0a, 0x1a, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x17, 0x70, 0x72, 0x69, 0x6d, - 0x61, 0x72, 0x79, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, - 0x69, 0x61, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x44, 0x0a, 0x15, 0x77, 0x61, 0x69, - 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, - 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x77, 0x61, 0x69, 0x74, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, - 0x42, 0x0a, 0x18, 0x49, 0x6e, 0x69, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x50, 0x72, 0x69, 0x6d, - 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, - 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x22, 0x7c, 0x0a, 0x1c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, - 0x75, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, - 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, - 0x64, 0x22, 0xdf, 0x01, 0x0a, 0x1d, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x16, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x6f, - 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, - 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x72, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x1a, 0x46, 0x0a, 0x18, 0x52, - 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, - 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0x74, 0x0a, 0x1b, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x1e, 0x0a, 0x1c, 0x4c, 0x6f, 0x6f, - 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xff, 0x02, 0x0a, 0x19, 0x4c, 0x6f, - 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, - 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, - 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x29, 0x0a, 0x06, 0x76, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x06, 0x76, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x12, 0x42, 0x0a, 0x1e, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x5f, 0x61, 0x66, 0x74, - 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6f, 0x77, 0x6e, - 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, - 0x75, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x70, 0x79, 0x57, 0x69, 0x74, 0x68, 0x4f, - 0x77, 0x6e, 0x65, 0x72, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, - 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x6c, 0x0a, - 0x1b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x52, 0x19, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x4c, - 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa0, 0x01, 0x0a, 0x1e, 0x4c, 0x6f, - 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, - 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x77, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, 0x77, 0x0a, 0x1f, - 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x45, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x29, 0x0a, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x74, 0x6f, 0x70, - 0x70, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x77, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0x77, 0x0a, 0x1e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x56, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x21, - 0x0a, 0x1f, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x56, 0x0a, 0x18, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, - 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x61, 0x74, 0x65, - 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, - 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x1b, 0x0a, 0x19, 0x4d, 0x61, 0x74, - 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xdd, 0x05, 0x0a, 0x14, 0x4d, 0x69, 0x67, 0x72, 0x61, - 0x74, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x27, 0x0a, 0x0f, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, - 0x0a, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, - 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x6c, 0x0a, 0x1b, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x19, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x6c, 0x6c, - 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, - 0x6c, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, - 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65, - 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x6e, 0x5f, 0x64, 0x64, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x6f, 0x6e, 0x44, 0x64, 0x6c, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x74, 0x6f, 0x70, 0x5f, - 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0d, 0x73, 0x74, 0x6f, 0x70, 0x41, 0x66, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x70, 0x79, 0x12, - 0x2a, 0x0a, 0x11, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x5f, - 0x6b, 0x65, 0x79, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x64, 0x72, 0x6f, 0x70, - 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x64, - 0x65, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x6b, - 0x65, 0x79, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x64, 0x65, 0x66, 0x65, 0x72, - 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x1d, 0x0a, - 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x28, 0x0a, 0x10, - 0x6e, 0x6f, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x6e, 0x6f, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, - 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x22, 0xe6, 0x01, 0x0a, 0x16, 0x4d, 0x69, 0x67, 0x72, 0x61, - 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x27, 0x0a, - 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6b, 0x65, 0x65, 0x70, 0x5f, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6b, 0x65, 0x65, 0x70, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x12, 0x6b, 0x65, 0x65, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, - 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x10, 0x6b, 0x65, 0x65, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, - 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, - 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x22, - 0x5b, 0x0a, 0x17, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, - 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, - 0x6d, 0x61, 0x72, 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x5f, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x64, - 0x72, 0x79, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x85, 0x01, 0x0a, - 0x14, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x70, 0x6f, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x70, 0x6f, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x70, 0x6f, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x6f, 0x70, 0x6f, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x70, 0x6f, 0x5f, 0x72, 0x6f, 0x6f, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x70, 0x6f, 0x52, 0x6f, 0x6f, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x0a, - 0x16, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x19, 0x0a, 0x17, 0x4d, - 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x0a, 0x10, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x53, - 0x68, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x82, - 0x01, 0x0a, 0x11, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x70, 0x6f, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x70, 0x6f, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x70, 0x6f, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x6f, 0x70, 0x6f, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x70, 0x6f, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x70, 0x6f, 0x52, 0x6f, 0x6f, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x29, 0x0a, 0x11, 0x4d, 0x6f, 0x75, 0x6e, 0x74, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x22, 0x82, 0x07, 0x0a, 0x17, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, - 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x6c, 0x0a, 0x1b, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x19, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x1d, - 0x0a, 0x0a, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x09, 0x61, 0x6c, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x0a, - 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, - 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x65, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x28, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x7a, - 0x6f, 0x6e, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x54, 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x6e, 0x5f, - 0x64, 0x64, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x6e, 0x44, 0x64, 0x6c, - 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x63, - 0x6f, 0x70, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x74, 0x6f, 0x70, 0x41, - 0x66, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x70, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x64, 0x72, 0x6f, 0x70, - 0x5f, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0f, 0x64, 0x72, 0x6f, 0x70, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, - 0x4b, 0x65, 0x79, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x65, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x65, - 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x12, 0x64, 0x65, 0x66, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, - 0x72, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x6f, 0x5f, 0x72, 0x6f, 0x75, 0x74, - 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0e, 0x6e, 0x6f, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, - 0x1f, 0x0a, 0x0b, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x18, 0x13, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x43, 0x6f, 0x70, 0x79, - 0x12, 0x45, 0x0a, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x76, 0x74, 0x63, - 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xd5, 0x01, 0x0a, 0x18, 0x4d, 0x6f, 0x76, 0x65, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x48, - 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x76, 0x65, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0x55, 0x0a, 0x0a, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2d, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x06, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, - 0xb7, 0x02, 0x0a, 0x19, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6f, - 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, - 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6b, 0x65, 0x65, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6b, 0x65, 0x65, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x2c, 0x0a, 0x12, 0x6b, 0x65, 0x65, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6b, 0x65, 0x65, - 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x23, 0x0a, - 0x0d, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, - 0x72, 0x64, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x14, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x5e, 0x0a, 0x1a, 0x4d, 0x6f, 0x76, - 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, - 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x72, 0x79, 0x52, - 0x75, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x4d, 0x0a, 0x11, 0x50, 0x69, 0x6e, - 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, - 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x14, 0x0a, 0x12, 0x50, 0x69, 0x6e, 0x67, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd6, - 0x03, 0x0a, 0x1b, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, - 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, - 0x12, 0x36, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0a, 0x6e, 0x65, - 0x77, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x3a, 0x0a, 0x0d, 0x61, 0x76, 0x6f, 0x69, - 0x64, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0c, 0x61, 0x76, 0x6f, 0x69, 0x64, 0x50, 0x72, 0x69, - 0x6d, 0x61, 0x72, 0x79, 0x12, 0x44, 0x0a, 0x15, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x77, 0x61, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x4c, 0x0a, 0x19, 0x74, 0x6f, - 0x6c, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, - 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x17, 0x74, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, 0x12, 0x3b, 0x0a, 0x1a, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x5f, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x70, 0x72, 0x6f, - 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x65, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x6d, - 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x10, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0f, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x22, 0xba, 0x01, 0x0a, 0x1c, 0x50, 0x6c, 0x61, 0x6e, - 0x6e, 0x65, 0x64, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x40, 0x0a, 0x10, 0x70, 0x72, - 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0f, 0x70, 0x72, 0x6f, - 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x26, 0x0a, 0x06, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, - 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x22, 0x74, 0x0a, 0x1b, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, - 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x22, 0x1e, 0x0a, 0x1c, 0x52, 0x65, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x72, 0x61, - 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x0a, 0x1a, 0x52, 0x65, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x47, 0x72, 0x61, 0x70, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x1d, - 0x0a, 0x1b, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4f, 0x0a, - 0x13, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, - 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, - 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, - 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x16, - 0x0a, 0x14, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x64, 0x0a, 0x1a, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, - 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x83, 0x01, 0x0a, - 0x1b, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x79, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x12, - 0x69, 0x73, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x66, 0x72, 0x65, - 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x73, 0x50, 0x61, 0x72, 0x74, - 0x69, 0x61, 0x6c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x12, 0x36, 0x0a, 0x17, 0x70, 0x61, - 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x22, 0x4f, 0x0a, 0x13, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, - 0x69, 0x61, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa9, 0x01, 0x0a, 0x1b, - 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x61, 0x69, 0x74, 0x5f, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x77, 0x61, 0x69, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x72, - 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x63, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x46, 0x0a, 0x1c, 0x52, 0x65, 0x6c, 0x6f, 0x61, - 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, - 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, - 0xbc, 0x01, 0x0a, 0x18, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, - 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x23, - 0x0a, 0x0d, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x61, 0x69, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, - 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, - 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x43, - 0x0a, 0x19, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x68, - 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, - 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x22, 0x5b, 0x0a, 0x13, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x22, 0x16, 0x0a, 0x14, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7f, 0x0a, 0x19, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, - 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, - 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9b, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, - 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x61, 0x72, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x65, 0x6c, - 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, - 0x73, 0x69, 0x76, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, - 0x72, 0x73, 0x69, 0x76, 0x65, 0x22, 0x19, 0x0a, 0x17, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x46, 0x0a, 0x15, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x06, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, - 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x22, 0x7b, 0x0a, 0x16, 0x52, 0x65, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, - 0x68, 0x61, 0x72, 0x64, 0x12, 0x2f, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x07, 0x70, 0x72, - 0x69, 0x6d, 0x61, 0x72, 0x79, 0x22, 0xd6, 0x04, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x68, 0x61, 0x72, - 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, - 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, - 0x6c, 0x0a, 0x1b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x52, 0x19, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x28, 0x0a, - 0x10, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x63, 0x6f, 0x70, - 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x6b, 0x69, 0x70, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x43, 0x6f, 0x70, 0x79, 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x6e, 0x5f, 0x64, 0x64, - 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x6e, 0x44, 0x64, 0x6c, 0x12, 0x26, - 0x0a, 0x0f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x70, - 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x74, 0x6f, 0x70, 0x41, 0x66, 0x74, - 0x65, 0x72, 0x43, 0x6f, 0x70, 0x79, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x65, 0x66, 0x65, 0x72, 0x5f, - 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x64, 0x65, 0x66, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x61, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, - 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x75, - 0x74, 0x6f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x45, 0x0a, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0f, 0x77, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xb8, - 0x02, 0x0a, 0x18, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x2d, 0x0a, 0x0b, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, - 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, - 0x74, 0x6f, 0x5f, 0x70, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x6f, 0x50, 0x6f, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, - 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x72, 0x79, - 0x52, 0x75, 0x6e, 0x12, 0x3e, 0x0a, 0x14, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x74, - 0x6f, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, - 0x12, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x12, 0x34, 0x0a, 0x16, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x62, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x14, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x73, 0x22, 0xad, 0x01, 0x0a, 0x19, 0x52, 0x65, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, - 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, - 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, - 0x61, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x7b, 0x0a, 0x1b, 0x52, 0x65, 0x74, - 0x72, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, - 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x08, 0x63, 0x61, - 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x22, 0xdd, 0x01, 0x0a, 0x1c, 0x52, 0x65, 0x74, 0x72, 0x79, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x16, 0x72, 0x6f, 0x77, 0x73, 0x5f, - 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, - 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, - 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x72, 0x6f, 0x77, 0x73, 0x41, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x1a, 0x46, - 0x0a, 0x18, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, - 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x51, 0x0a, 0x15, 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x18, 0x0a, 0x16, 0x52, 0x75, 0x6e, - 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x6d, 0x0a, 0x22, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x44, 0x75, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x75, 0x72, 0x61, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x10, 0x64, 0x75, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x22, 0x55, 0x0a, 0x23, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x44, 0x75, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x6b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x6f, - 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, - 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x5e, 0x0a, 0x1e, 0x53, 0x65, 0x74, - 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x4a, 0x04, 0x08, - 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x51, 0x0a, 0x1f, 0x53, 0x65, 0x74, - 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x08, - 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x72, 0x0a, 0x1f, - 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x49, 0x73, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, - 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, - 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, - 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, - 0x22, 0x49, 0x0a, 0x20, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x49, 0x73, 0x50, 0x72, - 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x22, 0x8e, 0x02, 0x0a, 0x1c, - 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f, - 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, - 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x35, - 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x64, - 0x65, 0x6e, 0x69, 0x65, 0x64, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x6e, 0x69, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x12, 0x32, 0x0a, 0x15, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x13, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x22, 0x46, 0x0a, 0x1d, - 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f, - 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, - 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, - 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x05, 0x73, - 0x68, 0x61, 0x72, 0x64, 0x22, 0x6a, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x57, 0x72, 0x69, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, - 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x77, 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x22, 0x15, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x57, 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x1a, 0x53, 0x68, 0x61, 0x72, - 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, - 0x61, 0x73, 0x22, 0x1d, 0x0a, 0x1b, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x62, 0x0a, 0x1a, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, - 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x22, 0x54, 0x0a, 0x1b, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x78, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x54, 0x0a, 0x20, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, - 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, - 0x64, 0x22, 0xaa, 0x03, 0x0a, 0x21, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, 0x14, 0x72, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x72, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, - 0x73, 0x12, 0x5a, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x6d, 0x61, 0x70, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x4d, 0x61, 0x70, 0x1a, 0x5f, 0x0a, - 0x18, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x72, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4e, - 0x0a, 0x0e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8b, - 0x01, 0x0a, 0x1d, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, - 0x72, 0x64, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, - 0x61, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, - 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x20, 0x0a, 0x1e, - 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7c, - 0x0a, 0x12, 0x53, 0x6c, 0x65, 0x65, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, - 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, - 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, - 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x2c, - 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x15, 0x0a, 0x13, - 0x53, 0x6c, 0x65, 0x65, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0xf0, 0x01, 0x0a, 0x15, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, - 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, - 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, - 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, - 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x75, 0x69, - 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x2f, 0x0a, - 0x09, 0x6b, 0x65, 0x79, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x52, - 0x61, 0x6e, 0x67, 0x65, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0x3f, 0x0a, 0x16, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x53, 0x68, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x25, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, - 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x22, 0x5e, 0x0a, 0x18, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x03, 0x75, 0x69, 0x64, 0x22, 0x42, 0x0a, 0x19, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x22, 0x53, 0x0a, 0x17, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, - 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, - 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, - 0x22, 0x1a, 0x0a, 0x18, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x52, 0x0a, 0x16, - 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, - 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, - 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, - 0x22, 0x19, 0x0a, 0x17, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x52, 0x0a, 0x21, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x52, - 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x2d, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x22, - 0xc6, 0x01, 0x0a, 0x22, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x6c, 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x36, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x5f, - 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, - 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0a, 0x6e, 0x65, 0x77, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, - 0x12, 0x36, 0x0a, 0x0b, 0x6f, 0x6c, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0a, 0x6f, 0x6c, - 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x5c, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x69, 0x6e, - 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x63, 0x65, - 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x5d, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x69, 0x6e, 0x66, - 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x63, 0x65, 0x6c, - 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x64, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, - 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x0b, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x5f, 0x61, 0x6c, - 0x69, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, - 0x0a, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x65, 0x0a, 0x18, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x0b, 0x63, - 0x65, 0x6c, 0x6c, 0x73, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x65, 0x6c, 0x6c, - 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0a, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, - 0x61, 0x73, 0x22, 0x34, 0x0a, 0x0f, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x69, 0x6e, - 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x22, 0xfb, 0x01, 0x0a, 0x10, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x62, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x73, 0x5f, 0x62, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x73, 0x42, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x1a, 0x69, 0x0a, 0x16, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x58, 0x0a, 0x17, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, - 0x0c, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, - 0x22, 0xfc, 0x01, 0x0a, 0x18, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x61, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x73, 0x5f, 0x62, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x37, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, - 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x73, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x1a, 0x63, 0x0a, 0x13, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x58, 0x0a, 0x22, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x22, 0x25, 0x0a, 0x23, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0xf0, 0x01, 0x0a, 0x1d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x25, - 0x0a, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x56, 0x69, 0x65, 0x77, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x6b, - 0x69, 0x70, 0x5f, 0x6e, 0x6f, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x6b, 0x69, 0x70, 0x4e, 0x6f, 0x50, 0x72, 0x69, 0x6d, 0x61, - 0x72, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x76, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x56, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, - 0x72, 0x64, 0x73, 0x22, 0x88, 0x02, 0x0a, 0x1e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, - 0x12, 0x67, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x62, 0x79, 0x5f, 0x73, - 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x76, 0x74, 0x63, - 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x73, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x1a, 0x63, 0x0a, 0x13, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6b, - 0x0a, 0x14, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x69, 0x6e, 0x67, - 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, - 0x70, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x22, 0x31, 0x0a, 0x15, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x3c, - 0x0a, 0x1e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x8a, 0x02, 0x0a, - 0x1f, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x68, 0x0a, 0x10, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x62, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x1a, 0x63, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, - 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x36, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x76, - 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4f, 0x0a, 0x1b, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x22, 0x38, 0x0a, 0x1c, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x61, - 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x73, 0x22, 0x98, 0x01, 0x0a, 0x16, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x65, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, - 0x72, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, - 0xfa, 0x01, 0x0a, 0x17, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x60, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, - 0x5f, 0x62, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x36, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x65, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x53, 0x68, 0x61, - 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, - 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x1a, 0x63, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x73, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf9, 0x07, 0x0a, - 0x12, 0x56, 0x44, 0x69, 0x66, 0x66, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, - 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x12, - 0x21, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x65, 0x6c, - 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x6c, 0x0a, 0x1b, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x19, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x55, 0x0a, 0x1e, 0x66, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x77, 0x61, 0x69, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x1b, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x61, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, - 0x0a, 0x0b, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, - 0x1a, 0x0a, 0x09, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x70, 0x5f, 0x6b, 0x73, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x6f, 0x6e, 0x6c, 0x79, 0x50, 0x4b, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, - 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x38, 0x0a, 0x19, 0x6d, 0x61, 0x78, - 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x6d, 0x61, - 0x78, 0x45, 0x78, 0x74, 0x72, 0x61, 0x52, 0x6f, 0x77, 0x73, 0x54, 0x6f, 0x43, 0x6f, 0x6d, 0x70, - 0x61, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x77, 0x61, 0x69, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x04, 0x77, 0x61, 0x69, 0x74, 0x12, 0x42, 0x0a, 0x14, 0x77, 0x61, 0x69, 0x74, 0x5f, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, - 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x77, 0x61, 0x69, 0x74, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x61, - 0x75, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x79, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x09, 0x61, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, - 0x72, 0x62, 0x6f, 0x73, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x76, 0x65, 0x72, - 0x62, 0x6f, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x16, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x13, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x3c, 0x0a, 0x11, 0x6d, 0x61, 0x78, - 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x14, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x6d, 0x61, 0x78, 0x44, 0x69, 0x66, 0x66, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x1b, 0x72, 0x6f, 0x77, 0x5f, 0x64, - 0x69, 0x66, 0x66, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74, 0x72, 0x75, 0x6e, 0x63, - 0x61, 0x74, 0x65, 0x5f, 0x61, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x72, 0x6f, - 0x77, 0x44, 0x69, 0x66, 0x66, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x72, 0x75, 0x6e, 0x63, - 0x61, 0x74, 0x65, 0x41, 0x74, 0x12, 0x22, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x61, 0x75, 0x74, - 0x6f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x61, 0x75, - 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x22, 0x29, 0x0a, 0x13, 0x56, 0x44, 0x69, 0x66, - 0x66, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x55, 0x55, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x55, - 0x55, 0x49, 0x44, 0x22, 0x6b, 0x0a, 0x12, 0x56, 0x44, 0x69, 0x66, 0x66, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, - 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, - 0x0a, 0x03, 0x61, 0x72, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x72, 0x67, - 0x22, 0x15, 0x0a, 0x13, 0x56, 0x44, 0x69, 0x66, 0x66, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x92, 0x01, 0x0a, 0x12, 0x56, 0x44, 0x69, 0x66, - 0x66, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x22, 0x15, 0x0a, 0x13, - 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x69, 0x0a, 0x10, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, 0x68, 0x6f, 0x77, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, - 0x61, 0x72, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x72, 0x67, 0x22, 0xd7, - 0x01, 0x0a, 0x11, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x10, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, - 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, - 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x73, 0x1a, 0x64, 0x0a, 0x14, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x90, 0x01, 0x0a, 0x10, 0x56, 0x44, 0x69, - 0x66, 0x66, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, - 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x22, 0x13, 0x0a, 0x11, 0x56, - 0x44, 0x69, 0x66, 0x66, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x94, 0x02, 0x0a, 0x15, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x12, 0x1b, 0x0a, 0x09, 0x6b, 0x65, 0x65, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6b, 0x65, 0x65, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x2c, 0x0a, 0x12, 0x6b, 0x65, 0x65, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6b, 0x65, 0x65, - 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x16, 0x0a, - 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, - 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, - 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x69, 0x7a, - 0x65, 0x12, 0x34, 0x0a, 0x16, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x14, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0xd1, 0x01, 0x0a, 0x16, 0x57, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x46, 0x0a, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x1a, 0x55, 0x0a, 0x0a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x2d, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0x67, 0x0a, 0x15, 0x57, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, - 0x61, 0x72, 0x64, 0x73, 0x22, 0xe6, 0x07, 0x0a, 0x16, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x5f, 0x0a, 0x10, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x58, 0x0a, 0x0d, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x68, - 0x61, 0x72, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x72, - 0x61, 0x66, 0x66, 0x69, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x1a, - 0xe8, 0x01, 0x0a, 0x0e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x63, 0x6f, 0x70, 0x69, 0x65, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x6f, 0x77, 0x73, 0x43, 0x6f, 0x70, - 0x69, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x72, 0x6f, 0x77, 0x73, 0x54, 0x6f, 0x74, - 0x61, 0x6c, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, - 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x72, 0x6f, 0x77, - 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x43, 0x6f, 0x70, 0x69, 0x65, 0x64, 0x12, 0x1f, - 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, - 0x29, 0x0a, 0x10, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, - 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x62, 0x79, 0x74, 0x65, 0x73, - 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x1a, 0xbc, 0x01, 0x0a, 0x10, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x2d, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x21, - 0x0a, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, - 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x1a, 0x5c, 0x0a, 0x0c, 0x53, 0x68, 0x61, - 0x72, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x4c, 0x0a, 0x07, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x76, 0x74, 0x63, - 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, - 0x61, 0x72, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x07, - 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x1a, 0x73, 0x0a, 0x13, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x30, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x6f, 0x0a, 0x11, - 0x53, 0x68, 0x61, 0x72, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x44, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x85, 0x04, - 0x0a, 0x1c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, - 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x0c, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x4f, 0x0a, 0x1b, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x5f, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, - 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x18, 0x6d, 0x61, - 0x78, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, 0x41, - 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x3c, 0x0a, 0x1a, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x5f, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x52, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x17, - 0x0a, 0x07, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x06, 0x64, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x12, 0x3e, 0x0a, 0x1b, 0x69, 0x6e, 0x69, 0x74, 0x69, - 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, - 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, - 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, - 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0xa7, 0x01, 0x0a, 0x1d, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, - 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x72, 0x79, 0x5f, 0x72, - 0x75, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0d, 0x64, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, - 0x90, 0x01, 0x0a, 0x15, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x52, 0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0xd1, 0x01, 0x0a, 0x16, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x46, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, - 0x55, 0x0a, 0x0a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2d, 0x0a, - 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, - 0x6c, 0x69, 0x61, 0x73, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0x51, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x75, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0c, 0x6d, 0x69, 0x72, - 0x72, 0x6f, 0x72, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, - 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x0b, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x75, 0x6c, - 0x65, 0x73, 0x22, 0xa9, 0x01, 0x0a, 0x1c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4d, - 0x69, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x37, 0x0a, 0x0c, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x22, 0x7f, - 0x0a, 0x1d, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, - 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2a, - 0x4a, 0x0a, 0x15, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x55, 0x53, 0x54, - 0x4f, 0x4d, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x4f, 0x56, 0x45, 0x54, 0x41, 0x42, 0x4c, - 0x45, 0x53, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x4c, 0x4f, - 0x4f, 0x4b, 0x55, 0x50, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x10, 0x02, 0x2a, 0x38, 0x0a, 0x0d, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x08, 0x0a, 0x04, - 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x53, 0x43, 0x45, 0x4e, 0x44, - 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x45, 0x53, 0x43, 0x45, 0x4e, 0x44, - 0x49, 0x4e, 0x47, 0x10, 0x02, 0x2a, 0x42, 0x0a, 0x1c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x65, 0x64, - 0x41, 0x75, 0x74, 0x6f, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x6e, - 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x09, 0x0a, 0x05, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0x00, - 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, - 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x10, 0x02, 0x42, 0x28, 0x5a, 0x26, 0x76, 0x69, 0x74, - 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, - 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, - 0x61, 0x74, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_vtctldata_proto_rawDesc = "" + + "\n" + + "\x0fvtctldata.proto\x12\tvtctldata\x1a\x10binlogdata.proto\x1a\rlogutil.proto\x1a\x0emysqlctl.proto\x1a\vquery.proto\x1a\x15replicationdata.proto\x1a\x17tabletmanagerdata.proto\x1a\x0etopodata.proto\x1a\rvschema.proto\x1a\vvtrpc.proto\x1a\fvttime.proto\"W\n" + + "\x1aExecuteVtctlCommandRequest\x12\x12\n" + + "\x04args\x18\x01 \x03(\tR\x04args\x12%\n" + + "\x0eaction_timeout\x18\x02 \x01(\x03R\ractionTimeout\"C\n" + + "\x1bExecuteVtctlCommandResponse\x12$\n" + + "\x05event\x18\x01 \x01(\v2\x0e.logutil.EventR\x05event\"\x89\x01\n" + + "\x18TableMaterializeSettings\x12!\n" + + "\ftarget_table\x18\x01 \x01(\tR\vtargetTable\x12+\n" + + "\x11source_expression\x18\x02 \x01(\tR\x10sourceExpression\x12\x1d\n" + + "\n" + + "create_ddl\x18\x03 \x01(\tR\tcreateDdl\"\xf5\x06\n" + + "\x13MaterializeSettings\x12\x1a\n" + + "\bworkflow\x18\x01 \x01(\tR\bworkflow\x12'\n" + + "\x0fsource_keyspace\x18\x02 \x01(\tR\x0esourceKeyspace\x12'\n" + + "\x0ftarget_keyspace\x18\x03 \x01(\tR\x0etargetKeyspace\x12&\n" + + "\x0fstop_after_copy\x18\x04 \x01(\bR\rstopAfterCopy\x12J\n" + + "\x0etable_settings\x18\x05 \x03(\v2#.vtctldata.TableMaterializeSettingsR\rtableSettings\x12\x12\n" + + "\x04cell\x18\x06 \x01(\tR\x04cell\x12!\n" + + "\ftablet_types\x18\a \x01(\tR\vtabletTypes\x12)\n" + + "\x10external_cluster\x18\b \x01(\tR\x0fexternalCluster\x12W\n" + + "\x16materialization_intent\x18\t \x01(\x0e2 .vtctldata.MaterializationIntentR\x15materializationIntent\x12(\n" + + "\x10source_time_zone\x18\n" + + " \x01(\tR\x0esourceTimeZone\x12(\n" + + "\x10target_time_zone\x18\v \x01(\tR\x0etargetTimeZone\x12#\n" + + "\rsource_shards\x18\f \x03(\tR\fsourceShards\x12\x15\n" + + "\x06on_ddl\x18\r \x01(\tR\x05onDdl\x120\n" + + "\x14defer_secondary_keys\x18\x0e \x01(\bR\x12deferSecondaryKeys\x12l\n" + + "\x1btablet_selection_preference\x18\x0f \x01(\x0e2,.tabletmanagerdata.TabletSelectionPreferenceR\x19tabletSelectionPreference\x12\x1f\n" + + "\vatomic_copy\x18\x10 \x01(\bR\n" + + "atomicCopy\x12E\n" + + "\x10workflow_options\x18\x11 \x01(\v2\x1a.vtctldata.WorkflowOptionsR\x0fworkflowOptions\x12)\n" + + "\x10reference_tables\x18\x12 \x03(\tR\x0freferenceTables\"N\n" + + "\bKeyspace\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12.\n" + + "\bkeyspace\x18\x02 \x01(\v2\x12.topodata.KeyspaceR\bkeyspace\"\xb6\x13\n" + + "\x0fSchemaMigration\x12\x12\n" + + "\x04uuid\x18\x01 \x01(\tR\x04uuid\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x03 \x01(\tR\x05shard\x12\x16\n" + + "\x06schema\x18\x04 \x01(\tR\x06schema\x12\x14\n" + + "\x05table\x18\x05 \x01(\tR\x05table\x12/\n" + + "\x13migration_statement\x18\x06 \x01(\tR\x12migrationStatement\x12?\n" + + "\bstrategy\x18\a \x01(\x0e2#.vtctldata.SchemaMigration.StrategyR\bstrategy\x12\x18\n" + + "\aoptions\x18\b \x01(\tR\aoptions\x12'\n" + + "\badded_at\x18\t \x01(\v2\f.vttime.TimeR\aaddedAt\x12/\n" + + "\frequested_at\x18\n" + + " \x01(\v2\f.vttime.TimeR\vrequestedAt\x12'\n" + + "\bready_at\x18\v \x01(\v2\f.vttime.TimeR\areadyAt\x12+\n" + + "\n" + + "started_at\x18\f \x01(\v2\f.vttime.TimeR\tstartedAt\x12;\n" + + "\x12liveness_timestamp\x18\r \x01(\v2\f.vttime.TimeR\x11livenessTimestamp\x12/\n" + + "\fcompleted_at\x18\x0e \x01(\v2\f.vttime.TimeR\vcompletedAt\x120\n" + + "\rcleaned_up_at\x18\x0f \x01(\v2\f.vttime.TimeR\vcleanedUpAt\x129\n" + + "\x06status\x18\x10 \x01(\x0e2!.vtctldata.SchemaMigration.StatusR\x06status\x12\x19\n" + + "\blog_path\x18\x11 \x01(\tR\alogPath\x12\x1c\n" + + "\tartifacts\x18\x12 \x01(\tR\tartifacts\x12\x18\n" + + "\aretries\x18\x13 \x01(\x04R\aretries\x12-\n" + + "\x06tablet\x18\x14 \x01(\v2\x15.topodata.TabletAliasR\x06tablet\x12%\n" + + "\x0etablet_failure\x18\x15 \x01(\bR\rtabletFailure\x12\x1a\n" + + "\bprogress\x18\x16 \x01(\x02R\bprogress\x12+\n" + + "\x11migration_context\x18\x17 \x01(\tR\x10migrationContext\x12\x1d\n" + + "\n" + + "ddl_action\x18\x18 \x01(\tR\tddlAction\x12\x18\n" + + "\amessage\x18\x19 \x01(\tR\amessage\x12\x1f\n" + + "\veta_seconds\x18\x1a \x01(\x03R\n" + + "etaSeconds\x12\x1f\n" + + "\vrows_copied\x18\x1b \x01(\x04R\n" + + "rowsCopied\x12\x1d\n" + + "\n" + + "table_rows\x18\x1c \x01(\x03R\ttableRows\x12*\n" + + "\x11added_unique_keys\x18\x1d \x01(\rR\x0faddedUniqueKeys\x12.\n" + + "\x13removed_unique_keys\x18\x1e \x01(\rR\x11removedUniqueKeys\x12\x19\n" + + "\blog_file\x18\x1f \x01(\tR\alogFile\x12?\n" + + "\x12artifact_retention\x18 \x01(\v2\x10.vttime.DurationR\x11artifactRetention\x12/\n" + + "\x13postpone_completion\x18! \x01(\bR\x12postponeCompletion\x127\n" + + "\x18removed_unique_key_names\x18\" \x01(\tR\x15removedUniqueKeyNames\x12D\n" + + "\x1fdropped_no_default_column_names\x18# \x01(\tR\x1bdroppedNoDefaultColumnNames\x122\n" + + "\x15expanded_column_names\x18$ \x01(\tR\x13expandedColumnNames\x12)\n" + + "\x10revertible_notes\x18% \x01(\tR\x0frevertibleNotes\x12)\n" + + "\x10allow_concurrent\x18& \x01(\bR\x0fallowConcurrent\x12#\n" + + "\rreverted_uuid\x18' \x01(\tR\frevertedUuid\x12\x17\n" + + "\ais_view\x18( \x01(\bR\x06isView\x12*\n" + + "\x11ready_to_complete\x18) \x01(\bR\x0freadyToComplete\x12:\n" + + "\x19vitess_liveness_indicator\x18* \x01(\x03R\x17vitessLivenessIndicator\x12.\n" + + "\x13user_throttle_ratio\x18+ \x01(\x02R\x11userThrottleRatio\x12!\n" + + "\fspecial_plan\x18, \x01(\tR\vspecialPlan\x128\n" + + "\x11last_throttled_at\x18- \x01(\v2\f.vttime.TimeR\x0flastThrottledAt\x12/\n" + + "\x13component_throttled\x18. \x01(\tR\x12componentThrottled\x12/\n" + + "\fcancelled_at\x18/ \x01(\v2\f.vttime.TimeR\vcancelledAt\x12'\n" + + "\x0fpostpone_launch\x180 \x01(\bR\x0epostponeLaunch\x12\x14\n" + + "\x05stage\x181 \x01(\tR\x05stage\x12)\n" + + "\x10cutover_attempts\x182 \x01(\rR\x0fcutoverAttempts\x124\n" + + "\x16is_immediate_operation\x183 \x01(\bR\x14isImmediateOperation\x12-\n" + + "\vreviewed_at\x184 \x01(\v2\f.vttime.TimeR\n" + + "reviewedAt\x12=\n" + + "\x14ready_to_complete_at\x185 \x01(\v2\f.vttime.TimeR\x11readyToCompleteAt\x129\n" + + "\x19removed_foreign_key_names\x186 \x01(\tR\x16removedForeignKeyNames\"I\n" + + "\bStrategy\x12\n" + + "\n" + + "\x06VITESS\x10\x00\x12\n" + + "\n" + + "\x06ONLINE\x10\x00\x12\n" + + "\n" + + "\x06DIRECT\x10\x03\x12\t\n" + + "\x05MYSQL\x10\x04\x1a\x02\x10\x01\"\x04\b\x01\x10\x01\"\x04\b\x02\x10\x02\"q\n" + + "\x06Status\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\r\n" + + "\tREQUESTED\x10\x01\x12\r\n" + + "\tCANCELLED\x10\x02\x12\n" + + "\n" + + "\x06QUEUED\x10\x03\x12\t\n" + + "\x05READY\x10\x04\x12\v\n" + + "\aRUNNING\x10\x05\x12\f\n" + + "\bCOMPLETE\x10\x06\x12\n" + + "\n" + + "\x06FAILED\x10\a\"^\n" + + "\x05Shard\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12%\n" + + "\x05shard\x18\x03 \x01(\v2\x0f.topodata.ShardR\x05shard\"\x83\x03\n" + + "\x0fWorkflowOptions\x12\x1b\n" + + "\ttenant_id\x18\x01 \x01(\tR\btenantId\x12n\n" + + "\x1fsharded_auto_increment_handling\x18\x02 \x01(\x0e2'.vtctldata.ShardedAutoIncrementHandlingR\x1cshardedAutoIncrementHandling\x12\x16\n" + + "\x06shards\x18\x03 \x03(\tR\x06shards\x12>\n" + + "\x06config\x18\x04 \x03(\v2&.vtctldata.WorkflowOptions.ConfigEntryR\x06config\x12'\n" + + "\x0fglobal_keyspace\x18\x05 \x01(\tR\x0eglobalKeyspace\x12'\n" + + "\x0flookup_vindexes\x18\x06 \x03(\tR\x0elookupVindexes\x1a9\n" + + "\vConfigEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xcf\x11\n" + + "\bWorkflow\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12?\n" + + "\x06source\x18\x02 \x01(\v2'.vtctldata.Workflow.ReplicationLocationR\x06source\x12?\n" + + "\x06target\x18\x03 \x01(\v2'.vtctldata.Workflow.ReplicationLocationR\x06target\x121\n" + + "\x15max_v_replication_lag\x18\x04 \x01(\x03R\x12maxVReplicationLag\x12J\n" + + "\rshard_streams\x18\x05 \x03(\v2%.vtctldata.Workflow.ShardStreamsEntryR\fshardStreams\x12#\n" + + "\rworkflow_type\x18\x06 \x01(\tR\fworkflowType\x12*\n" + + "\x11workflow_sub_type\x18\a \x01(\tR\x0fworkflowSubType\x12H\n" + + "!max_v_replication_transaction_lag\x18\b \x01(\x03R\x1dmaxVReplicationTransactionLag\x120\n" + + "\x14defer_secondary_keys\x18\t \x01(\bR\x12deferSecondaryKeys\x124\n" + + "\aoptions\x18\n" + + " \x01(\v2\x1a.vtctldata.WorkflowOptionsR\aoptions\x1a`\n" + + "\x11ShardStreamsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x125\n" + + "\x05value\x18\x02 \x01(\v2\x1f.vtctldata.Workflow.ShardStreamR\x05value:\x028\x01\x1aI\n" + + "\x13ReplicationLocation\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x16\n" + + "\x06shards\x18\x02 \x03(\tR\x06shards\x1a\xb9\x01\n" + + "\vShardStream\x124\n" + + "\astreams\x18\x01 \x03(\v2\x1a.vtctldata.Workflow.StreamR\astreams\x12F\n" + + "\x0ftablet_controls\x18\x02 \x03(\v2\x1d.topodata.Shard.TabletControlR\x0etabletControls\x12,\n" + + "\x12is_primary_serving\x18\x03 \x01(\bR\x10isPrimaryServing\x1a\xc1\n" + + "\n" + + "\x06Stream\x12\x0e\n" + + "\x02id\x18\x01 \x01(\x03R\x02id\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x12-\n" + + "\x06tablet\x18\x03 \x01(\v2\x15.topodata.TabletAliasR\x06tablet\x12=\n" + + "\rbinlog_source\x18\x04 \x01(\v2\x18.binlogdata.BinlogSourceR\fbinlogSource\x12\x1a\n" + + "\bposition\x18\x05 \x01(\tR\bposition\x12#\n" + + "\rstop_position\x18\x06 \x01(\tR\fstopPosition\x12\x14\n" + + "\x05state\x18\a \x01(\tR\x05state\x12\x17\n" + + "\adb_name\x18\b \x01(\tR\x06dbName\x12A\n" + + "\x15transaction_timestamp\x18\t \x01(\v2\f.vttime.TimeR\x14transactionTimestamp\x12/\n" + + "\ftime_updated\x18\n" + + " \x01(\v2\f.vttime.TimeR\vtimeUpdated\x12\x18\n" + + "\amessage\x18\v \x01(\tR\amessage\x12E\n" + + "\vcopy_states\x18\f \x03(\v2$.vtctldata.Workflow.Stream.CopyStateR\n" + + "copyStates\x122\n" + + "\x04logs\x18\r \x03(\v2\x1e.vtctldata.Workflow.Stream.LogR\x04logs\x12&\n" + + "\x0flog_fetch_error\x18\x0e \x01(\tR\rlogFetchError\x12\x12\n" + + "\x04tags\x18\x0f \x03(\tR\x04tags\x12\x1f\n" + + "\vrows_copied\x18\x10 \x01(\x03R\n" + + "rowsCopied\x12U\n" + + "\x10throttler_status\x18\x11 \x01(\v2*.vtctldata.Workflow.Stream.ThrottlerStatusR\x0fthrottlerStatus\x127\n" + + "\ftablet_types\x18\x12 \x03(\x0e2\x14.topodata.TabletTypeR\vtabletTypes\x12l\n" + + "\x1btablet_selection_preference\x18\x13 \x01(\x0e2,.tabletmanagerdata.TabletSelectionPreferenceR\x19tabletSelectionPreference\x12\x14\n" + + "\x05cells\x18\x14 \x03(\tR\x05cells\x1aW\n" + + "\tCopyState\x12\x14\n" + + "\x05table\x18\x01 \x01(\tR\x05table\x12\x17\n" + + "\alast_pk\x18\x02 \x01(\tR\x06lastPk\x12\x1b\n" + + "\tstream_id\x18\x03 \x01(\x03R\bstreamId\x1a\xe6\x01\n" + + "\x03Log\x12\x0e\n" + + "\x02id\x18\x01 \x01(\x03R\x02id\x12\x1b\n" + + "\tstream_id\x18\x02 \x01(\x03R\bstreamId\x12\x12\n" + + "\x04type\x18\x03 \x01(\tR\x04type\x12\x14\n" + + "\x05state\x18\x04 \x01(\tR\x05state\x12+\n" + + "\n" + + "created_at\x18\x05 \x01(\v2\f.vttime.TimeR\tcreatedAt\x12+\n" + + "\n" + + "updated_at\x18\x06 \x01(\v2\f.vttime.TimeR\tupdatedAt\x12\x18\n" + + "\amessage\x18\a \x01(\tR\amessage\x12\x14\n" + + "\x05count\x18\b \x01(\x03R\x05count\x1aw\n" + + "\x0fThrottlerStatus\x12/\n" + + "\x13component_throttled\x18\x01 \x01(\tR\x12componentThrottled\x123\n" + + "\x0etime_throttled\x18\x02 \x01(\v2\f.vttime.TimeR\rtimeThrottled\"Y\n" + + "\x12AddCellInfoRequest\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12/\n" + + "\tcell_info\x18\x02 \x01(\v2\x12.topodata.CellInfoR\bcellInfo\"\x15\n" + + "\x13AddCellInfoResponse\"@\n" + + "\x14AddCellsAliasRequest\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n" + + "\x05cells\x18\x02 \x03(\tR\x05cells\"\x17\n" + + "\x15AddCellsAliasResponse\"\xbf\x01\n" + + " ApplyKeyspaceRoutingRulesRequest\x12S\n" + + "\x16keyspace_routing_rules\x18\x01 \x01(\v2\x1d.vschema.KeyspaceRoutingRulesR\x14keyspaceRoutingRules\x12!\n" + + "\fskip_rebuild\x18\x02 \x01(\bR\vskipRebuild\x12#\n" + + "\rrebuild_cells\x18\x03 \x03(\tR\frebuildCells\"x\n" + + "!ApplyKeyspaceRoutingRulesResponse\x12S\n" + + "\x16keyspace_routing_rules\x18\x01 \x01(\v2\x1d.vschema.KeyspaceRoutingRulesR\x14keyspaceRoutingRules\"\x9e\x01\n" + + "\x18ApplyRoutingRulesRequest\x12:\n" + + "\rrouting_rules\x18\x01 \x01(\v2\x15.vschema.RoutingRulesR\froutingRules\x12!\n" + + "\fskip_rebuild\x18\x02 \x01(\bR\vskipRebuild\x12#\n" + + "\rrebuild_cells\x18\x03 \x03(\tR\frebuildCells\"\x1b\n" + + "\x19ApplyRoutingRulesResponse\"\xb3\x01\n" + + "\x1dApplyShardRoutingRulesRequest\x12J\n" + + "\x13shard_routing_rules\x18\x01 \x01(\v2\x1a.vschema.ShardRoutingRulesR\x11shardRoutingRules\x12!\n" + + "\fskip_rebuild\x18\x02 \x01(\bR\vskipRebuild\x12#\n" + + "\rrebuild_cells\x18\x03 \x03(\tR\frebuildCells\" \n" + + "\x1eApplyShardRoutingRulesResponse\"\xce\x02\n" + + "\x12ApplySchemaRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x10\n" + + "\x03sql\x18\x03 \x03(\tR\x03sql\x12!\n" + + "\fddl_strategy\x18\x04 \x01(\tR\vddlStrategy\x12\x1b\n" + + "\tuuid_list\x18\x05 \x03(\tR\buuidList\x12+\n" + + "\x11migration_context\x18\x06 \x01(\tR\x10migrationContext\x12D\n" + + "\x15wait_replicas_timeout\x18\a \x01(\v2\x10.vttime.DurationR\x13waitReplicasTimeout\x12,\n" + + "\tcaller_id\x18\t \x01(\v2\x0f.vtrpc.CallerIDR\bcallerId\x12\x1d\n" + + "\n" + + "batch_size\x18\n" + + " \x01(\x03R\tbatchSizeJ\x04\b\x02\x10\x03J\x04\b\b\x10\t\"\xe8\x01\n" + + "\x13ApplySchemaResponse\x12\x1b\n" + + "\tuuid_list\x18\x01 \x03(\tR\buuidList\x12l\n" + + "\x16rows_affected_by_shard\x18\x02 \x03(\v27.vtctldata.ApplySchemaResponse.RowsAffectedByShardEntryR\x13rowsAffectedByShard\x1aF\n" + + "\x18RowsAffectedByShardEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\x04R\x05value:\x028\x01\"\xdb\x01\n" + + "\x13ApplyVSchemaRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12!\n" + + "\fskip_rebuild\x18\x02 \x01(\bR\vskipRebuild\x12\x17\n" + + "\adry_run\x18\x03 \x01(\bR\x06dryRun\x12\x14\n" + + "\x05cells\x18\x04 \x03(\tR\x05cells\x12,\n" + + "\bv_schema\x18\x05 \x01(\v2\x11.vschema.KeyspaceR\avSchema\x12\x10\n" + + "\x03sql\x18\x06 \x01(\tR\x03sql\x12\x16\n" + + "\x06strict\x18\a \x01(\bR\x06strict\"\xca\x02\n" + + "\x14ApplyVSchemaResponse\x12,\n" + + "\bv_schema\x18\x01 \x01(\v2\x11.vschema.KeyspaceR\avSchema\x12l\n" + + "\x15unknown_vindex_params\x18\x02 \x03(\v28.vtctldata.ApplyVSchemaResponse.UnknownVindexParamsEntryR\x13unknownVindexParams\x1aq\n" + + "\x18UnknownVindexParamsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12?\n" + + "\x05value\x18\x02 \x01(\v2).vtctldata.ApplyVSchemaResponse.ParamListR\x05value:\x028\x01\x1a#\n" + + "\tParamList\x12\x16\n" + + "\x06params\x18\x01 \x03(\tR\x06params\"\xe9\x02\n" + + "\rBackupRequest\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\x12#\n" + + "\rallow_primary\x18\x02 \x01(\bR\fallowPrimary\x12 \n" + + "\vconcurrency\x18\x03 \x01(\x05R\vconcurrency\x120\n" + + "\x14incremental_from_pos\x18\x04 \x01(\tR\x12incrementalFromPos\x12!\n" + + "\fupgrade_safe\x18\x05 \x01(\bR\vupgradeSafe\x12(\n" + + "\rbackup_engine\x18\x06 \x01(\tH\x00R\fbackupEngine\x88\x01\x01\x12F\n" + + "\x16mysql_shutdown_timeout\x18\a \x01(\v2\x10.vttime.DurationR\x14mysqlShutdownTimeoutB\x10\n" + + "\x0e_backup_engine\"\xa2\x01\n" + + "\x0eBackupResponse\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x03 \x01(\tR\x05shard\x12$\n" + + "\x05event\x18\x04 \x01(\v2\x0e.logutil.EventR\x05event\"\xaa\x02\n" + + "\x12BackupShardRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x12#\n" + + "\rallow_primary\x18\x03 \x01(\bR\fallowPrimary\x12 \n" + + "\vconcurrency\x18\x04 \x01(\x05R\vconcurrency\x12!\n" + + "\fupgrade_safe\x18\x05 \x01(\bR\vupgradeSafe\x120\n" + + "\x14incremental_from_pos\x18\x06 \x01(\tR\x12incrementalFromPos\x12F\n" + + "\x16mysql_shutdown_timeout\x18\a \x01(\v2\x10.vttime.DurationR\x14mysqlShutdownTimeout\"|\n" + + "\x1cCancelSchemaMigrationRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x12\n" + + "\x04uuid\x18\x02 \x01(\tR\x04uuid\x12,\n" + + "\tcaller_id\x18\x03 \x01(\v2\x0f.vtrpc.CallerIDR\bcallerId\"\xdf\x01\n" + + "\x1dCancelSchemaMigrationResponse\x12v\n" + + "\x16rows_affected_by_shard\x18\x01 \x03(\v2A.vtctldata.CancelSchemaMigrationResponse.RowsAffectedByShardEntryR\x13rowsAffectedByShard\x1aF\n" + + "\x18RowsAffectedByShardEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\x04R\x05value:\x028\x01\"\xe8\x01\n" + + "\x17ChangeTabletTagsRequest\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\x12@\n" + + "\x04tags\x18\x02 \x03(\v2,.vtctldata.ChangeTabletTagsRequest.TagsEntryR\x04tags\x12\x18\n" + + "\areplace\x18\x03 \x01(\bR\areplace\x1a7\n" + + "\tTagsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xc0\x02\n" + + "\x18ChangeTabletTagsResponse\x12T\n" + + "\vbefore_tags\x18\x01 \x03(\v23.vtctldata.ChangeTabletTagsResponse.BeforeTagsEntryR\n" + + "beforeTags\x12Q\n" + + "\n" + + "after_tags\x18\x02 \x03(\v22.vtctldata.ChangeTabletTagsResponse.AfterTagsEntryR\tafterTags\x1a=\n" + + "\x0fBeforeTagsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1a<\n" + + "\x0eAfterTagsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x9b\x01\n" + + "\x17ChangeTabletTypeRequest\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\x12-\n" + + "\adb_type\x18\x02 \x01(\x0e2\x14.topodata.TabletTypeR\x06dbType\x12\x17\n" + + "\adry_run\x18\x03 \x01(\bR\x06dryRun\"\xa6\x01\n" + + "\x18ChangeTabletTypeResponse\x125\n" + + "\rbefore_tablet\x18\x01 \x01(\v2\x10.topodata.TabletR\fbeforeTablet\x123\n" + + "\fafter_tablet\x18\x02 \x01(\v2\x10.topodata.TabletR\vafterTablet\x12\x1e\n" + + "\vwas_dry_run\x18\x03 \x01(\bR\twasDryRun\"\xe3\x01\n" + + "\x15CheckThrottlerRequest\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\x12\x19\n" + + "\bapp_name\x18\x02 \x01(\tR\aappName\x12\x14\n" + + "\x05scope\x18\x03 \x01(\tR\x05scope\x126\n" + + "\x17skip_request_heartbeats\x18\x04 \x01(\bR\x15skipRequestHeartbeats\x12'\n" + + "\x10ok_if_not_exists\x18\x05 \x01(\bR\rokIfNotExists\"\x93\x01\n" + + "\x16CheckThrottlerResponse\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\x12?\n" + + "\x05Check\x18\x02 \x01(\v2).tabletmanagerdata.CheckThrottlerResponseR\x05Check\"}\n" + + "\x1dCleanupSchemaMigrationRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x12\n" + + "\x04uuid\x18\x02 \x01(\tR\x04uuid\x12,\n" + + "\tcaller_id\x18\x03 \x01(\v2\x0f.vtrpc.CallerIDR\bcallerId\"\xe1\x01\n" + + "\x1eCleanupSchemaMigrationResponse\x12w\n" + + "\x16rows_affected_by_shard\x18\x01 \x03(\v2B.vtctldata.CleanupSchemaMigrationResponse.RowsAffectedByShardEntryR\x13rowsAffectedByShard\x1aF\n" + + "\x18RowsAffectedByShardEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\x04R\x05value:\x028\x01\"~\n" + + "\x1eCompleteSchemaMigrationRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x12\n" + + "\x04uuid\x18\x02 \x01(\tR\x04uuid\x12,\n" + + "\tcaller_id\x18\x03 \x01(\v2\x0f.vtrpc.CallerIDR\bcallerId\"\xe3\x01\n" + + "\x1fCompleteSchemaMigrationResponse\x12x\n" + + "\x16rows_affected_by_shard\x18\x01 \x03(\v2C.vtctldata.CompleteSchemaMigrationResponse.RowsAffectedByShardEntryR\x13rowsAffectedByShard\x1aF\n" + + "\x18RowsAffectedByShardEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\x04R\x05value:\x028\x01\"\x8a\x03\n" + + "\x16CopySchemaShardRequest\x12E\n" + + "\x13source_tablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\x11sourceTabletAlias\x12\x16\n" + + "\x06tables\x18\x02 \x03(\tR\x06tables\x12%\n" + + "\x0eexclude_tables\x18\x03 \x03(\tR\rexcludeTables\x12#\n" + + "\rinclude_views\x18\x04 \x01(\bR\fincludeViews\x12\x1f\n" + + "\vskip_verify\x18\x05 \x01(\bR\n" + + "skipVerify\x12D\n" + + "\x15wait_replicas_timeout\x18\x06 \x01(\v2\x10.vttime.DurationR\x13waitReplicasTimeout\x121\n" + + "\x14destination_keyspace\x18\a \x01(\tR\x13destinationKeyspace\x12+\n" + + "\x11destination_shard\x18\b \x01(\tR\x10destinationShard\"\x19\n" + + "\x17CopySchemaShardResponse\"\xdd\x02\n" + + "\x15CreateKeyspaceRequest\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n" + + "\x05force\x18\x02 \x01(\bR\x05force\x12/\n" + + "\x14allow_empty_v_schema\x18\x03 \x01(\bR\x11allowEmptyVSchema\x12*\n" + + "\x04type\x18\a \x01(\x0e2\x16.topodata.KeyspaceTypeR\x04type\x12#\n" + + "\rbase_keyspace\x18\b \x01(\tR\fbaseKeyspace\x121\n" + + "\rsnapshot_time\x18\t \x01(\v2\f.vttime.TimeR\fsnapshotTime\x12+\n" + + "\x11durability_policy\x18\n" + + " \x01(\tR\x10durabilityPolicy\x12&\n" + + "\x0fsidecar_db_name\x18\v \x01(\tR\rsidecarDbNameJ\x04\b\x04\x10\x05J\x04\b\x05\x10\x06J\x04\b\x06\x10\a\"I\n" + + "\x16CreateKeyspaceResponse\x12/\n" + + "\bkeyspace\x18\x01 \x01(\v2\x13.vtctldata.KeyspaceR\bkeyspace\"\x8c\x01\n" + + "\x12CreateShardRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x1d\n" + + "\n" + + "shard_name\x18\x02 \x01(\tR\tshardName\x12\x14\n" + + "\x05force\x18\x03 \x01(\bR\x05force\x12%\n" + + "\x0einclude_parent\x18\x04 \x01(\bR\rincludeParent\"\xa0\x01\n" + + "\x13CreateShardResponse\x12/\n" + + "\bkeyspace\x18\x01 \x01(\v2\x13.vtctldata.KeyspaceR\bkeyspace\x12&\n" + + "\x05shard\x18\x02 \x01(\v2\x10.vtctldata.ShardR\x05shard\x120\n" + + "\x14shard_already_exists\x18\x03 \x01(\bR\x12shardAlreadyExists\"A\n" + + "\x15DeleteCellInfoRequest\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n" + + "\x05force\x18\x02 \x01(\bR\x05force\"\x18\n" + + "\x16DeleteCellInfoResponse\"-\n" + + "\x17DeleteCellsAliasRequest\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\"\x1a\n" + + "\x18DeleteCellsAliasResponse\"g\n" + + "\x15DeleteKeyspaceRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x1c\n" + + "\trecursive\x18\x02 \x01(\bR\trecursive\x12\x14\n" + + "\x05force\x18\x03 \x01(\bR\x05force\"\x18\n" + + "\x16DeleteKeyspaceResponse\"\x9b\x01\n" + + "\x13DeleteShardsRequest\x12(\n" + + "\x06shards\x18\x01 \x03(\v2\x10.vtctldata.ShardR\x06shards\x12\x1c\n" + + "\trecursive\x18\x02 \x01(\bR\trecursive\x12&\n" + + "\x0feven_if_serving\x18\x04 \x01(\bR\revenIfServing\x12\x14\n" + + "\x05force\x18\x05 \x01(\bR\x05force\"\x16\n" + + "\x14DeleteShardsResponse\"-\n" + + "\x17DeleteSrvVSchemaRequest\x12\x12\n" + + "\x04cell\x18\x01 \x01(\tR\x04cell\"\x1a\n" + + "\x18DeleteSrvVSchemaResponse\"y\n" + + "\x14DeleteTabletsRequest\x12<\n" + + "\x0etablet_aliases\x18\x01 \x03(\v2\x15.topodata.TabletAliasR\rtabletAliases\x12#\n" + + "\rallow_primary\x18\x02 \x01(\bR\fallowPrimary\"\x17\n" + + "\x15DeleteTabletsResponse\"\xc3\x03\n" + + "\x1dEmergencyReparentShardRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x126\n" + + "\vnew_primary\x18\x03 \x01(\v2\x15.topodata.TabletAliasR\n" + + "newPrimary\x12>\n" + + "\x0fignore_replicas\x18\x04 \x03(\v2\x15.topodata.TabletAliasR\x0eignoreReplicas\x12D\n" + + "\x15wait_replicas_timeout\x18\x05 \x01(\v2\x10.vttime.DurationR\x13waitReplicasTimeout\x12?\n" + + "\x1cprevent_cross_cell_promotion\x18\x06 \x01(\bR\x19preventCrossCellPromotion\x12/\n" + + "\x14wait_for_all_tablets\x18\a \x01(\bR\x11waitForAllTablets\x12@\n" + + "\x10expected_primary\x18\b \x01(\v2\x15.topodata.TabletAliasR\x0fexpectedPrimary\"\xbc\x01\n" + + "\x1eEmergencyReparentShardResponse\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x12@\n" + + "\x10promoted_primary\x18\x03 \x01(\v2\x15.topodata.TabletAliasR\x0fpromotedPrimary\x12&\n" + + "\x06events\x18\x04 \x03(\v2\x0e.logutil.EventR\x06events\"\xa0\x01\n" + + "\x18ExecuteFetchAsAppRequest\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\x12\x14\n" + + "\x05query\x18\x02 \x01(\tR\x05query\x12\x19\n" + + "\bmax_rows\x18\x03 \x01(\x03R\amaxRows\x12\x19\n" + + "\buse_pool\x18\x04 \x01(\bR\ausePool\"G\n" + + "\x19ExecuteFetchAsAppResponse\x12*\n" + + "\x06result\x18\x01 \x01(\v2\x12.query.QueryResultR\x06result\"\xd3\x01\n" + + "\x18ExecuteFetchAsDBARequest\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\x12\x14\n" + + "\x05query\x18\x02 \x01(\tR\x05query\x12\x19\n" + + "\bmax_rows\x18\x03 \x01(\x03R\amaxRows\x12'\n" + + "\x0fdisable_binlogs\x18\x04 \x01(\bR\x0edisableBinlogs\x12#\n" + + "\rreload_schema\x18\x05 \x01(\bR\freloadSchema\"G\n" + + "\x19ExecuteFetchAsDBAResponse\x12*\n" + + "\x06result\x18\x01 \x01(\v2\x12.query.QueryResultR\x06result\"\xa5\x01\n" + + "\x12ExecuteHookRequest\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\x12U\n" + + "\x13tablet_hook_request\x18\x02 \x01(\v2%.tabletmanagerdata.ExecuteHookRequestR\x11tabletHookRequest\"^\n" + + "\x13ExecuteHookResponse\x12G\n" + + "\vhook_result\x18\x01 \x01(\v2&.tabletmanagerdata.ExecuteHookResponseR\n" + + "hookResult\"\xd4\x01\n" + + "\x1dExecuteMultiFetchAsDBARequest\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\x12\x10\n" + + "\x03sql\x18\x02 \x01(\tR\x03sql\x12\x19\n" + + "\bmax_rows\x18\x03 \x01(\x03R\amaxRows\x12'\n" + + "\x0fdisable_binlogs\x18\x04 \x01(\bR\x0edisableBinlogs\x12#\n" + + "\rreload_schema\x18\x05 \x01(\bR\freloadSchema\"N\n" + + "\x1eExecuteMultiFetchAsDBAResponse\x12,\n" + + "\aresults\x18\x01 \x03(\v2\x12.query.QueryResultR\aresults\"<\n" + + "\x1eFindAllShardsInKeyspaceRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\"\xbe\x01\n" + + "\x1fFindAllShardsInKeyspaceResponse\x12N\n" + + "\x06shards\x18\x01 \x03(\v26.vtctldata.FindAllShardsInKeyspaceResponse.ShardsEntryR\x06shards\x1aK\n" + + "\vShardsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12&\n" + + "\x05value\x18\x02 \x01(\v2\x10.vtctldata.ShardR\x05value:\x028\x01\"\x82\x01\n" + + "\"ForceCutOverSchemaMigrationRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x12\n" + + "\x04uuid\x18\x02 \x01(\tR\x04uuid\x12,\n" + + "\tcaller_id\x18\x03 \x01(\v2\x0f.vtrpc.CallerIDR\bcallerId\"\xeb\x01\n" + + "#ForceCutOverSchemaMigrationResponse\x12|\n" + + "\x16rows_affected_by_shard\x18\x01 \x03(\v2G.vtctldata.ForceCutOverSchemaMigrationResponse.RowsAffectedByShardEntryR\x13rowsAffectedByShard\x1aF\n" + + "\x18RowsAffectedByShardEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\x04R\x05value:\x028\x01\"\x9e\x01\n" + + "\x11GetBackupsRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x12\x14\n" + + "\x05limit\x18\x03 \x01(\rR\x05limit\x12\x1a\n" + + "\bdetailed\x18\x04 \x01(\bR\bdetailed\x12%\n" + + "\x0edetailed_limit\x18\x05 \x01(\rR\rdetailedLimit\"D\n" + + "\x12GetBackupsResponse\x12.\n" + + "\abackups\x18\x01 \x03(\v2\x14.mysqlctl.BackupInfoR\abackups\"(\n" + + "\x12GetCellInfoRequest\x12\x12\n" + + "\x04cell\x18\x01 \x01(\tR\x04cell\"F\n" + + "\x13GetCellInfoResponse\x12/\n" + + "\tcell_info\x18\x01 \x01(\v2\x12.topodata.CellInfoR\bcellInfo\"\x19\n" + + "\x17GetCellInfoNamesRequest\"0\n" + + "\x18GetCellInfoNamesResponse\x12\x14\n" + + "\x05names\x18\x01 \x03(\tR\x05names\"\x18\n" + + "\x16GetCellsAliasesRequest\"\xb6\x01\n" + + "\x17GetCellsAliasesResponse\x12I\n" + + "\aaliases\x18\x01 \x03(\v2/.vtctldata.GetCellsAliasesResponse.AliasesEntryR\aaliases\x1aP\n" + + "\fAliasesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12*\n" + + "\x05value\x18\x02 \x01(\v2\x14.topodata.CellsAliasR\x05value:\x028\x01\"P\n" + + "\x14GetFullStatusRequest\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\"L\n" + + "\x15GetFullStatusResponse\x123\n" + + "\x06status\x18\x01 \x01(\v2\x1b.replicationdata.FullStatusR\x06status\"\x15\n" + + "\x13GetKeyspacesRequest\"I\n" + + "\x14GetKeyspacesResponse\x121\n" + + "\tkeyspaces\x18\x01 \x03(\v2\x13.vtctldata.KeyspaceR\tkeyspaces\"0\n" + + "\x12GetKeyspaceRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\"F\n" + + "\x13GetKeyspaceResponse\x12/\n" + + "\bkeyspace\x18\x01 \x01(\v2\x13.vtctldata.KeyspaceR\bkeyspace\"Q\n" + + "\x15GetPermissionsRequest\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\"Z\n" + + "\x16GetPermissionsResponse\x12@\n" + + "\vpermissions\x18\x01 \x01(\v2\x1e.tabletmanagerdata.PermissionsR\vpermissions\" \n" + + "\x1eGetKeyspaceRoutingRulesRequest\"v\n" + + "\x1fGetKeyspaceRoutingRulesResponse\x12S\n" + + "\x16keyspace_routing_rules\x18\x01 \x01(\v2\x1d.vschema.KeyspaceRoutingRulesR\x14keyspaceRoutingRules\"\x18\n" + + "\x16GetRoutingRulesRequest\"U\n" + + "\x17GetRoutingRulesResponse\x12:\n" + + "\rrouting_rules\x18\x01 \x01(\v2\x15.vschema.RoutingRulesR\froutingRules\"\xb0\x02\n" + + "\x10GetSchemaRequest\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\x12\x16\n" + + "\x06tables\x18\x02 \x03(\tR\x06tables\x12%\n" + + "\x0eexclude_tables\x18\x03 \x03(\tR\rexcludeTables\x12#\n" + + "\rinclude_views\x18\x04 \x01(\bR\fincludeViews\x12(\n" + + "\x10table_names_only\x18\x05 \x01(\bR\x0etableNamesOnly\x12(\n" + + "\x10table_sizes_only\x18\x06 \x01(\bR\x0etableSizesOnly\x12*\n" + + "\x11table_schema_only\x18\a \x01(\bR\x0ftableSchemaOnly\"P\n" + + "\x11GetSchemaResponse\x12;\n" + + "\x06schema\x18\x01 \x01(\v2#.tabletmanagerdata.SchemaDefinitionR\x06schema\"\xb8\x02\n" + + "\x1aGetSchemaMigrationsRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x12\n" + + "\x04uuid\x18\x02 \x01(\tR\x04uuid\x12+\n" + + "\x11migration_context\x18\x03 \x01(\tR\x10migrationContext\x129\n" + + "\x06status\x18\x04 \x01(\x0e2!.vtctldata.SchemaMigration.StatusR\x06status\x12(\n" + + "\x06recent\x18\x05 \x01(\v2\x10.vttime.DurationR\x06recent\x12.\n" + + "\x05order\x18\x06 \x01(\x0e2\x18.vtctldata.QueryOrderingR\x05order\x12\x14\n" + + "\x05limit\x18\a \x01(\x04R\x05limit\x12\x12\n" + + "\x04skip\x18\b \x01(\x04R\x04skip\"Y\n" + + "\x1bGetSchemaMigrationsResponse\x12:\n" + + "\n" + + "migrations\x18\x01 \x03(\v2\x1a.vtctldata.SchemaMigrationR\n" + + "migrations\"d\n" + + "\x1aGetShardReplicationRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x12\x14\n" + + "\x05cells\x18\x03 \x03(\tR\x05cells\"\x83\x02\n" + + "\x1bGetShardReplicationResponse\x12}\n" + + "\x19shard_replication_by_cell\x18\x01 \x03(\v2B.vtctldata.GetShardReplicationResponse.ShardReplicationByCellEntryR\x16shardReplicationByCell\x1ae\n" + + "\x1bShardReplicationByCellEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x120\n" + + "\x05value\x18\x02 \x01(\v2\x1a.topodata.ShardReplicationR\x05value:\x028\x01\"L\n" + + "\x0fGetShardRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x1d\n" + + "\n" + + "shard_name\x18\x02 \x01(\tR\tshardName\":\n" + + "\x10GetShardResponse\x12&\n" + + "\x05shard\x18\x01 \x01(\v2\x10.vtctldata.ShardR\x05shard\"\x1d\n" + + "\x1bGetShardRoutingRulesRequest\"j\n" + + "\x1cGetShardRoutingRulesResponse\x12J\n" + + "\x13shard_routing_rules\x18\x01 \x01(\v2\x1a.vschema.ShardRoutingRulesR\x11shardRoutingRules\"2\n" + + "\x1aGetSrvKeyspaceNamesRequest\x12\x14\n" + + "\x05cells\x18\x01 \x03(\tR\x05cells\"\xf3\x01\n" + + "\x1bGetSrvKeyspaceNamesResponse\x12G\n" + + "\x05names\x18\x01 \x03(\v21.vtctldata.GetSrvKeyspaceNamesResponse.NamesEntryR\x05names\x1ai\n" + + "\n" + + "NamesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12E\n" + + "\x05value\x18\x02 \x01(\v2/.vtctldata.GetSrvKeyspaceNamesResponse.NameListR\x05value:\x028\x01\x1a \n" + + "\bNameList\x12\x14\n" + + "\x05names\x18\x01 \x03(\tR\x05names\"J\n" + + "\x16GetSrvKeyspacesRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05cells\x18\x02 \x03(\tR\x05cells\"\xcc\x01\n" + + "\x17GetSrvKeyspacesResponse\x12Y\n" + + "\rsrv_keyspaces\x18\x01 \x03(\v24.vtctldata.GetSrvKeyspacesResponse.SrvKeyspacesEntryR\fsrvKeyspaces\x1aV\n" + + "\x11SrvKeyspacesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12+\n" + + "\x05value\x18\x02 \x01(\v2\x15.topodata.SrvKeyspaceR\x05value:\x028\x01\"\xe4\x03\n" + + "\x1cUpdateThrottlerConfigRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x16\n" + + "\x06enable\x18\x02 \x01(\bR\x06enable\x12\x18\n" + + "\adisable\x18\x03 \x01(\bR\adisable\x12\x1c\n" + + "\tthreshold\x18\x04 \x01(\x01R\tthreshold\x12!\n" + + "\fcustom_query\x18\x05 \x01(\tR\vcustomQuery\x12(\n" + + "\x10custom_query_set\x18\x06 \x01(\bR\x0ecustomQuerySet\x12-\n" + + "\x13check_as_check_self\x18\a \x01(\bR\x10checkAsCheckSelf\x12/\n" + + "\x14check_as_check_shard\x18\b \x01(\bR\x11checkAsCheckShard\x12?\n" + + "\rthrottled_app\x18\t \x01(\v2\x1a.topodata.ThrottledAppRuleR\fthrottledApp\x12\x1f\n" + + "\vmetric_name\x18\n" + + " \x01(\tR\n" + + "metricName\x12\x19\n" + + "\bapp_name\x18\v \x01(\tR\aappName\x12.\n" + + "\x13app_checked_metrics\x18\f \x03(\tR\x11appCheckedMetrics\"\x1f\n" + + "\x1dUpdateThrottlerConfigResponse\"*\n" + + "\x14GetSrvVSchemaRequest\x12\x12\n" + + "\x04cell\x18\x01 \x01(\tR\x04cell\"N\n" + + "\x15GetSrvVSchemaResponse\x125\n" + + "\fsrv_v_schema\x18\x01 \x01(\v2\x13.vschema.SrvVSchemaR\n" + + "srvVSchema\"-\n" + + "\x15GetSrvVSchemasRequest\x12\x14\n" + + "\x05cells\x18\x02 \x03(\tR\x05cells\"\xc5\x01\n" + + "\x16GetSrvVSchemasResponse\x12V\n" + + "\rsrv_v_schemas\x18\x01 \x03(\v22.vtctldata.GetSrvVSchemasResponse.SrvVSchemasEntryR\vsrvVSchemas\x1aS\n" + + "\x10SrvVSchemasEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12)\n" + + "\x05value\x18\x02 \x01(\v2\x13.vschema.SrvVSchemaR\x05value:\x028\x01\"L\n" + + "\x10GetTabletRequest\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\"=\n" + + "\x11GetTabletResponse\x12(\n" + + "\x06tablet\x18\x01 \x01(\v2\x10.topodata.TabletR\x06tablet\"\xe8\x01\n" + + "\x11GetTabletsRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x12\x14\n" + + "\x05cells\x18\x03 \x03(\tR\x05cells\x12\x16\n" + + "\x06strict\x18\x04 \x01(\bR\x06strict\x12<\n" + + "\x0etablet_aliases\x18\x05 \x03(\v2\x15.topodata.TabletAliasR\rtabletAliases\x125\n" + + "\vtablet_type\x18\x06 \x01(\x0e2\x14.topodata.TabletTypeR\n" + + "tabletType\"@\n" + + "\x12GetTabletsResponse\x12*\n" + + "\atablets\x18\x01 \x03(\v2\x10.topodata.TabletR\atablets\"U\n" + + "\x19GetThrottlerStatusRequest\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\"c\n" + + "\x1aGetThrottlerStatusResponse\x12E\n" + + "\x06status\x18\x01 \x01(\v2-.tabletmanagerdata.GetThrottlerStatusResponseR\x06status\"_\n" + + "\x16GetTopologyPathRequest\x12\x12\n" + + "\x04path\x18\x01 \x01(\tR\x04path\x12\x18\n" + + "\aversion\x18\x02 \x01(\x03R\aversion\x12\x17\n" + + "\aas_json\x18\x03 \x01(\bR\x06asJson\"F\n" + + "\x17GetTopologyPathResponse\x12+\n" + + "\x04cell\x18\x01 \x01(\v2\x17.vtctldata.TopologyCellR\x04cell\"\x80\x01\n" + + "\fTopologyCell\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x12\n" + + "\x04path\x18\x02 \x01(\tR\x04path\x12\x12\n" + + "\x04data\x18\x03 \x01(\tR\x04data\x12\x1a\n" + + "\bchildren\x18\x04 \x03(\tR\bchildren\x12\x18\n" + + "\aversion\x18\x05 \x01(\x03R\aversion\"_\n" + + " GetUnresolvedTransactionsRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x1f\n" + + "\vabandon_age\x18\x02 \x01(\x03R\n" + + "abandonAge\"c\n" + + "!GetUnresolvedTransactionsResponse\x12>\n" + + "\ftransactions\x18\x01 \x03(\v2\x1a.query.TransactionMetadataR\ftransactions\"/\n" + + "\x19GetTransactionInfoRequest\x12\x12\n" + + "\x04dtid\x18\x01 \x01(\tR\x04dtid\"\xa0\x01\n" + + "\x15ShardTransactionState\x12\x14\n" + + "\x05shard\x18\x01 \x01(\tR\x05shard\x12\x14\n" + + "\x05state\x18\x02 \x01(\tR\x05state\x12\x18\n" + + "\amessage\x18\x03 \x01(\tR\amessage\x12!\n" + + "\ftime_created\x18\x04 \x01(\x03R\vtimeCreated\x12\x1e\n" + + "\n" + + "statements\x18\x05 \x03(\tR\n" + + "statements\"\x99\x01\n" + + "\x1aGetTransactionInfoResponse\x126\n" + + "\bmetadata\x18\x01 \x01(\v2\x1a.query.TransactionMetadataR\bmetadata\x12C\n" + + "\fshard_states\x18\x02 \x03(\v2 .vtctldata.ShardTransactionStateR\vshardStates\"c\n" + + "\x1aConcludeTransactionRequest\x12\x12\n" + + "\x04dtid\x18\x01 \x01(\tR\x04dtid\x121\n" + + "\fparticipants\x18\x02 \x03(\v2\r.query.TargetR\fparticipants\"\x1d\n" + + "\x1bConcludeTransactionResponse\"/\n" + + "\x11GetVSchemaRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\"M\n" + + "\x11GetVersionRequest\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\".\n" + + "\x12GetVersionResponse\x12\x18\n" + + "\aversion\x18\x01 \x01(\tR\aversion\"B\n" + + "\x12GetVSchemaResponse\x12,\n" + + "\bv_schema\x18\x01 \x01(\v2\x11.vschema.KeyspaceR\avSchema\"\xc6\x01\n" + + "\x13GetWorkflowsRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x1f\n" + + "\vactive_only\x18\x02 \x01(\bR\n" + + "activeOnly\x12\x1b\n" + + "\tname_only\x18\x03 \x01(\bR\bnameOnly\x12\x1a\n" + + "\bworkflow\x18\x04 \x01(\tR\bworkflow\x12!\n" + + "\finclude_logs\x18\x05 \x01(\bR\vincludeLogs\x12\x16\n" + + "\x06shards\x18\x06 \x03(\tR\x06shards\"I\n" + + "\x14GetWorkflowsResponse\x121\n" + + "\tworkflows\x18\x01 \x03(\v2\x13.vtctldata.WorkflowR\tworkflows\"\xfb\x01\n" + + "\x17InitShardPrimaryRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x12R\n" + + "\x1aprimary_elect_tablet_alias\x18\x03 \x01(\v2\x15.topodata.TabletAliasR\x17primaryElectTabletAlias\x12\x14\n" + + "\x05force\x18\x04 \x01(\bR\x05force\x12D\n" + + "\x15wait_replicas_timeout\x18\x05 \x01(\v2\x10.vttime.DurationR\x13waitReplicasTimeout\"B\n" + + "\x18InitShardPrimaryResponse\x12&\n" + + "\x06events\x18\x01 \x03(\v2\x0e.logutil.EventR\x06events\"|\n" + + "\x1cLaunchSchemaMigrationRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x12\n" + + "\x04uuid\x18\x02 \x01(\tR\x04uuid\x12,\n" + + "\tcaller_id\x18\x03 \x01(\v2\x0f.vtrpc.CallerIDR\bcallerId\"\xdf\x01\n" + + "\x1dLaunchSchemaMigrationResponse\x12v\n" + + "\x16rows_affected_by_shard\x18\x01 \x03(\v2A.vtctldata.LaunchSchemaMigrationResponse.RowsAffectedByShardEntryR\x13rowsAffectedByShard\x1aF\n" + + "\x18RowsAffectedByShardEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\x04R\x05value:\x028\x01\"t\n" + + "\x1bLookupVindexCompleteRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12%\n" + + "\x0etable_keyspace\x18\x03 \x01(\tR\rtableKeyspace\"\x1e\n" + + "\x1cLookupVindexCompleteResponse\"\xff\x02\n" + + "\x19LookupVindexCreateRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x1a\n" + + "\bworkflow\x18\x02 \x01(\tR\bworkflow\x12\x14\n" + + "\x05cells\x18\x03 \x03(\tR\x05cells\x12)\n" + + "\x06vindex\x18\x04 \x01(\v2\x11.vschema.KeyspaceR\x06vindex\x12B\n" + + "\x1econtinue_after_copy_with_owner\x18\x05 \x01(\bR\x1acontinueAfterCopyWithOwner\x127\n" + + "\ftablet_types\x18\x06 \x03(\x0e2\x14.topodata.TabletTypeR\vtabletTypes\x12l\n" + + "\x1btablet_selection_preference\x18\a \x01(\x0e2,.tabletmanagerdata.TabletSelectionPreferenceR\x19tabletSelectionPreference\"\x1c\n" + + "\x1aLookupVindexCreateResponse\"\xa0\x01\n" + + "\x1eLookupVindexExternalizeRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12%\n" + + "\x0etable_keyspace\x18\x03 \x01(\tR\rtableKeyspace\x12'\n" + + "\x0fdelete_workflow\x18\x04 \x01(\bR\x0edeleteWorkflow\"w\n" + + "\x1fLookupVindexExternalizeResponse\x12)\n" + + "\x10workflow_stopped\x18\x01 \x01(\bR\x0fworkflowStopped\x12)\n" + + "\x10workflow_deleted\x18\x02 \x01(\bR\x0fworkflowDeleted\"w\n" + + "\x1eLookupVindexInternalizeRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12%\n" + + "\x0etable_keyspace\x18\x03 \x01(\tR\rtableKeyspace\"!\n" + + "\x1fLookupVindexInternalizeResponse\"V\n" + + "\x18MaterializeCreateRequest\x12:\n" + + "\bsettings\x18\x01 \x01(\v2\x1e.vtctldata.MaterializeSettingsR\bsettings\"\x1b\n" + + "\x19MaterializeCreateResponse\"\xf7\x01\n" + + "\x18WorkflowAddTablesRequest\x12\x1a\n" + + "\bworkflow\x18\x01 \x01(\tR\bworkflow\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12J\n" + + "\x0etable_settings\x18\x03 \x03(\v2#.vtctldata.TableMaterializeSettingsR\rtableSettings\x12W\n" + + "\x16materialization_intent\x18\x04 \x01(\x0e2 .vtctldata.MaterializationIntentR\x15materializationIntent\"\x1b\n" + + "\x19WorkflowAddTablesResponse\"\xdd\x05\n" + + "\x14MigrateCreateRequest\x12\x1a\n" + + "\bworkflow\x18\x01 \x01(\tR\bworkflow\x12'\n" + + "\x0fsource_keyspace\x18\x02 \x01(\tR\x0esourceKeyspace\x12'\n" + + "\x0ftarget_keyspace\x18\x03 \x01(\tR\x0etargetKeyspace\x12\x1d\n" + + "\n" + + "mount_name\x18\x04 \x01(\tR\tmountName\x12\x14\n" + + "\x05cells\x18\x05 \x03(\tR\x05cells\x127\n" + + "\ftablet_types\x18\x06 \x03(\x0e2\x14.topodata.TabletTypeR\vtabletTypes\x12l\n" + + "\x1btablet_selection_preference\x18\a \x01(\x0e2,.tabletmanagerdata.TabletSelectionPreferenceR\x19tabletSelectionPreference\x12\x1d\n" + + "\n" + + "all_tables\x18\b \x01(\bR\tallTables\x12%\n" + + "\x0einclude_tables\x18\t \x03(\tR\rincludeTables\x12%\n" + + "\x0eexclude_tables\x18\n" + + " \x03(\tR\rexcludeTables\x12(\n" + + "\x10source_time_zone\x18\v \x01(\tR\x0esourceTimeZone\x12\x15\n" + + "\x06on_ddl\x18\f \x01(\tR\x05onDdl\x12&\n" + + "\x0fstop_after_copy\x18\r \x01(\bR\rstopAfterCopy\x12*\n" + + "\x11drop_foreign_keys\x18\x0e \x01(\bR\x0fdropForeignKeys\x120\n" + + "\x14defer_secondary_keys\x18\x0f \x01(\bR\x12deferSecondaryKeys\x12\x1d\n" + + "\n" + + "auto_start\x18\x10 \x01(\bR\tautoStart\x12(\n" + + "\x10no_routing_rules\x18\x11 \x01(\bR\x0enoRoutingRules\"\xe6\x01\n" + + "\x16MigrateCompleteRequest\x12\x1a\n" + + "\bworkflow\x18\x01 \x01(\tR\bworkflow\x12'\n" + + "\x0ftarget_keyspace\x18\x03 \x01(\tR\x0etargetKeyspace\x12\x1b\n" + + "\tkeep_data\x18\x04 \x01(\bR\bkeepData\x12,\n" + + "\x12keep_routing_rules\x18\x05 \x01(\bR\x10keepRoutingRules\x12#\n" + + "\rrename_tables\x18\x06 \x01(\bR\frenameTables\x12\x17\n" + + "\adry_run\x18\a \x01(\bR\x06dryRun\"[\n" + + "\x17MigrateCompleteResponse\x12\x18\n" + + "\asummary\x18\x01 \x01(\tR\asummary\x12&\n" + + "\x0fdry_run_results\x18\x02 \x03(\tR\rdryRunResults\"\x85\x01\n" + + "\x14MountRegisterRequest\x12\x1b\n" + + "\ttopo_type\x18\x01 \x01(\tR\btopoType\x12\x1f\n" + + "\vtopo_server\x18\x02 \x01(\tR\n" + + "topoServer\x12\x1b\n" + + "\ttopo_root\x18\x03 \x01(\tR\btopoRoot\x12\x12\n" + + "\x04name\x18\x04 \x01(\tR\x04name\"\x17\n" + + "\x15MountRegisterResponse\",\n" + + "\x16MountUnregisterRequest\x12\x12\n" + + "\x04name\x18\x04 \x01(\tR\x04name\"\x19\n" + + "\x17MountUnregisterResponse\"&\n" + + "\x10MountShowRequest\x12\x12\n" + + "\x04name\x18\x04 \x01(\tR\x04name\"\x82\x01\n" + + "\x11MountShowResponse\x12\x1b\n" + + "\ttopo_type\x18\x01 \x01(\tR\btopoType\x12\x1f\n" + + "\vtopo_server\x18\x02 \x01(\tR\n" + + "topoServer\x12\x1b\n" + + "\ttopo_root\x18\x03 \x01(\tR\btopoRoot\x12\x12\n" + + "\x04name\x18\x04 \x01(\tR\x04name\"\x12\n" + + "\x10MountListRequest\")\n" + + "\x11MountListResponse\x12\x14\n" + + "\x05names\x18\x01 \x03(\tR\x05names\"\x82\a\n" + + "\x17MoveTablesCreateRequest\x12\x1a\n" + + "\bworkflow\x18\x01 \x01(\tR\bworkflow\x12'\n" + + "\x0fsource_keyspace\x18\x02 \x01(\tR\x0esourceKeyspace\x12'\n" + + "\x0ftarget_keyspace\x18\x03 \x01(\tR\x0etargetKeyspace\x12\x14\n" + + "\x05cells\x18\x04 \x03(\tR\x05cells\x127\n" + + "\ftablet_types\x18\x05 \x03(\x0e2\x14.topodata.TabletTypeR\vtabletTypes\x12l\n" + + "\x1btablet_selection_preference\x18\x06 \x01(\x0e2,.tabletmanagerdata.TabletSelectionPreferenceR\x19tabletSelectionPreference\x12#\n" + + "\rsource_shards\x18\a \x03(\tR\fsourceShards\x12\x1d\n" + + "\n" + + "all_tables\x18\b \x01(\bR\tallTables\x12%\n" + + "\x0einclude_tables\x18\t \x03(\tR\rincludeTables\x12%\n" + + "\x0eexclude_tables\x18\n" + + " \x03(\tR\rexcludeTables\x122\n" + + "\x15external_cluster_name\x18\v \x01(\tR\x13externalClusterName\x12(\n" + + "\x10source_time_zone\x18\f \x01(\tR\x0esourceTimeZone\x12\x15\n" + + "\x06on_ddl\x18\r \x01(\tR\x05onDdl\x12&\n" + + "\x0fstop_after_copy\x18\x0e \x01(\bR\rstopAfterCopy\x12*\n" + + "\x11drop_foreign_keys\x18\x0f \x01(\bR\x0fdropForeignKeys\x120\n" + + "\x14defer_secondary_keys\x18\x10 \x01(\bR\x12deferSecondaryKeys\x12\x1d\n" + + "\n" + + "auto_start\x18\x11 \x01(\bR\tautoStart\x12(\n" + + "\x10no_routing_rules\x18\x12 \x01(\bR\x0enoRoutingRules\x12\x1f\n" + + "\vatomic_copy\x18\x13 \x01(\bR\n" + + "atomicCopy\x12E\n" + + "\x10workflow_options\x18\x14 \x01(\v2\x1a.vtctldata.WorkflowOptionsR\x0fworkflowOptions\"\xd5\x01\n" + + "\x18MoveTablesCreateResponse\x12\x18\n" + + "\asummary\x18\x01 \x01(\tR\asummary\x12H\n" + + "\adetails\x18\x02 \x03(\v2..vtctldata.MoveTablesCreateResponse.TabletInfoR\adetails\x1aU\n" + + "\n" + + "TabletInfo\x12-\n" + + "\x06tablet\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\x06tablet\x12\x18\n" + + "\acreated\x18\x02 \x01(\bR\acreated\"\xb7\x02\n" + + "\x19MoveTablesCompleteRequest\x12\x1a\n" + + "\bworkflow\x18\x01 \x01(\tR\bworkflow\x12'\n" + + "\x0ftarget_keyspace\x18\x03 \x01(\tR\x0etargetKeyspace\x12\x1b\n" + + "\tkeep_data\x18\x04 \x01(\bR\bkeepData\x12,\n" + + "\x12keep_routing_rules\x18\x05 \x01(\bR\x10keepRoutingRules\x12#\n" + + "\rrename_tables\x18\x06 \x01(\bR\frenameTables\x12\x17\n" + + "\adry_run\x18\a \x01(\bR\x06dryRun\x12\x16\n" + + "\x06shards\x18\b \x03(\tR\x06shards\x124\n" + + "\x16ignore_source_keyspace\x18\t \x01(\bR\x14ignoreSourceKeyspace\"^\n" + + "\x1aMoveTablesCompleteResponse\x12\x18\n" + + "\asummary\x18\x01 \x01(\tR\asummary\x12&\n" + + "\x0fdry_run_results\x18\x02 \x03(\tR\rdryRunResults\"M\n" + + "\x11PingTabletRequest\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\"\x14\n" + + "\x12PingTabletResponse\"\xd6\x03\n" + + "\x1bPlannedReparentShardRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x126\n" + + "\vnew_primary\x18\x03 \x01(\v2\x15.topodata.TabletAliasR\n" + + "newPrimary\x12:\n" + + "\ravoid_primary\x18\x04 \x01(\v2\x15.topodata.TabletAliasR\favoidPrimary\x12D\n" + + "\x15wait_replicas_timeout\x18\x05 \x01(\v2\x10.vttime.DurationR\x13waitReplicasTimeout\x12L\n" + + "\x19tolerable_replication_lag\x18\x06 \x01(\v2\x10.vttime.DurationR\x17tolerableReplicationLag\x12;\n" + + "\x1aallow_cross_cell_promotion\x18\a \x01(\bR\x17allowCrossCellPromotion\x12@\n" + + "\x10expected_primary\x18\b \x01(\v2\x15.topodata.TabletAliasR\x0fexpectedPrimary\"\xba\x01\n" + + "\x1cPlannedReparentShardResponse\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x12@\n" + + "\x10promoted_primary\x18\x03 \x01(\v2\x15.topodata.TabletAliasR\x0fpromotedPrimary\x12&\n" + + "\x06events\x18\x04 \x03(\v2\x0e.logutil.EventR\x06events\"t\n" + + "\x1bRebuildKeyspaceGraphRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05cells\x18\x02 \x03(\tR\x05cells\x12#\n" + + "\rallow_partial\x18\x03 \x01(\bR\fallowPartial\"\x1e\n" + + "\x1cRebuildKeyspaceGraphResponse\"2\n" + + "\x1aRebuildVSchemaGraphRequest\x12\x14\n" + + "\x05cells\x18\x01 \x03(\tR\x05cells\"\x1d\n" + + "\x1bRebuildVSchemaGraphResponse\"O\n" + + "\x13RefreshStateRequest\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\"\x16\n" + + "\x14RefreshStateResponse\"d\n" + + "\x1aRefreshStateByShardRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x12\x14\n" + + "\x05cells\x18\x03 \x03(\tR\x05cells\"\x83\x01\n" + + "\x1bRefreshStateByShardResponse\x12,\n" + + "\x12is_partial_refresh\x18\x01 \x01(\bR\x10isPartialRefresh\x126\n" + + "\x17partial_refresh_details\x18\x02 \x01(\tR\x15partialRefreshDetails\"O\n" + + "\x13ReloadSchemaRequest\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\"\x16\n" + + "\x14ReloadSchemaResponse\"\xa9\x01\n" + + "\x1bReloadSchemaKeyspaceRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12#\n" + + "\rwait_position\x18\x02 \x01(\tR\fwaitPosition\x12'\n" + + "\x0finclude_primary\x18\x03 \x01(\bR\x0eincludePrimary\x12 \n" + + "\vconcurrency\x18\x04 \x01(\x05R\vconcurrency\"F\n" + + "\x1cReloadSchemaKeyspaceResponse\x12&\n" + + "\x06events\x18\x01 \x03(\v2\x0e.logutil.EventR\x06events\"\xbc\x01\n" + + "\x18ReloadSchemaShardRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x12#\n" + + "\rwait_position\x18\x03 \x01(\tR\fwaitPosition\x12'\n" + + "\x0finclude_primary\x18\x04 \x01(\bR\x0eincludePrimary\x12 \n" + + "\vconcurrency\x18\x05 \x01(\x05R\vconcurrency\"C\n" + + "\x19ReloadSchemaShardResponse\x12&\n" + + "\x06events\x18\x02 \x03(\v2\x0e.logutil.EventR\x06events\"[\n" + + "\x13RemoveBackupRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x12\x12\n" + + "\x04name\x18\x03 \x01(\tR\x04name\"\x16\n" + + "\x14RemoveBackupResponse\"\x7f\n" + + "\x19RemoveKeyspaceCellRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x12\n" + + "\x04cell\x18\x02 \x01(\tR\x04cell\x12\x14\n" + + "\x05force\x18\x03 \x01(\bR\x05force\x12\x1c\n" + + "\trecursive\x18\x04 \x01(\bR\trecursive\"\x1c\n" + + "\x1aRemoveKeyspaceCellResponse\"\x9b\x01\n" + + "\x16RemoveShardCellRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x1d\n" + + "\n" + + "shard_name\x18\x02 \x01(\tR\tshardName\x12\x12\n" + + "\x04cell\x18\x03 \x01(\tR\x04cell\x12\x14\n" + + "\x05force\x18\x04 \x01(\bR\x05force\x12\x1c\n" + + "\trecursive\x18\x05 \x01(\bR\trecursive\"\x19\n" + + "\x17RemoveShardCellResponse\"F\n" + + "\x15ReparentTabletRequest\x12-\n" + + "\x06tablet\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\x06tablet\"{\n" + + "\x16ReparentTabletResponse\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x12/\n" + + "\aprimary\x18\x03 \x01(\v2\x15.topodata.TabletAliasR\aprimary\"\xd6\x04\n" + + "\x14ReshardCreateRequest\x12\x1a\n" + + "\bworkflow\x18\x01 \x01(\tR\bworkflow\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12#\n" + + "\rsource_shards\x18\x03 \x03(\tR\fsourceShards\x12#\n" + + "\rtarget_shards\x18\x04 \x03(\tR\ftargetShards\x12\x14\n" + + "\x05cells\x18\x05 \x03(\tR\x05cells\x127\n" + + "\ftablet_types\x18\x06 \x03(\x0e2\x14.topodata.TabletTypeR\vtabletTypes\x12l\n" + + "\x1btablet_selection_preference\x18\a \x01(\x0e2,.tabletmanagerdata.TabletSelectionPreferenceR\x19tabletSelectionPreference\x12(\n" + + "\x10skip_schema_copy\x18\b \x01(\bR\x0eskipSchemaCopy\x12\x15\n" + + "\x06on_ddl\x18\t \x01(\tR\x05onDdl\x12&\n" + + "\x0fstop_after_copy\x18\n" + + " \x01(\bR\rstopAfterCopy\x120\n" + + "\x14defer_secondary_keys\x18\v \x01(\bR\x12deferSecondaryKeys\x12\x1d\n" + + "\n" + + "auto_start\x18\f \x01(\bR\tautoStart\x12E\n" + + "\x10workflow_options\x18\r \x01(\v2\x1a.vtctldata.WorkflowOptionsR\x0fworkflowOptions\"\xb8\x02\n" + + "\x18RestoreFromBackupRequest\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\x12-\n" + + "\vbackup_time\x18\x02 \x01(\v2\f.vttime.TimeR\n" + + "backupTime\x12$\n" + + "\x0erestore_to_pos\x18\x03 \x01(\tR\frestoreToPos\x12\x17\n" + + "\adry_run\x18\x04 \x01(\bR\x06dryRun\x12>\n" + + "\x14restore_to_timestamp\x18\x05 \x01(\v2\f.vttime.TimeR\x12restoreToTimestamp\x124\n" + + "\x16allowed_backup_engines\x18\x06 \x03(\tR\x14allowedBackupEngines\"\xad\x01\n" + + "\x19RestoreFromBackupResponse\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\x12\x1a\n" + + "\bkeyspace\x18\x02 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x03 \x01(\tR\x05shard\x12$\n" + + "\x05event\x18\x04 \x01(\v2\x0e.logutil.EventR\x05event\"{\n" + + "\x1bRetrySchemaMigrationRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x12\n" + + "\x04uuid\x18\x02 \x01(\tR\x04uuid\x12,\n" + + "\tcaller_id\x18\x03 \x01(\v2\x0f.vtrpc.CallerIDR\bcallerId\"\xdd\x01\n" + + "\x1cRetrySchemaMigrationResponse\x12u\n" + + "\x16rows_affected_by_shard\x18\x01 \x03(\v2@.vtctldata.RetrySchemaMigrationResponse.RowsAffectedByShardEntryR\x13rowsAffectedByShard\x1aF\n" + + "\x18RowsAffectedByShardEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\x04R\x05value:\x028\x01\"Q\n" + + "\x15RunHealthCheckRequest\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\"\x18\n" + + "\x16RunHealthCheckResponse\"m\n" + + "\"SetKeyspaceDurabilityPolicyRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12+\n" + + "\x11durability_policy\x18\x02 \x01(\tR\x10durabilityPolicy\"U\n" + + "#SetKeyspaceDurabilityPolicyResponse\x12.\n" + + "\bkeyspace\x18\x01 \x01(\v2\x12.topodata.KeyspaceR\bkeyspace\"^\n" + + "\x1eSetKeyspaceShardingInfoRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05force\x18\x04 \x01(\bR\x05forceJ\x04\b\x02\x10\x03J\x04\b\x03\x10\x04\"Q\n" + + "\x1fSetKeyspaceShardingInfoResponse\x12.\n" + + "\bkeyspace\x18\x01 \x01(\v2\x12.topodata.KeyspaceR\bkeyspace\"r\n" + + "\x1fSetShardIsPrimaryServingRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x12\x1d\n" + + "\n" + + "is_serving\x18\x03 \x01(\bR\tisServing\"I\n" + + " SetShardIsPrimaryServingResponse\x12%\n" + + "\x05shard\x18\x01 \x01(\v2\x0f.topodata.ShardR\x05shard\"\x8e\x02\n" + + "\x1cSetShardTabletControlRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x125\n" + + "\vtablet_type\x18\x03 \x01(\x0e2\x14.topodata.TabletTypeR\n" + + "tabletType\x12\x14\n" + + "\x05cells\x18\x04 \x03(\tR\x05cells\x12#\n" + + "\rdenied_tables\x18\x05 \x03(\tR\fdeniedTables\x122\n" + + "\x15disable_query_service\x18\x06 \x01(\bR\x13disableQueryService\x12\x16\n" + + "\x06remove\x18\a \x01(\bR\x06remove\"F\n" + + "\x1dSetShardTabletControlResponse\x12%\n" + + "\x05shard\x18\x01 \x01(\v2\x0f.topodata.ShardR\x05shard\"j\n" + + "\x12SetWritableRequest\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\x12\x1a\n" + + "\bwritable\x18\x02 \x01(\bR\bwritable\"\x15\n" + + "\x13SetWritableResponse\"\x88\x01\n" + + "\x1aShardReplicationAddRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x128\n" + + "\ftablet_alias\x18\x03 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\"\x1d\n" + + "\x1bShardReplicationAddResponse\"b\n" + + "\x1aShardReplicationFixRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x12\x12\n" + + "\x04cell\x18\x03 \x01(\tR\x04cell\"T\n" + + "\x1bShardReplicationFixResponse\x125\n" + + "\x05error\x18\x01 \x01(\v2\x1f.topodata.ShardReplicationErrorR\x05error\"T\n" + + " ShardReplicationPositionsRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\"\xaa\x03\n" + + "!ShardReplicationPositionsResponse\x12x\n" + + "\x14replication_statuses\x18\x01 \x03(\v2E.vtctldata.ShardReplicationPositionsResponse.ReplicationStatusesEntryR\x13replicationStatuses\x12Z\n" + + "\n" + + "tablet_map\x18\x02 \x03(\v2;.vtctldata.ShardReplicationPositionsResponse.TabletMapEntryR\ttabletMap\x1a_\n" + + "\x18ReplicationStatusesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12-\n" + + "\x05value\x18\x02 \x01(\v2\x17.replicationdata.StatusR\x05value:\x028\x01\x1aN\n" + + "\x0eTabletMapEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12&\n" + + "\x05value\x18\x02 \x01(\v2\x10.topodata.TabletR\x05value:\x028\x01\"\x8b\x01\n" + + "\x1dShardReplicationRemoveRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x128\n" + + "\ftablet_alias\x18\x03 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\" \n" + + "\x1eShardReplicationRemoveResponse\"|\n" + + "\x12SleepTabletRequest\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\x12,\n" + + "\bduration\x18\x02 \x01(\v2\x10.vttime.DurationR\bduration\"\x15\n" + + "\x13SleepTabletResponse\"\xf0\x01\n" + + "\x15SourceShardAddRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x12\x10\n" + + "\x03uid\x18\x03 \x01(\x05R\x03uid\x12'\n" + + "\x0fsource_keyspace\x18\x04 \x01(\tR\x0esourceKeyspace\x12!\n" + + "\fsource_shard\x18\x05 \x01(\tR\vsourceShard\x12/\n" + + "\tkey_range\x18\x06 \x01(\v2\x12.topodata.KeyRangeR\bkeyRange\x12\x16\n" + + "\x06tables\x18\a \x03(\tR\x06tables\"?\n" + + "\x16SourceShardAddResponse\x12%\n" + + "\x05shard\x18\x01 \x01(\v2\x0f.topodata.ShardR\x05shard\"^\n" + + "\x18SourceShardDeleteRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x12\x10\n" + + "\x03uid\x18\x03 \x01(\x05R\x03uid\"B\n" + + "\x19SourceShardDeleteResponse\x12%\n" + + "\x05shard\x18\x01 \x01(\v2\x0f.topodata.ShardR\x05shard\"S\n" + + "\x17StartReplicationRequest\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\"\x1a\n" + + "\x18StartReplicationResponse\"R\n" + + "\x16StopReplicationRequest\x128\n" + + "\ftablet_alias\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\"\x19\n" + + "\x17StopReplicationResponse\"R\n" + + "!TabletExternallyReparentedRequest\x12-\n" + + "\x06tablet\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\x06tablet\"\xc6\x01\n" + + "\"TabletExternallyReparentedResponse\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x126\n" + + "\vnew_primary\x18\x03 \x01(\v2\x15.topodata.TabletAliasR\n" + + "newPrimary\x126\n" + + "\vold_primary\x18\x04 \x01(\v2\x15.topodata.TabletAliasR\n" + + "oldPrimary\"\\\n" + + "\x15UpdateCellInfoRequest\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12/\n" + + "\tcell_info\x18\x02 \x01(\v2\x12.topodata.CellInfoR\bcellInfo\"]\n" + + "\x16UpdateCellInfoResponse\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12/\n" + + "\tcell_info\x18\x02 \x01(\v2\x12.topodata.CellInfoR\bcellInfo\"d\n" + + "\x17UpdateCellsAliasRequest\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x125\n" + + "\vcells_alias\x18\x02 \x01(\v2\x14.topodata.CellsAliasR\n" + + "cellsAlias\"e\n" + + "\x18UpdateCellsAliasResponse\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x125\n" + + "\vcells_alias\x18\x02 \x01(\v2\x14.topodata.CellsAliasR\n" + + "cellsAlias\"4\n" + + "\x0fValidateRequest\x12!\n" + + "\fping_tablets\x18\x01 \x01(\bR\vpingTablets\"\xfb\x01\n" + + "\x10ValidateResponse\x12\x18\n" + + "\aresults\x18\x01 \x03(\tR\aresults\x12b\n" + + "\x13results_by_keyspace\x18\x02 \x03(\v22.vtctldata.ValidateResponse.ResultsByKeyspaceEntryR\x11resultsByKeyspace\x1ai\n" + + "\x16ResultsByKeyspaceEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x129\n" + + "\x05value\x18\x02 \x01(\v2#.vtctldata.ValidateKeyspaceResponseR\x05value:\x028\x01\"X\n" + + "\x17ValidateKeyspaceRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12!\n" + + "\fping_tablets\x18\x02 \x01(\bR\vpingTablets\"\xfc\x01\n" + + "\x18ValidateKeyspaceResponse\x12\x18\n" + + "\aresults\x18\x01 \x03(\tR\aresults\x12a\n" + + "\x10results_by_shard\x18\x02 \x03(\v27.vtctldata.ValidateKeyspaceResponse.ResultsByShardEntryR\x0eresultsByShard\x1ac\n" + + "\x13ResultsByShardEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x126\n" + + "\x05value\x18\x02 \x01(\v2 .vtctldata.ValidateShardResponseR\x05value:\x028\x01\"X\n" + + "\"ValidatePermissionsKeyspaceRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x16\n" + + "\x06shards\x18\x02 \x03(\tR\x06shards\"%\n" + + "#ValidatePermissionsKeyspaceResponse\"\xf0\x01\n" + + "\x1dValidateSchemaKeyspaceRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12%\n" + + "\x0eexclude_tables\x18\x02 \x03(\tR\rexcludeTables\x12#\n" + + "\rinclude_views\x18\x03 \x01(\bR\fincludeViews\x12&\n" + + "\x0fskip_no_primary\x18\x04 \x01(\bR\rskipNoPrimary\x12'\n" + + "\x0finclude_vschema\x18\x05 \x01(\bR\x0eincludeVschema\x12\x16\n" + + "\x06shards\x18\x06 \x03(\tR\x06shards\"\x88\x02\n" + + "\x1eValidateSchemaKeyspaceResponse\x12\x18\n" + + "\aresults\x18\x01 \x03(\tR\aresults\x12g\n" + + "\x10results_by_shard\x18\x02 \x03(\v2=.vtctldata.ValidateSchemaKeyspaceResponse.ResultsByShardEntryR\x0eresultsByShard\x1ac\n" + + "\x13ResultsByShardEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x126\n" + + "\x05value\x18\x02 \x01(\v2 .vtctldata.ValidateShardResponseR\x05value:\x028\x01\"k\n" + + "\x14ValidateShardRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\x12!\n" + + "\fping_tablets\x18\x03 \x01(\bR\vpingTablets\"1\n" + + "\x15ValidateShardResponse\x12\x18\n" + + "\aresults\x18\x01 \x03(\tR\aresults\"<\n" + + "\x1eValidateVersionKeyspaceRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\"\x8a\x02\n" + + "\x1fValidateVersionKeyspaceResponse\x12\x18\n" + + "\aresults\x18\x01 \x03(\tR\aresults\x12h\n" + + "\x10results_by_shard\x18\x02 \x03(\v2>.vtctldata.ValidateVersionKeyspaceResponse.ResultsByShardEntryR\x0eresultsByShard\x1ac\n" + + "\x13ResultsByShardEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x126\n" + + "\x05value\x18\x02 \x01(\v2 .vtctldata.ValidateShardResponseR\x05value:\x028\x01\"O\n" + + "\x1bValidateVersionShardRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x14\n" + + "\x05shard\x18\x02 \x01(\tR\x05shard\"8\n" + + "\x1cValidateVersionShardResponse\x12\x18\n" + + "\aresults\x18\x01 \x03(\tR\aresults\"\x98\x01\n" + + "\x16ValidateVSchemaRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x16\n" + + "\x06shards\x18\x02 \x03(\tR\x06shards\x12%\n" + + "\x0eexclude_tables\x18\x03 \x03(\tR\rexcludeTables\x12#\n" + + "\rinclude_views\x18\x04 \x01(\bR\fincludeViews\"\xfa\x01\n" + + "\x17ValidateVSchemaResponse\x12\x18\n" + + "\aresults\x18\x01 \x03(\tR\aresults\x12`\n" + + "\x10results_by_shard\x18\x02 \x03(\v26.vtctldata.ValidateVSchemaResponse.ResultsByShardEntryR\x0eresultsByShard\x1ac\n" + + "\x13ResultsByShardEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x126\n" + + "\x05value\x18\x02 \x01(\v2 .vtctldata.ValidateShardResponseR\x05value:\x028\x01\"\xf9\a\n" + + "\x12VDiffCreateRequest\x12\x1a\n" + + "\bworkflow\x18\x01 \x01(\tR\bworkflow\x12'\n" + + "\x0ftarget_keyspace\x18\x02 \x01(\tR\x0etargetKeyspace\x12\x12\n" + + "\x04uuid\x18\x03 \x01(\tR\x04uuid\x12!\n" + + "\fsource_cells\x18\x04 \x03(\tR\vsourceCells\x12!\n" + + "\ftarget_cells\x18\x05 \x03(\tR\vtargetCells\x127\n" + + "\ftablet_types\x18\x06 \x03(\x0e2\x14.topodata.TabletTypeR\vtabletTypes\x12l\n" + + "\x1btablet_selection_preference\x18\a \x01(\x0e2,.tabletmanagerdata.TabletSelectionPreferenceR\x19tabletSelectionPreference\x12\x16\n" + + "\x06tables\x18\b \x03(\tR\x06tables\x12\x14\n" + + "\x05limit\x18\t \x01(\x03R\x05limit\x12U\n" + + "\x1efiltered_replication_wait_time\x18\n" + + " \x01(\v2\x10.vttime.DurationR\x1bfilteredReplicationWaitTime\x12\x1f\n" + + "\vdebug_query\x18\v \x01(\bR\n" + + "debugQuery\x12\x1a\n" + + "\tonly_p_ks\x18\f \x01(\bR\aonlyPKs\x12,\n" + + "\x12update_table_stats\x18\r \x01(\bR\x10updateTableStats\x128\n" + + "\x19max_extra_rows_to_compare\x18\x0e \x01(\x03R\x15maxExtraRowsToCompare\x12\x12\n" + + "\x04wait\x18\x0f \x01(\bR\x04wait\x12B\n" + + "\x14wait_update_interval\x18\x10 \x01(\v2\x10.vttime.DurationR\x12waitUpdateInterval\x12\x1d\n" + + "\n" + + "auto_retry\x18\x11 \x01(\bR\tautoRetry\x12\x18\n" + + "\averbose\x18\x12 \x01(\bR\averbose\x123\n" + + "\x16max_report_sample_rows\x18\x13 \x01(\x03R\x13maxReportSampleRows\x12<\n" + + "\x11max_diff_duration\x18\x14 \x01(\v2\x10.vttime.DurationR\x0fmaxDiffDuration\x12<\n" + + "\x1brow_diff_column_truncate_at\x18\x15 \x01(\x03R\x17rowDiffColumnTruncateAt\x12\"\n" + + "\n" + + "auto_start\x18\x16 \x01(\bH\x00R\tautoStart\x88\x01\x01B\r\n" + + "\v_auto_start\")\n" + + "\x13VDiffCreateResponse\x12\x12\n" + + "\x04UUID\x18\x01 \x01(\tR\x04UUID\"k\n" + + "\x12VDiffDeleteRequest\x12\x1a\n" + + "\bworkflow\x18\x01 \x01(\tR\bworkflow\x12'\n" + + "\x0ftarget_keyspace\x18\x02 \x01(\tR\x0etargetKeyspace\x12\x10\n" + + "\x03arg\x18\x03 \x01(\tR\x03arg\"\x15\n" + + "\x13VDiffDeleteResponse\"\x92\x01\n" + + "\x12VDiffResumeRequest\x12\x1a\n" + + "\bworkflow\x18\x01 \x01(\tR\bworkflow\x12'\n" + + "\x0ftarget_keyspace\x18\x02 \x01(\tR\x0etargetKeyspace\x12\x12\n" + + "\x04uuid\x18\x03 \x01(\tR\x04uuid\x12#\n" + + "\rtarget_shards\x18\x04 \x03(\tR\ftargetShards\"\x15\n" + + "\x13VDiffResumeResponse\"i\n" + + "\x10VDiffShowRequest\x12\x1a\n" + + "\bworkflow\x18\x01 \x01(\tR\bworkflow\x12'\n" + + "\x0ftarget_keyspace\x18\x02 \x01(\tR\x0etargetKeyspace\x12\x10\n" + + "\x03arg\x18\x03 \x01(\tR\x03arg\"\xd7\x01\n" + + "\x11VDiffShowResponse\x12\\\n" + + "\x10tablet_responses\x18\x01 \x03(\v21.vtctldata.VDiffShowResponse.TabletResponsesEntryR\x0ftabletResponses\x1ad\n" + + "\x14TabletResponsesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x126\n" + + "\x05value\x18\x02 \x01(\v2 .tabletmanagerdata.VDiffResponseR\x05value:\x028\x01\"\x90\x01\n" + + "\x10VDiffStopRequest\x12\x1a\n" + + "\bworkflow\x18\x01 \x01(\tR\bworkflow\x12'\n" + + "\x0ftarget_keyspace\x18\x02 \x01(\tR\x0etargetKeyspace\x12\x12\n" + + "\x04uuid\x18\x03 \x01(\tR\x04uuid\x12#\n" + + "\rtarget_shards\x18\x04 \x03(\tR\ftargetShards\"\x13\n" + + "\x11VDiffStopResponse\"\x94\x02\n" + + "\x15WorkflowDeleteRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x1a\n" + + "\bworkflow\x18\x02 \x01(\tR\bworkflow\x12\x1b\n" + + "\tkeep_data\x18\x03 \x01(\bR\bkeepData\x12,\n" + + "\x12keep_routing_rules\x18\x04 \x01(\bR\x10keepRoutingRules\x12\x16\n" + + "\x06shards\x18\x05 \x03(\tR\x06shards\x12*\n" + + "\x11delete_batch_size\x18\x06 \x01(\x03R\x0fdeleteBatchSize\x124\n" + + "\x16ignore_source_keyspace\x18\a \x01(\bR\x14ignoreSourceKeyspace\"\xd1\x01\n" + + "\x16WorkflowDeleteResponse\x12\x18\n" + + "\asummary\x18\x01 \x01(\tR\asummary\x12F\n" + + "\adetails\x18\x02 \x03(\v2,.vtctldata.WorkflowDeleteResponse.TabletInfoR\adetails\x1aU\n" + + "\n" + + "TabletInfo\x12-\n" + + "\x06tablet\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\x06tablet\x12\x18\n" + + "\adeleted\x18\x02 \x01(\bR\adeleted\"g\n" + + "\x15WorkflowStatusRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x1a\n" + + "\bworkflow\x18\x02 \x01(\tR\bworkflow\x12\x16\n" + + "\x06shards\x18\x03 \x03(\tR\x06shards\"\xe6\a\n" + + "\x16WorkflowStatusResponse\x12_\n" + + "\x10table_copy_state\x18\x01 \x03(\v25.vtctldata.WorkflowStatusResponse.TableCopyStateEntryR\x0etableCopyState\x12X\n" + + "\rshard_streams\x18\x02 \x03(\v23.vtctldata.WorkflowStatusResponse.ShardStreamsEntryR\fshardStreams\x12#\n" + + "\rtraffic_state\x18\x03 \x01(\tR\ftrafficState\x1a\xe8\x01\n" + + "\x0eTableCopyState\x12\x1f\n" + + "\vrows_copied\x18\x01 \x01(\x03R\n" + + "rowsCopied\x12\x1d\n" + + "\n" + + "rows_total\x18\x02 \x01(\x03R\trowsTotal\x12'\n" + + "\x0frows_percentage\x18\x03 \x01(\x02R\x0erowsPercentage\x12!\n" + + "\fbytes_copied\x18\x04 \x01(\x03R\vbytesCopied\x12\x1f\n" + + "\vbytes_total\x18\x05 \x01(\x03R\n" + + "bytesTotal\x12)\n" + + "\x10bytes_percentage\x18\x06 \x01(\x02R\x0fbytesPercentage\x1a\xbc\x01\n" + + "\x10ShardStreamState\x12\x0e\n" + + "\x02id\x18\x01 \x01(\x05R\x02id\x12-\n" + + "\x06tablet\x18\x02 \x01(\v2\x15.topodata.TabletAliasR\x06tablet\x12!\n" + + "\fsource_shard\x18\x03 \x01(\tR\vsourceShard\x12\x1a\n" + + "\bposition\x18\x04 \x01(\tR\bposition\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12\x12\n" + + "\x04info\x18\x06 \x01(\tR\x04info\x1a\\\n" + + "\fShardStreams\x12L\n" + + "\astreams\x18\x02 \x03(\v22.vtctldata.WorkflowStatusResponse.ShardStreamStateR\astreams\x1as\n" + + "\x13TableCopyStateEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12F\n" + + "\x05value\x18\x02 \x01(\v20.vtctldata.WorkflowStatusResponse.TableCopyStateR\x05value:\x028\x01\x1ao\n" + + "\x11ShardStreamsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12D\n" + + "\x05value\x18\x02 \x01(\v2..vtctldata.WorkflowStatusResponse.ShardStreamsR\x05value:\x028\x01\"\x85\x04\n" + + "\x1cWorkflowSwitchTrafficRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x1a\n" + + "\bworkflow\x18\x02 \x01(\tR\bworkflow\x12\x14\n" + + "\x05cells\x18\x03 \x03(\tR\x05cells\x127\n" + + "\ftablet_types\x18\x04 \x03(\x0e2\x14.topodata.TabletTypeR\vtabletTypes\x12O\n" + + "\x1bmax_replication_lag_allowed\x18\x05 \x01(\v2\x10.vttime.DurationR\x18maxReplicationLagAllowed\x12<\n" + + "\x1aenable_reverse_replication\x18\x06 \x01(\bR\x18enableReverseReplication\x12\x1c\n" + + "\tdirection\x18\a \x01(\x05R\tdirection\x12*\n" + + "\atimeout\x18\b \x01(\v2\x10.vttime.DurationR\atimeout\x12\x17\n" + + "\adry_run\x18\t \x01(\bR\x06dryRun\x12>\n" + + "\x1binitialize_target_sequences\x18\n" + + " \x01(\bR\x19initializeTargetSequences\x12\x16\n" + + "\x06shards\x18\v \x03(\tR\x06shards\x12\x14\n" + + "\x05force\x18\f \x01(\bR\x05force\"\xa7\x01\n" + + "\x1dWorkflowSwitchTrafficResponse\x12\x18\n" + + "\asummary\x18\x01 \x01(\tR\asummary\x12\x1f\n" + + "\vstart_state\x18\x02 \x01(\tR\n" + + "startState\x12#\n" + + "\rcurrent_state\x18\x03 \x01(\tR\fcurrentState\x12&\n" + + "\x0fdry_run_results\x18\x04 \x03(\tR\rdryRunResults\"\x90\x01\n" + + "\x15WorkflowUpdateRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12[\n" + + "\x0etablet_request\x18\x02 \x01(\v24.tabletmanagerdata.UpdateVReplicationWorkflowRequestR\rtabletRequest\"\xd1\x01\n" + + "\x16WorkflowUpdateResponse\x12\x18\n" + + "\asummary\x18\x01 \x01(\tR\asummary\x12F\n" + + "\adetails\x18\x02 \x03(\v2,.vtctldata.WorkflowUpdateResponse.TabletInfoR\adetails\x1aU\n" + + "\n" + + "TabletInfo\x12-\n" + + "\x06tablet\x18\x01 \x01(\v2\x15.topodata.TabletAliasR\x06tablet\x12\x18\n" + + "\achanged\x18\x02 \x01(\bR\achanged\"\x17\n" + + "\x15GetMirrorRulesRequest\"Q\n" + + "\x16GetMirrorRulesResponse\x127\n" + + "\fmirror_rules\x18\x01 \x01(\v2\x14.vschema.MirrorRulesR\vmirrorRules\"\xa9\x01\n" + + "\x1cWorkflowMirrorTrafficRequest\x12\x1a\n" + + "\bkeyspace\x18\x01 \x01(\tR\bkeyspace\x12\x1a\n" + + "\bworkflow\x18\x02 \x01(\tR\bworkflow\x127\n" + + "\ftablet_types\x18\x03 \x03(\x0e2\x14.topodata.TabletTypeR\vtabletTypes\x12\x18\n" + + "\apercent\x18\x04 \x01(\x02R\apercent\"\x7f\n" + + "\x1dWorkflowMirrorTrafficResponse\x12\x18\n" + + "\asummary\x18\x01 \x01(\tR\asummary\x12\x1f\n" + + "\vstart_state\x18\x02 \x01(\tR\n" + + "startState\x12#\n" + + "\rcurrent_state\x18\x03 \x01(\tR\fcurrentState*Y\n" + + "\x15MaterializationIntent\x12\n" + + "\n" + + "\x06CUSTOM\x10\x00\x12\x0e\n" + + "\n" + + "MOVETABLES\x10\x01\x12\x15\n" + + "\x11CREATELOOKUPINDEX\x10\x02\x12\r\n" + + "\tREFERENCE\x10\x03*8\n" + + "\rQueryOrdering\x12\b\n" + + "\x04NONE\x10\x00\x12\r\n" + + "\tASCENDING\x10\x01\x12\x0e\n" + + "\n" + + "DESCENDING\x10\x02*B\n" + + "\x1cShardedAutoIncrementHandling\x12\t\n" + + "\x05LEAVE\x10\x00\x12\n" + + "\n" + + "\x06REMOVE\x10\x01\x12\v\n" + + "\aREPLACE\x10\x02B(Z&vitess.io/vitess/go/vt/proto/vtctldatab\x06proto3" var ( file_vtctldata_proto_rawDescOnce sync.Once @@ -19814,7 +18523,7 @@ func file_vtctldata_proto_rawDescGZIP() []byte { } var file_vtctldata_proto_enumTypes = make([]protoimpl.EnumInfo, 5) -var file_vtctldata_proto_msgTypes = make([]protoimpl.MessageInfo, 309) +var file_vtctldata_proto_msgTypes = make([]protoimpl.MessageInfo, 311) var file_vtctldata_proto_goTypes = []any{ (MaterializationIntent)(0), // 0: vtctldata.MaterializationIntent (QueryOrdering)(0), // 1: vtctldata.QueryOrdering @@ -19967,467 +18676,471 @@ var file_vtctldata_proto_goTypes = []any{ (*LookupVindexInternalizeResponse)(nil), // 148: vtctldata.LookupVindexInternalizeResponse (*MaterializeCreateRequest)(nil), // 149: vtctldata.MaterializeCreateRequest (*MaterializeCreateResponse)(nil), // 150: vtctldata.MaterializeCreateResponse - (*MigrateCreateRequest)(nil), // 151: vtctldata.MigrateCreateRequest - (*MigrateCompleteRequest)(nil), // 152: vtctldata.MigrateCompleteRequest - (*MigrateCompleteResponse)(nil), // 153: vtctldata.MigrateCompleteResponse - (*MountRegisterRequest)(nil), // 154: vtctldata.MountRegisterRequest - (*MountRegisterResponse)(nil), // 155: vtctldata.MountRegisterResponse - (*MountUnregisterRequest)(nil), // 156: vtctldata.MountUnregisterRequest - (*MountUnregisterResponse)(nil), // 157: vtctldata.MountUnregisterResponse - (*MountShowRequest)(nil), // 158: vtctldata.MountShowRequest - (*MountShowResponse)(nil), // 159: vtctldata.MountShowResponse - (*MountListRequest)(nil), // 160: vtctldata.MountListRequest - (*MountListResponse)(nil), // 161: vtctldata.MountListResponse - (*MoveTablesCreateRequest)(nil), // 162: vtctldata.MoveTablesCreateRequest - (*MoveTablesCreateResponse)(nil), // 163: vtctldata.MoveTablesCreateResponse - (*MoveTablesCompleteRequest)(nil), // 164: vtctldata.MoveTablesCompleteRequest - (*MoveTablesCompleteResponse)(nil), // 165: vtctldata.MoveTablesCompleteResponse - (*PingTabletRequest)(nil), // 166: vtctldata.PingTabletRequest - (*PingTabletResponse)(nil), // 167: vtctldata.PingTabletResponse - (*PlannedReparentShardRequest)(nil), // 168: vtctldata.PlannedReparentShardRequest - (*PlannedReparentShardResponse)(nil), // 169: vtctldata.PlannedReparentShardResponse - (*RebuildKeyspaceGraphRequest)(nil), // 170: vtctldata.RebuildKeyspaceGraphRequest - (*RebuildKeyspaceGraphResponse)(nil), // 171: vtctldata.RebuildKeyspaceGraphResponse - (*RebuildVSchemaGraphRequest)(nil), // 172: vtctldata.RebuildVSchemaGraphRequest - (*RebuildVSchemaGraphResponse)(nil), // 173: vtctldata.RebuildVSchemaGraphResponse - (*RefreshStateRequest)(nil), // 174: vtctldata.RefreshStateRequest - (*RefreshStateResponse)(nil), // 175: vtctldata.RefreshStateResponse - (*RefreshStateByShardRequest)(nil), // 176: vtctldata.RefreshStateByShardRequest - (*RefreshStateByShardResponse)(nil), // 177: vtctldata.RefreshStateByShardResponse - (*ReloadSchemaRequest)(nil), // 178: vtctldata.ReloadSchemaRequest - (*ReloadSchemaResponse)(nil), // 179: vtctldata.ReloadSchemaResponse - (*ReloadSchemaKeyspaceRequest)(nil), // 180: vtctldata.ReloadSchemaKeyspaceRequest - (*ReloadSchemaKeyspaceResponse)(nil), // 181: vtctldata.ReloadSchemaKeyspaceResponse - (*ReloadSchemaShardRequest)(nil), // 182: vtctldata.ReloadSchemaShardRequest - (*ReloadSchemaShardResponse)(nil), // 183: vtctldata.ReloadSchemaShardResponse - (*RemoveBackupRequest)(nil), // 184: vtctldata.RemoveBackupRequest - (*RemoveBackupResponse)(nil), // 185: vtctldata.RemoveBackupResponse - (*RemoveKeyspaceCellRequest)(nil), // 186: vtctldata.RemoveKeyspaceCellRequest - (*RemoveKeyspaceCellResponse)(nil), // 187: vtctldata.RemoveKeyspaceCellResponse - (*RemoveShardCellRequest)(nil), // 188: vtctldata.RemoveShardCellRequest - (*RemoveShardCellResponse)(nil), // 189: vtctldata.RemoveShardCellResponse - (*ReparentTabletRequest)(nil), // 190: vtctldata.ReparentTabletRequest - (*ReparentTabletResponse)(nil), // 191: vtctldata.ReparentTabletResponse - (*ReshardCreateRequest)(nil), // 192: vtctldata.ReshardCreateRequest - (*RestoreFromBackupRequest)(nil), // 193: vtctldata.RestoreFromBackupRequest - (*RestoreFromBackupResponse)(nil), // 194: vtctldata.RestoreFromBackupResponse - (*RetrySchemaMigrationRequest)(nil), // 195: vtctldata.RetrySchemaMigrationRequest - (*RetrySchemaMigrationResponse)(nil), // 196: vtctldata.RetrySchemaMigrationResponse - (*RunHealthCheckRequest)(nil), // 197: vtctldata.RunHealthCheckRequest - (*RunHealthCheckResponse)(nil), // 198: vtctldata.RunHealthCheckResponse - (*SetKeyspaceDurabilityPolicyRequest)(nil), // 199: vtctldata.SetKeyspaceDurabilityPolicyRequest - (*SetKeyspaceDurabilityPolicyResponse)(nil), // 200: vtctldata.SetKeyspaceDurabilityPolicyResponse - (*SetKeyspaceShardingInfoRequest)(nil), // 201: vtctldata.SetKeyspaceShardingInfoRequest - (*SetKeyspaceShardingInfoResponse)(nil), // 202: vtctldata.SetKeyspaceShardingInfoResponse - (*SetShardIsPrimaryServingRequest)(nil), // 203: vtctldata.SetShardIsPrimaryServingRequest - (*SetShardIsPrimaryServingResponse)(nil), // 204: vtctldata.SetShardIsPrimaryServingResponse - (*SetShardTabletControlRequest)(nil), // 205: vtctldata.SetShardTabletControlRequest - (*SetShardTabletControlResponse)(nil), // 206: vtctldata.SetShardTabletControlResponse - (*SetWritableRequest)(nil), // 207: vtctldata.SetWritableRequest - (*SetWritableResponse)(nil), // 208: vtctldata.SetWritableResponse - (*ShardReplicationAddRequest)(nil), // 209: vtctldata.ShardReplicationAddRequest - (*ShardReplicationAddResponse)(nil), // 210: vtctldata.ShardReplicationAddResponse - (*ShardReplicationFixRequest)(nil), // 211: vtctldata.ShardReplicationFixRequest - (*ShardReplicationFixResponse)(nil), // 212: vtctldata.ShardReplicationFixResponse - (*ShardReplicationPositionsRequest)(nil), // 213: vtctldata.ShardReplicationPositionsRequest - (*ShardReplicationPositionsResponse)(nil), // 214: vtctldata.ShardReplicationPositionsResponse - (*ShardReplicationRemoveRequest)(nil), // 215: vtctldata.ShardReplicationRemoveRequest - (*ShardReplicationRemoveResponse)(nil), // 216: vtctldata.ShardReplicationRemoveResponse - (*SleepTabletRequest)(nil), // 217: vtctldata.SleepTabletRequest - (*SleepTabletResponse)(nil), // 218: vtctldata.SleepTabletResponse - (*SourceShardAddRequest)(nil), // 219: vtctldata.SourceShardAddRequest - (*SourceShardAddResponse)(nil), // 220: vtctldata.SourceShardAddResponse - (*SourceShardDeleteRequest)(nil), // 221: vtctldata.SourceShardDeleteRequest - (*SourceShardDeleteResponse)(nil), // 222: vtctldata.SourceShardDeleteResponse - (*StartReplicationRequest)(nil), // 223: vtctldata.StartReplicationRequest - (*StartReplicationResponse)(nil), // 224: vtctldata.StartReplicationResponse - (*StopReplicationRequest)(nil), // 225: vtctldata.StopReplicationRequest - (*StopReplicationResponse)(nil), // 226: vtctldata.StopReplicationResponse - (*TabletExternallyReparentedRequest)(nil), // 227: vtctldata.TabletExternallyReparentedRequest - (*TabletExternallyReparentedResponse)(nil), // 228: vtctldata.TabletExternallyReparentedResponse - (*UpdateCellInfoRequest)(nil), // 229: vtctldata.UpdateCellInfoRequest - (*UpdateCellInfoResponse)(nil), // 230: vtctldata.UpdateCellInfoResponse - (*UpdateCellsAliasRequest)(nil), // 231: vtctldata.UpdateCellsAliasRequest - (*UpdateCellsAliasResponse)(nil), // 232: vtctldata.UpdateCellsAliasResponse - (*ValidateRequest)(nil), // 233: vtctldata.ValidateRequest - (*ValidateResponse)(nil), // 234: vtctldata.ValidateResponse - (*ValidateKeyspaceRequest)(nil), // 235: vtctldata.ValidateKeyspaceRequest - (*ValidateKeyspaceResponse)(nil), // 236: vtctldata.ValidateKeyspaceResponse - (*ValidatePermissionsKeyspaceRequest)(nil), // 237: vtctldata.ValidatePermissionsKeyspaceRequest - (*ValidatePermissionsKeyspaceResponse)(nil), // 238: vtctldata.ValidatePermissionsKeyspaceResponse - (*ValidateSchemaKeyspaceRequest)(nil), // 239: vtctldata.ValidateSchemaKeyspaceRequest - (*ValidateSchemaKeyspaceResponse)(nil), // 240: vtctldata.ValidateSchemaKeyspaceResponse - (*ValidateShardRequest)(nil), // 241: vtctldata.ValidateShardRequest - (*ValidateShardResponse)(nil), // 242: vtctldata.ValidateShardResponse - (*ValidateVersionKeyspaceRequest)(nil), // 243: vtctldata.ValidateVersionKeyspaceRequest - (*ValidateVersionKeyspaceResponse)(nil), // 244: vtctldata.ValidateVersionKeyspaceResponse - (*ValidateVersionShardRequest)(nil), // 245: vtctldata.ValidateVersionShardRequest - (*ValidateVersionShardResponse)(nil), // 246: vtctldata.ValidateVersionShardResponse - (*ValidateVSchemaRequest)(nil), // 247: vtctldata.ValidateVSchemaRequest - (*ValidateVSchemaResponse)(nil), // 248: vtctldata.ValidateVSchemaResponse - (*VDiffCreateRequest)(nil), // 249: vtctldata.VDiffCreateRequest - (*VDiffCreateResponse)(nil), // 250: vtctldata.VDiffCreateResponse - (*VDiffDeleteRequest)(nil), // 251: vtctldata.VDiffDeleteRequest - (*VDiffDeleteResponse)(nil), // 252: vtctldata.VDiffDeleteResponse - (*VDiffResumeRequest)(nil), // 253: vtctldata.VDiffResumeRequest - (*VDiffResumeResponse)(nil), // 254: vtctldata.VDiffResumeResponse - (*VDiffShowRequest)(nil), // 255: vtctldata.VDiffShowRequest - (*VDiffShowResponse)(nil), // 256: vtctldata.VDiffShowResponse - (*VDiffStopRequest)(nil), // 257: vtctldata.VDiffStopRequest - (*VDiffStopResponse)(nil), // 258: vtctldata.VDiffStopResponse - (*WorkflowDeleteRequest)(nil), // 259: vtctldata.WorkflowDeleteRequest - (*WorkflowDeleteResponse)(nil), // 260: vtctldata.WorkflowDeleteResponse - (*WorkflowStatusRequest)(nil), // 261: vtctldata.WorkflowStatusRequest - (*WorkflowStatusResponse)(nil), // 262: vtctldata.WorkflowStatusResponse - (*WorkflowSwitchTrafficRequest)(nil), // 263: vtctldata.WorkflowSwitchTrafficRequest - (*WorkflowSwitchTrafficResponse)(nil), // 264: vtctldata.WorkflowSwitchTrafficResponse - (*WorkflowUpdateRequest)(nil), // 265: vtctldata.WorkflowUpdateRequest - (*WorkflowUpdateResponse)(nil), // 266: vtctldata.WorkflowUpdateResponse - (*GetMirrorRulesRequest)(nil), // 267: vtctldata.GetMirrorRulesRequest - (*GetMirrorRulesResponse)(nil), // 268: vtctldata.GetMirrorRulesResponse - (*WorkflowMirrorTrafficRequest)(nil), // 269: vtctldata.WorkflowMirrorTrafficRequest - (*WorkflowMirrorTrafficResponse)(nil), // 270: vtctldata.WorkflowMirrorTrafficResponse - nil, // 271: vtctldata.WorkflowOptions.ConfigEntry - nil, // 272: vtctldata.Workflow.ShardStreamsEntry - (*Workflow_ReplicationLocation)(nil), // 273: vtctldata.Workflow.ReplicationLocation - (*Workflow_ShardStream)(nil), // 274: vtctldata.Workflow.ShardStream - (*Workflow_Stream)(nil), // 275: vtctldata.Workflow.Stream - (*Workflow_Stream_CopyState)(nil), // 276: vtctldata.Workflow.Stream.CopyState - (*Workflow_Stream_Log)(nil), // 277: vtctldata.Workflow.Stream.Log - (*Workflow_Stream_ThrottlerStatus)(nil), // 278: vtctldata.Workflow.Stream.ThrottlerStatus - nil, // 279: vtctldata.ApplySchemaResponse.RowsAffectedByShardEntry - nil, // 280: vtctldata.ApplyVSchemaResponse.UnknownVindexParamsEntry - (*ApplyVSchemaResponse_ParamList)(nil), // 281: vtctldata.ApplyVSchemaResponse.ParamList - nil, // 282: vtctldata.CancelSchemaMigrationResponse.RowsAffectedByShardEntry - nil, // 283: vtctldata.ChangeTabletTagsRequest.TagsEntry - nil, // 284: vtctldata.ChangeTabletTagsResponse.BeforeTagsEntry - nil, // 285: vtctldata.ChangeTabletTagsResponse.AfterTagsEntry - nil, // 286: vtctldata.CleanupSchemaMigrationResponse.RowsAffectedByShardEntry - nil, // 287: vtctldata.CompleteSchemaMigrationResponse.RowsAffectedByShardEntry - nil, // 288: vtctldata.FindAllShardsInKeyspaceResponse.ShardsEntry - nil, // 289: vtctldata.ForceCutOverSchemaMigrationResponse.RowsAffectedByShardEntry - nil, // 290: vtctldata.GetCellsAliasesResponse.AliasesEntry - nil, // 291: vtctldata.GetShardReplicationResponse.ShardReplicationByCellEntry - nil, // 292: vtctldata.GetSrvKeyspaceNamesResponse.NamesEntry - (*GetSrvKeyspaceNamesResponse_NameList)(nil), // 293: vtctldata.GetSrvKeyspaceNamesResponse.NameList - nil, // 294: vtctldata.GetSrvKeyspacesResponse.SrvKeyspacesEntry - nil, // 295: vtctldata.GetSrvVSchemasResponse.SrvVSchemasEntry - nil, // 296: vtctldata.LaunchSchemaMigrationResponse.RowsAffectedByShardEntry - (*MoveTablesCreateResponse_TabletInfo)(nil), // 297: vtctldata.MoveTablesCreateResponse.TabletInfo - nil, // 298: vtctldata.RetrySchemaMigrationResponse.RowsAffectedByShardEntry - nil, // 299: vtctldata.ShardReplicationPositionsResponse.ReplicationStatusesEntry - nil, // 300: vtctldata.ShardReplicationPositionsResponse.TabletMapEntry - nil, // 301: vtctldata.ValidateResponse.ResultsByKeyspaceEntry - nil, // 302: vtctldata.ValidateKeyspaceResponse.ResultsByShardEntry - nil, // 303: vtctldata.ValidateSchemaKeyspaceResponse.ResultsByShardEntry - nil, // 304: vtctldata.ValidateVersionKeyspaceResponse.ResultsByShardEntry - nil, // 305: vtctldata.ValidateVSchemaResponse.ResultsByShardEntry - nil, // 306: vtctldata.VDiffShowResponse.TabletResponsesEntry - (*WorkflowDeleteResponse_TabletInfo)(nil), // 307: vtctldata.WorkflowDeleteResponse.TabletInfo - (*WorkflowStatusResponse_TableCopyState)(nil), // 308: vtctldata.WorkflowStatusResponse.TableCopyState - (*WorkflowStatusResponse_ShardStreamState)(nil), // 309: vtctldata.WorkflowStatusResponse.ShardStreamState - (*WorkflowStatusResponse_ShardStreams)(nil), // 310: vtctldata.WorkflowStatusResponse.ShardStreams - nil, // 311: vtctldata.WorkflowStatusResponse.TableCopyStateEntry - nil, // 312: vtctldata.WorkflowStatusResponse.ShardStreamsEntry - (*WorkflowUpdateResponse_TabletInfo)(nil), // 313: vtctldata.WorkflowUpdateResponse.TabletInfo - (*logutil.Event)(nil), // 314: logutil.Event - (tabletmanagerdata.TabletSelectionPreference)(0), // 315: tabletmanagerdata.TabletSelectionPreference - (*topodata.Keyspace)(nil), // 316: topodata.Keyspace - (*vttime.Time)(nil), // 317: vttime.Time - (*topodata.TabletAlias)(nil), // 318: topodata.TabletAlias - (*vttime.Duration)(nil), // 319: vttime.Duration - (*topodata.Shard)(nil), // 320: topodata.Shard - (*topodata.CellInfo)(nil), // 321: topodata.CellInfo - (*vschema.KeyspaceRoutingRules)(nil), // 322: vschema.KeyspaceRoutingRules - (*vschema.RoutingRules)(nil), // 323: vschema.RoutingRules - (*vschema.ShardRoutingRules)(nil), // 324: vschema.ShardRoutingRules - (*vtrpc.CallerID)(nil), // 325: vtrpc.CallerID - (*vschema.Keyspace)(nil), // 326: vschema.Keyspace - (topodata.TabletType)(0), // 327: topodata.TabletType - (*topodata.Tablet)(nil), // 328: topodata.Tablet - (*tabletmanagerdata.CheckThrottlerResponse)(nil), // 329: tabletmanagerdata.CheckThrottlerResponse - (topodata.KeyspaceType)(0), // 330: topodata.KeyspaceType - (*query.QueryResult)(nil), // 331: query.QueryResult - (*tabletmanagerdata.ExecuteHookRequest)(nil), // 332: tabletmanagerdata.ExecuteHookRequest - (*tabletmanagerdata.ExecuteHookResponse)(nil), // 333: tabletmanagerdata.ExecuteHookResponse - (*mysqlctl.BackupInfo)(nil), // 334: mysqlctl.BackupInfo - (*replicationdata.FullStatus)(nil), // 335: replicationdata.FullStatus - (*tabletmanagerdata.Permissions)(nil), // 336: tabletmanagerdata.Permissions - (*tabletmanagerdata.SchemaDefinition)(nil), // 337: tabletmanagerdata.SchemaDefinition - (*topodata.ThrottledAppRule)(nil), // 338: topodata.ThrottledAppRule - (*vschema.SrvVSchema)(nil), // 339: vschema.SrvVSchema - (*tabletmanagerdata.GetThrottlerStatusResponse)(nil), // 340: tabletmanagerdata.GetThrottlerStatusResponse - (*query.TransactionMetadata)(nil), // 341: query.TransactionMetadata - (*query.Target)(nil), // 342: query.Target - (*topodata.ShardReplicationError)(nil), // 343: topodata.ShardReplicationError - (*topodata.KeyRange)(nil), // 344: topodata.KeyRange - (*topodata.CellsAlias)(nil), // 345: topodata.CellsAlias - (*tabletmanagerdata.UpdateVReplicationWorkflowRequest)(nil), // 346: tabletmanagerdata.UpdateVReplicationWorkflowRequest - (*vschema.MirrorRules)(nil), // 347: vschema.MirrorRules - (*topodata.Shard_TabletControl)(nil), // 348: topodata.Shard.TabletControl - (*binlogdata.BinlogSource)(nil), // 349: binlogdata.BinlogSource - (*topodata.ShardReplication)(nil), // 350: topodata.ShardReplication - (*topodata.SrvKeyspace)(nil), // 351: topodata.SrvKeyspace - (*replicationdata.Status)(nil), // 352: replicationdata.Status - (*tabletmanagerdata.VDiffResponse)(nil), // 353: tabletmanagerdata.VDiffResponse + (*WorkflowAddTablesRequest)(nil), // 151: vtctldata.WorkflowAddTablesRequest + (*WorkflowAddTablesResponse)(nil), // 152: vtctldata.WorkflowAddTablesResponse + (*MigrateCreateRequest)(nil), // 153: vtctldata.MigrateCreateRequest + (*MigrateCompleteRequest)(nil), // 154: vtctldata.MigrateCompleteRequest + (*MigrateCompleteResponse)(nil), // 155: vtctldata.MigrateCompleteResponse + (*MountRegisterRequest)(nil), // 156: vtctldata.MountRegisterRequest + (*MountRegisterResponse)(nil), // 157: vtctldata.MountRegisterResponse + (*MountUnregisterRequest)(nil), // 158: vtctldata.MountUnregisterRequest + (*MountUnregisterResponse)(nil), // 159: vtctldata.MountUnregisterResponse + (*MountShowRequest)(nil), // 160: vtctldata.MountShowRequest + (*MountShowResponse)(nil), // 161: vtctldata.MountShowResponse + (*MountListRequest)(nil), // 162: vtctldata.MountListRequest + (*MountListResponse)(nil), // 163: vtctldata.MountListResponse + (*MoveTablesCreateRequest)(nil), // 164: vtctldata.MoveTablesCreateRequest + (*MoveTablesCreateResponse)(nil), // 165: vtctldata.MoveTablesCreateResponse + (*MoveTablesCompleteRequest)(nil), // 166: vtctldata.MoveTablesCompleteRequest + (*MoveTablesCompleteResponse)(nil), // 167: vtctldata.MoveTablesCompleteResponse + (*PingTabletRequest)(nil), // 168: vtctldata.PingTabletRequest + (*PingTabletResponse)(nil), // 169: vtctldata.PingTabletResponse + (*PlannedReparentShardRequest)(nil), // 170: vtctldata.PlannedReparentShardRequest + (*PlannedReparentShardResponse)(nil), // 171: vtctldata.PlannedReparentShardResponse + (*RebuildKeyspaceGraphRequest)(nil), // 172: vtctldata.RebuildKeyspaceGraphRequest + (*RebuildKeyspaceGraphResponse)(nil), // 173: vtctldata.RebuildKeyspaceGraphResponse + (*RebuildVSchemaGraphRequest)(nil), // 174: vtctldata.RebuildVSchemaGraphRequest + (*RebuildVSchemaGraphResponse)(nil), // 175: vtctldata.RebuildVSchemaGraphResponse + (*RefreshStateRequest)(nil), // 176: vtctldata.RefreshStateRequest + (*RefreshStateResponse)(nil), // 177: vtctldata.RefreshStateResponse + (*RefreshStateByShardRequest)(nil), // 178: vtctldata.RefreshStateByShardRequest + (*RefreshStateByShardResponse)(nil), // 179: vtctldata.RefreshStateByShardResponse + (*ReloadSchemaRequest)(nil), // 180: vtctldata.ReloadSchemaRequest + (*ReloadSchemaResponse)(nil), // 181: vtctldata.ReloadSchemaResponse + (*ReloadSchemaKeyspaceRequest)(nil), // 182: vtctldata.ReloadSchemaKeyspaceRequest + (*ReloadSchemaKeyspaceResponse)(nil), // 183: vtctldata.ReloadSchemaKeyspaceResponse + (*ReloadSchemaShardRequest)(nil), // 184: vtctldata.ReloadSchemaShardRequest + (*ReloadSchemaShardResponse)(nil), // 185: vtctldata.ReloadSchemaShardResponse + (*RemoveBackupRequest)(nil), // 186: vtctldata.RemoveBackupRequest + (*RemoveBackupResponse)(nil), // 187: vtctldata.RemoveBackupResponse + (*RemoveKeyspaceCellRequest)(nil), // 188: vtctldata.RemoveKeyspaceCellRequest + (*RemoveKeyspaceCellResponse)(nil), // 189: vtctldata.RemoveKeyspaceCellResponse + (*RemoveShardCellRequest)(nil), // 190: vtctldata.RemoveShardCellRequest + (*RemoveShardCellResponse)(nil), // 191: vtctldata.RemoveShardCellResponse + (*ReparentTabletRequest)(nil), // 192: vtctldata.ReparentTabletRequest + (*ReparentTabletResponse)(nil), // 193: vtctldata.ReparentTabletResponse + (*ReshardCreateRequest)(nil), // 194: vtctldata.ReshardCreateRequest + (*RestoreFromBackupRequest)(nil), // 195: vtctldata.RestoreFromBackupRequest + (*RestoreFromBackupResponse)(nil), // 196: vtctldata.RestoreFromBackupResponse + (*RetrySchemaMigrationRequest)(nil), // 197: vtctldata.RetrySchemaMigrationRequest + (*RetrySchemaMigrationResponse)(nil), // 198: vtctldata.RetrySchemaMigrationResponse + (*RunHealthCheckRequest)(nil), // 199: vtctldata.RunHealthCheckRequest + (*RunHealthCheckResponse)(nil), // 200: vtctldata.RunHealthCheckResponse + (*SetKeyspaceDurabilityPolicyRequest)(nil), // 201: vtctldata.SetKeyspaceDurabilityPolicyRequest + (*SetKeyspaceDurabilityPolicyResponse)(nil), // 202: vtctldata.SetKeyspaceDurabilityPolicyResponse + (*SetKeyspaceShardingInfoRequest)(nil), // 203: vtctldata.SetKeyspaceShardingInfoRequest + (*SetKeyspaceShardingInfoResponse)(nil), // 204: vtctldata.SetKeyspaceShardingInfoResponse + (*SetShardIsPrimaryServingRequest)(nil), // 205: vtctldata.SetShardIsPrimaryServingRequest + (*SetShardIsPrimaryServingResponse)(nil), // 206: vtctldata.SetShardIsPrimaryServingResponse + (*SetShardTabletControlRequest)(nil), // 207: vtctldata.SetShardTabletControlRequest + (*SetShardTabletControlResponse)(nil), // 208: vtctldata.SetShardTabletControlResponse + (*SetWritableRequest)(nil), // 209: vtctldata.SetWritableRequest + (*SetWritableResponse)(nil), // 210: vtctldata.SetWritableResponse + (*ShardReplicationAddRequest)(nil), // 211: vtctldata.ShardReplicationAddRequest + (*ShardReplicationAddResponse)(nil), // 212: vtctldata.ShardReplicationAddResponse + (*ShardReplicationFixRequest)(nil), // 213: vtctldata.ShardReplicationFixRequest + (*ShardReplicationFixResponse)(nil), // 214: vtctldata.ShardReplicationFixResponse + (*ShardReplicationPositionsRequest)(nil), // 215: vtctldata.ShardReplicationPositionsRequest + (*ShardReplicationPositionsResponse)(nil), // 216: vtctldata.ShardReplicationPositionsResponse + (*ShardReplicationRemoveRequest)(nil), // 217: vtctldata.ShardReplicationRemoveRequest + (*ShardReplicationRemoveResponse)(nil), // 218: vtctldata.ShardReplicationRemoveResponse + (*SleepTabletRequest)(nil), // 219: vtctldata.SleepTabletRequest + (*SleepTabletResponse)(nil), // 220: vtctldata.SleepTabletResponse + (*SourceShardAddRequest)(nil), // 221: vtctldata.SourceShardAddRequest + (*SourceShardAddResponse)(nil), // 222: vtctldata.SourceShardAddResponse + (*SourceShardDeleteRequest)(nil), // 223: vtctldata.SourceShardDeleteRequest + (*SourceShardDeleteResponse)(nil), // 224: vtctldata.SourceShardDeleteResponse + (*StartReplicationRequest)(nil), // 225: vtctldata.StartReplicationRequest + (*StartReplicationResponse)(nil), // 226: vtctldata.StartReplicationResponse + (*StopReplicationRequest)(nil), // 227: vtctldata.StopReplicationRequest + (*StopReplicationResponse)(nil), // 228: vtctldata.StopReplicationResponse + (*TabletExternallyReparentedRequest)(nil), // 229: vtctldata.TabletExternallyReparentedRequest + (*TabletExternallyReparentedResponse)(nil), // 230: vtctldata.TabletExternallyReparentedResponse + (*UpdateCellInfoRequest)(nil), // 231: vtctldata.UpdateCellInfoRequest + (*UpdateCellInfoResponse)(nil), // 232: vtctldata.UpdateCellInfoResponse + (*UpdateCellsAliasRequest)(nil), // 233: vtctldata.UpdateCellsAliasRequest + (*UpdateCellsAliasResponse)(nil), // 234: vtctldata.UpdateCellsAliasResponse + (*ValidateRequest)(nil), // 235: vtctldata.ValidateRequest + (*ValidateResponse)(nil), // 236: vtctldata.ValidateResponse + (*ValidateKeyspaceRequest)(nil), // 237: vtctldata.ValidateKeyspaceRequest + (*ValidateKeyspaceResponse)(nil), // 238: vtctldata.ValidateKeyspaceResponse + (*ValidatePermissionsKeyspaceRequest)(nil), // 239: vtctldata.ValidatePermissionsKeyspaceRequest + (*ValidatePermissionsKeyspaceResponse)(nil), // 240: vtctldata.ValidatePermissionsKeyspaceResponse + (*ValidateSchemaKeyspaceRequest)(nil), // 241: vtctldata.ValidateSchemaKeyspaceRequest + (*ValidateSchemaKeyspaceResponse)(nil), // 242: vtctldata.ValidateSchemaKeyspaceResponse + (*ValidateShardRequest)(nil), // 243: vtctldata.ValidateShardRequest + (*ValidateShardResponse)(nil), // 244: vtctldata.ValidateShardResponse + (*ValidateVersionKeyspaceRequest)(nil), // 245: vtctldata.ValidateVersionKeyspaceRequest + (*ValidateVersionKeyspaceResponse)(nil), // 246: vtctldata.ValidateVersionKeyspaceResponse + (*ValidateVersionShardRequest)(nil), // 247: vtctldata.ValidateVersionShardRequest + (*ValidateVersionShardResponse)(nil), // 248: vtctldata.ValidateVersionShardResponse + (*ValidateVSchemaRequest)(nil), // 249: vtctldata.ValidateVSchemaRequest + (*ValidateVSchemaResponse)(nil), // 250: vtctldata.ValidateVSchemaResponse + (*VDiffCreateRequest)(nil), // 251: vtctldata.VDiffCreateRequest + (*VDiffCreateResponse)(nil), // 252: vtctldata.VDiffCreateResponse + (*VDiffDeleteRequest)(nil), // 253: vtctldata.VDiffDeleteRequest + (*VDiffDeleteResponse)(nil), // 254: vtctldata.VDiffDeleteResponse + (*VDiffResumeRequest)(nil), // 255: vtctldata.VDiffResumeRequest + (*VDiffResumeResponse)(nil), // 256: vtctldata.VDiffResumeResponse + (*VDiffShowRequest)(nil), // 257: vtctldata.VDiffShowRequest + (*VDiffShowResponse)(nil), // 258: vtctldata.VDiffShowResponse + (*VDiffStopRequest)(nil), // 259: vtctldata.VDiffStopRequest + (*VDiffStopResponse)(nil), // 260: vtctldata.VDiffStopResponse + (*WorkflowDeleteRequest)(nil), // 261: vtctldata.WorkflowDeleteRequest + (*WorkflowDeleteResponse)(nil), // 262: vtctldata.WorkflowDeleteResponse + (*WorkflowStatusRequest)(nil), // 263: vtctldata.WorkflowStatusRequest + (*WorkflowStatusResponse)(nil), // 264: vtctldata.WorkflowStatusResponse + (*WorkflowSwitchTrafficRequest)(nil), // 265: vtctldata.WorkflowSwitchTrafficRequest + (*WorkflowSwitchTrafficResponse)(nil), // 266: vtctldata.WorkflowSwitchTrafficResponse + (*WorkflowUpdateRequest)(nil), // 267: vtctldata.WorkflowUpdateRequest + (*WorkflowUpdateResponse)(nil), // 268: vtctldata.WorkflowUpdateResponse + (*GetMirrorRulesRequest)(nil), // 269: vtctldata.GetMirrorRulesRequest + (*GetMirrorRulesResponse)(nil), // 270: vtctldata.GetMirrorRulesResponse + (*WorkflowMirrorTrafficRequest)(nil), // 271: vtctldata.WorkflowMirrorTrafficRequest + (*WorkflowMirrorTrafficResponse)(nil), // 272: vtctldata.WorkflowMirrorTrafficResponse + nil, // 273: vtctldata.WorkflowOptions.ConfigEntry + nil, // 274: vtctldata.Workflow.ShardStreamsEntry + (*Workflow_ReplicationLocation)(nil), // 275: vtctldata.Workflow.ReplicationLocation + (*Workflow_ShardStream)(nil), // 276: vtctldata.Workflow.ShardStream + (*Workflow_Stream)(nil), // 277: vtctldata.Workflow.Stream + (*Workflow_Stream_CopyState)(nil), // 278: vtctldata.Workflow.Stream.CopyState + (*Workflow_Stream_Log)(nil), // 279: vtctldata.Workflow.Stream.Log + (*Workflow_Stream_ThrottlerStatus)(nil), // 280: vtctldata.Workflow.Stream.ThrottlerStatus + nil, // 281: vtctldata.ApplySchemaResponse.RowsAffectedByShardEntry + nil, // 282: vtctldata.ApplyVSchemaResponse.UnknownVindexParamsEntry + (*ApplyVSchemaResponse_ParamList)(nil), // 283: vtctldata.ApplyVSchemaResponse.ParamList + nil, // 284: vtctldata.CancelSchemaMigrationResponse.RowsAffectedByShardEntry + nil, // 285: vtctldata.ChangeTabletTagsRequest.TagsEntry + nil, // 286: vtctldata.ChangeTabletTagsResponse.BeforeTagsEntry + nil, // 287: vtctldata.ChangeTabletTagsResponse.AfterTagsEntry + nil, // 288: vtctldata.CleanupSchemaMigrationResponse.RowsAffectedByShardEntry + nil, // 289: vtctldata.CompleteSchemaMigrationResponse.RowsAffectedByShardEntry + nil, // 290: vtctldata.FindAllShardsInKeyspaceResponse.ShardsEntry + nil, // 291: vtctldata.ForceCutOverSchemaMigrationResponse.RowsAffectedByShardEntry + nil, // 292: vtctldata.GetCellsAliasesResponse.AliasesEntry + nil, // 293: vtctldata.GetShardReplicationResponse.ShardReplicationByCellEntry + nil, // 294: vtctldata.GetSrvKeyspaceNamesResponse.NamesEntry + (*GetSrvKeyspaceNamesResponse_NameList)(nil), // 295: vtctldata.GetSrvKeyspaceNamesResponse.NameList + nil, // 296: vtctldata.GetSrvKeyspacesResponse.SrvKeyspacesEntry + nil, // 297: vtctldata.GetSrvVSchemasResponse.SrvVSchemasEntry + nil, // 298: vtctldata.LaunchSchemaMigrationResponse.RowsAffectedByShardEntry + (*MoveTablesCreateResponse_TabletInfo)(nil), // 299: vtctldata.MoveTablesCreateResponse.TabletInfo + nil, // 300: vtctldata.RetrySchemaMigrationResponse.RowsAffectedByShardEntry + nil, // 301: vtctldata.ShardReplicationPositionsResponse.ReplicationStatusesEntry + nil, // 302: vtctldata.ShardReplicationPositionsResponse.TabletMapEntry + nil, // 303: vtctldata.ValidateResponse.ResultsByKeyspaceEntry + nil, // 304: vtctldata.ValidateKeyspaceResponse.ResultsByShardEntry + nil, // 305: vtctldata.ValidateSchemaKeyspaceResponse.ResultsByShardEntry + nil, // 306: vtctldata.ValidateVersionKeyspaceResponse.ResultsByShardEntry + nil, // 307: vtctldata.ValidateVSchemaResponse.ResultsByShardEntry + nil, // 308: vtctldata.VDiffShowResponse.TabletResponsesEntry + (*WorkflowDeleteResponse_TabletInfo)(nil), // 309: vtctldata.WorkflowDeleteResponse.TabletInfo + (*WorkflowStatusResponse_TableCopyState)(nil), // 310: vtctldata.WorkflowStatusResponse.TableCopyState + (*WorkflowStatusResponse_ShardStreamState)(nil), // 311: vtctldata.WorkflowStatusResponse.ShardStreamState + (*WorkflowStatusResponse_ShardStreams)(nil), // 312: vtctldata.WorkflowStatusResponse.ShardStreams + nil, // 313: vtctldata.WorkflowStatusResponse.TableCopyStateEntry + nil, // 314: vtctldata.WorkflowStatusResponse.ShardStreamsEntry + (*WorkflowUpdateResponse_TabletInfo)(nil), // 315: vtctldata.WorkflowUpdateResponse.TabletInfo + (*logutil.Event)(nil), // 316: logutil.Event + (tabletmanagerdata.TabletSelectionPreference)(0), // 317: tabletmanagerdata.TabletSelectionPreference + (*topodata.Keyspace)(nil), // 318: topodata.Keyspace + (*vttime.Time)(nil), // 319: vttime.Time + (*topodata.TabletAlias)(nil), // 320: topodata.TabletAlias + (*vttime.Duration)(nil), // 321: vttime.Duration + (*topodata.Shard)(nil), // 322: topodata.Shard + (*topodata.CellInfo)(nil), // 323: topodata.CellInfo + (*vschema.KeyspaceRoutingRules)(nil), // 324: vschema.KeyspaceRoutingRules + (*vschema.RoutingRules)(nil), // 325: vschema.RoutingRules + (*vschema.ShardRoutingRules)(nil), // 326: vschema.ShardRoutingRules + (*vtrpc.CallerID)(nil), // 327: vtrpc.CallerID + (*vschema.Keyspace)(nil), // 328: vschema.Keyspace + (topodata.TabletType)(0), // 329: topodata.TabletType + (*topodata.Tablet)(nil), // 330: topodata.Tablet + (*tabletmanagerdata.CheckThrottlerResponse)(nil), // 331: tabletmanagerdata.CheckThrottlerResponse + (topodata.KeyspaceType)(0), // 332: topodata.KeyspaceType + (*query.QueryResult)(nil), // 333: query.QueryResult + (*tabletmanagerdata.ExecuteHookRequest)(nil), // 334: tabletmanagerdata.ExecuteHookRequest + (*tabletmanagerdata.ExecuteHookResponse)(nil), // 335: tabletmanagerdata.ExecuteHookResponse + (*mysqlctl.BackupInfo)(nil), // 336: mysqlctl.BackupInfo + (*replicationdata.FullStatus)(nil), // 337: replicationdata.FullStatus + (*tabletmanagerdata.Permissions)(nil), // 338: tabletmanagerdata.Permissions + (*tabletmanagerdata.SchemaDefinition)(nil), // 339: tabletmanagerdata.SchemaDefinition + (*topodata.ThrottledAppRule)(nil), // 340: topodata.ThrottledAppRule + (*vschema.SrvVSchema)(nil), // 341: vschema.SrvVSchema + (*tabletmanagerdata.GetThrottlerStatusResponse)(nil), // 342: tabletmanagerdata.GetThrottlerStatusResponse + (*query.TransactionMetadata)(nil), // 343: query.TransactionMetadata + (*query.Target)(nil), // 344: query.Target + (*topodata.ShardReplicationError)(nil), // 345: topodata.ShardReplicationError + (*topodata.KeyRange)(nil), // 346: topodata.KeyRange + (*topodata.CellsAlias)(nil), // 347: topodata.CellsAlias + (*tabletmanagerdata.UpdateVReplicationWorkflowRequest)(nil), // 348: tabletmanagerdata.UpdateVReplicationWorkflowRequest + (*vschema.MirrorRules)(nil), // 349: vschema.MirrorRules + (*topodata.Shard_TabletControl)(nil), // 350: topodata.Shard.TabletControl + (*binlogdata.BinlogSource)(nil), // 351: binlogdata.BinlogSource + (*topodata.ShardReplication)(nil), // 352: topodata.ShardReplication + (*topodata.SrvKeyspace)(nil), // 353: topodata.SrvKeyspace + (*replicationdata.Status)(nil), // 354: replicationdata.Status + (*tabletmanagerdata.VDiffResponse)(nil), // 355: tabletmanagerdata.VDiffResponse } var file_vtctldata_proto_depIdxs = []int32{ - 314, // 0: vtctldata.ExecuteVtctlCommandResponse.event:type_name -> logutil.Event + 316, // 0: vtctldata.ExecuteVtctlCommandResponse.event:type_name -> logutil.Event 7, // 1: vtctldata.MaterializeSettings.table_settings:type_name -> vtctldata.TableMaterializeSettings 0, // 2: vtctldata.MaterializeSettings.materialization_intent:type_name -> vtctldata.MaterializationIntent - 315, // 3: vtctldata.MaterializeSettings.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference + 317, // 3: vtctldata.MaterializeSettings.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference 12, // 4: vtctldata.MaterializeSettings.workflow_options:type_name -> vtctldata.WorkflowOptions - 316, // 5: vtctldata.Keyspace.keyspace:type_name -> topodata.Keyspace + 318, // 5: vtctldata.Keyspace.keyspace:type_name -> topodata.Keyspace 3, // 6: vtctldata.SchemaMigration.strategy:type_name -> vtctldata.SchemaMigration.Strategy - 317, // 7: vtctldata.SchemaMigration.added_at:type_name -> vttime.Time - 317, // 8: vtctldata.SchemaMigration.requested_at:type_name -> vttime.Time - 317, // 9: vtctldata.SchemaMigration.ready_at:type_name -> vttime.Time - 317, // 10: vtctldata.SchemaMigration.started_at:type_name -> vttime.Time - 317, // 11: vtctldata.SchemaMigration.liveness_timestamp:type_name -> vttime.Time - 317, // 12: vtctldata.SchemaMigration.completed_at:type_name -> vttime.Time - 317, // 13: vtctldata.SchemaMigration.cleaned_up_at:type_name -> vttime.Time + 319, // 7: vtctldata.SchemaMigration.added_at:type_name -> vttime.Time + 319, // 8: vtctldata.SchemaMigration.requested_at:type_name -> vttime.Time + 319, // 9: vtctldata.SchemaMigration.ready_at:type_name -> vttime.Time + 319, // 10: vtctldata.SchemaMigration.started_at:type_name -> vttime.Time + 319, // 11: vtctldata.SchemaMigration.liveness_timestamp:type_name -> vttime.Time + 319, // 12: vtctldata.SchemaMigration.completed_at:type_name -> vttime.Time + 319, // 13: vtctldata.SchemaMigration.cleaned_up_at:type_name -> vttime.Time 4, // 14: vtctldata.SchemaMigration.status:type_name -> vtctldata.SchemaMigration.Status - 318, // 15: vtctldata.SchemaMigration.tablet:type_name -> topodata.TabletAlias - 319, // 16: vtctldata.SchemaMigration.artifact_retention:type_name -> vttime.Duration - 317, // 17: vtctldata.SchemaMigration.last_throttled_at:type_name -> vttime.Time - 317, // 18: vtctldata.SchemaMigration.cancelled_at:type_name -> vttime.Time - 317, // 19: vtctldata.SchemaMigration.reviewed_at:type_name -> vttime.Time - 317, // 20: vtctldata.SchemaMigration.ready_to_complete_at:type_name -> vttime.Time - 320, // 21: vtctldata.Shard.shard:type_name -> topodata.Shard + 320, // 15: vtctldata.SchemaMigration.tablet:type_name -> topodata.TabletAlias + 321, // 16: vtctldata.SchemaMigration.artifact_retention:type_name -> vttime.Duration + 319, // 17: vtctldata.SchemaMigration.last_throttled_at:type_name -> vttime.Time + 319, // 18: vtctldata.SchemaMigration.cancelled_at:type_name -> vttime.Time + 319, // 19: vtctldata.SchemaMigration.reviewed_at:type_name -> vttime.Time + 319, // 20: vtctldata.SchemaMigration.ready_to_complete_at:type_name -> vttime.Time + 322, // 21: vtctldata.Shard.shard:type_name -> topodata.Shard 2, // 22: vtctldata.WorkflowOptions.sharded_auto_increment_handling:type_name -> vtctldata.ShardedAutoIncrementHandling - 271, // 23: vtctldata.WorkflowOptions.config:type_name -> vtctldata.WorkflowOptions.ConfigEntry - 273, // 24: vtctldata.Workflow.source:type_name -> vtctldata.Workflow.ReplicationLocation - 273, // 25: vtctldata.Workflow.target:type_name -> vtctldata.Workflow.ReplicationLocation - 272, // 26: vtctldata.Workflow.shard_streams:type_name -> vtctldata.Workflow.ShardStreamsEntry + 273, // 23: vtctldata.WorkflowOptions.config:type_name -> vtctldata.WorkflowOptions.ConfigEntry + 275, // 24: vtctldata.Workflow.source:type_name -> vtctldata.Workflow.ReplicationLocation + 275, // 25: vtctldata.Workflow.target:type_name -> vtctldata.Workflow.ReplicationLocation + 274, // 26: vtctldata.Workflow.shard_streams:type_name -> vtctldata.Workflow.ShardStreamsEntry 12, // 27: vtctldata.Workflow.options:type_name -> vtctldata.WorkflowOptions - 321, // 28: vtctldata.AddCellInfoRequest.cell_info:type_name -> topodata.CellInfo - 322, // 29: vtctldata.ApplyKeyspaceRoutingRulesRequest.keyspace_routing_rules:type_name -> vschema.KeyspaceRoutingRules - 322, // 30: vtctldata.ApplyKeyspaceRoutingRulesResponse.keyspace_routing_rules:type_name -> vschema.KeyspaceRoutingRules - 323, // 31: vtctldata.ApplyRoutingRulesRequest.routing_rules:type_name -> vschema.RoutingRules - 324, // 32: vtctldata.ApplyShardRoutingRulesRequest.shard_routing_rules:type_name -> vschema.ShardRoutingRules - 319, // 33: vtctldata.ApplySchemaRequest.wait_replicas_timeout:type_name -> vttime.Duration - 325, // 34: vtctldata.ApplySchemaRequest.caller_id:type_name -> vtrpc.CallerID - 279, // 35: vtctldata.ApplySchemaResponse.rows_affected_by_shard:type_name -> vtctldata.ApplySchemaResponse.RowsAffectedByShardEntry - 326, // 36: vtctldata.ApplyVSchemaRequest.v_schema:type_name -> vschema.Keyspace - 326, // 37: vtctldata.ApplyVSchemaResponse.v_schema:type_name -> vschema.Keyspace - 280, // 38: vtctldata.ApplyVSchemaResponse.unknown_vindex_params:type_name -> vtctldata.ApplyVSchemaResponse.UnknownVindexParamsEntry - 318, // 39: vtctldata.BackupRequest.tablet_alias:type_name -> topodata.TabletAlias - 319, // 40: vtctldata.BackupRequest.mysql_shutdown_timeout:type_name -> vttime.Duration - 318, // 41: vtctldata.BackupResponse.tablet_alias:type_name -> topodata.TabletAlias - 314, // 42: vtctldata.BackupResponse.event:type_name -> logutil.Event - 319, // 43: vtctldata.BackupShardRequest.mysql_shutdown_timeout:type_name -> vttime.Duration - 325, // 44: vtctldata.CancelSchemaMigrationRequest.caller_id:type_name -> vtrpc.CallerID - 282, // 45: vtctldata.CancelSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.CancelSchemaMigrationResponse.RowsAffectedByShardEntry - 318, // 46: vtctldata.ChangeTabletTagsRequest.tablet_alias:type_name -> topodata.TabletAlias - 283, // 47: vtctldata.ChangeTabletTagsRequest.tags:type_name -> vtctldata.ChangeTabletTagsRequest.TagsEntry - 284, // 48: vtctldata.ChangeTabletTagsResponse.before_tags:type_name -> vtctldata.ChangeTabletTagsResponse.BeforeTagsEntry - 285, // 49: vtctldata.ChangeTabletTagsResponse.after_tags:type_name -> vtctldata.ChangeTabletTagsResponse.AfterTagsEntry - 318, // 50: vtctldata.ChangeTabletTypeRequest.tablet_alias:type_name -> topodata.TabletAlias - 327, // 51: vtctldata.ChangeTabletTypeRequest.db_type:type_name -> topodata.TabletType - 328, // 52: vtctldata.ChangeTabletTypeResponse.before_tablet:type_name -> topodata.Tablet - 328, // 53: vtctldata.ChangeTabletTypeResponse.after_tablet:type_name -> topodata.Tablet - 318, // 54: vtctldata.CheckThrottlerRequest.tablet_alias:type_name -> topodata.TabletAlias - 318, // 55: vtctldata.CheckThrottlerResponse.tablet_alias:type_name -> topodata.TabletAlias - 329, // 56: vtctldata.CheckThrottlerResponse.Check:type_name -> tabletmanagerdata.CheckThrottlerResponse - 325, // 57: vtctldata.CleanupSchemaMigrationRequest.caller_id:type_name -> vtrpc.CallerID - 286, // 58: vtctldata.CleanupSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.CleanupSchemaMigrationResponse.RowsAffectedByShardEntry - 325, // 59: vtctldata.CompleteSchemaMigrationRequest.caller_id:type_name -> vtrpc.CallerID - 287, // 60: vtctldata.CompleteSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.CompleteSchemaMigrationResponse.RowsAffectedByShardEntry - 318, // 61: vtctldata.CopySchemaShardRequest.source_tablet_alias:type_name -> topodata.TabletAlias - 319, // 62: vtctldata.CopySchemaShardRequest.wait_replicas_timeout:type_name -> vttime.Duration - 330, // 63: vtctldata.CreateKeyspaceRequest.type:type_name -> topodata.KeyspaceType - 317, // 64: vtctldata.CreateKeyspaceRequest.snapshot_time:type_name -> vttime.Time + 323, // 28: vtctldata.AddCellInfoRequest.cell_info:type_name -> topodata.CellInfo + 324, // 29: vtctldata.ApplyKeyspaceRoutingRulesRequest.keyspace_routing_rules:type_name -> vschema.KeyspaceRoutingRules + 324, // 30: vtctldata.ApplyKeyspaceRoutingRulesResponse.keyspace_routing_rules:type_name -> vschema.KeyspaceRoutingRules + 325, // 31: vtctldata.ApplyRoutingRulesRequest.routing_rules:type_name -> vschema.RoutingRules + 326, // 32: vtctldata.ApplyShardRoutingRulesRequest.shard_routing_rules:type_name -> vschema.ShardRoutingRules + 321, // 33: vtctldata.ApplySchemaRequest.wait_replicas_timeout:type_name -> vttime.Duration + 327, // 34: vtctldata.ApplySchemaRequest.caller_id:type_name -> vtrpc.CallerID + 281, // 35: vtctldata.ApplySchemaResponse.rows_affected_by_shard:type_name -> vtctldata.ApplySchemaResponse.RowsAffectedByShardEntry + 328, // 36: vtctldata.ApplyVSchemaRequest.v_schema:type_name -> vschema.Keyspace + 328, // 37: vtctldata.ApplyVSchemaResponse.v_schema:type_name -> vschema.Keyspace + 282, // 38: vtctldata.ApplyVSchemaResponse.unknown_vindex_params:type_name -> vtctldata.ApplyVSchemaResponse.UnknownVindexParamsEntry + 320, // 39: vtctldata.BackupRequest.tablet_alias:type_name -> topodata.TabletAlias + 321, // 40: vtctldata.BackupRequest.mysql_shutdown_timeout:type_name -> vttime.Duration + 320, // 41: vtctldata.BackupResponse.tablet_alias:type_name -> topodata.TabletAlias + 316, // 42: vtctldata.BackupResponse.event:type_name -> logutil.Event + 321, // 43: vtctldata.BackupShardRequest.mysql_shutdown_timeout:type_name -> vttime.Duration + 327, // 44: vtctldata.CancelSchemaMigrationRequest.caller_id:type_name -> vtrpc.CallerID + 284, // 45: vtctldata.CancelSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.CancelSchemaMigrationResponse.RowsAffectedByShardEntry + 320, // 46: vtctldata.ChangeTabletTagsRequest.tablet_alias:type_name -> topodata.TabletAlias + 285, // 47: vtctldata.ChangeTabletTagsRequest.tags:type_name -> vtctldata.ChangeTabletTagsRequest.TagsEntry + 286, // 48: vtctldata.ChangeTabletTagsResponse.before_tags:type_name -> vtctldata.ChangeTabletTagsResponse.BeforeTagsEntry + 287, // 49: vtctldata.ChangeTabletTagsResponse.after_tags:type_name -> vtctldata.ChangeTabletTagsResponse.AfterTagsEntry + 320, // 50: vtctldata.ChangeTabletTypeRequest.tablet_alias:type_name -> topodata.TabletAlias + 329, // 51: vtctldata.ChangeTabletTypeRequest.db_type:type_name -> topodata.TabletType + 330, // 52: vtctldata.ChangeTabletTypeResponse.before_tablet:type_name -> topodata.Tablet + 330, // 53: vtctldata.ChangeTabletTypeResponse.after_tablet:type_name -> topodata.Tablet + 320, // 54: vtctldata.CheckThrottlerRequest.tablet_alias:type_name -> topodata.TabletAlias + 320, // 55: vtctldata.CheckThrottlerResponse.tablet_alias:type_name -> topodata.TabletAlias + 331, // 56: vtctldata.CheckThrottlerResponse.Check:type_name -> tabletmanagerdata.CheckThrottlerResponse + 327, // 57: vtctldata.CleanupSchemaMigrationRequest.caller_id:type_name -> vtrpc.CallerID + 288, // 58: vtctldata.CleanupSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.CleanupSchemaMigrationResponse.RowsAffectedByShardEntry + 327, // 59: vtctldata.CompleteSchemaMigrationRequest.caller_id:type_name -> vtrpc.CallerID + 289, // 60: vtctldata.CompleteSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.CompleteSchemaMigrationResponse.RowsAffectedByShardEntry + 320, // 61: vtctldata.CopySchemaShardRequest.source_tablet_alias:type_name -> topodata.TabletAlias + 321, // 62: vtctldata.CopySchemaShardRequest.wait_replicas_timeout:type_name -> vttime.Duration + 332, // 63: vtctldata.CreateKeyspaceRequest.type:type_name -> topodata.KeyspaceType + 319, // 64: vtctldata.CreateKeyspaceRequest.snapshot_time:type_name -> vttime.Time 9, // 65: vtctldata.CreateKeyspaceResponse.keyspace:type_name -> vtctldata.Keyspace 9, // 66: vtctldata.CreateShardResponse.keyspace:type_name -> vtctldata.Keyspace 11, // 67: vtctldata.CreateShardResponse.shard:type_name -> vtctldata.Shard 11, // 68: vtctldata.DeleteShardsRequest.shards:type_name -> vtctldata.Shard - 318, // 69: vtctldata.DeleteTabletsRequest.tablet_aliases:type_name -> topodata.TabletAlias - 318, // 70: vtctldata.EmergencyReparentShardRequest.new_primary:type_name -> topodata.TabletAlias - 318, // 71: vtctldata.EmergencyReparentShardRequest.ignore_replicas:type_name -> topodata.TabletAlias - 319, // 72: vtctldata.EmergencyReparentShardRequest.wait_replicas_timeout:type_name -> vttime.Duration - 318, // 73: vtctldata.EmergencyReparentShardRequest.expected_primary:type_name -> topodata.TabletAlias - 318, // 74: vtctldata.EmergencyReparentShardResponse.promoted_primary:type_name -> topodata.TabletAlias - 314, // 75: vtctldata.EmergencyReparentShardResponse.events:type_name -> logutil.Event - 318, // 76: vtctldata.ExecuteFetchAsAppRequest.tablet_alias:type_name -> topodata.TabletAlias - 331, // 77: vtctldata.ExecuteFetchAsAppResponse.result:type_name -> query.QueryResult - 318, // 78: vtctldata.ExecuteFetchAsDBARequest.tablet_alias:type_name -> topodata.TabletAlias - 331, // 79: vtctldata.ExecuteFetchAsDBAResponse.result:type_name -> query.QueryResult - 318, // 80: vtctldata.ExecuteHookRequest.tablet_alias:type_name -> topodata.TabletAlias - 332, // 81: vtctldata.ExecuteHookRequest.tablet_hook_request:type_name -> tabletmanagerdata.ExecuteHookRequest - 333, // 82: vtctldata.ExecuteHookResponse.hook_result:type_name -> tabletmanagerdata.ExecuteHookResponse - 318, // 83: vtctldata.ExecuteMultiFetchAsDBARequest.tablet_alias:type_name -> topodata.TabletAlias - 331, // 84: vtctldata.ExecuteMultiFetchAsDBAResponse.results:type_name -> query.QueryResult - 288, // 85: vtctldata.FindAllShardsInKeyspaceResponse.shards:type_name -> vtctldata.FindAllShardsInKeyspaceResponse.ShardsEntry - 325, // 86: vtctldata.ForceCutOverSchemaMigrationRequest.caller_id:type_name -> vtrpc.CallerID - 289, // 87: vtctldata.ForceCutOverSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.ForceCutOverSchemaMigrationResponse.RowsAffectedByShardEntry - 334, // 88: vtctldata.GetBackupsResponse.backups:type_name -> mysqlctl.BackupInfo - 321, // 89: vtctldata.GetCellInfoResponse.cell_info:type_name -> topodata.CellInfo - 290, // 90: vtctldata.GetCellsAliasesResponse.aliases:type_name -> vtctldata.GetCellsAliasesResponse.AliasesEntry - 318, // 91: vtctldata.GetFullStatusRequest.tablet_alias:type_name -> topodata.TabletAlias - 335, // 92: vtctldata.GetFullStatusResponse.status:type_name -> replicationdata.FullStatus + 320, // 69: vtctldata.DeleteTabletsRequest.tablet_aliases:type_name -> topodata.TabletAlias + 320, // 70: vtctldata.EmergencyReparentShardRequest.new_primary:type_name -> topodata.TabletAlias + 320, // 71: vtctldata.EmergencyReparentShardRequest.ignore_replicas:type_name -> topodata.TabletAlias + 321, // 72: vtctldata.EmergencyReparentShardRequest.wait_replicas_timeout:type_name -> vttime.Duration + 320, // 73: vtctldata.EmergencyReparentShardRequest.expected_primary:type_name -> topodata.TabletAlias + 320, // 74: vtctldata.EmergencyReparentShardResponse.promoted_primary:type_name -> topodata.TabletAlias + 316, // 75: vtctldata.EmergencyReparentShardResponse.events:type_name -> logutil.Event + 320, // 76: vtctldata.ExecuteFetchAsAppRequest.tablet_alias:type_name -> topodata.TabletAlias + 333, // 77: vtctldata.ExecuteFetchAsAppResponse.result:type_name -> query.QueryResult + 320, // 78: vtctldata.ExecuteFetchAsDBARequest.tablet_alias:type_name -> topodata.TabletAlias + 333, // 79: vtctldata.ExecuteFetchAsDBAResponse.result:type_name -> query.QueryResult + 320, // 80: vtctldata.ExecuteHookRequest.tablet_alias:type_name -> topodata.TabletAlias + 334, // 81: vtctldata.ExecuteHookRequest.tablet_hook_request:type_name -> tabletmanagerdata.ExecuteHookRequest + 335, // 82: vtctldata.ExecuteHookResponse.hook_result:type_name -> tabletmanagerdata.ExecuteHookResponse + 320, // 83: vtctldata.ExecuteMultiFetchAsDBARequest.tablet_alias:type_name -> topodata.TabletAlias + 333, // 84: vtctldata.ExecuteMultiFetchAsDBAResponse.results:type_name -> query.QueryResult + 290, // 85: vtctldata.FindAllShardsInKeyspaceResponse.shards:type_name -> vtctldata.FindAllShardsInKeyspaceResponse.ShardsEntry + 327, // 86: vtctldata.ForceCutOverSchemaMigrationRequest.caller_id:type_name -> vtrpc.CallerID + 291, // 87: vtctldata.ForceCutOverSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.ForceCutOverSchemaMigrationResponse.RowsAffectedByShardEntry + 336, // 88: vtctldata.GetBackupsResponse.backups:type_name -> mysqlctl.BackupInfo + 323, // 89: vtctldata.GetCellInfoResponse.cell_info:type_name -> topodata.CellInfo + 292, // 90: vtctldata.GetCellsAliasesResponse.aliases:type_name -> vtctldata.GetCellsAliasesResponse.AliasesEntry + 320, // 91: vtctldata.GetFullStatusRequest.tablet_alias:type_name -> topodata.TabletAlias + 337, // 92: vtctldata.GetFullStatusResponse.status:type_name -> replicationdata.FullStatus 9, // 93: vtctldata.GetKeyspacesResponse.keyspaces:type_name -> vtctldata.Keyspace 9, // 94: vtctldata.GetKeyspaceResponse.keyspace:type_name -> vtctldata.Keyspace - 318, // 95: vtctldata.GetPermissionsRequest.tablet_alias:type_name -> topodata.TabletAlias - 336, // 96: vtctldata.GetPermissionsResponse.permissions:type_name -> tabletmanagerdata.Permissions - 322, // 97: vtctldata.GetKeyspaceRoutingRulesResponse.keyspace_routing_rules:type_name -> vschema.KeyspaceRoutingRules - 323, // 98: vtctldata.GetRoutingRulesResponse.routing_rules:type_name -> vschema.RoutingRules - 318, // 99: vtctldata.GetSchemaRequest.tablet_alias:type_name -> topodata.TabletAlias - 337, // 100: vtctldata.GetSchemaResponse.schema:type_name -> tabletmanagerdata.SchemaDefinition + 320, // 95: vtctldata.GetPermissionsRequest.tablet_alias:type_name -> topodata.TabletAlias + 338, // 96: vtctldata.GetPermissionsResponse.permissions:type_name -> tabletmanagerdata.Permissions + 324, // 97: vtctldata.GetKeyspaceRoutingRulesResponse.keyspace_routing_rules:type_name -> vschema.KeyspaceRoutingRules + 325, // 98: vtctldata.GetRoutingRulesResponse.routing_rules:type_name -> vschema.RoutingRules + 320, // 99: vtctldata.GetSchemaRequest.tablet_alias:type_name -> topodata.TabletAlias + 339, // 100: vtctldata.GetSchemaResponse.schema:type_name -> tabletmanagerdata.SchemaDefinition 4, // 101: vtctldata.GetSchemaMigrationsRequest.status:type_name -> vtctldata.SchemaMigration.Status - 319, // 102: vtctldata.GetSchemaMigrationsRequest.recent:type_name -> vttime.Duration + 321, // 102: vtctldata.GetSchemaMigrationsRequest.recent:type_name -> vttime.Duration 1, // 103: vtctldata.GetSchemaMigrationsRequest.order:type_name -> vtctldata.QueryOrdering 10, // 104: vtctldata.GetSchemaMigrationsResponse.migrations:type_name -> vtctldata.SchemaMigration - 291, // 105: vtctldata.GetShardReplicationResponse.shard_replication_by_cell:type_name -> vtctldata.GetShardReplicationResponse.ShardReplicationByCellEntry + 293, // 105: vtctldata.GetShardReplicationResponse.shard_replication_by_cell:type_name -> vtctldata.GetShardReplicationResponse.ShardReplicationByCellEntry 11, // 106: vtctldata.GetShardResponse.shard:type_name -> vtctldata.Shard - 324, // 107: vtctldata.GetShardRoutingRulesResponse.shard_routing_rules:type_name -> vschema.ShardRoutingRules - 292, // 108: vtctldata.GetSrvKeyspaceNamesResponse.names:type_name -> vtctldata.GetSrvKeyspaceNamesResponse.NamesEntry - 294, // 109: vtctldata.GetSrvKeyspacesResponse.srv_keyspaces:type_name -> vtctldata.GetSrvKeyspacesResponse.SrvKeyspacesEntry - 338, // 110: vtctldata.UpdateThrottlerConfigRequest.throttled_app:type_name -> topodata.ThrottledAppRule - 339, // 111: vtctldata.GetSrvVSchemaResponse.srv_v_schema:type_name -> vschema.SrvVSchema - 295, // 112: vtctldata.GetSrvVSchemasResponse.srv_v_schemas:type_name -> vtctldata.GetSrvVSchemasResponse.SrvVSchemasEntry - 318, // 113: vtctldata.GetTabletRequest.tablet_alias:type_name -> topodata.TabletAlias - 328, // 114: vtctldata.GetTabletResponse.tablet:type_name -> topodata.Tablet - 318, // 115: vtctldata.GetTabletsRequest.tablet_aliases:type_name -> topodata.TabletAlias - 327, // 116: vtctldata.GetTabletsRequest.tablet_type:type_name -> topodata.TabletType - 328, // 117: vtctldata.GetTabletsResponse.tablets:type_name -> topodata.Tablet - 318, // 118: vtctldata.GetThrottlerStatusRequest.tablet_alias:type_name -> topodata.TabletAlias - 340, // 119: vtctldata.GetThrottlerStatusResponse.status:type_name -> tabletmanagerdata.GetThrottlerStatusResponse + 326, // 107: vtctldata.GetShardRoutingRulesResponse.shard_routing_rules:type_name -> vschema.ShardRoutingRules + 294, // 108: vtctldata.GetSrvKeyspaceNamesResponse.names:type_name -> vtctldata.GetSrvKeyspaceNamesResponse.NamesEntry + 296, // 109: vtctldata.GetSrvKeyspacesResponse.srv_keyspaces:type_name -> vtctldata.GetSrvKeyspacesResponse.SrvKeyspacesEntry + 340, // 110: vtctldata.UpdateThrottlerConfigRequest.throttled_app:type_name -> topodata.ThrottledAppRule + 341, // 111: vtctldata.GetSrvVSchemaResponse.srv_v_schema:type_name -> vschema.SrvVSchema + 297, // 112: vtctldata.GetSrvVSchemasResponse.srv_v_schemas:type_name -> vtctldata.GetSrvVSchemasResponse.SrvVSchemasEntry + 320, // 113: vtctldata.GetTabletRequest.tablet_alias:type_name -> topodata.TabletAlias + 330, // 114: vtctldata.GetTabletResponse.tablet:type_name -> topodata.Tablet + 320, // 115: vtctldata.GetTabletsRequest.tablet_aliases:type_name -> topodata.TabletAlias + 329, // 116: vtctldata.GetTabletsRequest.tablet_type:type_name -> topodata.TabletType + 330, // 117: vtctldata.GetTabletsResponse.tablets:type_name -> topodata.Tablet + 320, // 118: vtctldata.GetThrottlerStatusRequest.tablet_alias:type_name -> topodata.TabletAlias + 342, // 119: vtctldata.GetThrottlerStatusResponse.status:type_name -> tabletmanagerdata.GetThrottlerStatusResponse 123, // 120: vtctldata.GetTopologyPathResponse.cell:type_name -> vtctldata.TopologyCell - 341, // 121: vtctldata.GetUnresolvedTransactionsResponse.transactions:type_name -> query.TransactionMetadata - 341, // 122: vtctldata.GetTransactionInfoResponse.metadata:type_name -> query.TransactionMetadata + 343, // 121: vtctldata.GetUnresolvedTransactionsResponse.transactions:type_name -> query.TransactionMetadata + 343, // 122: vtctldata.GetTransactionInfoResponse.metadata:type_name -> query.TransactionMetadata 127, // 123: vtctldata.GetTransactionInfoResponse.shard_states:type_name -> vtctldata.ShardTransactionState - 342, // 124: vtctldata.ConcludeTransactionRequest.participants:type_name -> query.Target - 318, // 125: vtctldata.GetVersionRequest.tablet_alias:type_name -> topodata.TabletAlias - 326, // 126: vtctldata.GetVSchemaResponse.v_schema:type_name -> vschema.Keyspace + 344, // 124: vtctldata.ConcludeTransactionRequest.participants:type_name -> query.Target + 320, // 125: vtctldata.GetVersionRequest.tablet_alias:type_name -> topodata.TabletAlias + 328, // 126: vtctldata.GetVSchemaResponse.v_schema:type_name -> vschema.Keyspace 13, // 127: vtctldata.GetWorkflowsResponse.workflows:type_name -> vtctldata.Workflow - 318, // 128: vtctldata.InitShardPrimaryRequest.primary_elect_tablet_alias:type_name -> topodata.TabletAlias - 319, // 129: vtctldata.InitShardPrimaryRequest.wait_replicas_timeout:type_name -> vttime.Duration - 314, // 130: vtctldata.InitShardPrimaryResponse.events:type_name -> logutil.Event - 325, // 131: vtctldata.LaunchSchemaMigrationRequest.caller_id:type_name -> vtrpc.CallerID - 296, // 132: vtctldata.LaunchSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.LaunchSchemaMigrationResponse.RowsAffectedByShardEntry - 326, // 133: vtctldata.LookupVindexCreateRequest.vindex:type_name -> vschema.Keyspace - 327, // 134: vtctldata.LookupVindexCreateRequest.tablet_types:type_name -> topodata.TabletType - 315, // 135: vtctldata.LookupVindexCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference + 320, // 128: vtctldata.InitShardPrimaryRequest.primary_elect_tablet_alias:type_name -> topodata.TabletAlias + 321, // 129: vtctldata.InitShardPrimaryRequest.wait_replicas_timeout:type_name -> vttime.Duration + 316, // 130: vtctldata.InitShardPrimaryResponse.events:type_name -> logutil.Event + 327, // 131: vtctldata.LaunchSchemaMigrationRequest.caller_id:type_name -> vtrpc.CallerID + 298, // 132: vtctldata.LaunchSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.LaunchSchemaMigrationResponse.RowsAffectedByShardEntry + 328, // 133: vtctldata.LookupVindexCreateRequest.vindex:type_name -> vschema.Keyspace + 329, // 134: vtctldata.LookupVindexCreateRequest.tablet_types:type_name -> topodata.TabletType + 317, // 135: vtctldata.LookupVindexCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference 8, // 136: vtctldata.MaterializeCreateRequest.settings:type_name -> vtctldata.MaterializeSettings - 327, // 137: vtctldata.MigrateCreateRequest.tablet_types:type_name -> topodata.TabletType - 315, // 138: vtctldata.MigrateCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference - 327, // 139: vtctldata.MoveTablesCreateRequest.tablet_types:type_name -> topodata.TabletType - 315, // 140: vtctldata.MoveTablesCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference - 12, // 141: vtctldata.MoveTablesCreateRequest.workflow_options:type_name -> vtctldata.WorkflowOptions - 297, // 142: vtctldata.MoveTablesCreateResponse.details:type_name -> vtctldata.MoveTablesCreateResponse.TabletInfo - 318, // 143: vtctldata.PingTabletRequest.tablet_alias:type_name -> topodata.TabletAlias - 318, // 144: vtctldata.PlannedReparentShardRequest.new_primary:type_name -> topodata.TabletAlias - 318, // 145: vtctldata.PlannedReparentShardRequest.avoid_primary:type_name -> topodata.TabletAlias - 319, // 146: vtctldata.PlannedReparentShardRequest.wait_replicas_timeout:type_name -> vttime.Duration - 319, // 147: vtctldata.PlannedReparentShardRequest.tolerable_replication_lag:type_name -> vttime.Duration - 318, // 148: vtctldata.PlannedReparentShardRequest.expected_primary:type_name -> topodata.TabletAlias - 318, // 149: vtctldata.PlannedReparentShardResponse.promoted_primary:type_name -> topodata.TabletAlias - 314, // 150: vtctldata.PlannedReparentShardResponse.events:type_name -> logutil.Event - 318, // 151: vtctldata.RefreshStateRequest.tablet_alias:type_name -> topodata.TabletAlias - 318, // 152: vtctldata.ReloadSchemaRequest.tablet_alias:type_name -> topodata.TabletAlias - 314, // 153: vtctldata.ReloadSchemaKeyspaceResponse.events:type_name -> logutil.Event - 314, // 154: vtctldata.ReloadSchemaShardResponse.events:type_name -> logutil.Event - 318, // 155: vtctldata.ReparentTabletRequest.tablet:type_name -> topodata.TabletAlias - 318, // 156: vtctldata.ReparentTabletResponse.primary:type_name -> topodata.TabletAlias - 327, // 157: vtctldata.ReshardCreateRequest.tablet_types:type_name -> topodata.TabletType - 315, // 158: vtctldata.ReshardCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference - 12, // 159: vtctldata.ReshardCreateRequest.workflow_options:type_name -> vtctldata.WorkflowOptions - 318, // 160: vtctldata.RestoreFromBackupRequest.tablet_alias:type_name -> topodata.TabletAlias - 317, // 161: vtctldata.RestoreFromBackupRequest.backup_time:type_name -> vttime.Time - 317, // 162: vtctldata.RestoreFromBackupRequest.restore_to_timestamp:type_name -> vttime.Time - 318, // 163: vtctldata.RestoreFromBackupResponse.tablet_alias:type_name -> topodata.TabletAlias - 314, // 164: vtctldata.RestoreFromBackupResponse.event:type_name -> logutil.Event - 325, // 165: vtctldata.RetrySchemaMigrationRequest.caller_id:type_name -> vtrpc.CallerID - 298, // 166: vtctldata.RetrySchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.RetrySchemaMigrationResponse.RowsAffectedByShardEntry - 318, // 167: vtctldata.RunHealthCheckRequest.tablet_alias:type_name -> topodata.TabletAlias - 316, // 168: vtctldata.SetKeyspaceDurabilityPolicyResponse.keyspace:type_name -> topodata.Keyspace - 316, // 169: vtctldata.SetKeyspaceShardingInfoResponse.keyspace:type_name -> topodata.Keyspace - 320, // 170: vtctldata.SetShardIsPrimaryServingResponse.shard:type_name -> topodata.Shard - 327, // 171: vtctldata.SetShardTabletControlRequest.tablet_type:type_name -> topodata.TabletType - 320, // 172: vtctldata.SetShardTabletControlResponse.shard:type_name -> topodata.Shard - 318, // 173: vtctldata.SetWritableRequest.tablet_alias:type_name -> topodata.TabletAlias - 318, // 174: vtctldata.ShardReplicationAddRequest.tablet_alias:type_name -> topodata.TabletAlias - 343, // 175: vtctldata.ShardReplicationFixResponse.error:type_name -> topodata.ShardReplicationError - 299, // 176: vtctldata.ShardReplicationPositionsResponse.replication_statuses:type_name -> vtctldata.ShardReplicationPositionsResponse.ReplicationStatusesEntry - 300, // 177: vtctldata.ShardReplicationPositionsResponse.tablet_map:type_name -> vtctldata.ShardReplicationPositionsResponse.TabletMapEntry - 318, // 178: vtctldata.ShardReplicationRemoveRequest.tablet_alias:type_name -> topodata.TabletAlias - 318, // 179: vtctldata.SleepTabletRequest.tablet_alias:type_name -> topodata.TabletAlias - 319, // 180: vtctldata.SleepTabletRequest.duration:type_name -> vttime.Duration - 344, // 181: vtctldata.SourceShardAddRequest.key_range:type_name -> topodata.KeyRange - 320, // 182: vtctldata.SourceShardAddResponse.shard:type_name -> topodata.Shard - 320, // 183: vtctldata.SourceShardDeleteResponse.shard:type_name -> topodata.Shard - 318, // 184: vtctldata.StartReplicationRequest.tablet_alias:type_name -> topodata.TabletAlias - 318, // 185: vtctldata.StopReplicationRequest.tablet_alias:type_name -> topodata.TabletAlias - 318, // 186: vtctldata.TabletExternallyReparentedRequest.tablet:type_name -> topodata.TabletAlias - 318, // 187: vtctldata.TabletExternallyReparentedResponse.new_primary:type_name -> topodata.TabletAlias - 318, // 188: vtctldata.TabletExternallyReparentedResponse.old_primary:type_name -> topodata.TabletAlias - 321, // 189: vtctldata.UpdateCellInfoRequest.cell_info:type_name -> topodata.CellInfo - 321, // 190: vtctldata.UpdateCellInfoResponse.cell_info:type_name -> topodata.CellInfo - 345, // 191: vtctldata.UpdateCellsAliasRequest.cells_alias:type_name -> topodata.CellsAlias - 345, // 192: vtctldata.UpdateCellsAliasResponse.cells_alias:type_name -> topodata.CellsAlias - 301, // 193: vtctldata.ValidateResponse.results_by_keyspace:type_name -> vtctldata.ValidateResponse.ResultsByKeyspaceEntry - 302, // 194: vtctldata.ValidateKeyspaceResponse.results_by_shard:type_name -> vtctldata.ValidateKeyspaceResponse.ResultsByShardEntry - 303, // 195: vtctldata.ValidateSchemaKeyspaceResponse.results_by_shard:type_name -> vtctldata.ValidateSchemaKeyspaceResponse.ResultsByShardEntry - 304, // 196: vtctldata.ValidateVersionKeyspaceResponse.results_by_shard:type_name -> vtctldata.ValidateVersionKeyspaceResponse.ResultsByShardEntry - 305, // 197: vtctldata.ValidateVSchemaResponse.results_by_shard:type_name -> vtctldata.ValidateVSchemaResponse.ResultsByShardEntry - 327, // 198: vtctldata.VDiffCreateRequest.tablet_types:type_name -> topodata.TabletType - 315, // 199: vtctldata.VDiffCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference - 319, // 200: vtctldata.VDiffCreateRequest.filtered_replication_wait_time:type_name -> vttime.Duration - 319, // 201: vtctldata.VDiffCreateRequest.wait_update_interval:type_name -> vttime.Duration - 319, // 202: vtctldata.VDiffCreateRequest.max_diff_duration:type_name -> vttime.Duration - 306, // 203: vtctldata.VDiffShowResponse.tablet_responses:type_name -> vtctldata.VDiffShowResponse.TabletResponsesEntry - 307, // 204: vtctldata.WorkflowDeleteResponse.details:type_name -> vtctldata.WorkflowDeleteResponse.TabletInfo - 311, // 205: vtctldata.WorkflowStatusResponse.table_copy_state:type_name -> vtctldata.WorkflowStatusResponse.TableCopyStateEntry - 312, // 206: vtctldata.WorkflowStatusResponse.shard_streams:type_name -> vtctldata.WorkflowStatusResponse.ShardStreamsEntry - 327, // 207: vtctldata.WorkflowSwitchTrafficRequest.tablet_types:type_name -> topodata.TabletType - 319, // 208: vtctldata.WorkflowSwitchTrafficRequest.max_replication_lag_allowed:type_name -> vttime.Duration - 319, // 209: vtctldata.WorkflowSwitchTrafficRequest.timeout:type_name -> vttime.Duration - 346, // 210: vtctldata.WorkflowUpdateRequest.tablet_request:type_name -> tabletmanagerdata.UpdateVReplicationWorkflowRequest - 313, // 211: vtctldata.WorkflowUpdateResponse.details:type_name -> vtctldata.WorkflowUpdateResponse.TabletInfo - 347, // 212: vtctldata.GetMirrorRulesResponse.mirror_rules:type_name -> vschema.MirrorRules - 327, // 213: vtctldata.WorkflowMirrorTrafficRequest.tablet_types:type_name -> topodata.TabletType - 274, // 214: vtctldata.Workflow.ShardStreamsEntry.value:type_name -> vtctldata.Workflow.ShardStream - 275, // 215: vtctldata.Workflow.ShardStream.streams:type_name -> vtctldata.Workflow.Stream - 348, // 216: vtctldata.Workflow.ShardStream.tablet_controls:type_name -> topodata.Shard.TabletControl - 318, // 217: vtctldata.Workflow.Stream.tablet:type_name -> topodata.TabletAlias - 349, // 218: vtctldata.Workflow.Stream.binlog_source:type_name -> binlogdata.BinlogSource - 317, // 219: vtctldata.Workflow.Stream.transaction_timestamp:type_name -> vttime.Time - 317, // 220: vtctldata.Workflow.Stream.time_updated:type_name -> vttime.Time - 276, // 221: vtctldata.Workflow.Stream.copy_states:type_name -> vtctldata.Workflow.Stream.CopyState - 277, // 222: vtctldata.Workflow.Stream.logs:type_name -> vtctldata.Workflow.Stream.Log - 278, // 223: vtctldata.Workflow.Stream.throttler_status:type_name -> vtctldata.Workflow.Stream.ThrottlerStatus - 327, // 224: vtctldata.Workflow.Stream.tablet_types:type_name -> topodata.TabletType - 315, // 225: vtctldata.Workflow.Stream.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference - 317, // 226: vtctldata.Workflow.Stream.Log.created_at:type_name -> vttime.Time - 317, // 227: vtctldata.Workflow.Stream.Log.updated_at:type_name -> vttime.Time - 317, // 228: vtctldata.Workflow.Stream.ThrottlerStatus.time_throttled:type_name -> vttime.Time - 281, // 229: vtctldata.ApplyVSchemaResponse.UnknownVindexParamsEntry.value:type_name -> vtctldata.ApplyVSchemaResponse.ParamList - 11, // 230: vtctldata.FindAllShardsInKeyspaceResponse.ShardsEntry.value:type_name -> vtctldata.Shard - 345, // 231: vtctldata.GetCellsAliasesResponse.AliasesEntry.value:type_name -> topodata.CellsAlias - 350, // 232: vtctldata.GetShardReplicationResponse.ShardReplicationByCellEntry.value:type_name -> topodata.ShardReplication - 293, // 233: vtctldata.GetSrvKeyspaceNamesResponse.NamesEntry.value:type_name -> vtctldata.GetSrvKeyspaceNamesResponse.NameList - 351, // 234: vtctldata.GetSrvKeyspacesResponse.SrvKeyspacesEntry.value:type_name -> topodata.SrvKeyspace - 339, // 235: vtctldata.GetSrvVSchemasResponse.SrvVSchemasEntry.value:type_name -> vschema.SrvVSchema - 318, // 236: vtctldata.MoveTablesCreateResponse.TabletInfo.tablet:type_name -> topodata.TabletAlias - 352, // 237: vtctldata.ShardReplicationPositionsResponse.ReplicationStatusesEntry.value:type_name -> replicationdata.Status - 328, // 238: vtctldata.ShardReplicationPositionsResponse.TabletMapEntry.value:type_name -> topodata.Tablet - 236, // 239: vtctldata.ValidateResponse.ResultsByKeyspaceEntry.value:type_name -> vtctldata.ValidateKeyspaceResponse - 242, // 240: vtctldata.ValidateKeyspaceResponse.ResultsByShardEntry.value:type_name -> vtctldata.ValidateShardResponse - 242, // 241: vtctldata.ValidateSchemaKeyspaceResponse.ResultsByShardEntry.value:type_name -> vtctldata.ValidateShardResponse - 242, // 242: vtctldata.ValidateVersionKeyspaceResponse.ResultsByShardEntry.value:type_name -> vtctldata.ValidateShardResponse - 242, // 243: vtctldata.ValidateVSchemaResponse.ResultsByShardEntry.value:type_name -> vtctldata.ValidateShardResponse - 353, // 244: vtctldata.VDiffShowResponse.TabletResponsesEntry.value:type_name -> tabletmanagerdata.VDiffResponse - 318, // 245: vtctldata.WorkflowDeleteResponse.TabletInfo.tablet:type_name -> topodata.TabletAlias - 318, // 246: vtctldata.WorkflowStatusResponse.ShardStreamState.tablet:type_name -> topodata.TabletAlias - 309, // 247: vtctldata.WorkflowStatusResponse.ShardStreams.streams:type_name -> vtctldata.WorkflowStatusResponse.ShardStreamState - 308, // 248: vtctldata.WorkflowStatusResponse.TableCopyStateEntry.value:type_name -> vtctldata.WorkflowStatusResponse.TableCopyState - 310, // 249: vtctldata.WorkflowStatusResponse.ShardStreamsEntry.value:type_name -> vtctldata.WorkflowStatusResponse.ShardStreams - 318, // 250: vtctldata.WorkflowUpdateResponse.TabletInfo.tablet:type_name -> topodata.TabletAlias - 251, // [251:251] is the sub-list for method output_type - 251, // [251:251] is the sub-list for method input_type - 251, // [251:251] is the sub-list for extension type_name - 251, // [251:251] is the sub-list for extension extendee - 0, // [0:251] is the sub-list for field type_name + 7, // 137: vtctldata.WorkflowAddTablesRequest.table_settings:type_name -> vtctldata.TableMaterializeSettings + 0, // 138: vtctldata.WorkflowAddTablesRequest.materialization_intent:type_name -> vtctldata.MaterializationIntent + 329, // 139: vtctldata.MigrateCreateRequest.tablet_types:type_name -> topodata.TabletType + 317, // 140: vtctldata.MigrateCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference + 329, // 141: vtctldata.MoveTablesCreateRequest.tablet_types:type_name -> topodata.TabletType + 317, // 142: vtctldata.MoveTablesCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference + 12, // 143: vtctldata.MoveTablesCreateRequest.workflow_options:type_name -> vtctldata.WorkflowOptions + 299, // 144: vtctldata.MoveTablesCreateResponse.details:type_name -> vtctldata.MoveTablesCreateResponse.TabletInfo + 320, // 145: vtctldata.PingTabletRequest.tablet_alias:type_name -> topodata.TabletAlias + 320, // 146: vtctldata.PlannedReparentShardRequest.new_primary:type_name -> topodata.TabletAlias + 320, // 147: vtctldata.PlannedReparentShardRequest.avoid_primary:type_name -> topodata.TabletAlias + 321, // 148: vtctldata.PlannedReparentShardRequest.wait_replicas_timeout:type_name -> vttime.Duration + 321, // 149: vtctldata.PlannedReparentShardRequest.tolerable_replication_lag:type_name -> vttime.Duration + 320, // 150: vtctldata.PlannedReparentShardRequest.expected_primary:type_name -> topodata.TabletAlias + 320, // 151: vtctldata.PlannedReparentShardResponse.promoted_primary:type_name -> topodata.TabletAlias + 316, // 152: vtctldata.PlannedReparentShardResponse.events:type_name -> logutil.Event + 320, // 153: vtctldata.RefreshStateRequest.tablet_alias:type_name -> topodata.TabletAlias + 320, // 154: vtctldata.ReloadSchemaRequest.tablet_alias:type_name -> topodata.TabletAlias + 316, // 155: vtctldata.ReloadSchemaKeyspaceResponse.events:type_name -> logutil.Event + 316, // 156: vtctldata.ReloadSchemaShardResponse.events:type_name -> logutil.Event + 320, // 157: vtctldata.ReparentTabletRequest.tablet:type_name -> topodata.TabletAlias + 320, // 158: vtctldata.ReparentTabletResponse.primary:type_name -> topodata.TabletAlias + 329, // 159: vtctldata.ReshardCreateRequest.tablet_types:type_name -> topodata.TabletType + 317, // 160: vtctldata.ReshardCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference + 12, // 161: vtctldata.ReshardCreateRequest.workflow_options:type_name -> vtctldata.WorkflowOptions + 320, // 162: vtctldata.RestoreFromBackupRequest.tablet_alias:type_name -> topodata.TabletAlias + 319, // 163: vtctldata.RestoreFromBackupRequest.backup_time:type_name -> vttime.Time + 319, // 164: vtctldata.RestoreFromBackupRequest.restore_to_timestamp:type_name -> vttime.Time + 320, // 165: vtctldata.RestoreFromBackupResponse.tablet_alias:type_name -> topodata.TabletAlias + 316, // 166: vtctldata.RestoreFromBackupResponse.event:type_name -> logutil.Event + 327, // 167: vtctldata.RetrySchemaMigrationRequest.caller_id:type_name -> vtrpc.CallerID + 300, // 168: vtctldata.RetrySchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.RetrySchemaMigrationResponse.RowsAffectedByShardEntry + 320, // 169: vtctldata.RunHealthCheckRequest.tablet_alias:type_name -> topodata.TabletAlias + 318, // 170: vtctldata.SetKeyspaceDurabilityPolicyResponse.keyspace:type_name -> topodata.Keyspace + 318, // 171: vtctldata.SetKeyspaceShardingInfoResponse.keyspace:type_name -> topodata.Keyspace + 322, // 172: vtctldata.SetShardIsPrimaryServingResponse.shard:type_name -> topodata.Shard + 329, // 173: vtctldata.SetShardTabletControlRequest.tablet_type:type_name -> topodata.TabletType + 322, // 174: vtctldata.SetShardTabletControlResponse.shard:type_name -> topodata.Shard + 320, // 175: vtctldata.SetWritableRequest.tablet_alias:type_name -> topodata.TabletAlias + 320, // 176: vtctldata.ShardReplicationAddRequest.tablet_alias:type_name -> topodata.TabletAlias + 345, // 177: vtctldata.ShardReplicationFixResponse.error:type_name -> topodata.ShardReplicationError + 301, // 178: vtctldata.ShardReplicationPositionsResponse.replication_statuses:type_name -> vtctldata.ShardReplicationPositionsResponse.ReplicationStatusesEntry + 302, // 179: vtctldata.ShardReplicationPositionsResponse.tablet_map:type_name -> vtctldata.ShardReplicationPositionsResponse.TabletMapEntry + 320, // 180: vtctldata.ShardReplicationRemoveRequest.tablet_alias:type_name -> topodata.TabletAlias + 320, // 181: vtctldata.SleepTabletRequest.tablet_alias:type_name -> topodata.TabletAlias + 321, // 182: vtctldata.SleepTabletRequest.duration:type_name -> vttime.Duration + 346, // 183: vtctldata.SourceShardAddRequest.key_range:type_name -> topodata.KeyRange + 322, // 184: vtctldata.SourceShardAddResponse.shard:type_name -> topodata.Shard + 322, // 185: vtctldata.SourceShardDeleteResponse.shard:type_name -> topodata.Shard + 320, // 186: vtctldata.StartReplicationRequest.tablet_alias:type_name -> topodata.TabletAlias + 320, // 187: vtctldata.StopReplicationRequest.tablet_alias:type_name -> topodata.TabletAlias + 320, // 188: vtctldata.TabletExternallyReparentedRequest.tablet:type_name -> topodata.TabletAlias + 320, // 189: vtctldata.TabletExternallyReparentedResponse.new_primary:type_name -> topodata.TabletAlias + 320, // 190: vtctldata.TabletExternallyReparentedResponse.old_primary:type_name -> topodata.TabletAlias + 323, // 191: vtctldata.UpdateCellInfoRequest.cell_info:type_name -> topodata.CellInfo + 323, // 192: vtctldata.UpdateCellInfoResponse.cell_info:type_name -> topodata.CellInfo + 347, // 193: vtctldata.UpdateCellsAliasRequest.cells_alias:type_name -> topodata.CellsAlias + 347, // 194: vtctldata.UpdateCellsAliasResponse.cells_alias:type_name -> topodata.CellsAlias + 303, // 195: vtctldata.ValidateResponse.results_by_keyspace:type_name -> vtctldata.ValidateResponse.ResultsByKeyspaceEntry + 304, // 196: vtctldata.ValidateKeyspaceResponse.results_by_shard:type_name -> vtctldata.ValidateKeyspaceResponse.ResultsByShardEntry + 305, // 197: vtctldata.ValidateSchemaKeyspaceResponse.results_by_shard:type_name -> vtctldata.ValidateSchemaKeyspaceResponse.ResultsByShardEntry + 306, // 198: vtctldata.ValidateVersionKeyspaceResponse.results_by_shard:type_name -> vtctldata.ValidateVersionKeyspaceResponse.ResultsByShardEntry + 307, // 199: vtctldata.ValidateVSchemaResponse.results_by_shard:type_name -> vtctldata.ValidateVSchemaResponse.ResultsByShardEntry + 329, // 200: vtctldata.VDiffCreateRequest.tablet_types:type_name -> topodata.TabletType + 317, // 201: vtctldata.VDiffCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference + 321, // 202: vtctldata.VDiffCreateRequest.filtered_replication_wait_time:type_name -> vttime.Duration + 321, // 203: vtctldata.VDiffCreateRequest.wait_update_interval:type_name -> vttime.Duration + 321, // 204: vtctldata.VDiffCreateRequest.max_diff_duration:type_name -> vttime.Duration + 308, // 205: vtctldata.VDiffShowResponse.tablet_responses:type_name -> vtctldata.VDiffShowResponse.TabletResponsesEntry + 309, // 206: vtctldata.WorkflowDeleteResponse.details:type_name -> vtctldata.WorkflowDeleteResponse.TabletInfo + 313, // 207: vtctldata.WorkflowStatusResponse.table_copy_state:type_name -> vtctldata.WorkflowStatusResponse.TableCopyStateEntry + 314, // 208: vtctldata.WorkflowStatusResponse.shard_streams:type_name -> vtctldata.WorkflowStatusResponse.ShardStreamsEntry + 329, // 209: vtctldata.WorkflowSwitchTrafficRequest.tablet_types:type_name -> topodata.TabletType + 321, // 210: vtctldata.WorkflowSwitchTrafficRequest.max_replication_lag_allowed:type_name -> vttime.Duration + 321, // 211: vtctldata.WorkflowSwitchTrafficRequest.timeout:type_name -> vttime.Duration + 348, // 212: vtctldata.WorkflowUpdateRequest.tablet_request:type_name -> tabletmanagerdata.UpdateVReplicationWorkflowRequest + 315, // 213: vtctldata.WorkflowUpdateResponse.details:type_name -> vtctldata.WorkflowUpdateResponse.TabletInfo + 349, // 214: vtctldata.GetMirrorRulesResponse.mirror_rules:type_name -> vschema.MirrorRules + 329, // 215: vtctldata.WorkflowMirrorTrafficRequest.tablet_types:type_name -> topodata.TabletType + 276, // 216: vtctldata.Workflow.ShardStreamsEntry.value:type_name -> vtctldata.Workflow.ShardStream + 277, // 217: vtctldata.Workflow.ShardStream.streams:type_name -> vtctldata.Workflow.Stream + 350, // 218: vtctldata.Workflow.ShardStream.tablet_controls:type_name -> topodata.Shard.TabletControl + 320, // 219: vtctldata.Workflow.Stream.tablet:type_name -> topodata.TabletAlias + 351, // 220: vtctldata.Workflow.Stream.binlog_source:type_name -> binlogdata.BinlogSource + 319, // 221: vtctldata.Workflow.Stream.transaction_timestamp:type_name -> vttime.Time + 319, // 222: vtctldata.Workflow.Stream.time_updated:type_name -> vttime.Time + 278, // 223: vtctldata.Workflow.Stream.copy_states:type_name -> vtctldata.Workflow.Stream.CopyState + 279, // 224: vtctldata.Workflow.Stream.logs:type_name -> vtctldata.Workflow.Stream.Log + 280, // 225: vtctldata.Workflow.Stream.throttler_status:type_name -> vtctldata.Workflow.Stream.ThrottlerStatus + 329, // 226: vtctldata.Workflow.Stream.tablet_types:type_name -> topodata.TabletType + 317, // 227: vtctldata.Workflow.Stream.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference + 319, // 228: vtctldata.Workflow.Stream.Log.created_at:type_name -> vttime.Time + 319, // 229: vtctldata.Workflow.Stream.Log.updated_at:type_name -> vttime.Time + 319, // 230: vtctldata.Workflow.Stream.ThrottlerStatus.time_throttled:type_name -> vttime.Time + 283, // 231: vtctldata.ApplyVSchemaResponse.UnknownVindexParamsEntry.value:type_name -> vtctldata.ApplyVSchemaResponse.ParamList + 11, // 232: vtctldata.FindAllShardsInKeyspaceResponse.ShardsEntry.value:type_name -> vtctldata.Shard + 347, // 233: vtctldata.GetCellsAliasesResponse.AliasesEntry.value:type_name -> topodata.CellsAlias + 352, // 234: vtctldata.GetShardReplicationResponse.ShardReplicationByCellEntry.value:type_name -> topodata.ShardReplication + 295, // 235: vtctldata.GetSrvKeyspaceNamesResponse.NamesEntry.value:type_name -> vtctldata.GetSrvKeyspaceNamesResponse.NameList + 353, // 236: vtctldata.GetSrvKeyspacesResponse.SrvKeyspacesEntry.value:type_name -> topodata.SrvKeyspace + 341, // 237: vtctldata.GetSrvVSchemasResponse.SrvVSchemasEntry.value:type_name -> vschema.SrvVSchema + 320, // 238: vtctldata.MoveTablesCreateResponse.TabletInfo.tablet:type_name -> topodata.TabletAlias + 354, // 239: vtctldata.ShardReplicationPositionsResponse.ReplicationStatusesEntry.value:type_name -> replicationdata.Status + 330, // 240: vtctldata.ShardReplicationPositionsResponse.TabletMapEntry.value:type_name -> topodata.Tablet + 238, // 241: vtctldata.ValidateResponse.ResultsByKeyspaceEntry.value:type_name -> vtctldata.ValidateKeyspaceResponse + 244, // 242: vtctldata.ValidateKeyspaceResponse.ResultsByShardEntry.value:type_name -> vtctldata.ValidateShardResponse + 244, // 243: vtctldata.ValidateSchemaKeyspaceResponse.ResultsByShardEntry.value:type_name -> vtctldata.ValidateShardResponse + 244, // 244: vtctldata.ValidateVersionKeyspaceResponse.ResultsByShardEntry.value:type_name -> vtctldata.ValidateShardResponse + 244, // 245: vtctldata.ValidateVSchemaResponse.ResultsByShardEntry.value:type_name -> vtctldata.ValidateShardResponse + 355, // 246: vtctldata.VDiffShowResponse.TabletResponsesEntry.value:type_name -> tabletmanagerdata.VDiffResponse + 320, // 247: vtctldata.WorkflowDeleteResponse.TabletInfo.tablet:type_name -> topodata.TabletAlias + 320, // 248: vtctldata.WorkflowStatusResponse.ShardStreamState.tablet:type_name -> topodata.TabletAlias + 311, // 249: vtctldata.WorkflowStatusResponse.ShardStreams.streams:type_name -> vtctldata.WorkflowStatusResponse.ShardStreamState + 310, // 250: vtctldata.WorkflowStatusResponse.TableCopyStateEntry.value:type_name -> vtctldata.WorkflowStatusResponse.TableCopyState + 312, // 251: vtctldata.WorkflowStatusResponse.ShardStreamsEntry.value:type_name -> vtctldata.WorkflowStatusResponse.ShardStreams + 320, // 252: vtctldata.WorkflowUpdateResponse.TabletInfo.tablet:type_name -> topodata.TabletAlias + 253, // [253:253] is the sub-list for method output_type + 253, // [253:253] is the sub-list for method input_type + 253, // [253:253] is the sub-list for extension type_name + 253, // [253:253] is the sub-list for extension extendee + 0, // [0:253] is the sub-list for field type_name } func init() { file_vtctldata_proto_init() } @@ -20436,14 +19149,14 @@ func file_vtctldata_proto_init() { return } file_vtctldata_proto_msgTypes[23].OneofWrappers = []any{} - file_vtctldata_proto_msgTypes[244].OneofWrappers = []any{} + file_vtctldata_proto_msgTypes[246].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_vtctldata_proto_rawDesc), len(file_vtctldata_proto_rawDesc)), NumEnums: 5, - NumMessages: 309, + NumMessages: 311, NumExtensions: 0, NumServices: 0, }, diff --git a/go/vt/proto/vtctldata/vtctldata_vtproto.pb.go b/go/vt/proto/vtctldata/vtctldata_vtproto.pb.go index 7bfad34bf7a..ed2c144225d 100644 --- a/go/vt/proto/vtctldata/vtctldata_vtproto.pb.go +++ b/go/vt/proto/vtctldata/vtctldata_vtproto.pb.go @@ -264,6 +264,11 @@ func (m *WorkflowOptions) CloneVT() *WorkflowOptions { } r.Config = tmpContainer } + if rhs := m.LookupVindexes; rhs != nil { + tmpContainer := make([]string, len(rhs)) + copy(tmpContainer, rhs) + r.LookupVindexes = tmpContainer + } if len(m.unknownFields) > 0 { r.unknownFields = make([]byte, len(m.unknownFields)) copy(r.unknownFields, m.unknownFields) @@ -3295,6 +3300,48 @@ func (m *MaterializeCreateResponse) CloneMessageVT() proto.Message { return m.CloneVT() } +func (m *WorkflowAddTablesRequest) CloneVT() *WorkflowAddTablesRequest { + if m == nil { + return (*WorkflowAddTablesRequest)(nil) + } + r := new(WorkflowAddTablesRequest) + r.Workflow = m.Workflow + r.Keyspace = m.Keyspace + r.MaterializationIntent = m.MaterializationIntent + if rhs := m.TableSettings; rhs != nil { + tmpContainer := make([]*TableMaterializeSettings, len(rhs)) + for k, v := range rhs { + tmpContainer[k] = v.CloneVT() + } + r.TableSettings = tmpContainer + } + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *WorkflowAddTablesRequest) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *WorkflowAddTablesResponse) CloneVT() *WorkflowAddTablesResponse { + if m == nil { + return (*WorkflowAddTablesResponse)(nil) + } + r := new(WorkflowAddTablesResponse) + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *WorkflowAddTablesResponse) CloneMessageVT() proto.Message { + return m.CloneVT() +} + func (m *MigrateCreateRequest) CloneVT() *MigrateCreateRequest { if m == nil { return (*MigrateCreateRequest)(nil) @@ -6951,6 +6998,15 @@ func (m *WorkflowOptions) MarshalToSizedBufferVT(dAtA []byte) (int, error) { i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } + if len(m.LookupVindexes) > 0 { + for iNdEx := len(m.LookupVindexes) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.LookupVindexes[iNdEx]) + copy(dAtA[i:], m.LookupVindexes[iNdEx]) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.LookupVindexes[iNdEx]))) + i-- + dAtA[i] = 0x32 + } + } if len(m.GlobalKeyspace) > 0 { i -= len(m.GlobalKeyspace) copy(dAtA[i:], m.GlobalKeyspace) @@ -15000,6 +15056,103 @@ func (m *MaterializeCreateResponse) MarshalToSizedBufferVT(dAtA []byte) (int, er return len(dAtA) - i, nil } +func (m *WorkflowAddTablesRequest) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *WorkflowAddTablesRequest) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *WorkflowAddTablesRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.MaterializationIntent != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.MaterializationIntent)) + i-- + dAtA[i] = 0x20 + } + if len(m.TableSettings) > 0 { + for iNdEx := len(m.TableSettings) - 1; iNdEx >= 0; iNdEx-- { + size, err := m.TableSettings[iNdEx].MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x1a + } + } + if len(m.Keyspace) > 0 { + i -= len(m.Keyspace) + copy(dAtA[i:], m.Keyspace) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Keyspace))) + i-- + dAtA[i] = 0x12 + } + if len(m.Workflow) > 0 { + i -= len(m.Workflow) + copy(dAtA[i:], m.Workflow) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Workflow))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *WorkflowAddTablesResponse) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *WorkflowAddTablesResponse) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *WorkflowAddTablesResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + return len(dAtA) - i, nil +} + func (m *MigrateCreateRequest) MarshalVT() (dAtA []byte, err error) { if m == nil { return nil, nil @@ -22679,6 +22832,12 @@ func (m *WorkflowOptions) SizeVT() (n int) { if l > 0 { n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } + if len(m.LookupVindexes) > 0 { + for _, s := range m.LookupVindexes { + l = len(s) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + } n += len(m.unknownFields) return n } @@ -25643,6 +25802,43 @@ func (m *MaterializeCreateResponse) SizeVT() (n int) { return n } +func (m *WorkflowAddTablesRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Workflow) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.Keyspace) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if len(m.TableSettings) > 0 { + for _, e := range m.TableSettings { + l = e.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + } + if m.MaterializationIntent != 0 { + n += 1 + protohelpers.SizeOfVarint(uint64(m.MaterializationIntent)) + } + n += len(m.unknownFields) + return n +} + +func (m *WorkflowAddTablesResponse) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += len(m.unknownFields) + return n +} + func (m *MigrateCreateRequest) SizeVT() (n int) { if m == nil { return 0 @@ -31422,6 +31618,38 @@ func (m *WorkflowOptions) UnmarshalVT(dAtA []byte) error { } m.GlobalKeyspace = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LookupVindexes", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.LookupVindexes = append(m.LookupVindexes, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := protohelpers.Skip(dAtA[iNdEx:]) @@ -50824,6 +51052,225 @@ func (m *MaterializeCreateResponse) UnmarshalVT(dAtA []byte) error { } return nil } +func (m *WorkflowAddTablesRequest) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: WorkflowAddTablesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: WorkflowAddTablesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Workflow", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Workflow = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Keyspace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TableSettings", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TableSettings = append(m.TableSettings, &TableMaterializeSettings{}) + if err := m.TableSettings[len(m.TableSettings)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaterializationIntent", wireType) + } + m.MaterializationIntent = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MaterializationIntent |= MaterializationIntent(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *WorkflowAddTablesResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: WorkflowAddTablesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: WorkflowAddTablesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *MigrateCreateRequest) UnmarshalVT(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/go/vt/proto/vtctlservice/vtctlservice.pb.go b/go/vt/proto/vtctlservice/vtctlservice.pb.go index a688428e216..f7ac2978499 100644 --- a/go/vt/proto/vtctlservice/vtctlservice.pb.go +++ b/go/vt/proto/vtctlservice/vtctlservice.pb.go @@ -18,7 +18,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v3.21.3 // source: vtctlservice.proto @@ -41,778 +41,145 @@ const ( var File_vtctlservice_proto protoreflect.FileDescriptor -var file_vtctlservice_proto_rawDesc = string([]byte{ - 0x0a, 0x12, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x1a, 0x0f, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x32, 0x71, 0x0a, 0x05, 0x56, 0x74, 0x63, 0x74, 0x6c, 0x12, 0x68, 0x0a, 0x13, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x56, 0x74, 0x63, 0x74, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x12, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x56, 0x74, 0x63, 0x74, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x76, 0x74, 0x63, - 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x56, 0x74, - 0x63, 0x74, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x32, 0xc0, 0x5e, 0x0a, 0x06, 0x56, 0x74, 0x63, 0x74, 0x6c, - 0x64, 0x12, 0x4e, 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, - 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x43, - 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x41, 0x64, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, - 0x61, 0x73, 0x12, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x41, - 0x64, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x41, 0x64, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x11, 0x41, 0x70, 0x70, 0x6c, 0x79, - 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x76, - 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x6f, - 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x70, - 0x70, 0x6c, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x41, 0x70, 0x70, - 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x78, 0x0a, 0x19, 0x41, 0x70, 0x70, - 0x6c, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, - 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x2b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x41, 0x70, 0x70, 0x6c, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, - 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x16, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x68, 0x61, 0x72, - 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x28, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, - 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x56, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x06, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x12, 0x18, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x76, 0x74, - 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4b, 0x0a, 0x0b, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x68, 0x61, 0x72, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x6c, 0x0a, 0x15, 0x43, 0x61, 0x6e, 0x63, 0x65, - 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x61, 0x6e, - 0x63, 0x65, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x10, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x10, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, - 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, - 0x74, 0x74, 0x6c, 0x65, 0x72, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x16, - 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6c, 0x65, - 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, - 0x17, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, - 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x66, 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x43, 0x6f, 0x70, - 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x21, 0x2e, 0x76, - 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x70, 0x79, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, - 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x1d, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, - 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, - 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x22, 0x2e, 0x76, 0x74, - 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, - 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, - 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x51, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, - 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x72, 0x76, 0x56, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x74, 0x63, - 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x72, 0x76, - 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x16, 0x45, 0x6d, 0x65, 0x72, 0x67, - 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x61, 0x72, - 0x64, 0x12, 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x6d, - 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x76, 0x74, - 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, - 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x11, 0x45, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x70, 0x70, 0x12, 0x23, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x70, 0x70, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x11, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x42, 0x41, 0x12, - 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x42, 0x41, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, - 0x42, 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x1d, 0x2e, 0x76, 0x74, - 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x48, - 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63, - 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x48, 0x6f, - 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x16, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, - 0x73, 0x44, 0x42, 0x41, 0x12, 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x65, 0x74, - 0x63, 0x68, 0x41, 0x73, 0x44, 0x42, 0x41, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, - 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x42, - 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x46, - 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x49, 0x6e, 0x4b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, - 0x49, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x69, - 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x49, 0x6e, 0x4b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x7e, 0x0a, 0x1b, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x43, 0x75, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, - 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, - 0x43, 0x75, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x43, - 0x75, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x4b, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x12, 0x1c, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x76, 0x74, - 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, - 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x2e, 0x76, 0x74, - 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63, - 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x10, - 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x12, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, - 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x47, - 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x12, 0x21, - 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x65, - 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, - 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x46, 0x75, - 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, - 0x0b, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x2e, 0x76, - 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, - 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, - 0x0c, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x1e, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x72, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, - 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x76, 0x74, - 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, - 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, - 0x0f, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, - 0x12, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, - 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x09, 0x47, 0x65, 0x74, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x2e, 0x76, 0x74, 0x63, - 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x47, - 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, - 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, - 0x1a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x76, 0x74, - 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x14, 0x47, 0x65, - 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, - 0x65, 0x73, 0x12, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, - 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, - 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x76, 0x74, 0x63, - 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, - 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x25, 0x2e, 0x76, - 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, - 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, - 0x0f, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x12, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, - 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x76, 0x74, - 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x68, - 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x53, 0x72, - 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, - 0x0e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x12, - 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, - 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x4b, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x1c, - 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x76, - 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x63, 0x0a, - 0x12, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, - 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, - 0x79, 0x50, 0x61, 0x74, 0x68, 0x12, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x50, 0x61, 0x74, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, - 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x63, - 0x0a, 0x12, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x76, 0x74, 0x63, - 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x78, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x2b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, - 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, - 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, - 0x0a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x2e, 0x76, 0x74, - 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0a, 0x47, 0x65, - 0x74, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x57, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x10, 0x49, 0x6e, - 0x69, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x22, - 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x49, - 0x6e, 0x69, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15, 0x4c, 0x61, 0x75, - 0x6e, 0x63, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, - 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x76, 0x74, - 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x14, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, - 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, - 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, - 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x63, 0x0a, 0x12, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, - 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, - 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, - 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, - 0x7a, 0x65, 0x12, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, - 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x45, 0x78, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, - 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x4c, - 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x12, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x6f, - 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x60, 0x0a, 0x11, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, - 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x55, 0x0a, 0x0d, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, - 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x4d, 0x6f, 0x75, 0x6e, - 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x76, 0x74, 0x63, - 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, - 0x0a, 0x0f, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, - 0x72, 0x12, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, - 0x75, 0x6e, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x09, 0x4d, 0x6f, - 0x75, 0x6e, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x09, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, - 0x75, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, - 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5b, - 0x0a, 0x10, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, - 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x63, 0x0a, 0x12, 0x4d, - 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, - 0x65, 0x12, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, - 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6f, - 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x4b, 0x0a, 0x0a, 0x50, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x1c, - 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x76, - 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, - 0x14, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, - 0x64, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x14, 0x52, 0x65, 0x62, 0x75, - 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, - 0x12, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x72, 0x61, 0x70, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x56, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x25, 0x2e, 0x76, 0x74, 0x63, - 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x56, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x47, 0x72, 0x61, 0x70, - 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c, 0x52, - 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x2e, 0x76, 0x74, - 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x76, 0x74, - 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, - 0x0a, 0x13, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x79, - 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x79, - 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x76, - 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x14, 0x52, 0x65, 0x6c, - 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x12, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, - 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x11, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, - 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, - 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x63, 0x0a, 0x12, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x12, - 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, - 0x0a, 0x0f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x43, 0x65, 0x6c, - 0x6c, 0x12, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x43, 0x65, 0x6c, 0x6c, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x52, 0x65, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x20, 0x2e, 0x76, - 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, - 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x68, 0x61, 0x72, 0x64, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x52, 0x65, 0x73, 0x68, 0x61, 0x72, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x11, 0x52, 0x65, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, - 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x69, - 0x0a, 0x14, 0x52, 0x65, 0x74, 0x72, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, - 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x52, 0x75, 0x6e, - 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x20, 0x2e, 0x76, 0x74, - 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, - 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x7e, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x44, 0x75, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x12, 0x2d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, - 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x75, 0x72, 0x61, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74, - 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x75, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x75, 0x0a, 0x18, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x49, 0x73, - 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x12, 0x2a, - 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x68, - 0x61, 0x72, 0x64, 0x49, 0x73, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x76, 0x74, 0x63, - 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x49, - 0x73, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15, 0x53, 0x65, 0x74, - 0x53, 0x68, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x12, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, - 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x76, 0x74, - 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x57, 0x72, - 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x57, 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x53, 0x65, 0x74, 0x57, 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x53, 0x68, 0x61, 0x72, 0x64, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x12, 0x25, - 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x66, 0x0a, 0x13, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x78, 0x12, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x78, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x78, 0x0a, 0x19, 0x53, 0x68, 0x61, 0x72, 0x64, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, - 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x6f, 0x0a, 0x16, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x28, 0x2e, 0x76, 0x74, - 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x53, 0x6c, 0x65, 0x65, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x6c, - 0x65, 0x65, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x6c, 0x65, - 0x65, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, - 0x64, 0x41, 0x64, 0x64, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x41, 0x64, - 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x11, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x12, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, - 0x10, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, - 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x6f, 0x70, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, - 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7b, 0x0a, 0x1a, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x52, 0x65, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x12, 0x2c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x6c, 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, - 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, - 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, - 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, - 0x61, 0x73, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, - 0x69, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, - 0x08, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x10, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, - 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, - 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x7e, 0x0a, 0x1b, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, - 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x2d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x16, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x28, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, - 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, - 0x0a, 0x14, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, - 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x21, 0x2e, 0x76, - 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x65, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x65, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x56, 0x44, 0x69, 0x66, 0x66, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x56, 0x44, 0x69, 0x66, 0x66, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x56, 0x44, 0x69, 0x66, 0x66, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x56, 0x44, 0x69, 0x66, 0x66, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, - 0x73, 0x75, 0x6d, 0x65, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x09, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, 0x68, - 0x6f, 0x77, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, - 0x44, 0x69, 0x66, 0x66, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, - 0x66, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x48, 0x0a, 0x09, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x1b, 0x2e, 0x76, - 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, 0x74, - 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74, - 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, 0x74, 0x6f, 0x70, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x57, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x76, 0x74, - 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15, 0x57, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, - 0x66, 0x66, 0x69, 0x63, 0x12, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x54, - 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x57, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x76, 0x74, - 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x75, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x75, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15, 0x57, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x72, 0x61, - 0x66, 0x66, 0x69, 0x63, 0x12, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x54, - 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, - 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x2b, 0x5a, 0x29, 0x76, 0x69, 0x74, - 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, - 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_vtctlservice_proto_rawDesc = "" + + "\n" + + "\x12vtctlservice.proto\x12\fvtctlservice\x1a\x0fvtctldata.proto2q\n" + + "\x05Vtctl\x12h\n" + + "\x13ExecuteVtctlCommand\x12%.vtctldata.ExecuteVtctlCommandRequest\x1a&.vtctldata.ExecuteVtctlCommandResponse\"\x000\x012\xa2_\n" + + "\x06Vtctld\x12N\n" + + "\vAddCellInfo\x12\x1d.vtctldata.AddCellInfoRequest\x1a\x1e.vtctldata.AddCellInfoResponse\"\x00\x12T\n" + + "\rAddCellsAlias\x12\x1f.vtctldata.AddCellsAliasRequest\x1a .vtctldata.AddCellsAliasResponse\"\x00\x12`\n" + + "\x11ApplyRoutingRules\x12#.vtctldata.ApplyRoutingRulesRequest\x1a$.vtctldata.ApplyRoutingRulesResponse\"\x00\x12N\n" + + "\vApplySchema\x12\x1d.vtctldata.ApplySchemaRequest\x1a\x1e.vtctldata.ApplySchemaResponse\"\x00\x12x\n" + + "\x19ApplyKeyspaceRoutingRules\x12+.vtctldata.ApplyKeyspaceRoutingRulesRequest\x1a,.vtctldata.ApplyKeyspaceRoutingRulesResponse\"\x00\x12o\n" + + "\x16ApplyShardRoutingRules\x12(.vtctldata.ApplyShardRoutingRulesRequest\x1a).vtctldata.ApplyShardRoutingRulesResponse\"\x00\x12Q\n" + + "\fApplyVSchema\x12\x1e.vtctldata.ApplyVSchemaRequest\x1a\x1f.vtctldata.ApplyVSchemaResponse\"\x00\x12A\n" + + "\x06Backup\x12\x18.vtctldata.BackupRequest\x1a\x19.vtctldata.BackupResponse\"\x000\x01\x12K\n" + + "\vBackupShard\x12\x1d.vtctldata.BackupShardRequest\x1a\x19.vtctldata.BackupResponse\"\x000\x01\x12l\n" + + "\x15CancelSchemaMigration\x12'.vtctldata.CancelSchemaMigrationRequest\x1a(.vtctldata.CancelSchemaMigrationResponse\"\x00\x12]\n" + + "\x10ChangeTabletTags\x12\".vtctldata.ChangeTabletTagsRequest\x1a#.vtctldata.ChangeTabletTagsResponse\"\x00\x12]\n" + + "\x10ChangeTabletType\x12\".vtctldata.ChangeTabletTypeRequest\x1a#.vtctldata.ChangeTabletTypeResponse\"\x00\x12W\n" + + "\x0eCheckThrottler\x12 .vtctldata.CheckThrottlerRequest\x1a!.vtctldata.CheckThrottlerResponse\"\x00\x12o\n" + + "\x16CleanupSchemaMigration\x12(.vtctldata.CleanupSchemaMigrationRequest\x1a).vtctldata.CleanupSchemaMigrationResponse\"\x00\x12r\n" + + "\x17CompleteSchemaMigration\x12).vtctldata.CompleteSchemaMigrationRequest\x1a*.vtctldata.CompleteSchemaMigrationResponse\"\x00\x12f\n" + + "\x13ConcludeTransaction\x12%.vtctldata.ConcludeTransactionRequest\x1a&.vtctldata.ConcludeTransactionResponse\"\x00\x12Z\n" + + "\x0fCopySchemaShard\x12!.vtctldata.CopySchemaShardRequest\x1a\".vtctldata.CopySchemaShardResponse\"\x00\x12W\n" + + "\x0eCreateKeyspace\x12 .vtctldata.CreateKeyspaceRequest\x1a!.vtctldata.CreateKeyspaceResponse\"\x00\x12N\n" + + "\vCreateShard\x12\x1d.vtctldata.CreateShardRequest\x1a\x1e.vtctldata.CreateShardResponse\"\x00\x12W\n" + + "\x0eDeleteCellInfo\x12 .vtctldata.DeleteCellInfoRequest\x1a!.vtctldata.DeleteCellInfoResponse\"\x00\x12]\n" + + "\x10DeleteCellsAlias\x12\".vtctldata.DeleteCellsAliasRequest\x1a#.vtctldata.DeleteCellsAliasResponse\"\x00\x12W\n" + + "\x0eDeleteKeyspace\x12 .vtctldata.DeleteKeyspaceRequest\x1a!.vtctldata.DeleteKeyspaceResponse\"\x00\x12Q\n" + + "\fDeleteShards\x12\x1e.vtctldata.DeleteShardsRequest\x1a\x1f.vtctldata.DeleteShardsResponse\"\x00\x12]\n" + + "\x10DeleteSrvVSchema\x12\".vtctldata.DeleteSrvVSchemaRequest\x1a#.vtctldata.DeleteSrvVSchemaResponse\"\x00\x12T\n" + + "\rDeleteTablets\x12\x1f.vtctldata.DeleteTabletsRequest\x1a .vtctldata.DeleteTabletsResponse\"\x00\x12o\n" + + "\x16EmergencyReparentShard\x12(.vtctldata.EmergencyReparentShardRequest\x1a).vtctldata.EmergencyReparentShardResponse\"\x00\x12`\n" + + "\x11ExecuteFetchAsApp\x12#.vtctldata.ExecuteFetchAsAppRequest\x1a$.vtctldata.ExecuteFetchAsAppResponse\"\x00\x12`\n" + + "\x11ExecuteFetchAsDBA\x12#.vtctldata.ExecuteFetchAsDBARequest\x1a$.vtctldata.ExecuteFetchAsDBAResponse\"\x00\x12L\n" + + "\vExecuteHook\x12\x1d.vtctldata.ExecuteHookRequest\x1a\x1e.vtctldata.ExecuteHookResponse\x12o\n" + + "\x16ExecuteMultiFetchAsDBA\x12(.vtctldata.ExecuteMultiFetchAsDBARequest\x1a).vtctldata.ExecuteMultiFetchAsDBAResponse\"\x00\x12r\n" + + "\x17FindAllShardsInKeyspace\x12).vtctldata.FindAllShardsInKeyspaceRequest\x1a*.vtctldata.FindAllShardsInKeyspaceResponse\"\x00\x12~\n" + + "\x1bForceCutOverSchemaMigration\x12-.vtctldata.ForceCutOverSchemaMigrationRequest\x1a..vtctldata.ForceCutOverSchemaMigrationResponse\"\x00\x12K\n" + + "\n" + + "GetBackups\x12\x1c.vtctldata.GetBackupsRequest\x1a\x1d.vtctldata.GetBackupsResponse\"\x00\x12N\n" + + "\vGetCellInfo\x12\x1d.vtctldata.GetCellInfoRequest\x1a\x1e.vtctldata.GetCellInfoResponse\"\x00\x12]\n" + + "\x10GetCellInfoNames\x12\".vtctldata.GetCellInfoNamesRequest\x1a#.vtctldata.GetCellInfoNamesResponse\"\x00\x12Z\n" + + "\x0fGetCellsAliases\x12!.vtctldata.GetCellsAliasesRequest\x1a\".vtctldata.GetCellsAliasesResponse\"\x00\x12T\n" + + "\rGetFullStatus\x12\x1f.vtctldata.GetFullStatusRequest\x1a .vtctldata.GetFullStatusResponse\"\x00\x12N\n" + + "\vGetKeyspace\x12\x1d.vtctldata.GetKeyspaceRequest\x1a\x1e.vtctldata.GetKeyspaceResponse\"\x00\x12Q\n" + + "\fGetKeyspaces\x12\x1e.vtctldata.GetKeyspacesRequest\x1a\x1f.vtctldata.GetKeyspacesResponse\"\x00\x12r\n" + + "\x17GetKeyspaceRoutingRules\x12).vtctldata.GetKeyspaceRoutingRulesRequest\x1a*.vtctldata.GetKeyspaceRoutingRulesResponse\"\x00\x12W\n" + + "\x0eGetPermissions\x12 .vtctldata.GetPermissionsRequest\x1a!.vtctldata.GetPermissionsResponse\"\x00\x12Z\n" + + "\x0fGetRoutingRules\x12!.vtctldata.GetRoutingRulesRequest\x1a\".vtctldata.GetRoutingRulesResponse\"\x00\x12H\n" + + "\tGetSchema\x12\x1b.vtctldata.GetSchemaRequest\x1a\x1c.vtctldata.GetSchemaResponse\"\x00\x12f\n" + + "\x13GetSchemaMigrations\x12%.vtctldata.GetSchemaMigrationsRequest\x1a&.vtctldata.GetSchemaMigrationsResponse\"\x00\x12f\n" + + "\x13GetShardReplication\x12%.vtctldata.GetShardReplicationRequest\x1a&.vtctldata.GetShardReplicationResponse\"\x00\x12E\n" + + "\bGetShard\x12\x1a.vtctldata.GetShardRequest\x1a\x1b.vtctldata.GetShardResponse\"\x00\x12i\n" + + "\x14GetShardRoutingRules\x12&.vtctldata.GetShardRoutingRulesRequest\x1a'.vtctldata.GetShardRoutingRulesResponse\"\x00\x12f\n" + + "\x13GetSrvKeyspaceNames\x12%.vtctldata.GetSrvKeyspaceNamesRequest\x1a&.vtctldata.GetSrvKeyspaceNamesResponse\"\x00\x12Z\n" + + "\x0fGetSrvKeyspaces\x12!.vtctldata.GetSrvKeyspacesRequest\x1a\".vtctldata.GetSrvKeyspacesResponse\"\x00\x12l\n" + + "\x15UpdateThrottlerConfig\x12'.vtctldata.UpdateThrottlerConfigRequest\x1a(.vtctldata.UpdateThrottlerConfigResponse\"\x00\x12T\n" + + "\rGetSrvVSchema\x12\x1f.vtctldata.GetSrvVSchemaRequest\x1a .vtctldata.GetSrvVSchemaResponse\"\x00\x12W\n" + + "\x0eGetSrvVSchemas\x12 .vtctldata.GetSrvVSchemasRequest\x1a!.vtctldata.GetSrvVSchemasResponse\"\x00\x12H\n" + + "\tGetTablet\x12\x1b.vtctldata.GetTabletRequest\x1a\x1c.vtctldata.GetTabletResponse\"\x00\x12K\n" + + "\n" + + "GetTablets\x12\x1c.vtctldata.GetTabletsRequest\x1a\x1d.vtctldata.GetTabletsResponse\"\x00\x12c\n" + + "\x12GetThrottlerStatus\x12$.vtctldata.GetThrottlerStatusRequest\x1a%.vtctldata.GetThrottlerStatusResponse\"\x00\x12Z\n" + + "\x0fGetTopologyPath\x12!.vtctldata.GetTopologyPathRequest\x1a\".vtctldata.GetTopologyPathResponse\"\x00\x12c\n" + + "\x12GetTransactionInfo\x12$.vtctldata.GetTransactionInfoRequest\x1a%.vtctldata.GetTransactionInfoResponse\"\x00\x12x\n" + + "\x19GetUnresolvedTransactions\x12+.vtctldata.GetUnresolvedTransactionsRequest\x1a,.vtctldata.GetUnresolvedTransactionsResponse\"\x00\x12K\n" + + "\n" + + "GetVersion\x12\x1c.vtctldata.GetVersionRequest\x1a\x1d.vtctldata.GetVersionResponse\"\x00\x12K\n" + + "\n" + + "GetVSchema\x12\x1c.vtctldata.GetVSchemaRequest\x1a\x1d.vtctldata.GetVSchemaResponse\"\x00\x12Q\n" + + "\fGetWorkflows\x12\x1e.vtctldata.GetWorkflowsRequest\x1a\x1f.vtctldata.GetWorkflowsResponse\"\x00\x12]\n" + + "\x10InitShardPrimary\x12\".vtctldata.InitShardPrimaryRequest\x1a#.vtctldata.InitShardPrimaryResponse\"\x00\x12l\n" + + "\x15LaunchSchemaMigration\x12'.vtctldata.LaunchSchemaMigrationRequest\x1a(.vtctldata.LaunchSchemaMigrationResponse\"\x00\x12i\n" + + "\x14LookupVindexComplete\x12&.vtctldata.LookupVindexCompleteRequest\x1a'.vtctldata.LookupVindexCompleteResponse\"\x00\x12c\n" + + "\x12LookupVindexCreate\x12$.vtctldata.LookupVindexCreateRequest\x1a%.vtctldata.LookupVindexCreateResponse\"\x00\x12r\n" + + "\x17LookupVindexExternalize\x12).vtctldata.LookupVindexExternalizeRequest\x1a*.vtctldata.LookupVindexExternalizeResponse\"\x00\x12r\n" + + "\x17LookupVindexInternalize\x12).vtctldata.LookupVindexInternalizeRequest\x1a*.vtctldata.LookupVindexInternalizeResponse\"\x00\x12`\n" + + "\x11MaterializeCreate\x12#.vtctldata.MaterializeCreateRequest\x1a$.vtctldata.MaterializeCreateResponse\"\x00\x12`\n" + + "\x11WorkflowAddTables\x12#.vtctldata.WorkflowAddTablesRequest\x1a$.vtctldata.WorkflowAddTablesResponse\"\x00\x12U\n" + + "\rMigrateCreate\x12\x1f.vtctldata.MigrateCreateRequest\x1a!.vtctldata.WorkflowStatusResponse\"\x00\x12T\n" + + "\rMountRegister\x12\x1f.vtctldata.MountRegisterRequest\x1a .vtctldata.MountRegisterResponse\"\x00\x12Z\n" + + "\x0fMountUnregister\x12!.vtctldata.MountUnregisterRequest\x1a\".vtctldata.MountUnregisterResponse\"\x00\x12H\n" + + "\tMountShow\x12\x1b.vtctldata.MountShowRequest\x1a\x1c.vtctldata.MountShowResponse\"\x00\x12H\n" + + "\tMountList\x12\x1b.vtctldata.MountListRequest\x1a\x1c.vtctldata.MountListResponse\"\x00\x12[\n" + + "\x10MoveTablesCreate\x12\".vtctldata.MoveTablesCreateRequest\x1a!.vtctldata.WorkflowStatusResponse\"\x00\x12c\n" + + "\x12MoveTablesComplete\x12$.vtctldata.MoveTablesCompleteRequest\x1a%.vtctldata.MoveTablesCompleteResponse\"\x00\x12K\n" + + "\n" + + "PingTablet\x12\x1c.vtctldata.PingTabletRequest\x1a\x1d.vtctldata.PingTabletResponse\"\x00\x12i\n" + + "\x14PlannedReparentShard\x12&.vtctldata.PlannedReparentShardRequest\x1a'.vtctldata.PlannedReparentShardResponse\"\x00\x12i\n" + + "\x14RebuildKeyspaceGraph\x12&.vtctldata.RebuildKeyspaceGraphRequest\x1a'.vtctldata.RebuildKeyspaceGraphResponse\"\x00\x12f\n" + + "\x13RebuildVSchemaGraph\x12%.vtctldata.RebuildVSchemaGraphRequest\x1a&.vtctldata.RebuildVSchemaGraphResponse\"\x00\x12Q\n" + + "\fRefreshState\x12\x1e.vtctldata.RefreshStateRequest\x1a\x1f.vtctldata.RefreshStateResponse\"\x00\x12f\n" + + "\x13RefreshStateByShard\x12%.vtctldata.RefreshStateByShardRequest\x1a&.vtctldata.RefreshStateByShardResponse\"\x00\x12Q\n" + + "\fReloadSchema\x12\x1e.vtctldata.ReloadSchemaRequest\x1a\x1f.vtctldata.ReloadSchemaResponse\"\x00\x12i\n" + + "\x14ReloadSchemaKeyspace\x12&.vtctldata.ReloadSchemaKeyspaceRequest\x1a'.vtctldata.ReloadSchemaKeyspaceResponse\"\x00\x12`\n" + + "\x11ReloadSchemaShard\x12#.vtctldata.ReloadSchemaShardRequest\x1a$.vtctldata.ReloadSchemaShardResponse\"\x00\x12Q\n" + + "\fRemoveBackup\x12\x1e.vtctldata.RemoveBackupRequest\x1a\x1f.vtctldata.RemoveBackupResponse\"\x00\x12c\n" + + "\x12RemoveKeyspaceCell\x12$.vtctldata.RemoveKeyspaceCellRequest\x1a%.vtctldata.RemoveKeyspaceCellResponse\"\x00\x12Z\n" + + "\x0fRemoveShardCell\x12!.vtctldata.RemoveShardCellRequest\x1a\".vtctldata.RemoveShardCellResponse\"\x00\x12W\n" + + "\x0eReparentTablet\x12 .vtctldata.ReparentTabletRequest\x1a!.vtctldata.ReparentTabletResponse\"\x00\x12U\n" + + "\rReshardCreate\x12\x1f.vtctldata.ReshardCreateRequest\x1a!.vtctldata.WorkflowStatusResponse\"\x00\x12b\n" + + "\x11RestoreFromBackup\x12#.vtctldata.RestoreFromBackupRequest\x1a$.vtctldata.RestoreFromBackupResponse\"\x000\x01\x12i\n" + + "\x14RetrySchemaMigration\x12&.vtctldata.RetrySchemaMigrationRequest\x1a'.vtctldata.RetrySchemaMigrationResponse\"\x00\x12W\n" + + "\x0eRunHealthCheck\x12 .vtctldata.RunHealthCheckRequest\x1a!.vtctldata.RunHealthCheckResponse\"\x00\x12~\n" + + "\x1bSetKeyspaceDurabilityPolicy\x12-.vtctldata.SetKeyspaceDurabilityPolicyRequest\x1a..vtctldata.SetKeyspaceDurabilityPolicyResponse\"\x00\x12u\n" + + "\x18SetShardIsPrimaryServing\x12*.vtctldata.SetShardIsPrimaryServingRequest\x1a+.vtctldata.SetShardIsPrimaryServingResponse\"\x00\x12l\n" + + "\x15SetShardTabletControl\x12'.vtctldata.SetShardTabletControlRequest\x1a(.vtctldata.SetShardTabletControlResponse\"\x00\x12N\n" + + "\vSetWritable\x12\x1d.vtctldata.SetWritableRequest\x1a\x1e.vtctldata.SetWritableResponse\"\x00\x12f\n" + + "\x13ShardReplicationAdd\x12%.vtctldata.ShardReplicationAddRequest\x1a&.vtctldata.ShardReplicationAddResponse\"\x00\x12f\n" + + "\x13ShardReplicationFix\x12%.vtctldata.ShardReplicationFixRequest\x1a&.vtctldata.ShardReplicationFixResponse\"\x00\x12x\n" + + "\x19ShardReplicationPositions\x12+.vtctldata.ShardReplicationPositionsRequest\x1a,.vtctldata.ShardReplicationPositionsResponse\"\x00\x12o\n" + + "\x16ShardReplicationRemove\x12(.vtctldata.ShardReplicationRemoveRequest\x1a).vtctldata.ShardReplicationRemoveResponse\"\x00\x12N\n" + + "\vSleepTablet\x12\x1d.vtctldata.SleepTabletRequest\x1a\x1e.vtctldata.SleepTabletResponse\"\x00\x12W\n" + + "\x0eSourceShardAdd\x12 .vtctldata.SourceShardAddRequest\x1a!.vtctldata.SourceShardAddResponse\"\x00\x12`\n" + + "\x11SourceShardDelete\x12#.vtctldata.SourceShardDeleteRequest\x1a$.vtctldata.SourceShardDeleteResponse\"\x00\x12]\n" + + "\x10StartReplication\x12\".vtctldata.StartReplicationRequest\x1a#.vtctldata.StartReplicationResponse\"\x00\x12Z\n" + + "\x0fStopReplication\x12!.vtctldata.StopReplicationRequest\x1a\".vtctldata.StopReplicationResponse\"\x00\x12{\n" + + "\x1aTabletExternallyReparented\x12,.vtctldata.TabletExternallyReparentedRequest\x1a-.vtctldata.TabletExternallyReparentedResponse\"\x00\x12W\n" + + "\x0eUpdateCellInfo\x12 .vtctldata.UpdateCellInfoRequest\x1a!.vtctldata.UpdateCellInfoResponse\"\x00\x12]\n" + + "\x10UpdateCellsAlias\x12\".vtctldata.UpdateCellsAliasRequest\x1a#.vtctldata.UpdateCellsAliasResponse\"\x00\x12E\n" + + "\bValidate\x12\x1a.vtctldata.ValidateRequest\x1a\x1b.vtctldata.ValidateResponse\"\x00\x12]\n" + + "\x10ValidateKeyspace\x12\".vtctldata.ValidateKeyspaceRequest\x1a#.vtctldata.ValidateKeyspaceResponse\"\x00\x12~\n" + + "\x1bValidatePermissionsKeyspace\x12-.vtctldata.ValidatePermissionsKeyspaceRequest\x1a..vtctldata.ValidatePermissionsKeyspaceResponse\"\x00\x12o\n" + + "\x16ValidateSchemaKeyspace\x12(.vtctldata.ValidateSchemaKeyspaceRequest\x1a).vtctldata.ValidateSchemaKeyspaceResponse\"\x00\x12T\n" + + "\rValidateShard\x12\x1f.vtctldata.ValidateShardRequest\x1a .vtctldata.ValidateShardResponse\"\x00\x12r\n" + + "\x17ValidateVersionKeyspace\x12).vtctldata.ValidateVersionKeyspaceRequest\x1a*.vtctldata.ValidateVersionKeyspaceResponse\"\x00\x12i\n" + + "\x14ValidateVersionShard\x12&.vtctldata.ValidateVersionShardRequest\x1a'.vtctldata.ValidateVersionShardResponse\"\x00\x12Z\n" + + "\x0fValidateVSchema\x12!.vtctldata.ValidateVSchemaRequest\x1a\".vtctldata.ValidateVSchemaResponse\"\x00\x12N\n" + + "\vVDiffCreate\x12\x1d.vtctldata.VDiffCreateRequest\x1a\x1e.vtctldata.VDiffCreateResponse\"\x00\x12N\n" + + "\vVDiffDelete\x12\x1d.vtctldata.VDiffDeleteRequest\x1a\x1e.vtctldata.VDiffDeleteResponse\"\x00\x12N\n" + + "\vVDiffResume\x12\x1d.vtctldata.VDiffResumeRequest\x1a\x1e.vtctldata.VDiffResumeResponse\"\x00\x12H\n" + + "\tVDiffShow\x12\x1b.vtctldata.VDiffShowRequest\x1a\x1c.vtctldata.VDiffShowResponse\"\x00\x12H\n" + + "\tVDiffStop\x12\x1b.vtctldata.VDiffStopRequest\x1a\x1c.vtctldata.VDiffStopResponse\"\x00\x12W\n" + + "\x0eWorkflowDelete\x12 .vtctldata.WorkflowDeleteRequest\x1a!.vtctldata.WorkflowDeleteResponse\"\x00\x12W\n" + + "\x0eWorkflowStatus\x12 .vtctldata.WorkflowStatusRequest\x1a!.vtctldata.WorkflowStatusResponse\"\x00\x12l\n" + + "\x15WorkflowSwitchTraffic\x12'.vtctldata.WorkflowSwitchTrafficRequest\x1a(.vtctldata.WorkflowSwitchTrafficResponse\"\x00\x12W\n" + + "\x0eWorkflowUpdate\x12 .vtctldata.WorkflowUpdateRequest\x1a!.vtctldata.WorkflowUpdateResponse\"\x00\x12W\n" + + "\x0eGetMirrorRules\x12 .vtctldata.GetMirrorRulesRequest\x1a!.vtctldata.GetMirrorRulesResponse\"\x00\x12l\n" + + "\x15WorkflowMirrorTraffic\x12'.vtctldata.WorkflowMirrorTrafficRequest\x1a(.vtctldata.WorkflowMirrorTrafficResponse\"\x00B+Z)vitess.io/vitess/go/vt/proto/vtctlserviceb\x06proto3" var file_vtctlservice_proto_goTypes = []any{ (*vtctldata.ExecuteVtctlCommandRequest)(nil), // 0: vtctldata.ExecuteVtctlCommandRequest @@ -884,189 +251,191 @@ var file_vtctlservice_proto_goTypes = []any{ (*vtctldata.LookupVindexExternalizeRequest)(nil), // 66: vtctldata.LookupVindexExternalizeRequest (*vtctldata.LookupVindexInternalizeRequest)(nil), // 67: vtctldata.LookupVindexInternalizeRequest (*vtctldata.MaterializeCreateRequest)(nil), // 68: vtctldata.MaterializeCreateRequest - (*vtctldata.MigrateCreateRequest)(nil), // 69: vtctldata.MigrateCreateRequest - (*vtctldata.MountRegisterRequest)(nil), // 70: vtctldata.MountRegisterRequest - (*vtctldata.MountUnregisterRequest)(nil), // 71: vtctldata.MountUnregisterRequest - (*vtctldata.MountShowRequest)(nil), // 72: vtctldata.MountShowRequest - (*vtctldata.MountListRequest)(nil), // 73: vtctldata.MountListRequest - (*vtctldata.MoveTablesCreateRequest)(nil), // 74: vtctldata.MoveTablesCreateRequest - (*vtctldata.MoveTablesCompleteRequest)(nil), // 75: vtctldata.MoveTablesCompleteRequest - (*vtctldata.PingTabletRequest)(nil), // 76: vtctldata.PingTabletRequest - (*vtctldata.PlannedReparentShardRequest)(nil), // 77: vtctldata.PlannedReparentShardRequest - (*vtctldata.RebuildKeyspaceGraphRequest)(nil), // 78: vtctldata.RebuildKeyspaceGraphRequest - (*vtctldata.RebuildVSchemaGraphRequest)(nil), // 79: vtctldata.RebuildVSchemaGraphRequest - (*vtctldata.RefreshStateRequest)(nil), // 80: vtctldata.RefreshStateRequest - (*vtctldata.RefreshStateByShardRequest)(nil), // 81: vtctldata.RefreshStateByShardRequest - (*vtctldata.ReloadSchemaRequest)(nil), // 82: vtctldata.ReloadSchemaRequest - (*vtctldata.ReloadSchemaKeyspaceRequest)(nil), // 83: vtctldata.ReloadSchemaKeyspaceRequest - (*vtctldata.ReloadSchemaShardRequest)(nil), // 84: vtctldata.ReloadSchemaShardRequest - (*vtctldata.RemoveBackupRequest)(nil), // 85: vtctldata.RemoveBackupRequest - (*vtctldata.RemoveKeyspaceCellRequest)(nil), // 86: vtctldata.RemoveKeyspaceCellRequest - (*vtctldata.RemoveShardCellRequest)(nil), // 87: vtctldata.RemoveShardCellRequest - (*vtctldata.ReparentTabletRequest)(nil), // 88: vtctldata.ReparentTabletRequest - (*vtctldata.ReshardCreateRequest)(nil), // 89: vtctldata.ReshardCreateRequest - (*vtctldata.RestoreFromBackupRequest)(nil), // 90: vtctldata.RestoreFromBackupRequest - (*vtctldata.RetrySchemaMigrationRequest)(nil), // 91: vtctldata.RetrySchemaMigrationRequest - (*vtctldata.RunHealthCheckRequest)(nil), // 92: vtctldata.RunHealthCheckRequest - (*vtctldata.SetKeyspaceDurabilityPolicyRequest)(nil), // 93: vtctldata.SetKeyspaceDurabilityPolicyRequest - (*vtctldata.SetShardIsPrimaryServingRequest)(nil), // 94: vtctldata.SetShardIsPrimaryServingRequest - (*vtctldata.SetShardTabletControlRequest)(nil), // 95: vtctldata.SetShardTabletControlRequest - (*vtctldata.SetWritableRequest)(nil), // 96: vtctldata.SetWritableRequest - (*vtctldata.ShardReplicationAddRequest)(nil), // 97: vtctldata.ShardReplicationAddRequest - (*vtctldata.ShardReplicationFixRequest)(nil), // 98: vtctldata.ShardReplicationFixRequest - (*vtctldata.ShardReplicationPositionsRequest)(nil), // 99: vtctldata.ShardReplicationPositionsRequest - (*vtctldata.ShardReplicationRemoveRequest)(nil), // 100: vtctldata.ShardReplicationRemoveRequest - (*vtctldata.SleepTabletRequest)(nil), // 101: vtctldata.SleepTabletRequest - (*vtctldata.SourceShardAddRequest)(nil), // 102: vtctldata.SourceShardAddRequest - (*vtctldata.SourceShardDeleteRequest)(nil), // 103: vtctldata.SourceShardDeleteRequest - (*vtctldata.StartReplicationRequest)(nil), // 104: vtctldata.StartReplicationRequest - (*vtctldata.StopReplicationRequest)(nil), // 105: vtctldata.StopReplicationRequest - (*vtctldata.TabletExternallyReparentedRequest)(nil), // 106: vtctldata.TabletExternallyReparentedRequest - (*vtctldata.UpdateCellInfoRequest)(nil), // 107: vtctldata.UpdateCellInfoRequest - (*vtctldata.UpdateCellsAliasRequest)(nil), // 108: vtctldata.UpdateCellsAliasRequest - (*vtctldata.ValidateRequest)(nil), // 109: vtctldata.ValidateRequest - (*vtctldata.ValidateKeyspaceRequest)(nil), // 110: vtctldata.ValidateKeyspaceRequest - (*vtctldata.ValidatePermissionsKeyspaceRequest)(nil), // 111: vtctldata.ValidatePermissionsKeyspaceRequest - (*vtctldata.ValidateSchemaKeyspaceRequest)(nil), // 112: vtctldata.ValidateSchemaKeyspaceRequest - (*vtctldata.ValidateShardRequest)(nil), // 113: vtctldata.ValidateShardRequest - (*vtctldata.ValidateVersionKeyspaceRequest)(nil), // 114: vtctldata.ValidateVersionKeyspaceRequest - (*vtctldata.ValidateVersionShardRequest)(nil), // 115: vtctldata.ValidateVersionShardRequest - (*vtctldata.ValidateVSchemaRequest)(nil), // 116: vtctldata.ValidateVSchemaRequest - (*vtctldata.VDiffCreateRequest)(nil), // 117: vtctldata.VDiffCreateRequest - (*vtctldata.VDiffDeleteRequest)(nil), // 118: vtctldata.VDiffDeleteRequest - (*vtctldata.VDiffResumeRequest)(nil), // 119: vtctldata.VDiffResumeRequest - (*vtctldata.VDiffShowRequest)(nil), // 120: vtctldata.VDiffShowRequest - (*vtctldata.VDiffStopRequest)(nil), // 121: vtctldata.VDiffStopRequest - (*vtctldata.WorkflowDeleteRequest)(nil), // 122: vtctldata.WorkflowDeleteRequest - (*vtctldata.WorkflowStatusRequest)(nil), // 123: vtctldata.WorkflowStatusRequest - (*vtctldata.WorkflowSwitchTrafficRequest)(nil), // 124: vtctldata.WorkflowSwitchTrafficRequest - (*vtctldata.WorkflowUpdateRequest)(nil), // 125: vtctldata.WorkflowUpdateRequest - (*vtctldata.GetMirrorRulesRequest)(nil), // 126: vtctldata.GetMirrorRulesRequest - (*vtctldata.WorkflowMirrorTrafficRequest)(nil), // 127: vtctldata.WorkflowMirrorTrafficRequest - (*vtctldata.ExecuteVtctlCommandResponse)(nil), // 128: vtctldata.ExecuteVtctlCommandResponse - (*vtctldata.AddCellInfoResponse)(nil), // 129: vtctldata.AddCellInfoResponse - (*vtctldata.AddCellsAliasResponse)(nil), // 130: vtctldata.AddCellsAliasResponse - (*vtctldata.ApplyRoutingRulesResponse)(nil), // 131: vtctldata.ApplyRoutingRulesResponse - (*vtctldata.ApplySchemaResponse)(nil), // 132: vtctldata.ApplySchemaResponse - (*vtctldata.ApplyKeyspaceRoutingRulesResponse)(nil), // 133: vtctldata.ApplyKeyspaceRoutingRulesResponse - (*vtctldata.ApplyShardRoutingRulesResponse)(nil), // 134: vtctldata.ApplyShardRoutingRulesResponse - (*vtctldata.ApplyVSchemaResponse)(nil), // 135: vtctldata.ApplyVSchemaResponse - (*vtctldata.BackupResponse)(nil), // 136: vtctldata.BackupResponse - (*vtctldata.CancelSchemaMigrationResponse)(nil), // 137: vtctldata.CancelSchemaMigrationResponse - (*vtctldata.ChangeTabletTagsResponse)(nil), // 138: vtctldata.ChangeTabletTagsResponse - (*vtctldata.ChangeTabletTypeResponse)(nil), // 139: vtctldata.ChangeTabletTypeResponse - (*vtctldata.CheckThrottlerResponse)(nil), // 140: vtctldata.CheckThrottlerResponse - (*vtctldata.CleanupSchemaMigrationResponse)(nil), // 141: vtctldata.CleanupSchemaMigrationResponse - (*vtctldata.CompleteSchemaMigrationResponse)(nil), // 142: vtctldata.CompleteSchemaMigrationResponse - (*vtctldata.ConcludeTransactionResponse)(nil), // 143: vtctldata.ConcludeTransactionResponse - (*vtctldata.CopySchemaShardResponse)(nil), // 144: vtctldata.CopySchemaShardResponse - (*vtctldata.CreateKeyspaceResponse)(nil), // 145: vtctldata.CreateKeyspaceResponse - (*vtctldata.CreateShardResponse)(nil), // 146: vtctldata.CreateShardResponse - (*vtctldata.DeleteCellInfoResponse)(nil), // 147: vtctldata.DeleteCellInfoResponse - (*vtctldata.DeleteCellsAliasResponse)(nil), // 148: vtctldata.DeleteCellsAliasResponse - (*vtctldata.DeleteKeyspaceResponse)(nil), // 149: vtctldata.DeleteKeyspaceResponse - (*vtctldata.DeleteShardsResponse)(nil), // 150: vtctldata.DeleteShardsResponse - (*vtctldata.DeleteSrvVSchemaResponse)(nil), // 151: vtctldata.DeleteSrvVSchemaResponse - (*vtctldata.DeleteTabletsResponse)(nil), // 152: vtctldata.DeleteTabletsResponse - (*vtctldata.EmergencyReparentShardResponse)(nil), // 153: vtctldata.EmergencyReparentShardResponse - (*vtctldata.ExecuteFetchAsAppResponse)(nil), // 154: vtctldata.ExecuteFetchAsAppResponse - (*vtctldata.ExecuteFetchAsDBAResponse)(nil), // 155: vtctldata.ExecuteFetchAsDBAResponse - (*vtctldata.ExecuteHookResponse)(nil), // 156: vtctldata.ExecuteHookResponse - (*vtctldata.ExecuteMultiFetchAsDBAResponse)(nil), // 157: vtctldata.ExecuteMultiFetchAsDBAResponse - (*vtctldata.FindAllShardsInKeyspaceResponse)(nil), // 158: vtctldata.FindAllShardsInKeyspaceResponse - (*vtctldata.ForceCutOverSchemaMigrationResponse)(nil), // 159: vtctldata.ForceCutOverSchemaMigrationResponse - (*vtctldata.GetBackupsResponse)(nil), // 160: vtctldata.GetBackupsResponse - (*vtctldata.GetCellInfoResponse)(nil), // 161: vtctldata.GetCellInfoResponse - (*vtctldata.GetCellInfoNamesResponse)(nil), // 162: vtctldata.GetCellInfoNamesResponse - (*vtctldata.GetCellsAliasesResponse)(nil), // 163: vtctldata.GetCellsAliasesResponse - (*vtctldata.GetFullStatusResponse)(nil), // 164: vtctldata.GetFullStatusResponse - (*vtctldata.GetKeyspaceResponse)(nil), // 165: vtctldata.GetKeyspaceResponse - (*vtctldata.GetKeyspacesResponse)(nil), // 166: vtctldata.GetKeyspacesResponse - (*vtctldata.GetKeyspaceRoutingRulesResponse)(nil), // 167: vtctldata.GetKeyspaceRoutingRulesResponse - (*vtctldata.GetPermissionsResponse)(nil), // 168: vtctldata.GetPermissionsResponse - (*vtctldata.GetRoutingRulesResponse)(nil), // 169: vtctldata.GetRoutingRulesResponse - (*vtctldata.GetSchemaResponse)(nil), // 170: vtctldata.GetSchemaResponse - (*vtctldata.GetSchemaMigrationsResponse)(nil), // 171: vtctldata.GetSchemaMigrationsResponse - (*vtctldata.GetShardReplicationResponse)(nil), // 172: vtctldata.GetShardReplicationResponse - (*vtctldata.GetShardResponse)(nil), // 173: vtctldata.GetShardResponse - (*vtctldata.GetShardRoutingRulesResponse)(nil), // 174: vtctldata.GetShardRoutingRulesResponse - (*vtctldata.GetSrvKeyspaceNamesResponse)(nil), // 175: vtctldata.GetSrvKeyspaceNamesResponse - (*vtctldata.GetSrvKeyspacesResponse)(nil), // 176: vtctldata.GetSrvKeyspacesResponse - (*vtctldata.UpdateThrottlerConfigResponse)(nil), // 177: vtctldata.UpdateThrottlerConfigResponse - (*vtctldata.GetSrvVSchemaResponse)(nil), // 178: vtctldata.GetSrvVSchemaResponse - (*vtctldata.GetSrvVSchemasResponse)(nil), // 179: vtctldata.GetSrvVSchemasResponse - (*vtctldata.GetTabletResponse)(nil), // 180: vtctldata.GetTabletResponse - (*vtctldata.GetTabletsResponse)(nil), // 181: vtctldata.GetTabletsResponse - (*vtctldata.GetThrottlerStatusResponse)(nil), // 182: vtctldata.GetThrottlerStatusResponse - (*vtctldata.GetTopologyPathResponse)(nil), // 183: vtctldata.GetTopologyPathResponse - (*vtctldata.GetTransactionInfoResponse)(nil), // 184: vtctldata.GetTransactionInfoResponse - (*vtctldata.GetUnresolvedTransactionsResponse)(nil), // 185: vtctldata.GetUnresolvedTransactionsResponse - (*vtctldata.GetVersionResponse)(nil), // 186: vtctldata.GetVersionResponse - (*vtctldata.GetVSchemaResponse)(nil), // 187: vtctldata.GetVSchemaResponse - (*vtctldata.GetWorkflowsResponse)(nil), // 188: vtctldata.GetWorkflowsResponse - (*vtctldata.InitShardPrimaryResponse)(nil), // 189: vtctldata.InitShardPrimaryResponse - (*vtctldata.LaunchSchemaMigrationResponse)(nil), // 190: vtctldata.LaunchSchemaMigrationResponse - (*vtctldata.LookupVindexCompleteResponse)(nil), // 191: vtctldata.LookupVindexCompleteResponse - (*vtctldata.LookupVindexCreateResponse)(nil), // 192: vtctldata.LookupVindexCreateResponse - (*vtctldata.LookupVindexExternalizeResponse)(nil), // 193: vtctldata.LookupVindexExternalizeResponse - (*vtctldata.LookupVindexInternalizeResponse)(nil), // 194: vtctldata.LookupVindexInternalizeResponse - (*vtctldata.MaterializeCreateResponse)(nil), // 195: vtctldata.MaterializeCreateResponse - (*vtctldata.WorkflowStatusResponse)(nil), // 196: vtctldata.WorkflowStatusResponse - (*vtctldata.MountRegisterResponse)(nil), // 197: vtctldata.MountRegisterResponse - (*vtctldata.MountUnregisterResponse)(nil), // 198: vtctldata.MountUnregisterResponse - (*vtctldata.MountShowResponse)(nil), // 199: vtctldata.MountShowResponse - (*vtctldata.MountListResponse)(nil), // 200: vtctldata.MountListResponse - (*vtctldata.MoveTablesCompleteResponse)(nil), // 201: vtctldata.MoveTablesCompleteResponse - (*vtctldata.PingTabletResponse)(nil), // 202: vtctldata.PingTabletResponse - (*vtctldata.PlannedReparentShardResponse)(nil), // 203: vtctldata.PlannedReparentShardResponse - (*vtctldata.RebuildKeyspaceGraphResponse)(nil), // 204: vtctldata.RebuildKeyspaceGraphResponse - (*vtctldata.RebuildVSchemaGraphResponse)(nil), // 205: vtctldata.RebuildVSchemaGraphResponse - (*vtctldata.RefreshStateResponse)(nil), // 206: vtctldata.RefreshStateResponse - (*vtctldata.RefreshStateByShardResponse)(nil), // 207: vtctldata.RefreshStateByShardResponse - (*vtctldata.ReloadSchemaResponse)(nil), // 208: vtctldata.ReloadSchemaResponse - (*vtctldata.ReloadSchemaKeyspaceResponse)(nil), // 209: vtctldata.ReloadSchemaKeyspaceResponse - (*vtctldata.ReloadSchemaShardResponse)(nil), // 210: vtctldata.ReloadSchemaShardResponse - (*vtctldata.RemoveBackupResponse)(nil), // 211: vtctldata.RemoveBackupResponse - (*vtctldata.RemoveKeyspaceCellResponse)(nil), // 212: vtctldata.RemoveKeyspaceCellResponse - (*vtctldata.RemoveShardCellResponse)(nil), // 213: vtctldata.RemoveShardCellResponse - (*vtctldata.ReparentTabletResponse)(nil), // 214: vtctldata.ReparentTabletResponse - (*vtctldata.RestoreFromBackupResponse)(nil), // 215: vtctldata.RestoreFromBackupResponse - (*vtctldata.RetrySchemaMigrationResponse)(nil), // 216: vtctldata.RetrySchemaMigrationResponse - (*vtctldata.RunHealthCheckResponse)(nil), // 217: vtctldata.RunHealthCheckResponse - (*vtctldata.SetKeyspaceDurabilityPolicyResponse)(nil), // 218: vtctldata.SetKeyspaceDurabilityPolicyResponse - (*vtctldata.SetShardIsPrimaryServingResponse)(nil), // 219: vtctldata.SetShardIsPrimaryServingResponse - (*vtctldata.SetShardTabletControlResponse)(nil), // 220: vtctldata.SetShardTabletControlResponse - (*vtctldata.SetWritableResponse)(nil), // 221: vtctldata.SetWritableResponse - (*vtctldata.ShardReplicationAddResponse)(nil), // 222: vtctldata.ShardReplicationAddResponse - (*vtctldata.ShardReplicationFixResponse)(nil), // 223: vtctldata.ShardReplicationFixResponse - (*vtctldata.ShardReplicationPositionsResponse)(nil), // 224: vtctldata.ShardReplicationPositionsResponse - (*vtctldata.ShardReplicationRemoveResponse)(nil), // 225: vtctldata.ShardReplicationRemoveResponse - (*vtctldata.SleepTabletResponse)(nil), // 226: vtctldata.SleepTabletResponse - (*vtctldata.SourceShardAddResponse)(nil), // 227: vtctldata.SourceShardAddResponse - (*vtctldata.SourceShardDeleteResponse)(nil), // 228: vtctldata.SourceShardDeleteResponse - (*vtctldata.StartReplicationResponse)(nil), // 229: vtctldata.StartReplicationResponse - (*vtctldata.StopReplicationResponse)(nil), // 230: vtctldata.StopReplicationResponse - (*vtctldata.TabletExternallyReparentedResponse)(nil), // 231: vtctldata.TabletExternallyReparentedResponse - (*vtctldata.UpdateCellInfoResponse)(nil), // 232: vtctldata.UpdateCellInfoResponse - (*vtctldata.UpdateCellsAliasResponse)(nil), // 233: vtctldata.UpdateCellsAliasResponse - (*vtctldata.ValidateResponse)(nil), // 234: vtctldata.ValidateResponse - (*vtctldata.ValidateKeyspaceResponse)(nil), // 235: vtctldata.ValidateKeyspaceResponse - (*vtctldata.ValidatePermissionsKeyspaceResponse)(nil), // 236: vtctldata.ValidatePermissionsKeyspaceResponse - (*vtctldata.ValidateSchemaKeyspaceResponse)(nil), // 237: vtctldata.ValidateSchemaKeyspaceResponse - (*vtctldata.ValidateShardResponse)(nil), // 238: vtctldata.ValidateShardResponse - (*vtctldata.ValidateVersionKeyspaceResponse)(nil), // 239: vtctldata.ValidateVersionKeyspaceResponse - (*vtctldata.ValidateVersionShardResponse)(nil), // 240: vtctldata.ValidateVersionShardResponse - (*vtctldata.ValidateVSchemaResponse)(nil), // 241: vtctldata.ValidateVSchemaResponse - (*vtctldata.VDiffCreateResponse)(nil), // 242: vtctldata.VDiffCreateResponse - (*vtctldata.VDiffDeleteResponse)(nil), // 243: vtctldata.VDiffDeleteResponse - (*vtctldata.VDiffResumeResponse)(nil), // 244: vtctldata.VDiffResumeResponse - (*vtctldata.VDiffShowResponse)(nil), // 245: vtctldata.VDiffShowResponse - (*vtctldata.VDiffStopResponse)(nil), // 246: vtctldata.VDiffStopResponse - (*vtctldata.WorkflowDeleteResponse)(nil), // 247: vtctldata.WorkflowDeleteResponse - (*vtctldata.WorkflowSwitchTrafficResponse)(nil), // 248: vtctldata.WorkflowSwitchTrafficResponse - (*vtctldata.WorkflowUpdateResponse)(nil), // 249: vtctldata.WorkflowUpdateResponse - (*vtctldata.GetMirrorRulesResponse)(nil), // 250: vtctldata.GetMirrorRulesResponse - (*vtctldata.WorkflowMirrorTrafficResponse)(nil), // 251: vtctldata.WorkflowMirrorTrafficResponse + (*vtctldata.WorkflowAddTablesRequest)(nil), // 69: vtctldata.WorkflowAddTablesRequest + (*vtctldata.MigrateCreateRequest)(nil), // 70: vtctldata.MigrateCreateRequest + (*vtctldata.MountRegisterRequest)(nil), // 71: vtctldata.MountRegisterRequest + (*vtctldata.MountUnregisterRequest)(nil), // 72: vtctldata.MountUnregisterRequest + (*vtctldata.MountShowRequest)(nil), // 73: vtctldata.MountShowRequest + (*vtctldata.MountListRequest)(nil), // 74: vtctldata.MountListRequest + (*vtctldata.MoveTablesCreateRequest)(nil), // 75: vtctldata.MoveTablesCreateRequest + (*vtctldata.MoveTablesCompleteRequest)(nil), // 76: vtctldata.MoveTablesCompleteRequest + (*vtctldata.PingTabletRequest)(nil), // 77: vtctldata.PingTabletRequest + (*vtctldata.PlannedReparentShardRequest)(nil), // 78: vtctldata.PlannedReparentShardRequest + (*vtctldata.RebuildKeyspaceGraphRequest)(nil), // 79: vtctldata.RebuildKeyspaceGraphRequest + (*vtctldata.RebuildVSchemaGraphRequest)(nil), // 80: vtctldata.RebuildVSchemaGraphRequest + (*vtctldata.RefreshStateRequest)(nil), // 81: vtctldata.RefreshStateRequest + (*vtctldata.RefreshStateByShardRequest)(nil), // 82: vtctldata.RefreshStateByShardRequest + (*vtctldata.ReloadSchemaRequest)(nil), // 83: vtctldata.ReloadSchemaRequest + (*vtctldata.ReloadSchemaKeyspaceRequest)(nil), // 84: vtctldata.ReloadSchemaKeyspaceRequest + (*vtctldata.ReloadSchemaShardRequest)(nil), // 85: vtctldata.ReloadSchemaShardRequest + (*vtctldata.RemoveBackupRequest)(nil), // 86: vtctldata.RemoveBackupRequest + (*vtctldata.RemoveKeyspaceCellRequest)(nil), // 87: vtctldata.RemoveKeyspaceCellRequest + (*vtctldata.RemoveShardCellRequest)(nil), // 88: vtctldata.RemoveShardCellRequest + (*vtctldata.ReparentTabletRequest)(nil), // 89: vtctldata.ReparentTabletRequest + (*vtctldata.ReshardCreateRequest)(nil), // 90: vtctldata.ReshardCreateRequest + (*vtctldata.RestoreFromBackupRequest)(nil), // 91: vtctldata.RestoreFromBackupRequest + (*vtctldata.RetrySchemaMigrationRequest)(nil), // 92: vtctldata.RetrySchemaMigrationRequest + (*vtctldata.RunHealthCheckRequest)(nil), // 93: vtctldata.RunHealthCheckRequest + (*vtctldata.SetKeyspaceDurabilityPolicyRequest)(nil), // 94: vtctldata.SetKeyspaceDurabilityPolicyRequest + (*vtctldata.SetShardIsPrimaryServingRequest)(nil), // 95: vtctldata.SetShardIsPrimaryServingRequest + (*vtctldata.SetShardTabletControlRequest)(nil), // 96: vtctldata.SetShardTabletControlRequest + (*vtctldata.SetWritableRequest)(nil), // 97: vtctldata.SetWritableRequest + (*vtctldata.ShardReplicationAddRequest)(nil), // 98: vtctldata.ShardReplicationAddRequest + (*vtctldata.ShardReplicationFixRequest)(nil), // 99: vtctldata.ShardReplicationFixRequest + (*vtctldata.ShardReplicationPositionsRequest)(nil), // 100: vtctldata.ShardReplicationPositionsRequest + (*vtctldata.ShardReplicationRemoveRequest)(nil), // 101: vtctldata.ShardReplicationRemoveRequest + (*vtctldata.SleepTabletRequest)(nil), // 102: vtctldata.SleepTabletRequest + (*vtctldata.SourceShardAddRequest)(nil), // 103: vtctldata.SourceShardAddRequest + (*vtctldata.SourceShardDeleteRequest)(nil), // 104: vtctldata.SourceShardDeleteRequest + (*vtctldata.StartReplicationRequest)(nil), // 105: vtctldata.StartReplicationRequest + (*vtctldata.StopReplicationRequest)(nil), // 106: vtctldata.StopReplicationRequest + (*vtctldata.TabletExternallyReparentedRequest)(nil), // 107: vtctldata.TabletExternallyReparentedRequest + (*vtctldata.UpdateCellInfoRequest)(nil), // 108: vtctldata.UpdateCellInfoRequest + (*vtctldata.UpdateCellsAliasRequest)(nil), // 109: vtctldata.UpdateCellsAliasRequest + (*vtctldata.ValidateRequest)(nil), // 110: vtctldata.ValidateRequest + (*vtctldata.ValidateKeyspaceRequest)(nil), // 111: vtctldata.ValidateKeyspaceRequest + (*vtctldata.ValidatePermissionsKeyspaceRequest)(nil), // 112: vtctldata.ValidatePermissionsKeyspaceRequest + (*vtctldata.ValidateSchemaKeyspaceRequest)(nil), // 113: vtctldata.ValidateSchemaKeyspaceRequest + (*vtctldata.ValidateShardRequest)(nil), // 114: vtctldata.ValidateShardRequest + (*vtctldata.ValidateVersionKeyspaceRequest)(nil), // 115: vtctldata.ValidateVersionKeyspaceRequest + (*vtctldata.ValidateVersionShardRequest)(nil), // 116: vtctldata.ValidateVersionShardRequest + (*vtctldata.ValidateVSchemaRequest)(nil), // 117: vtctldata.ValidateVSchemaRequest + (*vtctldata.VDiffCreateRequest)(nil), // 118: vtctldata.VDiffCreateRequest + (*vtctldata.VDiffDeleteRequest)(nil), // 119: vtctldata.VDiffDeleteRequest + (*vtctldata.VDiffResumeRequest)(nil), // 120: vtctldata.VDiffResumeRequest + (*vtctldata.VDiffShowRequest)(nil), // 121: vtctldata.VDiffShowRequest + (*vtctldata.VDiffStopRequest)(nil), // 122: vtctldata.VDiffStopRequest + (*vtctldata.WorkflowDeleteRequest)(nil), // 123: vtctldata.WorkflowDeleteRequest + (*vtctldata.WorkflowStatusRequest)(nil), // 124: vtctldata.WorkflowStatusRequest + (*vtctldata.WorkflowSwitchTrafficRequest)(nil), // 125: vtctldata.WorkflowSwitchTrafficRequest + (*vtctldata.WorkflowUpdateRequest)(nil), // 126: vtctldata.WorkflowUpdateRequest + (*vtctldata.GetMirrorRulesRequest)(nil), // 127: vtctldata.GetMirrorRulesRequest + (*vtctldata.WorkflowMirrorTrafficRequest)(nil), // 128: vtctldata.WorkflowMirrorTrafficRequest + (*vtctldata.ExecuteVtctlCommandResponse)(nil), // 129: vtctldata.ExecuteVtctlCommandResponse + (*vtctldata.AddCellInfoResponse)(nil), // 130: vtctldata.AddCellInfoResponse + (*vtctldata.AddCellsAliasResponse)(nil), // 131: vtctldata.AddCellsAliasResponse + (*vtctldata.ApplyRoutingRulesResponse)(nil), // 132: vtctldata.ApplyRoutingRulesResponse + (*vtctldata.ApplySchemaResponse)(nil), // 133: vtctldata.ApplySchemaResponse + (*vtctldata.ApplyKeyspaceRoutingRulesResponse)(nil), // 134: vtctldata.ApplyKeyspaceRoutingRulesResponse + (*vtctldata.ApplyShardRoutingRulesResponse)(nil), // 135: vtctldata.ApplyShardRoutingRulesResponse + (*vtctldata.ApplyVSchemaResponse)(nil), // 136: vtctldata.ApplyVSchemaResponse + (*vtctldata.BackupResponse)(nil), // 137: vtctldata.BackupResponse + (*vtctldata.CancelSchemaMigrationResponse)(nil), // 138: vtctldata.CancelSchemaMigrationResponse + (*vtctldata.ChangeTabletTagsResponse)(nil), // 139: vtctldata.ChangeTabletTagsResponse + (*vtctldata.ChangeTabletTypeResponse)(nil), // 140: vtctldata.ChangeTabletTypeResponse + (*vtctldata.CheckThrottlerResponse)(nil), // 141: vtctldata.CheckThrottlerResponse + (*vtctldata.CleanupSchemaMigrationResponse)(nil), // 142: vtctldata.CleanupSchemaMigrationResponse + (*vtctldata.CompleteSchemaMigrationResponse)(nil), // 143: vtctldata.CompleteSchemaMigrationResponse + (*vtctldata.ConcludeTransactionResponse)(nil), // 144: vtctldata.ConcludeTransactionResponse + (*vtctldata.CopySchemaShardResponse)(nil), // 145: vtctldata.CopySchemaShardResponse + (*vtctldata.CreateKeyspaceResponse)(nil), // 146: vtctldata.CreateKeyspaceResponse + (*vtctldata.CreateShardResponse)(nil), // 147: vtctldata.CreateShardResponse + (*vtctldata.DeleteCellInfoResponse)(nil), // 148: vtctldata.DeleteCellInfoResponse + (*vtctldata.DeleteCellsAliasResponse)(nil), // 149: vtctldata.DeleteCellsAliasResponse + (*vtctldata.DeleteKeyspaceResponse)(nil), // 150: vtctldata.DeleteKeyspaceResponse + (*vtctldata.DeleteShardsResponse)(nil), // 151: vtctldata.DeleteShardsResponse + (*vtctldata.DeleteSrvVSchemaResponse)(nil), // 152: vtctldata.DeleteSrvVSchemaResponse + (*vtctldata.DeleteTabletsResponse)(nil), // 153: vtctldata.DeleteTabletsResponse + (*vtctldata.EmergencyReparentShardResponse)(nil), // 154: vtctldata.EmergencyReparentShardResponse + (*vtctldata.ExecuteFetchAsAppResponse)(nil), // 155: vtctldata.ExecuteFetchAsAppResponse + (*vtctldata.ExecuteFetchAsDBAResponse)(nil), // 156: vtctldata.ExecuteFetchAsDBAResponse + (*vtctldata.ExecuteHookResponse)(nil), // 157: vtctldata.ExecuteHookResponse + (*vtctldata.ExecuteMultiFetchAsDBAResponse)(nil), // 158: vtctldata.ExecuteMultiFetchAsDBAResponse + (*vtctldata.FindAllShardsInKeyspaceResponse)(nil), // 159: vtctldata.FindAllShardsInKeyspaceResponse + (*vtctldata.ForceCutOverSchemaMigrationResponse)(nil), // 160: vtctldata.ForceCutOverSchemaMigrationResponse + (*vtctldata.GetBackupsResponse)(nil), // 161: vtctldata.GetBackupsResponse + (*vtctldata.GetCellInfoResponse)(nil), // 162: vtctldata.GetCellInfoResponse + (*vtctldata.GetCellInfoNamesResponse)(nil), // 163: vtctldata.GetCellInfoNamesResponse + (*vtctldata.GetCellsAliasesResponse)(nil), // 164: vtctldata.GetCellsAliasesResponse + (*vtctldata.GetFullStatusResponse)(nil), // 165: vtctldata.GetFullStatusResponse + (*vtctldata.GetKeyspaceResponse)(nil), // 166: vtctldata.GetKeyspaceResponse + (*vtctldata.GetKeyspacesResponse)(nil), // 167: vtctldata.GetKeyspacesResponse + (*vtctldata.GetKeyspaceRoutingRulesResponse)(nil), // 168: vtctldata.GetKeyspaceRoutingRulesResponse + (*vtctldata.GetPermissionsResponse)(nil), // 169: vtctldata.GetPermissionsResponse + (*vtctldata.GetRoutingRulesResponse)(nil), // 170: vtctldata.GetRoutingRulesResponse + (*vtctldata.GetSchemaResponse)(nil), // 171: vtctldata.GetSchemaResponse + (*vtctldata.GetSchemaMigrationsResponse)(nil), // 172: vtctldata.GetSchemaMigrationsResponse + (*vtctldata.GetShardReplicationResponse)(nil), // 173: vtctldata.GetShardReplicationResponse + (*vtctldata.GetShardResponse)(nil), // 174: vtctldata.GetShardResponse + (*vtctldata.GetShardRoutingRulesResponse)(nil), // 175: vtctldata.GetShardRoutingRulesResponse + (*vtctldata.GetSrvKeyspaceNamesResponse)(nil), // 176: vtctldata.GetSrvKeyspaceNamesResponse + (*vtctldata.GetSrvKeyspacesResponse)(nil), // 177: vtctldata.GetSrvKeyspacesResponse + (*vtctldata.UpdateThrottlerConfigResponse)(nil), // 178: vtctldata.UpdateThrottlerConfigResponse + (*vtctldata.GetSrvVSchemaResponse)(nil), // 179: vtctldata.GetSrvVSchemaResponse + (*vtctldata.GetSrvVSchemasResponse)(nil), // 180: vtctldata.GetSrvVSchemasResponse + (*vtctldata.GetTabletResponse)(nil), // 181: vtctldata.GetTabletResponse + (*vtctldata.GetTabletsResponse)(nil), // 182: vtctldata.GetTabletsResponse + (*vtctldata.GetThrottlerStatusResponse)(nil), // 183: vtctldata.GetThrottlerStatusResponse + (*vtctldata.GetTopologyPathResponse)(nil), // 184: vtctldata.GetTopologyPathResponse + (*vtctldata.GetTransactionInfoResponse)(nil), // 185: vtctldata.GetTransactionInfoResponse + (*vtctldata.GetUnresolvedTransactionsResponse)(nil), // 186: vtctldata.GetUnresolvedTransactionsResponse + (*vtctldata.GetVersionResponse)(nil), // 187: vtctldata.GetVersionResponse + (*vtctldata.GetVSchemaResponse)(nil), // 188: vtctldata.GetVSchemaResponse + (*vtctldata.GetWorkflowsResponse)(nil), // 189: vtctldata.GetWorkflowsResponse + (*vtctldata.InitShardPrimaryResponse)(nil), // 190: vtctldata.InitShardPrimaryResponse + (*vtctldata.LaunchSchemaMigrationResponse)(nil), // 191: vtctldata.LaunchSchemaMigrationResponse + (*vtctldata.LookupVindexCompleteResponse)(nil), // 192: vtctldata.LookupVindexCompleteResponse + (*vtctldata.LookupVindexCreateResponse)(nil), // 193: vtctldata.LookupVindexCreateResponse + (*vtctldata.LookupVindexExternalizeResponse)(nil), // 194: vtctldata.LookupVindexExternalizeResponse + (*vtctldata.LookupVindexInternalizeResponse)(nil), // 195: vtctldata.LookupVindexInternalizeResponse + (*vtctldata.MaterializeCreateResponse)(nil), // 196: vtctldata.MaterializeCreateResponse + (*vtctldata.WorkflowAddTablesResponse)(nil), // 197: vtctldata.WorkflowAddTablesResponse + (*vtctldata.WorkflowStatusResponse)(nil), // 198: vtctldata.WorkflowStatusResponse + (*vtctldata.MountRegisterResponse)(nil), // 199: vtctldata.MountRegisterResponse + (*vtctldata.MountUnregisterResponse)(nil), // 200: vtctldata.MountUnregisterResponse + (*vtctldata.MountShowResponse)(nil), // 201: vtctldata.MountShowResponse + (*vtctldata.MountListResponse)(nil), // 202: vtctldata.MountListResponse + (*vtctldata.MoveTablesCompleteResponse)(nil), // 203: vtctldata.MoveTablesCompleteResponse + (*vtctldata.PingTabletResponse)(nil), // 204: vtctldata.PingTabletResponse + (*vtctldata.PlannedReparentShardResponse)(nil), // 205: vtctldata.PlannedReparentShardResponse + (*vtctldata.RebuildKeyspaceGraphResponse)(nil), // 206: vtctldata.RebuildKeyspaceGraphResponse + (*vtctldata.RebuildVSchemaGraphResponse)(nil), // 207: vtctldata.RebuildVSchemaGraphResponse + (*vtctldata.RefreshStateResponse)(nil), // 208: vtctldata.RefreshStateResponse + (*vtctldata.RefreshStateByShardResponse)(nil), // 209: vtctldata.RefreshStateByShardResponse + (*vtctldata.ReloadSchemaResponse)(nil), // 210: vtctldata.ReloadSchemaResponse + (*vtctldata.ReloadSchemaKeyspaceResponse)(nil), // 211: vtctldata.ReloadSchemaKeyspaceResponse + (*vtctldata.ReloadSchemaShardResponse)(nil), // 212: vtctldata.ReloadSchemaShardResponse + (*vtctldata.RemoveBackupResponse)(nil), // 213: vtctldata.RemoveBackupResponse + (*vtctldata.RemoveKeyspaceCellResponse)(nil), // 214: vtctldata.RemoveKeyspaceCellResponse + (*vtctldata.RemoveShardCellResponse)(nil), // 215: vtctldata.RemoveShardCellResponse + (*vtctldata.ReparentTabletResponse)(nil), // 216: vtctldata.ReparentTabletResponse + (*vtctldata.RestoreFromBackupResponse)(nil), // 217: vtctldata.RestoreFromBackupResponse + (*vtctldata.RetrySchemaMigrationResponse)(nil), // 218: vtctldata.RetrySchemaMigrationResponse + (*vtctldata.RunHealthCheckResponse)(nil), // 219: vtctldata.RunHealthCheckResponse + (*vtctldata.SetKeyspaceDurabilityPolicyResponse)(nil), // 220: vtctldata.SetKeyspaceDurabilityPolicyResponse + (*vtctldata.SetShardIsPrimaryServingResponse)(nil), // 221: vtctldata.SetShardIsPrimaryServingResponse + (*vtctldata.SetShardTabletControlResponse)(nil), // 222: vtctldata.SetShardTabletControlResponse + (*vtctldata.SetWritableResponse)(nil), // 223: vtctldata.SetWritableResponse + (*vtctldata.ShardReplicationAddResponse)(nil), // 224: vtctldata.ShardReplicationAddResponse + (*vtctldata.ShardReplicationFixResponse)(nil), // 225: vtctldata.ShardReplicationFixResponse + (*vtctldata.ShardReplicationPositionsResponse)(nil), // 226: vtctldata.ShardReplicationPositionsResponse + (*vtctldata.ShardReplicationRemoveResponse)(nil), // 227: vtctldata.ShardReplicationRemoveResponse + (*vtctldata.SleepTabletResponse)(nil), // 228: vtctldata.SleepTabletResponse + (*vtctldata.SourceShardAddResponse)(nil), // 229: vtctldata.SourceShardAddResponse + (*vtctldata.SourceShardDeleteResponse)(nil), // 230: vtctldata.SourceShardDeleteResponse + (*vtctldata.StartReplicationResponse)(nil), // 231: vtctldata.StartReplicationResponse + (*vtctldata.StopReplicationResponse)(nil), // 232: vtctldata.StopReplicationResponse + (*vtctldata.TabletExternallyReparentedResponse)(nil), // 233: vtctldata.TabletExternallyReparentedResponse + (*vtctldata.UpdateCellInfoResponse)(nil), // 234: vtctldata.UpdateCellInfoResponse + (*vtctldata.UpdateCellsAliasResponse)(nil), // 235: vtctldata.UpdateCellsAliasResponse + (*vtctldata.ValidateResponse)(nil), // 236: vtctldata.ValidateResponse + (*vtctldata.ValidateKeyspaceResponse)(nil), // 237: vtctldata.ValidateKeyspaceResponse + (*vtctldata.ValidatePermissionsKeyspaceResponse)(nil), // 238: vtctldata.ValidatePermissionsKeyspaceResponse + (*vtctldata.ValidateSchemaKeyspaceResponse)(nil), // 239: vtctldata.ValidateSchemaKeyspaceResponse + (*vtctldata.ValidateShardResponse)(nil), // 240: vtctldata.ValidateShardResponse + (*vtctldata.ValidateVersionKeyspaceResponse)(nil), // 241: vtctldata.ValidateVersionKeyspaceResponse + (*vtctldata.ValidateVersionShardResponse)(nil), // 242: vtctldata.ValidateVersionShardResponse + (*vtctldata.ValidateVSchemaResponse)(nil), // 243: vtctldata.ValidateVSchemaResponse + (*vtctldata.VDiffCreateResponse)(nil), // 244: vtctldata.VDiffCreateResponse + (*vtctldata.VDiffDeleteResponse)(nil), // 245: vtctldata.VDiffDeleteResponse + (*vtctldata.VDiffResumeResponse)(nil), // 246: vtctldata.VDiffResumeResponse + (*vtctldata.VDiffShowResponse)(nil), // 247: vtctldata.VDiffShowResponse + (*vtctldata.VDiffStopResponse)(nil), // 248: vtctldata.VDiffStopResponse + (*vtctldata.WorkflowDeleteResponse)(nil), // 249: vtctldata.WorkflowDeleteResponse + (*vtctldata.WorkflowSwitchTrafficResponse)(nil), // 250: vtctldata.WorkflowSwitchTrafficResponse + (*vtctldata.WorkflowUpdateResponse)(nil), // 251: vtctldata.WorkflowUpdateResponse + (*vtctldata.GetMirrorRulesResponse)(nil), // 252: vtctldata.GetMirrorRulesResponse + (*vtctldata.WorkflowMirrorTrafficResponse)(nil), // 253: vtctldata.WorkflowMirrorTrafficResponse } var file_vtctlservice_proto_depIdxs = []int32{ 0, // 0: vtctlservice.Vtctl.ExecuteVtctlCommand:input_type -> vtctldata.ExecuteVtctlCommandRequest @@ -1138,195 +507,197 @@ var file_vtctlservice_proto_depIdxs = []int32{ 66, // 66: vtctlservice.Vtctld.LookupVindexExternalize:input_type -> vtctldata.LookupVindexExternalizeRequest 67, // 67: vtctlservice.Vtctld.LookupVindexInternalize:input_type -> vtctldata.LookupVindexInternalizeRequest 68, // 68: vtctlservice.Vtctld.MaterializeCreate:input_type -> vtctldata.MaterializeCreateRequest - 69, // 69: vtctlservice.Vtctld.MigrateCreate:input_type -> vtctldata.MigrateCreateRequest - 70, // 70: vtctlservice.Vtctld.MountRegister:input_type -> vtctldata.MountRegisterRequest - 71, // 71: vtctlservice.Vtctld.MountUnregister:input_type -> vtctldata.MountUnregisterRequest - 72, // 72: vtctlservice.Vtctld.MountShow:input_type -> vtctldata.MountShowRequest - 73, // 73: vtctlservice.Vtctld.MountList:input_type -> vtctldata.MountListRequest - 74, // 74: vtctlservice.Vtctld.MoveTablesCreate:input_type -> vtctldata.MoveTablesCreateRequest - 75, // 75: vtctlservice.Vtctld.MoveTablesComplete:input_type -> vtctldata.MoveTablesCompleteRequest - 76, // 76: vtctlservice.Vtctld.PingTablet:input_type -> vtctldata.PingTabletRequest - 77, // 77: vtctlservice.Vtctld.PlannedReparentShard:input_type -> vtctldata.PlannedReparentShardRequest - 78, // 78: vtctlservice.Vtctld.RebuildKeyspaceGraph:input_type -> vtctldata.RebuildKeyspaceGraphRequest - 79, // 79: vtctlservice.Vtctld.RebuildVSchemaGraph:input_type -> vtctldata.RebuildVSchemaGraphRequest - 80, // 80: vtctlservice.Vtctld.RefreshState:input_type -> vtctldata.RefreshStateRequest - 81, // 81: vtctlservice.Vtctld.RefreshStateByShard:input_type -> vtctldata.RefreshStateByShardRequest - 82, // 82: vtctlservice.Vtctld.ReloadSchema:input_type -> vtctldata.ReloadSchemaRequest - 83, // 83: vtctlservice.Vtctld.ReloadSchemaKeyspace:input_type -> vtctldata.ReloadSchemaKeyspaceRequest - 84, // 84: vtctlservice.Vtctld.ReloadSchemaShard:input_type -> vtctldata.ReloadSchemaShardRequest - 85, // 85: vtctlservice.Vtctld.RemoveBackup:input_type -> vtctldata.RemoveBackupRequest - 86, // 86: vtctlservice.Vtctld.RemoveKeyspaceCell:input_type -> vtctldata.RemoveKeyspaceCellRequest - 87, // 87: vtctlservice.Vtctld.RemoveShardCell:input_type -> vtctldata.RemoveShardCellRequest - 88, // 88: vtctlservice.Vtctld.ReparentTablet:input_type -> vtctldata.ReparentTabletRequest - 89, // 89: vtctlservice.Vtctld.ReshardCreate:input_type -> vtctldata.ReshardCreateRequest - 90, // 90: vtctlservice.Vtctld.RestoreFromBackup:input_type -> vtctldata.RestoreFromBackupRequest - 91, // 91: vtctlservice.Vtctld.RetrySchemaMigration:input_type -> vtctldata.RetrySchemaMigrationRequest - 92, // 92: vtctlservice.Vtctld.RunHealthCheck:input_type -> vtctldata.RunHealthCheckRequest - 93, // 93: vtctlservice.Vtctld.SetKeyspaceDurabilityPolicy:input_type -> vtctldata.SetKeyspaceDurabilityPolicyRequest - 94, // 94: vtctlservice.Vtctld.SetShardIsPrimaryServing:input_type -> vtctldata.SetShardIsPrimaryServingRequest - 95, // 95: vtctlservice.Vtctld.SetShardTabletControl:input_type -> vtctldata.SetShardTabletControlRequest - 96, // 96: vtctlservice.Vtctld.SetWritable:input_type -> vtctldata.SetWritableRequest - 97, // 97: vtctlservice.Vtctld.ShardReplicationAdd:input_type -> vtctldata.ShardReplicationAddRequest - 98, // 98: vtctlservice.Vtctld.ShardReplicationFix:input_type -> vtctldata.ShardReplicationFixRequest - 99, // 99: vtctlservice.Vtctld.ShardReplicationPositions:input_type -> vtctldata.ShardReplicationPositionsRequest - 100, // 100: vtctlservice.Vtctld.ShardReplicationRemove:input_type -> vtctldata.ShardReplicationRemoveRequest - 101, // 101: vtctlservice.Vtctld.SleepTablet:input_type -> vtctldata.SleepTabletRequest - 102, // 102: vtctlservice.Vtctld.SourceShardAdd:input_type -> vtctldata.SourceShardAddRequest - 103, // 103: vtctlservice.Vtctld.SourceShardDelete:input_type -> vtctldata.SourceShardDeleteRequest - 104, // 104: vtctlservice.Vtctld.StartReplication:input_type -> vtctldata.StartReplicationRequest - 105, // 105: vtctlservice.Vtctld.StopReplication:input_type -> vtctldata.StopReplicationRequest - 106, // 106: vtctlservice.Vtctld.TabletExternallyReparented:input_type -> vtctldata.TabletExternallyReparentedRequest - 107, // 107: vtctlservice.Vtctld.UpdateCellInfo:input_type -> vtctldata.UpdateCellInfoRequest - 108, // 108: vtctlservice.Vtctld.UpdateCellsAlias:input_type -> vtctldata.UpdateCellsAliasRequest - 109, // 109: vtctlservice.Vtctld.Validate:input_type -> vtctldata.ValidateRequest - 110, // 110: vtctlservice.Vtctld.ValidateKeyspace:input_type -> vtctldata.ValidateKeyspaceRequest - 111, // 111: vtctlservice.Vtctld.ValidatePermissionsKeyspace:input_type -> vtctldata.ValidatePermissionsKeyspaceRequest - 112, // 112: vtctlservice.Vtctld.ValidateSchemaKeyspace:input_type -> vtctldata.ValidateSchemaKeyspaceRequest - 113, // 113: vtctlservice.Vtctld.ValidateShard:input_type -> vtctldata.ValidateShardRequest - 114, // 114: vtctlservice.Vtctld.ValidateVersionKeyspace:input_type -> vtctldata.ValidateVersionKeyspaceRequest - 115, // 115: vtctlservice.Vtctld.ValidateVersionShard:input_type -> vtctldata.ValidateVersionShardRequest - 116, // 116: vtctlservice.Vtctld.ValidateVSchema:input_type -> vtctldata.ValidateVSchemaRequest - 117, // 117: vtctlservice.Vtctld.VDiffCreate:input_type -> vtctldata.VDiffCreateRequest - 118, // 118: vtctlservice.Vtctld.VDiffDelete:input_type -> vtctldata.VDiffDeleteRequest - 119, // 119: vtctlservice.Vtctld.VDiffResume:input_type -> vtctldata.VDiffResumeRequest - 120, // 120: vtctlservice.Vtctld.VDiffShow:input_type -> vtctldata.VDiffShowRequest - 121, // 121: vtctlservice.Vtctld.VDiffStop:input_type -> vtctldata.VDiffStopRequest - 122, // 122: vtctlservice.Vtctld.WorkflowDelete:input_type -> vtctldata.WorkflowDeleteRequest - 123, // 123: vtctlservice.Vtctld.WorkflowStatus:input_type -> vtctldata.WorkflowStatusRequest - 124, // 124: vtctlservice.Vtctld.WorkflowSwitchTraffic:input_type -> vtctldata.WorkflowSwitchTrafficRequest - 125, // 125: vtctlservice.Vtctld.WorkflowUpdate:input_type -> vtctldata.WorkflowUpdateRequest - 126, // 126: vtctlservice.Vtctld.GetMirrorRules:input_type -> vtctldata.GetMirrorRulesRequest - 127, // 127: vtctlservice.Vtctld.WorkflowMirrorTraffic:input_type -> vtctldata.WorkflowMirrorTrafficRequest - 128, // 128: vtctlservice.Vtctl.ExecuteVtctlCommand:output_type -> vtctldata.ExecuteVtctlCommandResponse - 129, // 129: vtctlservice.Vtctld.AddCellInfo:output_type -> vtctldata.AddCellInfoResponse - 130, // 130: vtctlservice.Vtctld.AddCellsAlias:output_type -> vtctldata.AddCellsAliasResponse - 131, // 131: vtctlservice.Vtctld.ApplyRoutingRules:output_type -> vtctldata.ApplyRoutingRulesResponse - 132, // 132: vtctlservice.Vtctld.ApplySchema:output_type -> vtctldata.ApplySchemaResponse - 133, // 133: vtctlservice.Vtctld.ApplyKeyspaceRoutingRules:output_type -> vtctldata.ApplyKeyspaceRoutingRulesResponse - 134, // 134: vtctlservice.Vtctld.ApplyShardRoutingRules:output_type -> vtctldata.ApplyShardRoutingRulesResponse - 135, // 135: vtctlservice.Vtctld.ApplyVSchema:output_type -> vtctldata.ApplyVSchemaResponse - 136, // 136: vtctlservice.Vtctld.Backup:output_type -> vtctldata.BackupResponse - 136, // 137: vtctlservice.Vtctld.BackupShard:output_type -> vtctldata.BackupResponse - 137, // 138: vtctlservice.Vtctld.CancelSchemaMigration:output_type -> vtctldata.CancelSchemaMigrationResponse - 138, // 139: vtctlservice.Vtctld.ChangeTabletTags:output_type -> vtctldata.ChangeTabletTagsResponse - 139, // 140: vtctlservice.Vtctld.ChangeTabletType:output_type -> vtctldata.ChangeTabletTypeResponse - 140, // 141: vtctlservice.Vtctld.CheckThrottler:output_type -> vtctldata.CheckThrottlerResponse - 141, // 142: vtctlservice.Vtctld.CleanupSchemaMigration:output_type -> vtctldata.CleanupSchemaMigrationResponse - 142, // 143: vtctlservice.Vtctld.CompleteSchemaMigration:output_type -> vtctldata.CompleteSchemaMigrationResponse - 143, // 144: vtctlservice.Vtctld.ConcludeTransaction:output_type -> vtctldata.ConcludeTransactionResponse - 144, // 145: vtctlservice.Vtctld.CopySchemaShard:output_type -> vtctldata.CopySchemaShardResponse - 145, // 146: vtctlservice.Vtctld.CreateKeyspace:output_type -> vtctldata.CreateKeyspaceResponse - 146, // 147: vtctlservice.Vtctld.CreateShard:output_type -> vtctldata.CreateShardResponse - 147, // 148: vtctlservice.Vtctld.DeleteCellInfo:output_type -> vtctldata.DeleteCellInfoResponse - 148, // 149: vtctlservice.Vtctld.DeleteCellsAlias:output_type -> vtctldata.DeleteCellsAliasResponse - 149, // 150: vtctlservice.Vtctld.DeleteKeyspace:output_type -> vtctldata.DeleteKeyspaceResponse - 150, // 151: vtctlservice.Vtctld.DeleteShards:output_type -> vtctldata.DeleteShardsResponse - 151, // 152: vtctlservice.Vtctld.DeleteSrvVSchema:output_type -> vtctldata.DeleteSrvVSchemaResponse - 152, // 153: vtctlservice.Vtctld.DeleteTablets:output_type -> vtctldata.DeleteTabletsResponse - 153, // 154: vtctlservice.Vtctld.EmergencyReparentShard:output_type -> vtctldata.EmergencyReparentShardResponse - 154, // 155: vtctlservice.Vtctld.ExecuteFetchAsApp:output_type -> vtctldata.ExecuteFetchAsAppResponse - 155, // 156: vtctlservice.Vtctld.ExecuteFetchAsDBA:output_type -> vtctldata.ExecuteFetchAsDBAResponse - 156, // 157: vtctlservice.Vtctld.ExecuteHook:output_type -> vtctldata.ExecuteHookResponse - 157, // 158: vtctlservice.Vtctld.ExecuteMultiFetchAsDBA:output_type -> vtctldata.ExecuteMultiFetchAsDBAResponse - 158, // 159: vtctlservice.Vtctld.FindAllShardsInKeyspace:output_type -> vtctldata.FindAllShardsInKeyspaceResponse - 159, // 160: vtctlservice.Vtctld.ForceCutOverSchemaMigration:output_type -> vtctldata.ForceCutOverSchemaMigrationResponse - 160, // 161: vtctlservice.Vtctld.GetBackups:output_type -> vtctldata.GetBackupsResponse - 161, // 162: vtctlservice.Vtctld.GetCellInfo:output_type -> vtctldata.GetCellInfoResponse - 162, // 163: vtctlservice.Vtctld.GetCellInfoNames:output_type -> vtctldata.GetCellInfoNamesResponse - 163, // 164: vtctlservice.Vtctld.GetCellsAliases:output_type -> vtctldata.GetCellsAliasesResponse - 164, // 165: vtctlservice.Vtctld.GetFullStatus:output_type -> vtctldata.GetFullStatusResponse - 165, // 166: vtctlservice.Vtctld.GetKeyspace:output_type -> vtctldata.GetKeyspaceResponse - 166, // 167: vtctlservice.Vtctld.GetKeyspaces:output_type -> vtctldata.GetKeyspacesResponse - 167, // 168: vtctlservice.Vtctld.GetKeyspaceRoutingRules:output_type -> vtctldata.GetKeyspaceRoutingRulesResponse - 168, // 169: vtctlservice.Vtctld.GetPermissions:output_type -> vtctldata.GetPermissionsResponse - 169, // 170: vtctlservice.Vtctld.GetRoutingRules:output_type -> vtctldata.GetRoutingRulesResponse - 170, // 171: vtctlservice.Vtctld.GetSchema:output_type -> vtctldata.GetSchemaResponse - 171, // 172: vtctlservice.Vtctld.GetSchemaMigrations:output_type -> vtctldata.GetSchemaMigrationsResponse - 172, // 173: vtctlservice.Vtctld.GetShardReplication:output_type -> vtctldata.GetShardReplicationResponse - 173, // 174: vtctlservice.Vtctld.GetShard:output_type -> vtctldata.GetShardResponse - 174, // 175: vtctlservice.Vtctld.GetShardRoutingRules:output_type -> vtctldata.GetShardRoutingRulesResponse - 175, // 176: vtctlservice.Vtctld.GetSrvKeyspaceNames:output_type -> vtctldata.GetSrvKeyspaceNamesResponse - 176, // 177: vtctlservice.Vtctld.GetSrvKeyspaces:output_type -> vtctldata.GetSrvKeyspacesResponse - 177, // 178: vtctlservice.Vtctld.UpdateThrottlerConfig:output_type -> vtctldata.UpdateThrottlerConfigResponse - 178, // 179: vtctlservice.Vtctld.GetSrvVSchema:output_type -> vtctldata.GetSrvVSchemaResponse - 179, // 180: vtctlservice.Vtctld.GetSrvVSchemas:output_type -> vtctldata.GetSrvVSchemasResponse - 180, // 181: vtctlservice.Vtctld.GetTablet:output_type -> vtctldata.GetTabletResponse - 181, // 182: vtctlservice.Vtctld.GetTablets:output_type -> vtctldata.GetTabletsResponse - 182, // 183: vtctlservice.Vtctld.GetThrottlerStatus:output_type -> vtctldata.GetThrottlerStatusResponse - 183, // 184: vtctlservice.Vtctld.GetTopologyPath:output_type -> vtctldata.GetTopologyPathResponse - 184, // 185: vtctlservice.Vtctld.GetTransactionInfo:output_type -> vtctldata.GetTransactionInfoResponse - 185, // 186: vtctlservice.Vtctld.GetUnresolvedTransactions:output_type -> vtctldata.GetUnresolvedTransactionsResponse - 186, // 187: vtctlservice.Vtctld.GetVersion:output_type -> vtctldata.GetVersionResponse - 187, // 188: vtctlservice.Vtctld.GetVSchema:output_type -> vtctldata.GetVSchemaResponse - 188, // 189: vtctlservice.Vtctld.GetWorkflows:output_type -> vtctldata.GetWorkflowsResponse - 189, // 190: vtctlservice.Vtctld.InitShardPrimary:output_type -> vtctldata.InitShardPrimaryResponse - 190, // 191: vtctlservice.Vtctld.LaunchSchemaMigration:output_type -> vtctldata.LaunchSchemaMigrationResponse - 191, // 192: vtctlservice.Vtctld.LookupVindexComplete:output_type -> vtctldata.LookupVindexCompleteResponse - 192, // 193: vtctlservice.Vtctld.LookupVindexCreate:output_type -> vtctldata.LookupVindexCreateResponse - 193, // 194: vtctlservice.Vtctld.LookupVindexExternalize:output_type -> vtctldata.LookupVindexExternalizeResponse - 194, // 195: vtctlservice.Vtctld.LookupVindexInternalize:output_type -> vtctldata.LookupVindexInternalizeResponse - 195, // 196: vtctlservice.Vtctld.MaterializeCreate:output_type -> vtctldata.MaterializeCreateResponse - 196, // 197: vtctlservice.Vtctld.MigrateCreate:output_type -> vtctldata.WorkflowStatusResponse - 197, // 198: vtctlservice.Vtctld.MountRegister:output_type -> vtctldata.MountRegisterResponse - 198, // 199: vtctlservice.Vtctld.MountUnregister:output_type -> vtctldata.MountUnregisterResponse - 199, // 200: vtctlservice.Vtctld.MountShow:output_type -> vtctldata.MountShowResponse - 200, // 201: vtctlservice.Vtctld.MountList:output_type -> vtctldata.MountListResponse - 196, // 202: vtctlservice.Vtctld.MoveTablesCreate:output_type -> vtctldata.WorkflowStatusResponse - 201, // 203: vtctlservice.Vtctld.MoveTablesComplete:output_type -> vtctldata.MoveTablesCompleteResponse - 202, // 204: vtctlservice.Vtctld.PingTablet:output_type -> vtctldata.PingTabletResponse - 203, // 205: vtctlservice.Vtctld.PlannedReparentShard:output_type -> vtctldata.PlannedReparentShardResponse - 204, // 206: vtctlservice.Vtctld.RebuildKeyspaceGraph:output_type -> vtctldata.RebuildKeyspaceGraphResponse - 205, // 207: vtctlservice.Vtctld.RebuildVSchemaGraph:output_type -> vtctldata.RebuildVSchemaGraphResponse - 206, // 208: vtctlservice.Vtctld.RefreshState:output_type -> vtctldata.RefreshStateResponse - 207, // 209: vtctlservice.Vtctld.RefreshStateByShard:output_type -> vtctldata.RefreshStateByShardResponse - 208, // 210: vtctlservice.Vtctld.ReloadSchema:output_type -> vtctldata.ReloadSchemaResponse - 209, // 211: vtctlservice.Vtctld.ReloadSchemaKeyspace:output_type -> vtctldata.ReloadSchemaKeyspaceResponse - 210, // 212: vtctlservice.Vtctld.ReloadSchemaShard:output_type -> vtctldata.ReloadSchemaShardResponse - 211, // 213: vtctlservice.Vtctld.RemoveBackup:output_type -> vtctldata.RemoveBackupResponse - 212, // 214: vtctlservice.Vtctld.RemoveKeyspaceCell:output_type -> vtctldata.RemoveKeyspaceCellResponse - 213, // 215: vtctlservice.Vtctld.RemoveShardCell:output_type -> vtctldata.RemoveShardCellResponse - 214, // 216: vtctlservice.Vtctld.ReparentTablet:output_type -> vtctldata.ReparentTabletResponse - 196, // 217: vtctlservice.Vtctld.ReshardCreate:output_type -> vtctldata.WorkflowStatusResponse - 215, // 218: vtctlservice.Vtctld.RestoreFromBackup:output_type -> vtctldata.RestoreFromBackupResponse - 216, // 219: vtctlservice.Vtctld.RetrySchemaMigration:output_type -> vtctldata.RetrySchemaMigrationResponse - 217, // 220: vtctlservice.Vtctld.RunHealthCheck:output_type -> vtctldata.RunHealthCheckResponse - 218, // 221: vtctlservice.Vtctld.SetKeyspaceDurabilityPolicy:output_type -> vtctldata.SetKeyspaceDurabilityPolicyResponse - 219, // 222: vtctlservice.Vtctld.SetShardIsPrimaryServing:output_type -> vtctldata.SetShardIsPrimaryServingResponse - 220, // 223: vtctlservice.Vtctld.SetShardTabletControl:output_type -> vtctldata.SetShardTabletControlResponse - 221, // 224: vtctlservice.Vtctld.SetWritable:output_type -> vtctldata.SetWritableResponse - 222, // 225: vtctlservice.Vtctld.ShardReplicationAdd:output_type -> vtctldata.ShardReplicationAddResponse - 223, // 226: vtctlservice.Vtctld.ShardReplicationFix:output_type -> vtctldata.ShardReplicationFixResponse - 224, // 227: vtctlservice.Vtctld.ShardReplicationPositions:output_type -> vtctldata.ShardReplicationPositionsResponse - 225, // 228: vtctlservice.Vtctld.ShardReplicationRemove:output_type -> vtctldata.ShardReplicationRemoveResponse - 226, // 229: vtctlservice.Vtctld.SleepTablet:output_type -> vtctldata.SleepTabletResponse - 227, // 230: vtctlservice.Vtctld.SourceShardAdd:output_type -> vtctldata.SourceShardAddResponse - 228, // 231: vtctlservice.Vtctld.SourceShardDelete:output_type -> vtctldata.SourceShardDeleteResponse - 229, // 232: vtctlservice.Vtctld.StartReplication:output_type -> vtctldata.StartReplicationResponse - 230, // 233: vtctlservice.Vtctld.StopReplication:output_type -> vtctldata.StopReplicationResponse - 231, // 234: vtctlservice.Vtctld.TabletExternallyReparented:output_type -> vtctldata.TabletExternallyReparentedResponse - 232, // 235: vtctlservice.Vtctld.UpdateCellInfo:output_type -> vtctldata.UpdateCellInfoResponse - 233, // 236: vtctlservice.Vtctld.UpdateCellsAlias:output_type -> vtctldata.UpdateCellsAliasResponse - 234, // 237: vtctlservice.Vtctld.Validate:output_type -> vtctldata.ValidateResponse - 235, // 238: vtctlservice.Vtctld.ValidateKeyspace:output_type -> vtctldata.ValidateKeyspaceResponse - 236, // 239: vtctlservice.Vtctld.ValidatePermissionsKeyspace:output_type -> vtctldata.ValidatePermissionsKeyspaceResponse - 237, // 240: vtctlservice.Vtctld.ValidateSchemaKeyspace:output_type -> vtctldata.ValidateSchemaKeyspaceResponse - 238, // 241: vtctlservice.Vtctld.ValidateShard:output_type -> vtctldata.ValidateShardResponse - 239, // 242: vtctlservice.Vtctld.ValidateVersionKeyspace:output_type -> vtctldata.ValidateVersionKeyspaceResponse - 240, // 243: vtctlservice.Vtctld.ValidateVersionShard:output_type -> vtctldata.ValidateVersionShardResponse - 241, // 244: vtctlservice.Vtctld.ValidateVSchema:output_type -> vtctldata.ValidateVSchemaResponse - 242, // 245: vtctlservice.Vtctld.VDiffCreate:output_type -> vtctldata.VDiffCreateResponse - 243, // 246: vtctlservice.Vtctld.VDiffDelete:output_type -> vtctldata.VDiffDeleteResponse - 244, // 247: vtctlservice.Vtctld.VDiffResume:output_type -> vtctldata.VDiffResumeResponse - 245, // 248: vtctlservice.Vtctld.VDiffShow:output_type -> vtctldata.VDiffShowResponse - 246, // 249: vtctlservice.Vtctld.VDiffStop:output_type -> vtctldata.VDiffStopResponse - 247, // 250: vtctlservice.Vtctld.WorkflowDelete:output_type -> vtctldata.WorkflowDeleteResponse - 196, // 251: vtctlservice.Vtctld.WorkflowStatus:output_type -> vtctldata.WorkflowStatusResponse - 248, // 252: vtctlservice.Vtctld.WorkflowSwitchTraffic:output_type -> vtctldata.WorkflowSwitchTrafficResponse - 249, // 253: vtctlservice.Vtctld.WorkflowUpdate:output_type -> vtctldata.WorkflowUpdateResponse - 250, // 254: vtctlservice.Vtctld.GetMirrorRules:output_type -> vtctldata.GetMirrorRulesResponse - 251, // 255: vtctlservice.Vtctld.WorkflowMirrorTraffic:output_type -> vtctldata.WorkflowMirrorTrafficResponse - 128, // [128:256] is the sub-list for method output_type - 0, // [0:128] is the sub-list for method input_type + 69, // 69: vtctlservice.Vtctld.WorkflowAddTables:input_type -> vtctldata.WorkflowAddTablesRequest + 70, // 70: vtctlservice.Vtctld.MigrateCreate:input_type -> vtctldata.MigrateCreateRequest + 71, // 71: vtctlservice.Vtctld.MountRegister:input_type -> vtctldata.MountRegisterRequest + 72, // 72: vtctlservice.Vtctld.MountUnregister:input_type -> vtctldata.MountUnregisterRequest + 73, // 73: vtctlservice.Vtctld.MountShow:input_type -> vtctldata.MountShowRequest + 74, // 74: vtctlservice.Vtctld.MountList:input_type -> vtctldata.MountListRequest + 75, // 75: vtctlservice.Vtctld.MoveTablesCreate:input_type -> vtctldata.MoveTablesCreateRequest + 76, // 76: vtctlservice.Vtctld.MoveTablesComplete:input_type -> vtctldata.MoveTablesCompleteRequest + 77, // 77: vtctlservice.Vtctld.PingTablet:input_type -> vtctldata.PingTabletRequest + 78, // 78: vtctlservice.Vtctld.PlannedReparentShard:input_type -> vtctldata.PlannedReparentShardRequest + 79, // 79: vtctlservice.Vtctld.RebuildKeyspaceGraph:input_type -> vtctldata.RebuildKeyspaceGraphRequest + 80, // 80: vtctlservice.Vtctld.RebuildVSchemaGraph:input_type -> vtctldata.RebuildVSchemaGraphRequest + 81, // 81: vtctlservice.Vtctld.RefreshState:input_type -> vtctldata.RefreshStateRequest + 82, // 82: vtctlservice.Vtctld.RefreshStateByShard:input_type -> vtctldata.RefreshStateByShardRequest + 83, // 83: vtctlservice.Vtctld.ReloadSchema:input_type -> vtctldata.ReloadSchemaRequest + 84, // 84: vtctlservice.Vtctld.ReloadSchemaKeyspace:input_type -> vtctldata.ReloadSchemaKeyspaceRequest + 85, // 85: vtctlservice.Vtctld.ReloadSchemaShard:input_type -> vtctldata.ReloadSchemaShardRequest + 86, // 86: vtctlservice.Vtctld.RemoveBackup:input_type -> vtctldata.RemoveBackupRequest + 87, // 87: vtctlservice.Vtctld.RemoveKeyspaceCell:input_type -> vtctldata.RemoveKeyspaceCellRequest + 88, // 88: vtctlservice.Vtctld.RemoveShardCell:input_type -> vtctldata.RemoveShardCellRequest + 89, // 89: vtctlservice.Vtctld.ReparentTablet:input_type -> vtctldata.ReparentTabletRequest + 90, // 90: vtctlservice.Vtctld.ReshardCreate:input_type -> vtctldata.ReshardCreateRequest + 91, // 91: vtctlservice.Vtctld.RestoreFromBackup:input_type -> vtctldata.RestoreFromBackupRequest + 92, // 92: vtctlservice.Vtctld.RetrySchemaMigration:input_type -> vtctldata.RetrySchemaMigrationRequest + 93, // 93: vtctlservice.Vtctld.RunHealthCheck:input_type -> vtctldata.RunHealthCheckRequest + 94, // 94: vtctlservice.Vtctld.SetKeyspaceDurabilityPolicy:input_type -> vtctldata.SetKeyspaceDurabilityPolicyRequest + 95, // 95: vtctlservice.Vtctld.SetShardIsPrimaryServing:input_type -> vtctldata.SetShardIsPrimaryServingRequest + 96, // 96: vtctlservice.Vtctld.SetShardTabletControl:input_type -> vtctldata.SetShardTabletControlRequest + 97, // 97: vtctlservice.Vtctld.SetWritable:input_type -> vtctldata.SetWritableRequest + 98, // 98: vtctlservice.Vtctld.ShardReplicationAdd:input_type -> vtctldata.ShardReplicationAddRequest + 99, // 99: vtctlservice.Vtctld.ShardReplicationFix:input_type -> vtctldata.ShardReplicationFixRequest + 100, // 100: vtctlservice.Vtctld.ShardReplicationPositions:input_type -> vtctldata.ShardReplicationPositionsRequest + 101, // 101: vtctlservice.Vtctld.ShardReplicationRemove:input_type -> vtctldata.ShardReplicationRemoveRequest + 102, // 102: vtctlservice.Vtctld.SleepTablet:input_type -> vtctldata.SleepTabletRequest + 103, // 103: vtctlservice.Vtctld.SourceShardAdd:input_type -> vtctldata.SourceShardAddRequest + 104, // 104: vtctlservice.Vtctld.SourceShardDelete:input_type -> vtctldata.SourceShardDeleteRequest + 105, // 105: vtctlservice.Vtctld.StartReplication:input_type -> vtctldata.StartReplicationRequest + 106, // 106: vtctlservice.Vtctld.StopReplication:input_type -> vtctldata.StopReplicationRequest + 107, // 107: vtctlservice.Vtctld.TabletExternallyReparented:input_type -> vtctldata.TabletExternallyReparentedRequest + 108, // 108: vtctlservice.Vtctld.UpdateCellInfo:input_type -> vtctldata.UpdateCellInfoRequest + 109, // 109: vtctlservice.Vtctld.UpdateCellsAlias:input_type -> vtctldata.UpdateCellsAliasRequest + 110, // 110: vtctlservice.Vtctld.Validate:input_type -> vtctldata.ValidateRequest + 111, // 111: vtctlservice.Vtctld.ValidateKeyspace:input_type -> vtctldata.ValidateKeyspaceRequest + 112, // 112: vtctlservice.Vtctld.ValidatePermissionsKeyspace:input_type -> vtctldata.ValidatePermissionsKeyspaceRequest + 113, // 113: vtctlservice.Vtctld.ValidateSchemaKeyspace:input_type -> vtctldata.ValidateSchemaKeyspaceRequest + 114, // 114: vtctlservice.Vtctld.ValidateShard:input_type -> vtctldata.ValidateShardRequest + 115, // 115: vtctlservice.Vtctld.ValidateVersionKeyspace:input_type -> vtctldata.ValidateVersionKeyspaceRequest + 116, // 116: vtctlservice.Vtctld.ValidateVersionShard:input_type -> vtctldata.ValidateVersionShardRequest + 117, // 117: vtctlservice.Vtctld.ValidateVSchema:input_type -> vtctldata.ValidateVSchemaRequest + 118, // 118: vtctlservice.Vtctld.VDiffCreate:input_type -> vtctldata.VDiffCreateRequest + 119, // 119: vtctlservice.Vtctld.VDiffDelete:input_type -> vtctldata.VDiffDeleteRequest + 120, // 120: vtctlservice.Vtctld.VDiffResume:input_type -> vtctldata.VDiffResumeRequest + 121, // 121: vtctlservice.Vtctld.VDiffShow:input_type -> vtctldata.VDiffShowRequest + 122, // 122: vtctlservice.Vtctld.VDiffStop:input_type -> vtctldata.VDiffStopRequest + 123, // 123: vtctlservice.Vtctld.WorkflowDelete:input_type -> vtctldata.WorkflowDeleteRequest + 124, // 124: vtctlservice.Vtctld.WorkflowStatus:input_type -> vtctldata.WorkflowStatusRequest + 125, // 125: vtctlservice.Vtctld.WorkflowSwitchTraffic:input_type -> vtctldata.WorkflowSwitchTrafficRequest + 126, // 126: vtctlservice.Vtctld.WorkflowUpdate:input_type -> vtctldata.WorkflowUpdateRequest + 127, // 127: vtctlservice.Vtctld.GetMirrorRules:input_type -> vtctldata.GetMirrorRulesRequest + 128, // 128: vtctlservice.Vtctld.WorkflowMirrorTraffic:input_type -> vtctldata.WorkflowMirrorTrafficRequest + 129, // 129: vtctlservice.Vtctl.ExecuteVtctlCommand:output_type -> vtctldata.ExecuteVtctlCommandResponse + 130, // 130: vtctlservice.Vtctld.AddCellInfo:output_type -> vtctldata.AddCellInfoResponse + 131, // 131: vtctlservice.Vtctld.AddCellsAlias:output_type -> vtctldata.AddCellsAliasResponse + 132, // 132: vtctlservice.Vtctld.ApplyRoutingRules:output_type -> vtctldata.ApplyRoutingRulesResponse + 133, // 133: vtctlservice.Vtctld.ApplySchema:output_type -> vtctldata.ApplySchemaResponse + 134, // 134: vtctlservice.Vtctld.ApplyKeyspaceRoutingRules:output_type -> vtctldata.ApplyKeyspaceRoutingRulesResponse + 135, // 135: vtctlservice.Vtctld.ApplyShardRoutingRules:output_type -> vtctldata.ApplyShardRoutingRulesResponse + 136, // 136: vtctlservice.Vtctld.ApplyVSchema:output_type -> vtctldata.ApplyVSchemaResponse + 137, // 137: vtctlservice.Vtctld.Backup:output_type -> vtctldata.BackupResponse + 137, // 138: vtctlservice.Vtctld.BackupShard:output_type -> vtctldata.BackupResponse + 138, // 139: vtctlservice.Vtctld.CancelSchemaMigration:output_type -> vtctldata.CancelSchemaMigrationResponse + 139, // 140: vtctlservice.Vtctld.ChangeTabletTags:output_type -> vtctldata.ChangeTabletTagsResponse + 140, // 141: vtctlservice.Vtctld.ChangeTabletType:output_type -> vtctldata.ChangeTabletTypeResponse + 141, // 142: vtctlservice.Vtctld.CheckThrottler:output_type -> vtctldata.CheckThrottlerResponse + 142, // 143: vtctlservice.Vtctld.CleanupSchemaMigration:output_type -> vtctldata.CleanupSchemaMigrationResponse + 143, // 144: vtctlservice.Vtctld.CompleteSchemaMigration:output_type -> vtctldata.CompleteSchemaMigrationResponse + 144, // 145: vtctlservice.Vtctld.ConcludeTransaction:output_type -> vtctldata.ConcludeTransactionResponse + 145, // 146: vtctlservice.Vtctld.CopySchemaShard:output_type -> vtctldata.CopySchemaShardResponse + 146, // 147: vtctlservice.Vtctld.CreateKeyspace:output_type -> vtctldata.CreateKeyspaceResponse + 147, // 148: vtctlservice.Vtctld.CreateShard:output_type -> vtctldata.CreateShardResponse + 148, // 149: vtctlservice.Vtctld.DeleteCellInfo:output_type -> vtctldata.DeleteCellInfoResponse + 149, // 150: vtctlservice.Vtctld.DeleteCellsAlias:output_type -> vtctldata.DeleteCellsAliasResponse + 150, // 151: vtctlservice.Vtctld.DeleteKeyspace:output_type -> vtctldata.DeleteKeyspaceResponse + 151, // 152: vtctlservice.Vtctld.DeleteShards:output_type -> vtctldata.DeleteShardsResponse + 152, // 153: vtctlservice.Vtctld.DeleteSrvVSchema:output_type -> vtctldata.DeleteSrvVSchemaResponse + 153, // 154: vtctlservice.Vtctld.DeleteTablets:output_type -> vtctldata.DeleteTabletsResponse + 154, // 155: vtctlservice.Vtctld.EmergencyReparentShard:output_type -> vtctldata.EmergencyReparentShardResponse + 155, // 156: vtctlservice.Vtctld.ExecuteFetchAsApp:output_type -> vtctldata.ExecuteFetchAsAppResponse + 156, // 157: vtctlservice.Vtctld.ExecuteFetchAsDBA:output_type -> vtctldata.ExecuteFetchAsDBAResponse + 157, // 158: vtctlservice.Vtctld.ExecuteHook:output_type -> vtctldata.ExecuteHookResponse + 158, // 159: vtctlservice.Vtctld.ExecuteMultiFetchAsDBA:output_type -> vtctldata.ExecuteMultiFetchAsDBAResponse + 159, // 160: vtctlservice.Vtctld.FindAllShardsInKeyspace:output_type -> vtctldata.FindAllShardsInKeyspaceResponse + 160, // 161: vtctlservice.Vtctld.ForceCutOverSchemaMigration:output_type -> vtctldata.ForceCutOverSchemaMigrationResponse + 161, // 162: vtctlservice.Vtctld.GetBackups:output_type -> vtctldata.GetBackupsResponse + 162, // 163: vtctlservice.Vtctld.GetCellInfo:output_type -> vtctldata.GetCellInfoResponse + 163, // 164: vtctlservice.Vtctld.GetCellInfoNames:output_type -> vtctldata.GetCellInfoNamesResponse + 164, // 165: vtctlservice.Vtctld.GetCellsAliases:output_type -> vtctldata.GetCellsAliasesResponse + 165, // 166: vtctlservice.Vtctld.GetFullStatus:output_type -> vtctldata.GetFullStatusResponse + 166, // 167: vtctlservice.Vtctld.GetKeyspace:output_type -> vtctldata.GetKeyspaceResponse + 167, // 168: vtctlservice.Vtctld.GetKeyspaces:output_type -> vtctldata.GetKeyspacesResponse + 168, // 169: vtctlservice.Vtctld.GetKeyspaceRoutingRules:output_type -> vtctldata.GetKeyspaceRoutingRulesResponse + 169, // 170: vtctlservice.Vtctld.GetPermissions:output_type -> vtctldata.GetPermissionsResponse + 170, // 171: vtctlservice.Vtctld.GetRoutingRules:output_type -> vtctldata.GetRoutingRulesResponse + 171, // 172: vtctlservice.Vtctld.GetSchema:output_type -> vtctldata.GetSchemaResponse + 172, // 173: vtctlservice.Vtctld.GetSchemaMigrations:output_type -> vtctldata.GetSchemaMigrationsResponse + 173, // 174: vtctlservice.Vtctld.GetShardReplication:output_type -> vtctldata.GetShardReplicationResponse + 174, // 175: vtctlservice.Vtctld.GetShard:output_type -> vtctldata.GetShardResponse + 175, // 176: vtctlservice.Vtctld.GetShardRoutingRules:output_type -> vtctldata.GetShardRoutingRulesResponse + 176, // 177: vtctlservice.Vtctld.GetSrvKeyspaceNames:output_type -> vtctldata.GetSrvKeyspaceNamesResponse + 177, // 178: vtctlservice.Vtctld.GetSrvKeyspaces:output_type -> vtctldata.GetSrvKeyspacesResponse + 178, // 179: vtctlservice.Vtctld.UpdateThrottlerConfig:output_type -> vtctldata.UpdateThrottlerConfigResponse + 179, // 180: vtctlservice.Vtctld.GetSrvVSchema:output_type -> vtctldata.GetSrvVSchemaResponse + 180, // 181: vtctlservice.Vtctld.GetSrvVSchemas:output_type -> vtctldata.GetSrvVSchemasResponse + 181, // 182: vtctlservice.Vtctld.GetTablet:output_type -> vtctldata.GetTabletResponse + 182, // 183: vtctlservice.Vtctld.GetTablets:output_type -> vtctldata.GetTabletsResponse + 183, // 184: vtctlservice.Vtctld.GetThrottlerStatus:output_type -> vtctldata.GetThrottlerStatusResponse + 184, // 185: vtctlservice.Vtctld.GetTopologyPath:output_type -> vtctldata.GetTopologyPathResponse + 185, // 186: vtctlservice.Vtctld.GetTransactionInfo:output_type -> vtctldata.GetTransactionInfoResponse + 186, // 187: vtctlservice.Vtctld.GetUnresolvedTransactions:output_type -> vtctldata.GetUnresolvedTransactionsResponse + 187, // 188: vtctlservice.Vtctld.GetVersion:output_type -> vtctldata.GetVersionResponse + 188, // 189: vtctlservice.Vtctld.GetVSchema:output_type -> vtctldata.GetVSchemaResponse + 189, // 190: vtctlservice.Vtctld.GetWorkflows:output_type -> vtctldata.GetWorkflowsResponse + 190, // 191: vtctlservice.Vtctld.InitShardPrimary:output_type -> vtctldata.InitShardPrimaryResponse + 191, // 192: vtctlservice.Vtctld.LaunchSchemaMigration:output_type -> vtctldata.LaunchSchemaMigrationResponse + 192, // 193: vtctlservice.Vtctld.LookupVindexComplete:output_type -> vtctldata.LookupVindexCompleteResponse + 193, // 194: vtctlservice.Vtctld.LookupVindexCreate:output_type -> vtctldata.LookupVindexCreateResponse + 194, // 195: vtctlservice.Vtctld.LookupVindexExternalize:output_type -> vtctldata.LookupVindexExternalizeResponse + 195, // 196: vtctlservice.Vtctld.LookupVindexInternalize:output_type -> vtctldata.LookupVindexInternalizeResponse + 196, // 197: vtctlservice.Vtctld.MaterializeCreate:output_type -> vtctldata.MaterializeCreateResponse + 197, // 198: vtctlservice.Vtctld.WorkflowAddTables:output_type -> vtctldata.WorkflowAddTablesResponse + 198, // 199: vtctlservice.Vtctld.MigrateCreate:output_type -> vtctldata.WorkflowStatusResponse + 199, // 200: vtctlservice.Vtctld.MountRegister:output_type -> vtctldata.MountRegisterResponse + 200, // 201: vtctlservice.Vtctld.MountUnregister:output_type -> vtctldata.MountUnregisterResponse + 201, // 202: vtctlservice.Vtctld.MountShow:output_type -> vtctldata.MountShowResponse + 202, // 203: vtctlservice.Vtctld.MountList:output_type -> vtctldata.MountListResponse + 198, // 204: vtctlservice.Vtctld.MoveTablesCreate:output_type -> vtctldata.WorkflowStatusResponse + 203, // 205: vtctlservice.Vtctld.MoveTablesComplete:output_type -> vtctldata.MoveTablesCompleteResponse + 204, // 206: vtctlservice.Vtctld.PingTablet:output_type -> vtctldata.PingTabletResponse + 205, // 207: vtctlservice.Vtctld.PlannedReparentShard:output_type -> vtctldata.PlannedReparentShardResponse + 206, // 208: vtctlservice.Vtctld.RebuildKeyspaceGraph:output_type -> vtctldata.RebuildKeyspaceGraphResponse + 207, // 209: vtctlservice.Vtctld.RebuildVSchemaGraph:output_type -> vtctldata.RebuildVSchemaGraphResponse + 208, // 210: vtctlservice.Vtctld.RefreshState:output_type -> vtctldata.RefreshStateResponse + 209, // 211: vtctlservice.Vtctld.RefreshStateByShard:output_type -> vtctldata.RefreshStateByShardResponse + 210, // 212: vtctlservice.Vtctld.ReloadSchema:output_type -> vtctldata.ReloadSchemaResponse + 211, // 213: vtctlservice.Vtctld.ReloadSchemaKeyspace:output_type -> vtctldata.ReloadSchemaKeyspaceResponse + 212, // 214: vtctlservice.Vtctld.ReloadSchemaShard:output_type -> vtctldata.ReloadSchemaShardResponse + 213, // 215: vtctlservice.Vtctld.RemoveBackup:output_type -> vtctldata.RemoveBackupResponse + 214, // 216: vtctlservice.Vtctld.RemoveKeyspaceCell:output_type -> vtctldata.RemoveKeyspaceCellResponse + 215, // 217: vtctlservice.Vtctld.RemoveShardCell:output_type -> vtctldata.RemoveShardCellResponse + 216, // 218: vtctlservice.Vtctld.ReparentTablet:output_type -> vtctldata.ReparentTabletResponse + 198, // 219: vtctlservice.Vtctld.ReshardCreate:output_type -> vtctldata.WorkflowStatusResponse + 217, // 220: vtctlservice.Vtctld.RestoreFromBackup:output_type -> vtctldata.RestoreFromBackupResponse + 218, // 221: vtctlservice.Vtctld.RetrySchemaMigration:output_type -> vtctldata.RetrySchemaMigrationResponse + 219, // 222: vtctlservice.Vtctld.RunHealthCheck:output_type -> vtctldata.RunHealthCheckResponse + 220, // 223: vtctlservice.Vtctld.SetKeyspaceDurabilityPolicy:output_type -> vtctldata.SetKeyspaceDurabilityPolicyResponse + 221, // 224: vtctlservice.Vtctld.SetShardIsPrimaryServing:output_type -> vtctldata.SetShardIsPrimaryServingResponse + 222, // 225: vtctlservice.Vtctld.SetShardTabletControl:output_type -> vtctldata.SetShardTabletControlResponse + 223, // 226: vtctlservice.Vtctld.SetWritable:output_type -> vtctldata.SetWritableResponse + 224, // 227: vtctlservice.Vtctld.ShardReplicationAdd:output_type -> vtctldata.ShardReplicationAddResponse + 225, // 228: vtctlservice.Vtctld.ShardReplicationFix:output_type -> vtctldata.ShardReplicationFixResponse + 226, // 229: vtctlservice.Vtctld.ShardReplicationPositions:output_type -> vtctldata.ShardReplicationPositionsResponse + 227, // 230: vtctlservice.Vtctld.ShardReplicationRemove:output_type -> vtctldata.ShardReplicationRemoveResponse + 228, // 231: vtctlservice.Vtctld.SleepTablet:output_type -> vtctldata.SleepTabletResponse + 229, // 232: vtctlservice.Vtctld.SourceShardAdd:output_type -> vtctldata.SourceShardAddResponse + 230, // 233: vtctlservice.Vtctld.SourceShardDelete:output_type -> vtctldata.SourceShardDeleteResponse + 231, // 234: vtctlservice.Vtctld.StartReplication:output_type -> vtctldata.StartReplicationResponse + 232, // 235: vtctlservice.Vtctld.StopReplication:output_type -> vtctldata.StopReplicationResponse + 233, // 236: vtctlservice.Vtctld.TabletExternallyReparented:output_type -> vtctldata.TabletExternallyReparentedResponse + 234, // 237: vtctlservice.Vtctld.UpdateCellInfo:output_type -> vtctldata.UpdateCellInfoResponse + 235, // 238: vtctlservice.Vtctld.UpdateCellsAlias:output_type -> vtctldata.UpdateCellsAliasResponse + 236, // 239: vtctlservice.Vtctld.Validate:output_type -> vtctldata.ValidateResponse + 237, // 240: vtctlservice.Vtctld.ValidateKeyspace:output_type -> vtctldata.ValidateKeyspaceResponse + 238, // 241: vtctlservice.Vtctld.ValidatePermissionsKeyspace:output_type -> vtctldata.ValidatePermissionsKeyspaceResponse + 239, // 242: vtctlservice.Vtctld.ValidateSchemaKeyspace:output_type -> vtctldata.ValidateSchemaKeyspaceResponse + 240, // 243: vtctlservice.Vtctld.ValidateShard:output_type -> vtctldata.ValidateShardResponse + 241, // 244: vtctlservice.Vtctld.ValidateVersionKeyspace:output_type -> vtctldata.ValidateVersionKeyspaceResponse + 242, // 245: vtctlservice.Vtctld.ValidateVersionShard:output_type -> vtctldata.ValidateVersionShardResponse + 243, // 246: vtctlservice.Vtctld.ValidateVSchema:output_type -> vtctldata.ValidateVSchemaResponse + 244, // 247: vtctlservice.Vtctld.VDiffCreate:output_type -> vtctldata.VDiffCreateResponse + 245, // 248: vtctlservice.Vtctld.VDiffDelete:output_type -> vtctldata.VDiffDeleteResponse + 246, // 249: vtctlservice.Vtctld.VDiffResume:output_type -> vtctldata.VDiffResumeResponse + 247, // 250: vtctlservice.Vtctld.VDiffShow:output_type -> vtctldata.VDiffShowResponse + 248, // 251: vtctlservice.Vtctld.VDiffStop:output_type -> vtctldata.VDiffStopResponse + 249, // 252: vtctlservice.Vtctld.WorkflowDelete:output_type -> vtctldata.WorkflowDeleteResponse + 198, // 253: vtctlservice.Vtctld.WorkflowStatus:output_type -> vtctldata.WorkflowStatusResponse + 250, // 254: vtctlservice.Vtctld.WorkflowSwitchTraffic:output_type -> vtctldata.WorkflowSwitchTrafficResponse + 251, // 255: vtctlservice.Vtctld.WorkflowUpdate:output_type -> vtctldata.WorkflowUpdateResponse + 252, // 256: vtctlservice.Vtctld.GetMirrorRules:output_type -> vtctldata.GetMirrorRulesResponse + 253, // 257: vtctlservice.Vtctld.WorkflowMirrorTraffic:output_type -> vtctldata.WorkflowMirrorTrafficResponse + 129, // [129:258] is the sub-list for method output_type + 0, // [0:129] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name 0, // [0:0] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name diff --git a/go/vt/proto/vtctlservice/vtctlservice_grpc.pb.go b/go/vt/proto/vtctlservice/vtctlservice_grpc.pb.go index e906754620f..a23eb017303 100644 --- a/go/vt/proto/vtctlservice/vtctlservice_grpc.pb.go +++ b/go/vt/proto/vtctlservice/vtctlservice_grpc.pb.go @@ -306,6 +306,8 @@ type VtctldClient interface { // MaterializeCreate creates a workflow to materialize one or more tables // from a source keyspace to a target keyspace using a provided expressions. MaterializeCreate(ctx context.Context, in *vtctldata.MaterializeCreateRequest, opts ...grpc.CallOption) (*vtctldata.MaterializeCreateResponse, error) + // WorkflowAddTables adds tables to the existing materialize/movetables workflow. + WorkflowAddTables(ctx context.Context, in *vtctldata.WorkflowAddTablesRequest, opts ...grpc.CallOption) (*vtctldata.WorkflowAddTablesResponse, error) // MigrateCreate creates a workflow which migrates one or more tables from an // external cluster into Vitess. MigrateCreate(ctx context.Context, in *vtctldata.MigrateCreateRequest, opts ...grpc.CallOption) (*vtctldata.WorkflowStatusResponse, error) @@ -1149,6 +1151,15 @@ func (c *vtctldClient) MaterializeCreate(ctx context.Context, in *vtctldata.Mate return out, nil } +func (c *vtctldClient) WorkflowAddTables(ctx context.Context, in *vtctldata.WorkflowAddTablesRequest, opts ...grpc.CallOption) (*vtctldata.WorkflowAddTablesResponse, error) { + out := new(vtctldata.WorkflowAddTablesResponse) + err := c.cc.Invoke(ctx, "/vtctlservice.Vtctld/WorkflowAddTables", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *vtctldClient) MigrateCreate(ctx context.Context, in *vtctldata.MigrateCreateRequest, opts ...grpc.CallOption) (*vtctldata.WorkflowStatusResponse, error) { out := new(vtctldata.WorkflowStatusResponse) err := c.cc.Invoke(ctx, "/vtctlservice.Vtctld/MigrateCreate", in, out, opts...) @@ -1877,6 +1888,8 @@ type VtctldServer interface { // MaterializeCreate creates a workflow to materialize one or more tables // from a source keyspace to a target keyspace using a provided expressions. MaterializeCreate(context.Context, *vtctldata.MaterializeCreateRequest) (*vtctldata.MaterializeCreateResponse, error) + // WorkflowAddTables adds tables to the existing materialize/movetables workflow. + WorkflowAddTables(context.Context, *vtctldata.WorkflowAddTablesRequest) (*vtctldata.WorkflowAddTablesResponse, error) // MigrateCreate creates a workflow which migrates one or more tables from an // external cluster into Vitess. MigrateCreate(context.Context, *vtctldata.MigrateCreateRequest) (*vtctldata.WorkflowStatusResponse, error) @@ -2263,6 +2276,9 @@ func (UnimplementedVtctldServer) LookupVindexInternalize(context.Context, *vtctl func (UnimplementedVtctldServer) MaterializeCreate(context.Context, *vtctldata.MaterializeCreateRequest) (*vtctldata.MaterializeCreateResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method MaterializeCreate not implemented") } +func (UnimplementedVtctldServer) WorkflowAddTables(context.Context, *vtctldata.WorkflowAddTablesRequest) (*vtctldata.WorkflowAddTablesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method WorkflowAddTables not implemented") +} func (UnimplementedVtctldServer) MigrateCreate(context.Context, *vtctldata.MigrateCreateRequest) (*vtctldata.WorkflowStatusResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method MigrateCreate not implemented") } @@ -3683,6 +3699,24 @@ func _Vtctld_MaterializeCreate_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } +func _Vtctld_WorkflowAddTables_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(vtctldata.WorkflowAddTablesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VtctldServer).WorkflowAddTables(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/vtctlservice.Vtctld/WorkflowAddTables", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VtctldServer).WorkflowAddTables(ctx, req.(*vtctldata.WorkflowAddTablesRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Vtctld_MigrateCreate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(vtctldata.MigrateCreateRequest) if err := dec(in); err != nil { @@ -5019,6 +5053,10 @@ var Vtctld_ServiceDesc = grpc.ServiceDesc{ MethodName: "MaterializeCreate", Handler: _Vtctld_MaterializeCreate_Handler, }, + { + MethodName: "WorkflowAddTables", + Handler: _Vtctld_WorkflowAddTables_Handler, + }, { MethodName: "MigrateCreate", Handler: _Vtctld_MigrateCreate_Handler, diff --git a/go/vt/proto/vtgate/vtgate.pb.go b/go/vt/proto/vtgate/vtgate.pb.go index 0283636b85c..9f054c4db62 100644 --- a/go/vt/proto/vtgate/vtgate.pb.go +++ b/go/vt/proto/vtgate/vtgate.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v3.21.3 // source: vtgate.proto @@ -564,6 +564,138 @@ func (x *ReadAfterWrite) GetSessionTrackGtids() bool { return false } +// ExecuteMultiRequest is the payload to ExecuteMulti. +type ExecuteMultiRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // caller_id identifies the caller. This is the effective caller ID, + // set by the application to further identify the caller. + CallerId *vtrpc.CallerID `protobuf:"bytes,1,opt,name=caller_id,json=callerId,proto3" json:"caller_id,omitempty"` + // sql contains the set of queries to execute. + Sql string `protobuf:"bytes,2,opt,name=sql,proto3" json:"sql,omitempty"` + // session carries the session state. + Session *Session `protobuf:"bytes,3,opt,name=session,proto3" json:"session,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ExecuteMultiRequest) Reset() { + *x = ExecuteMultiRequest{} + mi := &file_vtgate_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExecuteMultiRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExecuteMultiRequest) ProtoMessage() {} + +func (x *ExecuteMultiRequest) ProtoReflect() protoreflect.Message { + mi := &file_vtgate_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExecuteMultiRequest.ProtoReflect.Descriptor instead. +func (*ExecuteMultiRequest) Descriptor() ([]byte, []int) { + return file_vtgate_proto_rawDescGZIP(), []int{3} +} + +func (x *ExecuteMultiRequest) GetCallerId() *vtrpc.CallerID { + if x != nil { + return x.CallerId + } + return nil +} + +func (x *ExecuteMultiRequest) GetSql() string { + if x != nil { + return x.Sql + } + return "" +} + +func (x *ExecuteMultiRequest) GetSession() *Session { + if x != nil { + return x.Session + } + return nil +} + +// ExecuteMultiResponse is the returned value from ExecuteMulti. +type ExecuteMultiResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // error contains an application level error if necessary. Note the + // session may have changed, even when an error is returned (for + // instance if a database integrity error happened). + Error *vtrpc.RPCError `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` + // session is the updated session information. + Session *Session `protobuf:"bytes,2,opt,name=session,proto3" json:"session,omitempty"` + // results contain the query results. There can be some results even if the + // error is set. + Results []*query.QueryResult `protobuf:"bytes,3,rep,name=results,proto3" json:"results,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ExecuteMultiResponse) Reset() { + *x = ExecuteMultiResponse{} + mi := &file_vtgate_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExecuteMultiResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExecuteMultiResponse) ProtoMessage() {} + +func (x *ExecuteMultiResponse) ProtoReflect() protoreflect.Message { + mi := &file_vtgate_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExecuteMultiResponse.ProtoReflect.Descriptor instead. +func (*ExecuteMultiResponse) Descriptor() ([]byte, []int) { + return file_vtgate_proto_rawDescGZIP(), []int{4} +} + +func (x *ExecuteMultiResponse) GetError() *vtrpc.RPCError { + if x != nil { + return x.Error + } + return nil +} + +func (x *ExecuteMultiResponse) GetSession() *Session { + if x != nil { + return x.Session + } + return nil +} + +func (x *ExecuteMultiResponse) GetResults() []*query.QueryResult { + if x != nil { + return x.Results + } + return nil +} + // ExecuteRequest is the payload to Execute. type ExecuteRequest struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -581,7 +713,7 @@ type ExecuteRequest struct { func (x *ExecuteRequest) Reset() { *x = ExecuteRequest{} - mi := &file_vtgate_proto_msgTypes[3] + mi := &file_vtgate_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -593,7 +725,7 @@ func (x *ExecuteRequest) String() string { func (*ExecuteRequest) ProtoMessage() {} func (x *ExecuteRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtgate_proto_msgTypes[3] + mi := &file_vtgate_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -606,7 +738,7 @@ func (x *ExecuteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecuteRequest.ProtoReflect.Descriptor instead. func (*ExecuteRequest) Descriptor() ([]byte, []int) { - return file_vtgate_proto_rawDescGZIP(), []int{3} + return file_vtgate_proto_rawDescGZIP(), []int{5} } func (x *ExecuteRequest) GetCallerId() *vtrpc.CallerID { @@ -654,7 +786,7 @@ type ExecuteResponse struct { func (x *ExecuteResponse) Reset() { *x = ExecuteResponse{} - mi := &file_vtgate_proto_msgTypes[4] + mi := &file_vtgate_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -666,7 +798,7 @@ func (x *ExecuteResponse) String() string { func (*ExecuteResponse) ProtoMessage() {} func (x *ExecuteResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtgate_proto_msgTypes[4] + mi := &file_vtgate_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -679,7 +811,7 @@ func (x *ExecuteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecuteResponse.ProtoReflect.Descriptor instead. func (*ExecuteResponse) Descriptor() ([]byte, []int) { - return file_vtgate_proto_rawDescGZIP(), []int{4} + return file_vtgate_proto_rawDescGZIP(), []int{6} } func (x *ExecuteResponse) GetError() *vtrpc.RPCError { @@ -719,7 +851,7 @@ type ExecuteBatchRequest struct { func (x *ExecuteBatchRequest) Reset() { *x = ExecuteBatchRequest{} - mi := &file_vtgate_proto_msgTypes[5] + mi := &file_vtgate_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -731,7 +863,7 @@ func (x *ExecuteBatchRequest) String() string { func (*ExecuteBatchRequest) ProtoMessage() {} func (x *ExecuteBatchRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtgate_proto_msgTypes[5] + mi := &file_vtgate_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -744,7 +876,7 @@ func (x *ExecuteBatchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecuteBatchRequest.ProtoReflect.Descriptor instead. func (*ExecuteBatchRequest) Descriptor() ([]byte, []int) { - return file_vtgate_proto_rawDescGZIP(), []int{5} + return file_vtgate_proto_rawDescGZIP(), []int{7} } func (x *ExecuteBatchRequest) GetCallerId() *vtrpc.CallerID { @@ -785,7 +917,7 @@ type ExecuteBatchResponse struct { func (x *ExecuteBatchResponse) Reset() { *x = ExecuteBatchResponse{} - mi := &file_vtgate_proto_msgTypes[6] + mi := &file_vtgate_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -797,7 +929,7 @@ func (x *ExecuteBatchResponse) String() string { func (*ExecuteBatchResponse) ProtoMessage() {} func (x *ExecuteBatchResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtgate_proto_msgTypes[6] + mi := &file_vtgate_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -810,7 +942,7 @@ func (x *ExecuteBatchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecuteBatchResponse.ProtoReflect.Descriptor instead. func (*ExecuteBatchResponse) Descriptor() ([]byte, []int) { - return file_vtgate_proto_rawDescGZIP(), []int{6} + return file_vtgate_proto_rawDescGZIP(), []int{8} } func (x *ExecuteBatchResponse) GetError() *vtrpc.RPCError { @@ -850,7 +982,7 @@ type StreamExecuteRequest struct { func (x *StreamExecuteRequest) Reset() { *x = StreamExecuteRequest{} - mi := &file_vtgate_proto_msgTypes[7] + mi := &file_vtgate_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -862,7 +994,7 @@ func (x *StreamExecuteRequest) String() string { func (*StreamExecuteRequest) ProtoMessage() {} func (x *StreamExecuteRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtgate_proto_msgTypes[7] + mi := &file_vtgate_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -875,7 +1007,7 @@ func (x *StreamExecuteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamExecuteRequest.ProtoReflect.Descriptor instead. func (*StreamExecuteRequest) Descriptor() ([]byte, []int) { - return file_vtgate_proto_rawDescGZIP(), []int{7} + return file_vtgate_proto_rawDescGZIP(), []int{9} } func (x *StreamExecuteRequest) GetCallerId() *vtrpc.CallerID { @@ -916,7 +1048,7 @@ type StreamExecuteResponse struct { func (x *StreamExecuteResponse) Reset() { *x = StreamExecuteResponse{} - mi := &file_vtgate_proto_msgTypes[8] + mi := &file_vtgate_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -928,7 +1060,7 @@ func (x *StreamExecuteResponse) String() string { func (*StreamExecuteResponse) ProtoMessage() {} func (x *StreamExecuteResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtgate_proto_msgTypes[8] + mi := &file_vtgate_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -941,7 +1073,7 @@ func (x *StreamExecuteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamExecuteResponse.ProtoReflect.Descriptor instead. func (*StreamExecuteResponse) Descriptor() ([]byte, []int) { - return file_vtgate_proto_rawDescGZIP(), []int{8} + return file_vtgate_proto_rawDescGZIP(), []int{10} } func (x *StreamExecuteResponse) GetResult() *query.QueryResult { @@ -958,6 +1090,144 @@ func (x *StreamExecuteResponse) GetSession() *Session { return nil } +// StreamExecuteMultiRequest is the payload to StreamExecuteMulti. +type StreamExecuteMultiRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // caller_id identifies the caller. This is the effective caller ID, + // set by the application to further identify the caller. + CallerId *vtrpc.CallerID `protobuf:"bytes,1,opt,name=caller_id,json=callerId,proto3" json:"caller_id,omitempty"` + // sql contains the set of queries to execute. + Sql string `protobuf:"bytes,2,opt,name=sql,proto3" json:"sql,omitempty"` + // session carries the session state. + Session *Session `protobuf:"bytes,3,opt,name=session,proto3" json:"session,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StreamExecuteMultiRequest) Reset() { + *x = StreamExecuteMultiRequest{} + mi := &file_vtgate_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StreamExecuteMultiRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamExecuteMultiRequest) ProtoMessage() {} + +func (x *StreamExecuteMultiRequest) ProtoReflect() protoreflect.Message { + mi := &file_vtgate_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreamExecuteMultiRequest.ProtoReflect.Descriptor instead. +func (*StreamExecuteMultiRequest) Descriptor() ([]byte, []int) { + return file_vtgate_proto_rawDescGZIP(), []int{11} +} + +func (x *StreamExecuteMultiRequest) GetCallerId() *vtrpc.CallerID { + if x != nil { + return x.CallerId + } + return nil +} + +func (x *StreamExecuteMultiRequest) GetSql() string { + if x != nil { + return x.Sql + } + return "" +} + +func (x *StreamExecuteMultiRequest) GetSession() *Session { + if x != nil { + return x.Session + } + return nil +} + +// StreamExecuteMultiResponse is the returned value from StreamExecuteMulti. +type StreamExecuteMultiResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // result contains the result set or an error if one occurred while executing the query. + Result *query.ResultWithError `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + // more_results is set to true if there are more results to follow after this one has concluded. + MoreResults bool `protobuf:"varint,2,opt,name=more_results,json=moreResults,proto3" json:"more_results,omitempty"` + // new_result signifies a new result has started with this packet. + NewResult bool `protobuf:"varint,3,opt,name=new_result,json=newResult,proto3" json:"new_result,omitempty"` + // session is the updated session information. + Session *Session `protobuf:"bytes,4,opt,name=session,proto3" json:"session,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StreamExecuteMultiResponse) Reset() { + *x = StreamExecuteMultiResponse{} + mi := &file_vtgate_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StreamExecuteMultiResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamExecuteMultiResponse) ProtoMessage() {} + +func (x *StreamExecuteMultiResponse) ProtoReflect() protoreflect.Message { + mi := &file_vtgate_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreamExecuteMultiResponse.ProtoReflect.Descriptor instead. +func (*StreamExecuteMultiResponse) Descriptor() ([]byte, []int) { + return file_vtgate_proto_rawDescGZIP(), []int{12} +} + +func (x *StreamExecuteMultiResponse) GetResult() *query.ResultWithError { + if x != nil { + return x.Result + } + return nil +} + +func (x *StreamExecuteMultiResponse) GetMoreResults() bool { + if x != nil { + return x.MoreResults + } + return false +} + +func (x *StreamExecuteMultiResponse) GetNewResult() bool { + if x != nil { + return x.NewResult + } + return false +} + +func (x *StreamExecuteMultiResponse) GetSession() *Session { + if x != nil { + return x.Session + } + return nil +} + // ResolveTransactionRequest is the payload to ResolveTransaction. type ResolveTransactionRequest struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -972,7 +1242,7 @@ type ResolveTransactionRequest struct { func (x *ResolveTransactionRequest) Reset() { *x = ResolveTransactionRequest{} - mi := &file_vtgate_proto_msgTypes[9] + mi := &file_vtgate_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -984,7 +1254,7 @@ func (x *ResolveTransactionRequest) String() string { func (*ResolveTransactionRequest) ProtoMessage() {} func (x *ResolveTransactionRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtgate_proto_msgTypes[9] + mi := &file_vtgate_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -997,7 +1267,7 @@ func (x *ResolveTransactionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ResolveTransactionRequest.ProtoReflect.Descriptor instead. func (*ResolveTransactionRequest) Descriptor() ([]byte, []int) { - return file_vtgate_proto_rawDescGZIP(), []int{9} + return file_vtgate_proto_rawDescGZIP(), []int{13} } func (x *ResolveTransactionRequest) GetCallerId() *vtrpc.CallerID { @@ -1023,7 +1293,7 @@ type ResolveTransactionResponse struct { func (x *ResolveTransactionResponse) Reset() { *x = ResolveTransactionResponse{} - mi := &file_vtgate_proto_msgTypes[10] + mi := &file_vtgate_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1035,7 +1305,7 @@ func (x *ResolveTransactionResponse) String() string { func (*ResolveTransactionResponse) ProtoMessage() {} func (x *ResolveTransactionResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtgate_proto_msgTypes[10] + mi := &file_vtgate_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1048,7 +1318,7 @@ func (x *ResolveTransactionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ResolveTransactionResponse.ProtoReflect.Descriptor instead. func (*ResolveTransactionResponse) Descriptor() ([]byte, []int) { - return file_vtgate_proto_rawDescGZIP(), []int{10} + return file_vtgate_proto_rawDescGZIP(), []int{14} } type VStreamFlags struct { @@ -1068,13 +1338,18 @@ type VStreamFlags struct { StreamKeyspaceHeartbeats bool `protobuf:"varint,7,opt,name=stream_keyspace_heartbeats,json=streamKeyspaceHeartbeats,proto3" json:"stream_keyspace_heartbeats,omitempty"` // Include reshard journal events in the stream. IncludeReshardJournalEvents bool `protobuf:"varint,8,opt,name=include_reshard_journal_events,json=includeReshardJournalEvents,proto3" json:"include_reshard_journal_events,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Copy only these tables, skip the rest in the filter. + // If not provided, the default behaviour is to copy all tables. + TablesToCopy []string `protobuf:"bytes,9,rep,name=tables_to_copy,json=tablesToCopy,proto3" json:"tables_to_copy,omitempty"` + // Exclude the keyspace from the table name that is sent to the vstream client + ExcludeKeyspaceFromTableName bool `protobuf:"varint,10,opt,name=exclude_keyspace_from_table_name,json=excludeKeyspaceFromTableName,proto3" json:"exclude_keyspace_from_table_name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *VStreamFlags) Reset() { *x = VStreamFlags{} - mi := &file_vtgate_proto_msgTypes[11] + mi := &file_vtgate_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1086,7 +1361,7 @@ func (x *VStreamFlags) String() string { func (*VStreamFlags) ProtoMessage() {} func (x *VStreamFlags) ProtoReflect() protoreflect.Message { - mi := &file_vtgate_proto_msgTypes[11] + mi := &file_vtgate_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1099,7 +1374,7 @@ func (x *VStreamFlags) ProtoReflect() protoreflect.Message { // Deprecated: Use VStreamFlags.ProtoReflect.Descriptor instead. func (*VStreamFlags) Descriptor() ([]byte, []int) { - return file_vtgate_proto_rawDescGZIP(), []int{11} + return file_vtgate_proto_rawDescGZIP(), []int{15} } func (x *VStreamFlags) GetMinimizeSkew() bool { @@ -1158,6 +1433,20 @@ func (x *VStreamFlags) GetIncludeReshardJournalEvents() bool { return false } +func (x *VStreamFlags) GetTablesToCopy() []string { + if x != nil { + return x.TablesToCopy + } + return nil +} + +func (x *VStreamFlags) GetExcludeKeyspaceFromTableName() bool { + if x != nil { + return x.ExcludeKeyspaceFromTableName + } + return false +} + // VStreamRequest is the payload for VStream. type VStreamRequest struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -1175,7 +1464,7 @@ type VStreamRequest struct { func (x *VStreamRequest) Reset() { *x = VStreamRequest{} - mi := &file_vtgate_proto_msgTypes[12] + mi := &file_vtgate_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1187,7 +1476,7 @@ func (x *VStreamRequest) String() string { func (*VStreamRequest) ProtoMessage() {} func (x *VStreamRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtgate_proto_msgTypes[12] + mi := &file_vtgate_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1200,7 +1489,7 @@ func (x *VStreamRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VStreamRequest.ProtoReflect.Descriptor instead. func (*VStreamRequest) Descriptor() ([]byte, []int) { - return file_vtgate_proto_rawDescGZIP(), []int{12} + return file_vtgate_proto_rawDescGZIP(), []int{16} } func (x *VStreamRequest) GetCallerId() *vtrpc.CallerID { @@ -1248,7 +1537,7 @@ type VStreamResponse struct { func (x *VStreamResponse) Reset() { *x = VStreamResponse{} - mi := &file_vtgate_proto_msgTypes[13] + mi := &file_vtgate_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1260,7 +1549,7 @@ func (x *VStreamResponse) String() string { func (*VStreamResponse) ProtoMessage() {} func (x *VStreamResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtgate_proto_msgTypes[13] + mi := &file_vtgate_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1273,7 +1562,7 @@ func (x *VStreamResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VStreamResponse.ProtoReflect.Descriptor instead. func (*VStreamResponse) Descriptor() ([]byte, []int) { - return file_vtgate_proto_rawDescGZIP(), []int{13} + return file_vtgate_proto_rawDescGZIP(), []int{17} } func (x *VStreamResponse) GetEvents() []*binlogdata.VEvent { @@ -1299,7 +1588,7 @@ type PrepareRequest struct { func (x *PrepareRequest) Reset() { *x = PrepareRequest{} - mi := &file_vtgate_proto_msgTypes[14] + mi := &file_vtgate_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1311,7 +1600,7 @@ func (x *PrepareRequest) String() string { func (*PrepareRequest) ProtoMessage() {} func (x *PrepareRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtgate_proto_msgTypes[14] + mi := &file_vtgate_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1324,7 +1613,7 @@ func (x *PrepareRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PrepareRequest.ProtoReflect.Descriptor instead. func (*PrepareRequest) Descriptor() ([]byte, []int) { - return file_vtgate_proto_rawDescGZIP(), []int{14} + return file_vtgate_proto_rawDescGZIP(), []int{18} } func (x *PrepareRequest) GetCallerId() *vtrpc.CallerID { @@ -1366,7 +1655,7 @@ type PrepareResponse struct { func (x *PrepareResponse) Reset() { *x = PrepareResponse{} - mi := &file_vtgate_proto_msgTypes[15] + mi := &file_vtgate_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1378,7 +1667,7 @@ func (x *PrepareResponse) String() string { func (*PrepareResponse) ProtoMessage() {} func (x *PrepareResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtgate_proto_msgTypes[15] + mi := &file_vtgate_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1391,7 +1680,7 @@ func (x *PrepareResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PrepareResponse.ProtoReflect.Descriptor instead. func (*PrepareResponse) Descriptor() ([]byte, []int) { - return file_vtgate_proto_rawDescGZIP(), []int{15} + return file_vtgate_proto_rawDescGZIP(), []int{19} } func (x *PrepareResponse) GetError() *vtrpc.RPCError { @@ -1436,7 +1725,7 @@ type CloseSessionRequest struct { func (x *CloseSessionRequest) Reset() { *x = CloseSessionRequest{} - mi := &file_vtgate_proto_msgTypes[16] + mi := &file_vtgate_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1448,7 +1737,7 @@ func (x *CloseSessionRequest) String() string { func (*CloseSessionRequest) ProtoMessage() {} func (x *CloseSessionRequest) ProtoReflect() protoreflect.Message { - mi := &file_vtgate_proto_msgTypes[16] + mi := &file_vtgate_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1461,7 +1750,7 @@ func (x *CloseSessionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CloseSessionRequest.ProtoReflect.Descriptor instead. func (*CloseSessionRequest) Descriptor() ([]byte, []int) { - return file_vtgate_proto_rawDescGZIP(), []int{16} + return file_vtgate_proto_rawDescGZIP(), []int{20} } func (x *CloseSessionRequest) GetCallerId() *vtrpc.CallerID { @@ -1491,7 +1780,7 @@ type CloseSessionResponse struct { func (x *CloseSessionResponse) Reset() { *x = CloseSessionResponse{} - mi := &file_vtgate_proto_msgTypes[17] + mi := &file_vtgate_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1503,7 +1792,7 @@ func (x *CloseSessionResponse) String() string { func (*CloseSessionResponse) ProtoMessage() {} func (x *CloseSessionResponse) ProtoReflect() protoreflect.Message { - mi := &file_vtgate_proto_msgTypes[17] + mi := &file_vtgate_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1516,7 +1805,7 @@ func (x *CloseSessionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CloseSessionResponse.ProtoReflect.Descriptor instead. func (*CloseSessionResponse) Descriptor() ([]byte, []int) { - return file_vtgate_proto_rawDescGZIP(), []int{17} + return file_vtgate_proto_rawDescGZIP(), []int{21} } func (x *CloseSessionResponse) GetError() *vtrpc.RPCError { @@ -1542,7 +1831,7 @@ type Session_ShardSession struct { func (x *Session_ShardSession) Reset() { *x = Session_ShardSession{} - mi := &file_vtgate_proto_msgTypes[18] + mi := &file_vtgate_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1554,7 +1843,7 @@ func (x *Session_ShardSession) String() string { func (*Session_ShardSession) ProtoMessage() {} func (x *Session_ShardSession) ProtoReflect() protoreflect.Message { - mi := &file_vtgate_proto_msgTypes[18] + mi := &file_vtgate_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1614,310 +1903,166 @@ func (x *Session_ShardSession) GetRowsAffected() bool { var File_vtgate_proto protoreflect.FileDescriptor -var file_vtgate_proto_rawDesc = string([]byte{ - 0x0a, 0x0c, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, - 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x1a, 0x10, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0b, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0b, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0xd2, 0x0f, 0x0a, 0x07, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, - 0x0a, 0x0e, 0x69, 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x0e, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x73, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x73, 0x68, 0x61, - 0x72, 0x64, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x75, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, - 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, - 0x2f, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x42, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x76, 0x74, 0x67, - 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, - 0x6f, 0x64, 0x65, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, - 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x77, 0x61, 0x72, - 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3f, 0x0a, 0x0c, 0x70, 0x72, 0x65, 0x5f, 0x73, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x76, 0x74, - 0x67, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x68, 0x61, - 0x72, 0x64, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x70, 0x72, 0x65, 0x53, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x73, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x70, 0x6f, 0x73, - 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x61, 0x73, - 0x74, 0x5f, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x49, 0x64, 0x12, - 0x1d, 0x0a, 0x0a, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x09, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x5f, - 0x0a, 0x16, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x76, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, - 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, - 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x56, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x75, 0x73, 0x65, 0x72, 0x44, - 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, - 0x4f, 0x0a, 0x10, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x76, 0x74, 0x67, 0x61, - 0x74, 0x65, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x0f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x77, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x6f, 0x77, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1e, 0x0a, - 0x0a, 0x73, 0x61, 0x76, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0a, 0x73, 0x61, 0x76, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x0a, - 0x10, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, - 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x6e, 0x12, 0x3f, 0x0a, 0x0c, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, - 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x6c, 0x6f, 0x63, - 0x6b, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x6c, 0x61, 0x73, 0x74, - 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x18, - 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x4c, 0x6f, 0x63, 0x6b, 0x48, - 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x40, 0x0a, 0x10, 0x72, 0x65, 0x61, 0x64, - 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x61, 0x64, - 0x41, 0x66, 0x74, 0x65, 0x72, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x0e, 0x72, 0x65, 0x61, 0x64, - 0x41, 0x66, 0x74, 0x65, 0x72, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x44, 0x44, - 0x4c, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x44, 0x44, 0x4c, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x20, 0x0a, 0x0b, - 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x55, 0x49, 0x44, 0x18, 0x16, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x55, 0x49, 0x44, 0x12, 0x34, - 0x0a, 0x16, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, - 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x12, 0x46, 0x0a, 0x0d, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, - 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x76, 0x74, - 0x67, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x64, 0x76, - 0x69, 0x73, 0x6f, 0x72, 0x79, 0x4c, 0x6f, 0x63, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, - 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x4c, 0x6f, 0x63, 0x6b, 0x12, 0x23, 0x0a, 0x0d, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x19, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0c, 0x71, 0x75, 0x65, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, - 0x74, 0x12, 0x52, 0x0a, 0x11, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x76, - 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x72, - 0x65, 0x70, 0x61, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x10, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x10, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x78, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x75, 0x6e, 0x74, 0x69, - 0x6c, 0x5f, 0x72, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x12, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x52, 0x6f, 0x6c, 0x6c, - 0x62, 0x61, 0x63, 0x6b, 0x1a, 0xfd, 0x01, 0x0a, 0x0c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x53, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x25, 0x0a, 0x0e, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, - 0x69, 0x61, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, - 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1f, 0x0a, - 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64, 0x12, 0x1f, - 0x0a, 0x0b, 0x76, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0a, 0x76, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x6e, 0x6c, 0x79, 0x12, - 0x23, 0x0a, 0x0d, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x1a, 0x5c, 0x0a, 0x19, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, - 0x6e, 0x65, 0x64, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, - 0x72, 0x79, 0x4c, 0x6f, 0x63, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, 0x15, 0x50, 0x72, 0x65, 0x70, 0x61, - 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x72, 0x65, 0x70, 0x61, - 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x5d, 0x0a, 0x0b, 0x50, 0x72, 0x65, 0x70, 0x61, - 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, - 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x10, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5f, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xac, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x61, 0x64, 0x41, - 0x66, 0x74, 0x65, 0x72, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x15, 0x72, 0x65, 0x61, - 0x64, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x67, 0x74, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x72, 0x65, 0x61, 0x64, 0x41, 0x66, - 0x74, 0x65, 0x72, 0x57, 0x72, 0x69, 0x74, 0x65, 0x47, 0x74, 0x69, 0x64, 0x12, 0x37, 0x0a, 0x18, - 0x72, 0x65, 0x61, 0x64, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x15, - 0x72, 0x65, 0x61, 0x64, 0x41, 0x66, 0x74, 0x65, 0x72, 0x57, 0x72, 0x69, 0x74, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x5f, 0x67, 0x74, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x11, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x63, 0x6b, - 0x47, 0x74, 0x69, 0x64, 0x73, 0x22, 0xc6, 0x01, 0x0a, 0x0e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, - 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x08, 0x63, 0x61, - 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, - 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x27, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x11, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, - 0x65, 0x70, 0x61, 0x72, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x70, 0x72, - 0x65, 0x70, 0x61, 0x72, 0x65, 0x64, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, - 0x10, 0x06, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x22, 0x8f, - 0x01, 0x0a, 0x0f, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x29, 0x0a, 0x07, 0x73, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x67, - 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x22, 0xb3, 0x01, 0x0a, 0x13, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, - 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x08, 0x63, 0x61, - 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, - 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x2b, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75, 0x6e, 0x64, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x4a, 0x04, - 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, - 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x22, 0x9a, 0x01, 0x0a, 0x14, 0x45, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x25, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, - 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x29, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, - 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x30, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x09, - 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, - 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x05, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x12, 0x29, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4a, 0x04, - 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, - 0x22, 0x6e, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x29, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, - 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x22, 0x5d, 0x0a, 0x19, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, - 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, - 0x44, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, - 0x74, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, 0x64, 0x22, - 0x1c, 0x0a, 0x1a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xef, 0x02, - 0x0a, 0x0c, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x23, - 0x0a, 0x0d, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x6b, 0x65, 0x77, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x53, - 0x6b, 0x65, 0x77, 0x12, 0x2d, 0x0a, 0x12, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, - 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x11, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, - 0x61, 0x6c, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x6f, 0x6e, 0x5f, 0x72, 0x65, - 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x74, 0x6f, - 0x70, 0x4f, 0x6e, 0x52, 0x65, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, - 0x6c, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, - 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x65, 0x6c, 0x6c, 0x50, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x3c, 0x0a, 0x1a, - 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, - 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x18, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x12, 0x43, 0x0a, 0x1e, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x6a, 0x6f, - 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x1b, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x73, 0x68, 0x61, - 0x72, 0x64, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, - 0xf6, 0x01, 0x0a, 0x0e, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, - 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x35, 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x05, 0x76, 0x67, 0x74, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x56, 0x47, 0x74, 0x69, 0x64, 0x52, 0x05, 0x76, 0x67, 0x74, 0x69, 0x64, - 0x12, 0x2a, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x05, - 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x76, 0x74, - 0x67, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x46, 0x6c, 0x61, 0x67, - 0x73, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3d, 0x0a, 0x0f, 0x56, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x62, 0x69, - 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, - 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x92, 0x01, 0x0a, 0x0e, 0x50, 0x72, 0x65, 0x70, - 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x09, 0x63, 0x61, - 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, - 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x08, - 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x67, 0x61, - 0x74, 0x65, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75, 0x6e, 0x64, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0xac, 0x01, 0x0a, - 0x0f, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x25, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x29, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, - 0x65, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x6e, 0x0a, 0x13, 0x43, - 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, - 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x29, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3d, 0x0a, 0x14, 0x43, - 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2a, 0x44, 0x0a, 0x0f, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, - 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, - 0x0a, 0x06, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x55, - 0x4c, 0x54, 0x49, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x57, 0x4f, 0x50, 0x43, 0x10, 0x03, - 0x2a, 0x3c, 0x0a, 0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, - 0x0a, 0x0a, 0x06, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x50, - 0x52, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x4f, 0x53, 0x54, 0x10, 0x02, 0x12, 0x0e, - 0x0a, 0x0a, 0x41, 0x55, 0x54, 0x4f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x03, 0x42, 0x36, - 0x0a, 0x0f, 0x69, 0x6f, 0x2e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x5a, 0x23, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, - 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_vtgate_proto_rawDesc = "" + + "\n" + + "\fvtgate.proto\x12\x06vtgate\x1a\x10binlogdata.proto\x1a\vquery.proto\x1a\x0etopodata.proto\x1a\vvtrpc.proto\"\xd2\x0f\n" + + "\aSession\x12%\n" + + "\x0ein_transaction\x18\x01 \x01(\bR\rinTransaction\x12C\n" + + "\x0eshard_sessions\x18\x02 \x03(\v2\x1c.vtgate.Session.ShardSessionR\rshardSessions\x12\x1e\n" + + "\n" + + "autocommit\x18\x04 \x01(\bR\n" + + "autocommit\x12#\n" + + "\rtarget_string\x18\x05 \x01(\tR\ftargetString\x12/\n" + + "\aoptions\x18\x06 \x01(\v2\x15.query.ExecuteOptionsR\aoptions\x12B\n" + + "\x10transaction_mode\x18\a \x01(\x0e2\x17.vtgate.TransactionModeR\x0ftransactionMode\x12/\n" + + "\bwarnings\x18\b \x03(\v2\x13.query.QueryWarningR\bwarnings\x12?\n" + + "\fpre_sessions\x18\t \x03(\v2\x1c.vtgate.Session.ShardSessionR\vpreSessions\x12A\n" + + "\rpost_sessions\x18\n" + + " \x03(\v2\x1c.vtgate.Session.ShardSessionR\fpostSessions\x12$\n" + + "\x0elast_insert_id\x18\v \x01(\x04R\flastInsertId\x12\x1d\n" + + "\n" + + "found_rows\x18\f \x01(\x04R\tfoundRows\x12_\n" + + "\x16user_defined_variables\x18\r \x03(\v2).vtgate.Session.UserDefinedVariablesEntryR\x14userDefinedVariables\x12O\n" + + "\x10system_variables\x18\x0e \x03(\v2$.vtgate.Session.SystemVariablesEntryR\x0fsystemVariables\x12\x1b\n" + + "\trow_count\x18\x0f \x01(\x03R\browCount\x12\x1e\n" + + "\n" + + "savepoints\x18\x10 \x03(\tR\n" + + "savepoints\x12(\n" + + "\x10in_reserved_conn\x18\x11 \x01(\bR\x0einReservedConn\x12?\n" + + "\flock_session\x18\x12 \x01(\v2\x1c.vtgate.Session.ShardSessionR\vlockSession\x12.\n" + + "\x13last_lock_heartbeat\x18\x13 \x01(\x03R\x11lastLockHeartbeat\x12@\n" + + "\x10read_after_write\x18\x14 \x01(\v2\x16.vtgate.ReadAfterWriteR\x0ereadAfterWrite\x12 \n" + + "\vDDLStrategy\x18\x15 \x01(\tR\vDDLStrategy\x12 \n" + + "\vSessionUUID\x18\x16 \x01(\tR\vSessionUUID\x124\n" + + "\x16enable_system_settings\x18\x17 \x01(\bR\x14enableSystemSettings\x12F\n" + + "\radvisory_lock\x18\x18 \x03(\v2!.vtgate.Session.AdvisoryLockEntryR\fadvisoryLock\x12#\n" + + "\rquery_timeout\x18\x19 \x01(\x03R\fqueryTimeout\x12R\n" + + "\x11prepare_statement\x18\x1a \x03(\v2%.vtgate.Session.PrepareStatementEntryR\x10prepareStatement\x12+\n" + + "\x11migration_context\x18\x1b \x01(\tR\x10migrationContext\x120\n" + + "\x14error_until_rollback\x18\x1c \x01(\bR\x12errorUntilRollback\x1a\xfd\x01\n" + + "\fShardSession\x12%\n" + + "\x06target\x18\x01 \x01(\v2\r.query.TargetR\x06target\x12%\n" + + "\x0etransaction_id\x18\x02 \x01(\x03R\rtransactionId\x128\n" + + "\ftablet_alias\x18\x03 \x01(\v2\x15.topodata.TabletAliasR\vtabletAlias\x12\x1f\n" + + "\vreserved_id\x18\x04 \x01(\x03R\n" + + "reservedId\x12\x1f\n" + + "\vvindex_only\x18\x05 \x01(\bR\n" + + "vindexOnly\x12#\n" + + "\rrows_affected\x18\x06 \x01(\bR\frowsAffected\x1a\\\n" + + "\x19UserDefinedVariablesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12)\n" + + "\x05value\x18\x02 \x01(\v2\x13.query.BindVariableR\x05value:\x028\x01\x1aB\n" + + "\x14SystemVariablesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1a?\n" + + "\x11AdvisoryLockEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\x03R\x05value:\x028\x01\x1aX\n" + + "\x15PrepareStatementEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12)\n" + + "\x05value\x18\x02 \x01(\v2\x13.vtgate.PrepareDataR\x05value:\x028\x01J\x04\b\x03\x10\x04\"]\n" + + "\vPrepareData\x12+\n" + + "\x11prepare_statement\x18\x01 \x01(\tR\x10prepareStatement\x12!\n" + + "\fparams_count\x18\x02 \x01(\x05R\vparamsCount\"\xac\x01\n" + + "\x0eReadAfterWrite\x121\n" + + "\x15read_after_write_gtid\x18\x01 \x01(\tR\x12readAfterWriteGtid\x127\n" + + "\x18read_after_write_timeout\x18\x02 \x01(\x01R\x15readAfterWriteTimeout\x12.\n" + + "\x13session_track_gtids\x18\x03 \x01(\bR\x11sessionTrackGtids\"\x80\x01\n" + + "\x13ExecuteMultiRequest\x12,\n" + + "\tcaller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\bcallerId\x12\x10\n" + + "\x03sql\x18\x02 \x01(\tR\x03sql\x12)\n" + + "\asession\x18\x03 \x01(\v2\x0f.vtgate.SessionR\asession\"\x96\x01\n" + + "\x14ExecuteMultiResponse\x12%\n" + + "\x05error\x18\x01 \x01(\v2\x0f.vtrpc.RPCErrorR\x05error\x12)\n" + + "\asession\x18\x02 \x01(\v2\x0f.vtgate.SessionR\asession\x12,\n" + + "\aresults\x18\x03 \x03(\v2\x12.query.QueryResultR\aresults\"\xc6\x01\n" + + "\x0eExecuteRequest\x12,\n" + + "\tcaller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\bcallerId\x12)\n" + + "\asession\x18\x02 \x01(\v2\x0f.vtgate.SessionR\asession\x12'\n" + + "\x05query\x18\x03 \x01(\v2\x11.query.BoundQueryR\x05query\x12\x1a\n" + + "\bprepared\x18\b \x01(\bR\bpreparedJ\x04\b\x04\x10\x05J\x04\b\x05\x10\x06J\x04\b\x06\x10\aJ\x04\b\a\x10\b\"\x8f\x01\n" + + "\x0fExecuteResponse\x12%\n" + + "\x05error\x18\x01 \x01(\v2\x0f.vtrpc.RPCErrorR\x05error\x12)\n" + + "\asession\x18\x02 \x01(\v2\x0f.vtgate.SessionR\asession\x12*\n" + + "\x06result\x18\x03 \x01(\v2\x12.query.QueryResultR\x06result\"\xb3\x01\n" + + "\x13ExecuteBatchRequest\x12,\n" + + "\tcaller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\bcallerId\x12)\n" + + "\asession\x18\x02 \x01(\v2\x0f.vtgate.SessionR\asession\x12+\n" + + "\aqueries\x18\x03 \x03(\v2\x11.query.BoundQueryR\aqueriesJ\x04\b\x04\x10\x05J\x04\b\x05\x10\x06J\x04\b\x06\x10\aJ\x04\b\a\x10\b\"\x9a\x01\n" + + "\x14ExecuteBatchResponse\x12%\n" + + "\x05error\x18\x01 \x01(\v2\x0f.vtrpc.RPCErrorR\x05error\x12)\n" + + "\asession\x18\x02 \x01(\v2\x0f.vtgate.SessionR\asession\x120\n" + + "\aresults\x18\x03 \x03(\v2\x16.query.ResultWithErrorR\aresults\"\xaa\x01\n" + + "\x14StreamExecuteRequest\x12,\n" + + "\tcaller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\bcallerId\x12'\n" + + "\x05query\x18\x02 \x01(\v2\x11.query.BoundQueryR\x05query\x12)\n" + + "\asession\x18\x06 \x01(\v2\x0f.vtgate.SessionR\asessionJ\x04\b\x03\x10\x04J\x04\b\x04\x10\x05J\x04\b\x05\x10\x06\"n\n" + + "\x15StreamExecuteResponse\x12*\n" + + "\x06result\x18\x01 \x01(\v2\x12.query.QueryResultR\x06result\x12)\n" + + "\asession\x18\x02 \x01(\v2\x0f.vtgate.SessionR\asession\"\x86\x01\n" + + "\x19StreamExecuteMultiRequest\x12,\n" + + "\tcaller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\bcallerId\x12\x10\n" + + "\x03sql\x18\x02 \x01(\tR\x03sql\x12)\n" + + "\asession\x18\x03 \x01(\v2\x0f.vtgate.SessionR\asession\"\xb9\x01\n" + + "\x1aStreamExecuteMultiResponse\x12.\n" + + "\x06result\x18\x01 \x01(\v2\x16.query.ResultWithErrorR\x06result\x12!\n" + + "\fmore_results\x18\x02 \x01(\bR\vmoreResults\x12\x1d\n" + + "\n" + + "new_result\x18\x03 \x01(\bR\tnewResult\x12)\n" + + "\asession\x18\x04 \x01(\v2\x0f.vtgate.SessionR\asession\"]\n" + + "\x19ResolveTransactionRequest\x12,\n" + + "\tcaller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\bcallerId\x12\x12\n" + + "\x04dtid\x18\x02 \x01(\tR\x04dtid\"\x1c\n" + + "\x1aResolveTransactionResponse\"\xdd\x03\n" + + "\fVStreamFlags\x12#\n" + + "\rminimize_skew\x18\x01 \x01(\bR\fminimizeSkew\x12-\n" + + "\x12heartbeat_interval\x18\x02 \x01(\rR\x11heartbeatInterval\x12&\n" + + "\x0fstop_on_reshard\x18\x03 \x01(\bR\rstopOnReshard\x12\x14\n" + + "\x05cells\x18\x04 \x01(\tR\x05cells\x12'\n" + + "\x0fcell_preference\x18\x05 \x01(\tR\x0ecellPreference\x12!\n" + + "\ftablet_order\x18\x06 \x01(\tR\vtabletOrder\x12<\n" + + "\x1astream_keyspace_heartbeats\x18\a \x01(\bR\x18streamKeyspaceHeartbeats\x12C\n" + + "\x1einclude_reshard_journal_events\x18\b \x01(\bR\x1bincludeReshardJournalEvents\x12$\n" + + "\x0etables_to_copy\x18\t \x03(\tR\ftablesToCopy\x12F\n" + + " exclude_keyspace_from_table_name\x18\n" + + " \x01(\bR\x1cexcludeKeyspaceFromTableName\"\xf6\x01\n" + + "\x0eVStreamRequest\x12,\n" + + "\tcaller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\bcallerId\x125\n" + + "\vtablet_type\x18\x02 \x01(\x0e2\x14.topodata.TabletTypeR\n" + + "tabletType\x12'\n" + + "\x05vgtid\x18\x03 \x01(\v2\x11.binlogdata.VGtidR\x05vgtid\x12*\n" + + "\x06filter\x18\x04 \x01(\v2\x12.binlogdata.FilterR\x06filter\x12*\n" + + "\x05flags\x18\x05 \x01(\v2\x14.vtgate.VStreamFlagsR\x05flags\"=\n" + + "\x0fVStreamResponse\x12*\n" + + "\x06events\x18\x01 \x03(\v2\x12.binlogdata.VEventR\x06events\"\x92\x01\n" + + "\x0ePrepareRequest\x12,\n" + + "\tcaller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\bcallerId\x12)\n" + + "\asession\x18\x02 \x01(\v2\x0f.vtgate.SessionR\asession\x12'\n" + + "\x05query\x18\x03 \x01(\v2\x11.query.BoundQueryR\x05query\"\xac\x01\n" + + "\x0fPrepareResponse\x12%\n" + + "\x05error\x18\x01 \x01(\v2\x0f.vtrpc.RPCErrorR\x05error\x12)\n" + + "\asession\x18\x02 \x01(\v2\x0f.vtgate.SessionR\asession\x12$\n" + + "\x06fields\x18\x03 \x03(\v2\f.query.FieldR\x06fields\x12!\n" + + "\fparams_count\x18\x04 \x01(\rR\vparamsCount\"n\n" + + "\x13CloseSessionRequest\x12,\n" + + "\tcaller_id\x18\x01 \x01(\v2\x0f.vtrpc.CallerIDR\bcallerId\x12)\n" + + "\asession\x18\x02 \x01(\v2\x0f.vtgate.SessionR\asession\"=\n" + + "\x14CloseSessionResponse\x12%\n" + + "\x05error\x18\x01 \x01(\v2\x0f.vtrpc.RPCErrorR\x05error*D\n" + + "\x0fTransactionMode\x12\x0f\n" + + "\vUNSPECIFIED\x10\x00\x12\n" + + "\n" + + "\x06SINGLE\x10\x01\x12\t\n" + + "\x05MULTI\x10\x02\x12\t\n" + + "\x05TWOPC\x10\x03*<\n" + + "\vCommitOrder\x12\n" + + "\n" + + "\x06NORMAL\x10\x00\x12\a\n" + + "\x03PRE\x10\x01\x12\b\n" + + "\x04POST\x10\x02\x12\x0e\n" + + "\n" + + "AUTOCOMMIT\x10\x03B6\n" + + "\x0fio.vitess.protoZ#vitess.io/vitess/go/vt/proto/vtgateb\x06proto3" var ( file_vtgate_proto_rawDescOnce sync.Once @@ -1932,104 +2077,117 @@ func file_vtgate_proto_rawDescGZIP() []byte { } var file_vtgate_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_vtgate_proto_msgTypes = make([]protoimpl.MessageInfo, 23) +var file_vtgate_proto_msgTypes = make([]protoimpl.MessageInfo, 27) var file_vtgate_proto_goTypes = []any{ (TransactionMode)(0), // 0: vtgate.TransactionMode (CommitOrder)(0), // 1: vtgate.CommitOrder (*Session)(nil), // 2: vtgate.Session (*PrepareData)(nil), // 3: vtgate.PrepareData (*ReadAfterWrite)(nil), // 4: vtgate.ReadAfterWrite - (*ExecuteRequest)(nil), // 5: vtgate.ExecuteRequest - (*ExecuteResponse)(nil), // 6: vtgate.ExecuteResponse - (*ExecuteBatchRequest)(nil), // 7: vtgate.ExecuteBatchRequest - (*ExecuteBatchResponse)(nil), // 8: vtgate.ExecuteBatchResponse - (*StreamExecuteRequest)(nil), // 9: vtgate.StreamExecuteRequest - (*StreamExecuteResponse)(nil), // 10: vtgate.StreamExecuteResponse - (*ResolveTransactionRequest)(nil), // 11: vtgate.ResolveTransactionRequest - (*ResolveTransactionResponse)(nil), // 12: vtgate.ResolveTransactionResponse - (*VStreamFlags)(nil), // 13: vtgate.VStreamFlags - (*VStreamRequest)(nil), // 14: vtgate.VStreamRequest - (*VStreamResponse)(nil), // 15: vtgate.VStreamResponse - (*PrepareRequest)(nil), // 16: vtgate.PrepareRequest - (*PrepareResponse)(nil), // 17: vtgate.PrepareResponse - (*CloseSessionRequest)(nil), // 18: vtgate.CloseSessionRequest - (*CloseSessionResponse)(nil), // 19: vtgate.CloseSessionResponse - (*Session_ShardSession)(nil), // 20: vtgate.Session.ShardSession - nil, // 21: vtgate.Session.UserDefinedVariablesEntry - nil, // 22: vtgate.Session.SystemVariablesEntry - nil, // 23: vtgate.Session.AdvisoryLockEntry - nil, // 24: vtgate.Session.PrepareStatementEntry - (*query.ExecuteOptions)(nil), // 25: query.ExecuteOptions - (*query.QueryWarning)(nil), // 26: query.QueryWarning - (*vtrpc.CallerID)(nil), // 27: vtrpc.CallerID - (*query.BoundQuery)(nil), // 28: query.BoundQuery - (*vtrpc.RPCError)(nil), // 29: vtrpc.RPCError - (*query.QueryResult)(nil), // 30: query.QueryResult - (*query.ResultWithError)(nil), // 31: query.ResultWithError - (topodata.TabletType)(0), // 32: topodata.TabletType - (*binlogdata.VGtid)(nil), // 33: binlogdata.VGtid - (*binlogdata.Filter)(nil), // 34: binlogdata.Filter - (*binlogdata.VEvent)(nil), // 35: binlogdata.VEvent - (*query.Field)(nil), // 36: query.Field - (*query.Target)(nil), // 37: query.Target - (*topodata.TabletAlias)(nil), // 38: topodata.TabletAlias - (*query.BindVariable)(nil), // 39: query.BindVariable + (*ExecuteMultiRequest)(nil), // 5: vtgate.ExecuteMultiRequest + (*ExecuteMultiResponse)(nil), // 6: vtgate.ExecuteMultiResponse + (*ExecuteRequest)(nil), // 7: vtgate.ExecuteRequest + (*ExecuteResponse)(nil), // 8: vtgate.ExecuteResponse + (*ExecuteBatchRequest)(nil), // 9: vtgate.ExecuteBatchRequest + (*ExecuteBatchResponse)(nil), // 10: vtgate.ExecuteBatchResponse + (*StreamExecuteRequest)(nil), // 11: vtgate.StreamExecuteRequest + (*StreamExecuteResponse)(nil), // 12: vtgate.StreamExecuteResponse + (*StreamExecuteMultiRequest)(nil), // 13: vtgate.StreamExecuteMultiRequest + (*StreamExecuteMultiResponse)(nil), // 14: vtgate.StreamExecuteMultiResponse + (*ResolveTransactionRequest)(nil), // 15: vtgate.ResolveTransactionRequest + (*ResolveTransactionResponse)(nil), // 16: vtgate.ResolveTransactionResponse + (*VStreamFlags)(nil), // 17: vtgate.VStreamFlags + (*VStreamRequest)(nil), // 18: vtgate.VStreamRequest + (*VStreamResponse)(nil), // 19: vtgate.VStreamResponse + (*PrepareRequest)(nil), // 20: vtgate.PrepareRequest + (*PrepareResponse)(nil), // 21: vtgate.PrepareResponse + (*CloseSessionRequest)(nil), // 22: vtgate.CloseSessionRequest + (*CloseSessionResponse)(nil), // 23: vtgate.CloseSessionResponse + (*Session_ShardSession)(nil), // 24: vtgate.Session.ShardSession + nil, // 25: vtgate.Session.UserDefinedVariablesEntry + nil, // 26: vtgate.Session.SystemVariablesEntry + nil, // 27: vtgate.Session.AdvisoryLockEntry + nil, // 28: vtgate.Session.PrepareStatementEntry + (*query.ExecuteOptions)(nil), // 29: query.ExecuteOptions + (*query.QueryWarning)(nil), // 30: query.QueryWarning + (*vtrpc.CallerID)(nil), // 31: vtrpc.CallerID + (*vtrpc.RPCError)(nil), // 32: vtrpc.RPCError + (*query.QueryResult)(nil), // 33: query.QueryResult + (*query.BoundQuery)(nil), // 34: query.BoundQuery + (*query.ResultWithError)(nil), // 35: query.ResultWithError + (topodata.TabletType)(0), // 36: topodata.TabletType + (*binlogdata.VGtid)(nil), // 37: binlogdata.VGtid + (*binlogdata.Filter)(nil), // 38: binlogdata.Filter + (*binlogdata.VEvent)(nil), // 39: binlogdata.VEvent + (*query.Field)(nil), // 40: query.Field + (*query.Target)(nil), // 41: query.Target + (*topodata.TabletAlias)(nil), // 42: topodata.TabletAlias + (*query.BindVariable)(nil), // 43: query.BindVariable } var file_vtgate_proto_depIdxs = []int32{ - 20, // 0: vtgate.Session.shard_sessions:type_name -> vtgate.Session.ShardSession - 25, // 1: vtgate.Session.options:type_name -> query.ExecuteOptions + 24, // 0: vtgate.Session.shard_sessions:type_name -> vtgate.Session.ShardSession + 29, // 1: vtgate.Session.options:type_name -> query.ExecuteOptions 0, // 2: vtgate.Session.transaction_mode:type_name -> vtgate.TransactionMode - 26, // 3: vtgate.Session.warnings:type_name -> query.QueryWarning - 20, // 4: vtgate.Session.pre_sessions:type_name -> vtgate.Session.ShardSession - 20, // 5: vtgate.Session.post_sessions:type_name -> vtgate.Session.ShardSession - 21, // 6: vtgate.Session.user_defined_variables:type_name -> vtgate.Session.UserDefinedVariablesEntry - 22, // 7: vtgate.Session.system_variables:type_name -> vtgate.Session.SystemVariablesEntry - 20, // 8: vtgate.Session.lock_session:type_name -> vtgate.Session.ShardSession + 30, // 3: vtgate.Session.warnings:type_name -> query.QueryWarning + 24, // 4: vtgate.Session.pre_sessions:type_name -> vtgate.Session.ShardSession + 24, // 5: vtgate.Session.post_sessions:type_name -> vtgate.Session.ShardSession + 25, // 6: vtgate.Session.user_defined_variables:type_name -> vtgate.Session.UserDefinedVariablesEntry + 26, // 7: vtgate.Session.system_variables:type_name -> vtgate.Session.SystemVariablesEntry + 24, // 8: vtgate.Session.lock_session:type_name -> vtgate.Session.ShardSession 4, // 9: vtgate.Session.read_after_write:type_name -> vtgate.ReadAfterWrite - 23, // 10: vtgate.Session.advisory_lock:type_name -> vtgate.Session.AdvisoryLockEntry - 24, // 11: vtgate.Session.prepare_statement:type_name -> vtgate.Session.PrepareStatementEntry - 27, // 12: vtgate.ExecuteRequest.caller_id:type_name -> vtrpc.CallerID - 2, // 13: vtgate.ExecuteRequest.session:type_name -> vtgate.Session - 28, // 14: vtgate.ExecuteRequest.query:type_name -> query.BoundQuery - 29, // 15: vtgate.ExecuteResponse.error:type_name -> vtrpc.RPCError - 2, // 16: vtgate.ExecuteResponse.session:type_name -> vtgate.Session - 30, // 17: vtgate.ExecuteResponse.result:type_name -> query.QueryResult - 27, // 18: vtgate.ExecuteBatchRequest.caller_id:type_name -> vtrpc.CallerID - 2, // 19: vtgate.ExecuteBatchRequest.session:type_name -> vtgate.Session - 28, // 20: vtgate.ExecuteBatchRequest.queries:type_name -> query.BoundQuery - 29, // 21: vtgate.ExecuteBatchResponse.error:type_name -> vtrpc.RPCError - 2, // 22: vtgate.ExecuteBatchResponse.session:type_name -> vtgate.Session - 31, // 23: vtgate.ExecuteBatchResponse.results:type_name -> query.ResultWithError - 27, // 24: vtgate.StreamExecuteRequest.caller_id:type_name -> vtrpc.CallerID - 28, // 25: vtgate.StreamExecuteRequest.query:type_name -> query.BoundQuery - 2, // 26: vtgate.StreamExecuteRequest.session:type_name -> vtgate.Session - 30, // 27: vtgate.StreamExecuteResponse.result:type_name -> query.QueryResult - 2, // 28: vtgate.StreamExecuteResponse.session:type_name -> vtgate.Session - 27, // 29: vtgate.ResolveTransactionRequest.caller_id:type_name -> vtrpc.CallerID - 27, // 30: vtgate.VStreamRequest.caller_id:type_name -> vtrpc.CallerID - 32, // 31: vtgate.VStreamRequest.tablet_type:type_name -> topodata.TabletType - 33, // 32: vtgate.VStreamRequest.vgtid:type_name -> binlogdata.VGtid - 34, // 33: vtgate.VStreamRequest.filter:type_name -> binlogdata.Filter - 13, // 34: vtgate.VStreamRequest.flags:type_name -> vtgate.VStreamFlags - 35, // 35: vtgate.VStreamResponse.events:type_name -> binlogdata.VEvent - 27, // 36: vtgate.PrepareRequest.caller_id:type_name -> vtrpc.CallerID - 2, // 37: vtgate.PrepareRequest.session:type_name -> vtgate.Session - 28, // 38: vtgate.PrepareRequest.query:type_name -> query.BoundQuery - 29, // 39: vtgate.PrepareResponse.error:type_name -> vtrpc.RPCError - 2, // 40: vtgate.PrepareResponse.session:type_name -> vtgate.Session - 36, // 41: vtgate.PrepareResponse.fields:type_name -> query.Field - 27, // 42: vtgate.CloseSessionRequest.caller_id:type_name -> vtrpc.CallerID - 2, // 43: vtgate.CloseSessionRequest.session:type_name -> vtgate.Session - 29, // 44: vtgate.CloseSessionResponse.error:type_name -> vtrpc.RPCError - 37, // 45: vtgate.Session.ShardSession.target:type_name -> query.Target - 38, // 46: vtgate.Session.ShardSession.tablet_alias:type_name -> topodata.TabletAlias - 39, // 47: vtgate.Session.UserDefinedVariablesEntry.value:type_name -> query.BindVariable - 3, // 48: vtgate.Session.PrepareStatementEntry.value:type_name -> vtgate.PrepareData - 49, // [49:49] is the sub-list for method output_type - 49, // [49:49] is the sub-list for method input_type - 49, // [49:49] is the sub-list for extension type_name - 49, // [49:49] is the sub-list for extension extendee - 0, // [0:49] is the sub-list for field type_name + 27, // 10: vtgate.Session.advisory_lock:type_name -> vtgate.Session.AdvisoryLockEntry + 28, // 11: vtgate.Session.prepare_statement:type_name -> vtgate.Session.PrepareStatementEntry + 31, // 12: vtgate.ExecuteMultiRequest.caller_id:type_name -> vtrpc.CallerID + 2, // 13: vtgate.ExecuteMultiRequest.session:type_name -> vtgate.Session + 32, // 14: vtgate.ExecuteMultiResponse.error:type_name -> vtrpc.RPCError + 2, // 15: vtgate.ExecuteMultiResponse.session:type_name -> vtgate.Session + 33, // 16: vtgate.ExecuteMultiResponse.results:type_name -> query.QueryResult + 31, // 17: vtgate.ExecuteRequest.caller_id:type_name -> vtrpc.CallerID + 2, // 18: vtgate.ExecuteRequest.session:type_name -> vtgate.Session + 34, // 19: vtgate.ExecuteRequest.query:type_name -> query.BoundQuery + 32, // 20: vtgate.ExecuteResponse.error:type_name -> vtrpc.RPCError + 2, // 21: vtgate.ExecuteResponse.session:type_name -> vtgate.Session + 33, // 22: vtgate.ExecuteResponse.result:type_name -> query.QueryResult + 31, // 23: vtgate.ExecuteBatchRequest.caller_id:type_name -> vtrpc.CallerID + 2, // 24: vtgate.ExecuteBatchRequest.session:type_name -> vtgate.Session + 34, // 25: vtgate.ExecuteBatchRequest.queries:type_name -> query.BoundQuery + 32, // 26: vtgate.ExecuteBatchResponse.error:type_name -> vtrpc.RPCError + 2, // 27: vtgate.ExecuteBatchResponse.session:type_name -> vtgate.Session + 35, // 28: vtgate.ExecuteBatchResponse.results:type_name -> query.ResultWithError + 31, // 29: vtgate.StreamExecuteRequest.caller_id:type_name -> vtrpc.CallerID + 34, // 30: vtgate.StreamExecuteRequest.query:type_name -> query.BoundQuery + 2, // 31: vtgate.StreamExecuteRequest.session:type_name -> vtgate.Session + 33, // 32: vtgate.StreamExecuteResponse.result:type_name -> query.QueryResult + 2, // 33: vtgate.StreamExecuteResponse.session:type_name -> vtgate.Session + 31, // 34: vtgate.StreamExecuteMultiRequest.caller_id:type_name -> vtrpc.CallerID + 2, // 35: vtgate.StreamExecuteMultiRequest.session:type_name -> vtgate.Session + 35, // 36: vtgate.StreamExecuteMultiResponse.result:type_name -> query.ResultWithError + 2, // 37: vtgate.StreamExecuteMultiResponse.session:type_name -> vtgate.Session + 31, // 38: vtgate.ResolveTransactionRequest.caller_id:type_name -> vtrpc.CallerID + 31, // 39: vtgate.VStreamRequest.caller_id:type_name -> vtrpc.CallerID + 36, // 40: vtgate.VStreamRequest.tablet_type:type_name -> topodata.TabletType + 37, // 41: vtgate.VStreamRequest.vgtid:type_name -> binlogdata.VGtid + 38, // 42: vtgate.VStreamRequest.filter:type_name -> binlogdata.Filter + 17, // 43: vtgate.VStreamRequest.flags:type_name -> vtgate.VStreamFlags + 39, // 44: vtgate.VStreamResponse.events:type_name -> binlogdata.VEvent + 31, // 45: vtgate.PrepareRequest.caller_id:type_name -> vtrpc.CallerID + 2, // 46: vtgate.PrepareRequest.session:type_name -> vtgate.Session + 34, // 47: vtgate.PrepareRequest.query:type_name -> query.BoundQuery + 32, // 48: vtgate.PrepareResponse.error:type_name -> vtrpc.RPCError + 2, // 49: vtgate.PrepareResponse.session:type_name -> vtgate.Session + 40, // 50: vtgate.PrepareResponse.fields:type_name -> query.Field + 31, // 51: vtgate.CloseSessionRequest.caller_id:type_name -> vtrpc.CallerID + 2, // 52: vtgate.CloseSessionRequest.session:type_name -> vtgate.Session + 32, // 53: vtgate.CloseSessionResponse.error:type_name -> vtrpc.RPCError + 41, // 54: vtgate.Session.ShardSession.target:type_name -> query.Target + 42, // 55: vtgate.Session.ShardSession.tablet_alias:type_name -> topodata.TabletAlias + 43, // 56: vtgate.Session.UserDefinedVariablesEntry.value:type_name -> query.BindVariable + 3, // 57: vtgate.Session.PrepareStatementEntry.value:type_name -> vtgate.PrepareData + 58, // [58:58] is the sub-list for method output_type + 58, // [58:58] is the sub-list for method input_type + 58, // [58:58] is the sub-list for extension type_name + 58, // [58:58] is the sub-list for extension extendee + 0, // [0:58] is the sub-list for field type_name } func init() { file_vtgate_proto_init() } @@ -2043,7 +2201,7 @@ func file_vtgate_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_vtgate_proto_rawDesc), len(file_vtgate_proto_rawDesc)), NumEnums: 2, - NumMessages: 23, + NumMessages: 27, NumExtensions: 0, NumServices: 0, }, diff --git a/go/vt/proto/vtgate/vtgate_vtproto.pb.go b/go/vt/proto/vtgate/vtgate_vtproto.pb.go index 874fb3b550a..5a20ac73dc0 100644 --- a/go/vt/proto/vtgate/vtgate_vtproto.pb.go +++ b/go/vt/proto/vtgate/vtgate_vtproto.pb.go @@ -179,6 +179,50 @@ func (m *ReadAfterWrite) CloneMessageVT() proto.Message { return m.CloneVT() } +func (m *ExecuteMultiRequest) CloneVT() *ExecuteMultiRequest { + if m == nil { + return (*ExecuteMultiRequest)(nil) + } + r := new(ExecuteMultiRequest) + r.CallerId = m.CallerId.CloneVT() + r.Sql = m.Sql + r.Session = m.Session.CloneVT() + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *ExecuteMultiRequest) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *ExecuteMultiResponse) CloneVT() *ExecuteMultiResponse { + if m == nil { + return (*ExecuteMultiResponse)(nil) + } + r := new(ExecuteMultiResponse) + r.Error = m.Error.CloneVT() + r.Session = m.Session.CloneVT() + if rhs := m.Results; rhs != nil { + tmpContainer := make([]*query.QueryResult, len(rhs)) + for k, v := range rhs { + tmpContainer[k] = v.CloneVT() + } + r.Results = tmpContainer + } + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *ExecuteMultiResponse) CloneMessageVT() proto.Message { + return m.CloneVT() +} + func (m *ExecuteRequest) CloneVT() *ExecuteRequest { if m == nil { return (*ExecuteRequest)(nil) @@ -305,6 +349,45 @@ func (m *StreamExecuteResponse) CloneMessageVT() proto.Message { return m.CloneVT() } +func (m *StreamExecuteMultiRequest) CloneVT() *StreamExecuteMultiRequest { + if m == nil { + return (*StreamExecuteMultiRequest)(nil) + } + r := new(StreamExecuteMultiRequest) + r.CallerId = m.CallerId.CloneVT() + r.Sql = m.Sql + r.Session = m.Session.CloneVT() + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *StreamExecuteMultiRequest) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *StreamExecuteMultiResponse) CloneVT() *StreamExecuteMultiResponse { + if m == nil { + return (*StreamExecuteMultiResponse)(nil) + } + r := new(StreamExecuteMultiResponse) + r.Result = m.Result.CloneVT() + r.MoreResults = m.MoreResults + r.NewResult = m.NewResult + r.Session = m.Session.CloneVT() + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *StreamExecuteMultiResponse) CloneMessageVT() proto.Message { + return m.CloneVT() +} + func (m *ResolveTransactionRequest) CloneVT() *ResolveTransactionRequest { if m == nil { return (*ResolveTransactionRequest)(nil) @@ -352,6 +435,12 @@ func (m *VStreamFlags) CloneVT() *VStreamFlags { r.TabletOrder = m.TabletOrder r.StreamKeyspaceHeartbeats = m.StreamKeyspaceHeartbeats r.IncludeReshardJournalEvents = m.IncludeReshardJournalEvents + r.ExcludeKeyspaceFromTableName = m.ExcludeKeyspaceFromTableName + if rhs := m.TablesToCopy; rhs != nil { + tmpContainer := make([]string, len(rhs)) + copy(tmpContainer, rhs) + r.TablesToCopy = tmpContainer + } if len(m.unknownFields) > 0 { r.unknownFields = make([]byte, len(m.unknownFields)) copy(r.unknownFields, m.unknownFields) @@ -1005,6 +1094,131 @@ func (m *ReadAfterWrite) MarshalToSizedBufferVT(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ExecuteMultiRequest) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ExecuteMultiRequest) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *ExecuteMultiRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.Session != nil { + size, err := m.Session.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x1a + } + if len(m.Sql) > 0 { + i -= len(m.Sql) + copy(dAtA[i:], m.Sql) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Sql))) + i-- + dAtA[i] = 0x12 + } + if m.CallerId != nil { + size, err := m.CallerId.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ExecuteMultiResponse) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ExecuteMultiResponse) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *ExecuteMultiResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.Results) > 0 { + for iNdEx := len(m.Results) - 1; iNdEx >= 0; iNdEx-- { + size, err := m.Results[iNdEx].MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x1a + } + } + if m.Session != nil { + size, err := m.Session.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 + } + if m.Error != nil { + size, err := m.Error.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *ExecuteRequest) MarshalVT() (dAtA []byte, err error) { if m == nil { return nil, nil @@ -1387,7 +1601,7 @@ func (m *StreamExecuteResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *ResolveTransactionRequest) MarshalVT() (dAtA []byte, err error) { +func (m *StreamExecuteMultiRequest) MarshalVT() (dAtA []byte, err error) { if m == nil { return nil, nil } @@ -1400,12 +1614,12 @@ func (m *ResolveTransactionRequest) MarshalVT() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *ResolveTransactionRequest) MarshalToVT(dAtA []byte) (int, error) { +func (m *StreamExecuteMultiRequest) MarshalToVT(dAtA []byte) (int, error) { size := m.SizeVT() return m.MarshalToSizedBufferVT(dAtA[:size]) } -func (m *ResolveTransactionRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { +func (m *StreamExecuteMultiRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { if m == nil { return 0, nil } @@ -1417,10 +1631,20 @@ func (m *ResolveTransactionRequest) MarshalToSizedBufferVT(dAtA []byte) (int, er i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } - if len(m.Dtid) > 0 { - i -= len(m.Dtid) - copy(dAtA[i:], m.Dtid) - i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Dtid))) + if m.Session != nil { + size, err := m.Session.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x1a + } + if len(m.Sql) > 0 { + i -= len(m.Sql) + copy(dAtA[i:], m.Sql) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Sql))) i-- dAtA[i] = 0x12 } @@ -1437,7 +1661,7 @@ func (m *ResolveTransactionRequest) MarshalToSizedBufferVT(dAtA []byte) (int, er return len(dAtA) - i, nil } -func (m *ResolveTransactionResponse) MarshalVT() (dAtA []byte, err error) { +func (m *StreamExecuteMultiResponse) MarshalVT() (dAtA []byte, err error) { if m == nil { return nil, nil } @@ -1450,12 +1674,12 @@ func (m *ResolveTransactionResponse) MarshalVT() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *ResolveTransactionResponse) MarshalToVT(dAtA []byte) (int, error) { +func (m *StreamExecuteMultiResponse) MarshalToVT(dAtA []byte) (int, error) { size := m.SizeVT() return m.MarshalToSizedBufferVT(dAtA[:size]) } -func (m *ResolveTransactionResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { +func (m *StreamExecuteMultiResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { if m == nil { return 0, nil } @@ -1467,10 +1691,50 @@ func (m *ResolveTransactionResponse) MarshalToSizedBufferVT(dAtA []byte) (int, e i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } + if m.Session != nil { + size, err := m.Session.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x22 + } + if m.NewResult { + i-- + if m.NewResult { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + } + if m.MoreResults { + i-- + if m.MoreResults { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + } + if m.Result != nil { + size, err := m.Result.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } return len(dAtA) - i, nil } -func (m *VStreamFlags) MarshalVT() (dAtA []byte, err error) { +func (m *ResolveTransactionRequest) MarshalVT() (dAtA []byte, err error) { if m == nil { return nil, nil } @@ -1483,12 +1747,12 @@ func (m *VStreamFlags) MarshalVT() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *VStreamFlags) MarshalToVT(dAtA []byte) (int, error) { +func (m *ResolveTransactionRequest) MarshalToVT(dAtA []byte) (int, error) { size := m.SizeVT() return m.MarshalToSizedBufferVT(dAtA[:size]) } -func (m *VStreamFlags) MarshalToSizedBufferVT(dAtA []byte) (int, error) { +func (m *ResolveTransactionRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { if m == nil { return 0, nil } @@ -1500,17 +1764,119 @@ func (m *VStreamFlags) MarshalToSizedBufferVT(dAtA []byte) (int, error) { i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } - if m.IncludeReshardJournalEvents { - i-- - if m.IncludeReshardJournalEvents { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } + if len(m.Dtid) > 0 { + i -= len(m.Dtid) + copy(dAtA[i:], m.Dtid) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Dtid))) i-- - dAtA[i] = 0x40 + dAtA[i] = 0x12 } - if m.StreamKeyspaceHeartbeats { + if m.CallerId != nil { + size, err := m.CallerId.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ResolveTransactionResponse) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ResolveTransactionResponse) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *ResolveTransactionResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + return len(dAtA) - i, nil +} + +func (m *VStreamFlags) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *VStreamFlags) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *VStreamFlags) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.ExcludeKeyspaceFromTableName { + i-- + if m.ExcludeKeyspaceFromTableName { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x50 + } + if len(m.TablesToCopy) > 0 { + for iNdEx := len(m.TablesToCopy) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.TablesToCopy[iNdEx]) + copy(dAtA[i:], m.TablesToCopy[iNdEx]) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TablesToCopy[iNdEx]))) + i-- + dAtA[i] = 0x4a + } + } + if m.IncludeReshardJournalEvents { + i-- + if m.IncludeReshardJournalEvents { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x40 + } + if m.StreamKeyspaceHeartbeats { i-- if m.StreamKeyspaceHeartbeats { dAtA[i] = 1 @@ -2131,6 +2497,52 @@ func (m *ReadAfterWrite) SizeVT() (n int) { return n } +func (m *ExecuteMultiRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.CallerId != nil { + l = m.CallerId.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.Sql) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.Session != nil { + l = m.Session.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *ExecuteMultiResponse) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Error != nil { + l = m.Error.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.Session != nil { + l = m.Session.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if len(m.Results) > 0 { + for _, e := range m.Results { + l = e.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + } + n += len(m.unknownFields) + return n +} + func (m *ExecuteRequest) SizeVT() (n int) { if m == nil { return 0 @@ -2266,6 +2678,52 @@ func (m *StreamExecuteResponse) SizeVT() (n int) { return n } +func (m *StreamExecuteMultiRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.CallerId != nil { + l = m.CallerId.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.Sql) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.Session != nil { + l = m.Session.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *StreamExecuteMultiResponse) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Result != nil { + l = m.Result.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.MoreResults { + n += 2 + } + if m.NewResult { + n += 2 + } + if m.Session != nil { + l = m.Session.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + func (m *ResolveTransactionRequest) SizeVT() (n int) { if m == nil { return 0 @@ -2327,6 +2785,15 @@ func (m *VStreamFlags) SizeVT() (n int) { if m.IncludeReshardJournalEvents { n += 2 } + if len(m.TablesToCopy) > 0 { + for _, s := range m.TablesToCopy { + l = len(s) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + } + if m.ExcludeKeyspaceFromTableName { + n += 2 + } n += len(m.unknownFields) return n } @@ -4041,7 +4508,7 @@ func (m *ReadAfterWrite) UnmarshalVT(dAtA []byte) error { } return nil } -func (m *ExecuteRequest) UnmarshalVT(dAtA []byte) error { +func (m *ExecuteMultiRequest) UnmarshalVT(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4064,10 +4531,10 @@ func (m *ExecuteRequest) UnmarshalVT(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ExecuteRequest: wiretype end group for non-group") + return fmt.Errorf("proto: ExecuteMultiRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ExecuteRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ExecuteMultiRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -4108,9 +4575,9 @@ func (m *ExecuteRequest) UnmarshalVT(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Session", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Sql", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return protohelpers.ErrIntOverflow @@ -4120,31 +4587,27 @@ func (m *ExecuteRequest) UnmarshalVT(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return protohelpers.ErrInvalidLength } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Session == nil { - m.Session = &Session{} - } - if err := m.Session.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Sql = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Query", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Session", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4171,33 +4634,13 @@ func (m *ExecuteRequest) UnmarshalVT(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Query == nil { - m.Query = &query.BoundQuery{} + if m.Session == nil { + m.Session = &Session{} } - if err := m.Query.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Session.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 8: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Prepared", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return protohelpers.ErrIntOverflow - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Prepared = bool(v != 0) default: iNdEx = preIndex skippy, err := protohelpers.Skip(dAtA[iNdEx:]) @@ -4220,7 +4663,7 @@ func (m *ExecuteRequest) UnmarshalVT(dAtA []byte) error { } return nil } -func (m *ExecuteResponse) UnmarshalVT(dAtA []byte) error { +func (m *ExecuteMultiResponse) UnmarshalVT(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4243,10 +4686,10 @@ func (m *ExecuteResponse) UnmarshalVT(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ExecuteResponse: wiretype end group for non-group") + return fmt.Errorf("proto: ExecuteMultiResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ExecuteResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ExecuteMultiResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -4323,7 +4766,7 @@ func (m *ExecuteResponse) UnmarshalVT(dAtA []byte) error { iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Result", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Results", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4350,10 +4793,8 @@ func (m *ExecuteResponse) UnmarshalVT(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Result == nil { - m.Result = &query.QueryResult{} - } - if err := m.Result.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + m.Results = append(m.Results, &query.QueryResult{}) + if err := m.Results[len(m.Results)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -4379,7 +4820,7 @@ func (m *ExecuteResponse) UnmarshalVT(dAtA []byte) error { } return nil } -func (m *ExecuteBatchRequest) UnmarshalVT(dAtA []byte) error { +func (m *ExecuteRequest) UnmarshalVT(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4402,10 +4843,10 @@ func (m *ExecuteBatchRequest) UnmarshalVT(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ExecuteBatchRequest: wiretype end group for non-group") + return fmt.Errorf("proto: ExecuteRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ExecuteBatchRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ExecuteRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -4482,7 +4923,7 @@ func (m *ExecuteBatchRequest) UnmarshalVT(dAtA []byte) error { iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Queries", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Query", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4509,9 +4950,504 @@ func (m *ExecuteBatchRequest) UnmarshalVT(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Queries = append(m.Queries, &query.BoundQuery{}) - if err := m.Queries[len(m.Queries)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { - return err + if m.Query == nil { + m.Query = &query.BoundQuery{} + } + if err := m.Query.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Prepared", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Prepared = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ExecuteResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ExecuteResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ExecuteResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Error == nil { + m.Error = &vtrpc.RPCError{} + } + if err := m.Error.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Session", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Session == nil { + m.Session = &Session{} + } + if err := m.Session.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Result", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Result == nil { + m.Result = &query.QueryResult{} + } + if err := m.Result.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ExecuteBatchRequest) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ExecuteBatchRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ExecuteBatchRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CallerId", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.CallerId == nil { + m.CallerId = &vtrpc.CallerID{} + } + if err := m.CallerId.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Session", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Session == nil { + m.Session = &Session{} + } + if err := m.Session.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Queries", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Queries = append(m.Queries, &query.BoundQuery{}) + if err := m.Queries[len(m.Queries)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ExecuteBatchResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ExecuteBatchResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ExecuteBatchResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Error == nil { + m.Error = &vtrpc.RPCError{} + } + if err := m.Error.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Session", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Session == nil { + m.Session = &Session{} + } + if err := m.Session.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Results", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Results = append(m.Results, &query.ResultWithError{}) + if err := m.Results[len(m.Results)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err } iNdEx = postIndex default: @@ -4536,7 +5472,7 @@ func (m *ExecuteBatchRequest) UnmarshalVT(dAtA []byte) error { } return nil } -func (m *ExecuteBatchResponse) UnmarshalVT(dAtA []byte) error { +func (m *StreamExecuteRequest) UnmarshalVT(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4559,15 +5495,15 @@ func (m *ExecuteBatchResponse) UnmarshalVT(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ExecuteBatchResponse: wiretype end group for non-group") + return fmt.Errorf("proto: StreamExecuteRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ExecuteBatchResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: StreamExecuteRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field CallerId", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4594,14 +5530,50 @@ func (m *ExecuteBatchResponse) UnmarshalVT(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Error == nil { - m.Error = &vtrpc.RPCError{} + if m.CallerId == nil { + m.CallerId = &vtrpc.CallerID{} } - if err := m.Error.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + if err := m.CallerId.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Query", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Query == nil { + m.Query = &query.BoundQuery{} + } + if err := m.Query.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Session", wireType) } @@ -4637,9 +5609,60 @@ func (m *ExecuteBatchResponse) UnmarshalVT(dAtA []byte) error { return err } iNdEx = postIndex - case 3: + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *StreamExecuteResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StreamExecuteResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StreamExecuteResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Results", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Result", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4666,8 +5689,46 @@ func (m *ExecuteBatchResponse) UnmarshalVT(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Results = append(m.Results, &query.ResultWithError{}) - if err := m.Results[len(m.Results)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + if m.Result == nil { + m.Result = &query.QueryResult{} + } + if err := m.Result.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Session", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Session == nil { + m.Session = &Session{} + } + if err := m.Session.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -4693,7 +5754,7 @@ func (m *ExecuteBatchResponse) UnmarshalVT(dAtA []byte) error { } return nil } -func (m *StreamExecuteRequest) UnmarshalVT(dAtA []byte) error { +func (m *StreamExecuteMultiRequest) UnmarshalVT(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4716,10 +5777,10 @@ func (m *StreamExecuteRequest) UnmarshalVT(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: StreamExecuteRequest: wiretype end group for non-group") + return fmt.Errorf("proto: StreamExecuteMultiRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: StreamExecuteRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: StreamExecuteMultiRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -4760,9 +5821,9 @@ func (m *StreamExecuteRequest) UnmarshalVT(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Query", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Sql", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return protohelpers.ErrIntOverflow @@ -4772,29 +5833,25 @@ func (m *StreamExecuteRequest) UnmarshalVT(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return protohelpers.ErrInvalidLength } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Query == nil { - m.Query = &query.BoundQuery{} - } - if err := m.Query.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Sql = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 6: + case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Session", wireType) } @@ -4852,7 +5909,7 @@ func (m *StreamExecuteRequest) UnmarshalVT(dAtA []byte) error { } return nil } -func (m *StreamExecuteResponse) UnmarshalVT(dAtA []byte) error { +func (m *StreamExecuteMultiResponse) UnmarshalVT(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4875,10 +5932,10 @@ func (m *StreamExecuteResponse) UnmarshalVT(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: StreamExecuteResponse: wiretype end group for non-group") + return fmt.Errorf("proto: StreamExecuteMultiResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: StreamExecuteResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: StreamExecuteMultiResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -4911,13 +5968,53 @@ func (m *StreamExecuteResponse) UnmarshalVT(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.Result == nil { - m.Result = &query.QueryResult{} + m.Result = &query.ResultWithError{} } if err := m.Result.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MoreResults", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.MoreResults = bool(v != 0) + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NewResult", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.NewResult = bool(v != 0) + case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Session", wireType) } @@ -5369,6 +6466,58 @@ func (m *VStreamFlags) UnmarshalVT(dAtA []byte) error { } } m.IncludeReshardJournalEvents = bool(v != 0) + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TablesToCopy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TablesToCopy = append(m.TablesToCopy, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 10: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ExcludeKeyspaceFromTableName", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ExcludeKeyspaceFromTableName = bool(v != 0) default: iNdEx = preIndex skippy, err := protohelpers.Skip(dAtA[iNdEx:]) diff --git a/go/vt/proto/vtgateservice/vtgateservice.pb.go b/go/vt/proto/vtgateservice/vtgateservice.pb.go index 3df5bc80722..6d53c63398b 100644 --- a/go/vt/proto/vtgateservice/vtgateservice.pb.go +++ b/go/vt/proto/vtgateservice/vtgateservice.pb.go @@ -18,7 +18,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v3.21.3 // source: vtgateservice.proto @@ -41,74 +41,57 @@ const ( var File_vtgateservice_proto protoreflect.FileDescriptor -var file_vtgateservice_proto_rawDesc = string([]byte{ - 0x0a, 0x13, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0d, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x1a, 0x0c, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x32, 0xb0, 0x03, 0x0a, 0x06, 0x56, 0x69, 0x74, 0x65, 0x73, 0x73, 0x12, 0x3c, 0x0a, - 0x07, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, - 0x65, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x17, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0c, 0x45, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1b, 0x2e, 0x76, 0x74, - 0x67, 0x61, 0x74, 0x65, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, - 0x65, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x0d, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x12, 0x1c, 0x2e, 0x76, 0x74, 0x67, 0x61, - 0x74, 0x65, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, - 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x3e, 0x0a, 0x07, 0x56, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x16, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x56, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, - 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x3c, 0x0a, 0x07, 0x50, 0x72, - 0x65, 0x70, 0x61, 0x72, 0x65, 0x12, 0x16, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x50, - 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, - 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0c, 0x43, 0x6c, 0x6f, 0x73, - 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, - 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x43, - 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x42, 0x0a, 0x14, 0x69, 0x6f, 0x2e, 0x76, 0x69, 0x74, 0x65, - 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x5a, 0x2a, 0x76, - 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, - 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x74, 0x67, 0x61, - 0x74, 0x65, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, -}) +const file_vtgateservice_proto_rawDesc = "" + + "\n" + + "\x13vtgateservice.proto\x12\rvtgateservice\x1a\fvtgate.proto2\xde\x04\n" + + "\x06Vitess\x12<\n" + + "\aExecute\x12\x16.vtgate.ExecuteRequest\x1a\x17.vtgate.ExecuteResponse\"\x00\x12K\n" + + "\fExecuteMulti\x12\x1b.vtgate.ExecuteMultiRequest\x1a\x1c.vtgate.ExecuteMultiResponse\"\x00\x12K\n" + + "\fExecuteBatch\x12\x1b.vtgate.ExecuteBatchRequest\x1a\x1c.vtgate.ExecuteBatchResponse\"\x00\x12P\n" + + "\rStreamExecute\x12\x1c.vtgate.StreamExecuteRequest\x1a\x1d.vtgate.StreamExecuteResponse\"\x000\x01\x12_\n" + + "\x12StreamExecuteMulti\x12!.vtgate.StreamExecuteMultiRequest\x1a\".vtgate.StreamExecuteMultiResponse\"\x000\x01\x12>\n" + + "\aVStream\x12\x16.vtgate.VStreamRequest\x1a\x17.vtgate.VStreamResponse\"\x000\x01\x12<\n" + + "\aPrepare\x12\x16.vtgate.PrepareRequest\x1a\x17.vtgate.PrepareResponse\"\x00\x12K\n" + + "\fCloseSession\x12\x1b.vtgate.CloseSessionRequest\x1a\x1c.vtgate.CloseSessionResponse\"\x00BB\n" + + "\x14io.vitess.proto.grpcZ*vitess.io/vitess/go/vt/proto/vtgateserviceb\x06proto3" var file_vtgateservice_proto_goTypes = []any{ - (*vtgate.ExecuteRequest)(nil), // 0: vtgate.ExecuteRequest - (*vtgate.ExecuteBatchRequest)(nil), // 1: vtgate.ExecuteBatchRequest - (*vtgate.StreamExecuteRequest)(nil), // 2: vtgate.StreamExecuteRequest - (*vtgate.VStreamRequest)(nil), // 3: vtgate.VStreamRequest - (*vtgate.PrepareRequest)(nil), // 4: vtgate.PrepareRequest - (*vtgate.CloseSessionRequest)(nil), // 5: vtgate.CloseSessionRequest - (*vtgate.ExecuteResponse)(nil), // 6: vtgate.ExecuteResponse - (*vtgate.ExecuteBatchResponse)(nil), // 7: vtgate.ExecuteBatchResponse - (*vtgate.StreamExecuteResponse)(nil), // 8: vtgate.StreamExecuteResponse - (*vtgate.VStreamResponse)(nil), // 9: vtgate.VStreamResponse - (*vtgate.PrepareResponse)(nil), // 10: vtgate.PrepareResponse - (*vtgate.CloseSessionResponse)(nil), // 11: vtgate.CloseSessionResponse + (*vtgate.ExecuteRequest)(nil), // 0: vtgate.ExecuteRequest + (*vtgate.ExecuteMultiRequest)(nil), // 1: vtgate.ExecuteMultiRequest + (*vtgate.ExecuteBatchRequest)(nil), // 2: vtgate.ExecuteBatchRequest + (*vtgate.StreamExecuteRequest)(nil), // 3: vtgate.StreamExecuteRequest + (*vtgate.StreamExecuteMultiRequest)(nil), // 4: vtgate.StreamExecuteMultiRequest + (*vtgate.VStreamRequest)(nil), // 5: vtgate.VStreamRequest + (*vtgate.PrepareRequest)(nil), // 6: vtgate.PrepareRequest + (*vtgate.CloseSessionRequest)(nil), // 7: vtgate.CloseSessionRequest + (*vtgate.ExecuteResponse)(nil), // 8: vtgate.ExecuteResponse + (*vtgate.ExecuteMultiResponse)(nil), // 9: vtgate.ExecuteMultiResponse + (*vtgate.ExecuteBatchResponse)(nil), // 10: vtgate.ExecuteBatchResponse + (*vtgate.StreamExecuteResponse)(nil), // 11: vtgate.StreamExecuteResponse + (*vtgate.StreamExecuteMultiResponse)(nil), // 12: vtgate.StreamExecuteMultiResponse + (*vtgate.VStreamResponse)(nil), // 13: vtgate.VStreamResponse + (*vtgate.PrepareResponse)(nil), // 14: vtgate.PrepareResponse + (*vtgate.CloseSessionResponse)(nil), // 15: vtgate.CloseSessionResponse } var file_vtgateservice_proto_depIdxs = []int32{ 0, // 0: vtgateservice.Vitess.Execute:input_type -> vtgate.ExecuteRequest - 1, // 1: vtgateservice.Vitess.ExecuteBatch:input_type -> vtgate.ExecuteBatchRequest - 2, // 2: vtgateservice.Vitess.StreamExecute:input_type -> vtgate.StreamExecuteRequest - 3, // 3: vtgateservice.Vitess.VStream:input_type -> vtgate.VStreamRequest - 4, // 4: vtgateservice.Vitess.Prepare:input_type -> vtgate.PrepareRequest - 5, // 5: vtgateservice.Vitess.CloseSession:input_type -> vtgate.CloseSessionRequest - 6, // 6: vtgateservice.Vitess.Execute:output_type -> vtgate.ExecuteResponse - 7, // 7: vtgateservice.Vitess.ExecuteBatch:output_type -> vtgate.ExecuteBatchResponse - 8, // 8: vtgateservice.Vitess.StreamExecute:output_type -> vtgate.StreamExecuteResponse - 9, // 9: vtgateservice.Vitess.VStream:output_type -> vtgate.VStreamResponse - 10, // 10: vtgateservice.Vitess.Prepare:output_type -> vtgate.PrepareResponse - 11, // 11: vtgateservice.Vitess.CloseSession:output_type -> vtgate.CloseSessionResponse - 6, // [6:12] is the sub-list for method output_type - 0, // [0:6] is the sub-list for method input_type + 1, // 1: vtgateservice.Vitess.ExecuteMulti:input_type -> vtgate.ExecuteMultiRequest + 2, // 2: vtgateservice.Vitess.ExecuteBatch:input_type -> vtgate.ExecuteBatchRequest + 3, // 3: vtgateservice.Vitess.StreamExecute:input_type -> vtgate.StreamExecuteRequest + 4, // 4: vtgateservice.Vitess.StreamExecuteMulti:input_type -> vtgate.StreamExecuteMultiRequest + 5, // 5: vtgateservice.Vitess.VStream:input_type -> vtgate.VStreamRequest + 6, // 6: vtgateservice.Vitess.Prepare:input_type -> vtgate.PrepareRequest + 7, // 7: vtgateservice.Vitess.CloseSession:input_type -> vtgate.CloseSessionRequest + 8, // 8: vtgateservice.Vitess.Execute:output_type -> vtgate.ExecuteResponse + 9, // 9: vtgateservice.Vitess.ExecuteMulti:output_type -> vtgate.ExecuteMultiResponse + 10, // 10: vtgateservice.Vitess.ExecuteBatch:output_type -> vtgate.ExecuteBatchResponse + 11, // 11: vtgateservice.Vitess.StreamExecute:output_type -> vtgate.StreamExecuteResponse + 12, // 12: vtgateservice.Vitess.StreamExecuteMulti:output_type -> vtgate.StreamExecuteMultiResponse + 13, // 13: vtgateservice.Vitess.VStream:output_type -> vtgate.VStreamResponse + 14, // 14: vtgateservice.Vitess.Prepare:output_type -> vtgate.PrepareResponse + 15, // 15: vtgateservice.Vitess.CloseSession:output_type -> vtgate.CloseSessionResponse + 8, // [8:16] is the sub-list for method output_type + 0, // [0:8] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name 0, // [0:0] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name diff --git a/go/vt/proto/vtgateservice/vtgateservice_grpc.pb.go b/go/vt/proto/vtgateservice/vtgateservice_grpc.pb.go index 80042781649..4cc67bf42c6 100644 --- a/go/vt/proto/vtgateservice/vtgateservice_grpc.pb.go +++ b/go/vt/proto/vtgateservice/vtgateservice_grpc.pb.go @@ -28,6 +28,8 @@ type VitessClient interface { // information in conjunction with the vindexes to route the query. // API group: v3 Execute(ctx context.Context, in *vtgate.ExecuteRequest, opts ...grpc.CallOption) (*vtgate.ExecuteResponse, error) + // ExecuteMulti executes multiple queries on the right shards. + ExecuteMulti(ctx context.Context, in *vtgate.ExecuteMultiRequest, opts ...grpc.CallOption) (*vtgate.ExecuteMultiResponse, error) // ExecuteBatch tries to route the list of queries on the right shards. // It depends on the query and bind variables to provide enough // information in conjunction with the vindexes to route the query. @@ -39,6 +41,8 @@ type VitessClient interface { // Use this method if the query returns a large number of rows. // API group: v3 StreamExecute(ctx context.Context, in *vtgate.StreamExecuteRequest, opts ...grpc.CallOption) (Vitess_StreamExecuteClient, error) + // StreamExecuteMulti executes multiple streaming queries. + StreamExecuteMulti(ctx context.Context, in *vtgate.StreamExecuteMultiRequest, opts ...grpc.CallOption) (Vitess_StreamExecuteMultiClient, error) // VStream streams binlog events from the requested sources. VStream(ctx context.Context, in *vtgate.VStreamRequest, opts ...grpc.CallOption) (Vitess_VStreamClient, error) // Prepare is used by the MySQL server plugin as part of supporting prepared statements. @@ -66,6 +70,15 @@ func (c *vitessClient) Execute(ctx context.Context, in *vtgate.ExecuteRequest, o return out, nil } +func (c *vitessClient) ExecuteMulti(ctx context.Context, in *vtgate.ExecuteMultiRequest, opts ...grpc.CallOption) (*vtgate.ExecuteMultiResponse, error) { + out := new(vtgate.ExecuteMultiResponse) + err := c.cc.Invoke(ctx, "/vtgateservice.Vitess/ExecuteMulti", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *vitessClient) ExecuteBatch(ctx context.Context, in *vtgate.ExecuteBatchRequest, opts ...grpc.CallOption) (*vtgate.ExecuteBatchResponse, error) { out := new(vtgate.ExecuteBatchResponse) err := c.cc.Invoke(ctx, "/vtgateservice.Vitess/ExecuteBatch", in, out, opts...) @@ -107,8 +120,40 @@ func (x *vitessStreamExecuteClient) Recv() (*vtgate.StreamExecuteResponse, error return m, nil } +func (c *vitessClient) StreamExecuteMulti(ctx context.Context, in *vtgate.StreamExecuteMultiRequest, opts ...grpc.CallOption) (Vitess_StreamExecuteMultiClient, error) { + stream, err := c.cc.NewStream(ctx, &Vitess_ServiceDesc.Streams[1], "/vtgateservice.Vitess/StreamExecuteMulti", opts...) + if err != nil { + return nil, err + } + x := &vitessStreamExecuteMultiClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Vitess_StreamExecuteMultiClient interface { + Recv() (*vtgate.StreamExecuteMultiResponse, error) + grpc.ClientStream +} + +type vitessStreamExecuteMultiClient struct { + grpc.ClientStream +} + +func (x *vitessStreamExecuteMultiClient) Recv() (*vtgate.StreamExecuteMultiResponse, error) { + m := new(vtgate.StreamExecuteMultiResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + func (c *vitessClient) VStream(ctx context.Context, in *vtgate.VStreamRequest, opts ...grpc.CallOption) (Vitess_VStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &Vitess_ServiceDesc.Streams[1], "/vtgateservice.Vitess/VStream", opts...) + stream, err := c.cc.NewStream(ctx, &Vitess_ServiceDesc.Streams[2], "/vtgateservice.Vitess/VStream", opts...) if err != nil { return nil, err } @@ -166,6 +211,8 @@ type VitessServer interface { // information in conjunction with the vindexes to route the query. // API group: v3 Execute(context.Context, *vtgate.ExecuteRequest) (*vtgate.ExecuteResponse, error) + // ExecuteMulti executes multiple queries on the right shards. + ExecuteMulti(context.Context, *vtgate.ExecuteMultiRequest) (*vtgate.ExecuteMultiResponse, error) // ExecuteBatch tries to route the list of queries on the right shards. // It depends on the query and bind variables to provide enough // information in conjunction with the vindexes to route the query. @@ -177,6 +224,8 @@ type VitessServer interface { // Use this method if the query returns a large number of rows. // API group: v3 StreamExecute(*vtgate.StreamExecuteRequest, Vitess_StreamExecuteServer) error + // StreamExecuteMulti executes multiple streaming queries. + StreamExecuteMulti(*vtgate.StreamExecuteMultiRequest, Vitess_StreamExecuteMultiServer) error // VStream streams binlog events from the requested sources. VStream(*vtgate.VStreamRequest, Vitess_VStreamServer) error // Prepare is used by the MySQL server plugin as part of supporting prepared statements. @@ -195,12 +244,18 @@ type UnimplementedVitessServer struct { func (UnimplementedVitessServer) Execute(context.Context, *vtgate.ExecuteRequest) (*vtgate.ExecuteResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Execute not implemented") } +func (UnimplementedVitessServer) ExecuteMulti(context.Context, *vtgate.ExecuteMultiRequest) (*vtgate.ExecuteMultiResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ExecuteMulti not implemented") +} func (UnimplementedVitessServer) ExecuteBatch(context.Context, *vtgate.ExecuteBatchRequest) (*vtgate.ExecuteBatchResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ExecuteBatch not implemented") } func (UnimplementedVitessServer) StreamExecute(*vtgate.StreamExecuteRequest, Vitess_StreamExecuteServer) error { return status.Errorf(codes.Unimplemented, "method StreamExecute not implemented") } +func (UnimplementedVitessServer) StreamExecuteMulti(*vtgate.StreamExecuteMultiRequest, Vitess_StreamExecuteMultiServer) error { + return status.Errorf(codes.Unimplemented, "method StreamExecuteMulti not implemented") +} func (UnimplementedVitessServer) VStream(*vtgate.VStreamRequest, Vitess_VStreamServer) error { return status.Errorf(codes.Unimplemented, "method VStream not implemented") } @@ -241,6 +296,24 @@ func _Vitess_Execute_Handler(srv interface{}, ctx context.Context, dec func(inte return interceptor(ctx, in, info, handler) } +func _Vitess_ExecuteMulti_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(vtgate.ExecuteMultiRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VitessServer).ExecuteMulti(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/vtgateservice.Vitess/ExecuteMulti", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VitessServer).ExecuteMulti(ctx, req.(*vtgate.ExecuteMultiRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Vitess_ExecuteBatch_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(vtgate.ExecuteBatchRequest) if err := dec(in); err != nil { @@ -280,6 +353,27 @@ func (x *vitessStreamExecuteServer) Send(m *vtgate.StreamExecuteResponse) error return x.ServerStream.SendMsg(m) } +func _Vitess_StreamExecuteMulti_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(vtgate.StreamExecuteMultiRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(VitessServer).StreamExecuteMulti(m, &vitessStreamExecuteMultiServer{stream}) +} + +type Vitess_StreamExecuteMultiServer interface { + Send(*vtgate.StreamExecuteMultiResponse) error + grpc.ServerStream +} + +type vitessStreamExecuteMultiServer struct { + grpc.ServerStream +} + +func (x *vitessStreamExecuteMultiServer) Send(m *vtgate.StreamExecuteMultiResponse) error { + return x.ServerStream.SendMsg(m) +} + func _Vitess_VStream_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(vtgate.VStreamRequest) if err := stream.RecvMsg(m); err != nil { @@ -348,6 +442,10 @@ var Vitess_ServiceDesc = grpc.ServiceDesc{ MethodName: "Execute", Handler: _Vitess_Execute_Handler, }, + { + MethodName: "ExecuteMulti", + Handler: _Vitess_ExecuteMulti_Handler, + }, { MethodName: "ExecuteBatch", Handler: _Vitess_ExecuteBatch_Handler, @@ -367,6 +465,11 @@ var Vitess_ServiceDesc = grpc.ServiceDesc{ Handler: _Vitess_StreamExecute_Handler, ServerStreams: true, }, + { + StreamName: "StreamExecuteMulti", + Handler: _Vitess_StreamExecuteMulti_Handler, + ServerStreams: true, + }, { StreamName: "VStream", Handler: _Vitess_VStream_Handler, diff --git a/go/vt/proto/vtrpc/vtrpc.pb.go b/go/vt/proto/vtrpc/vtrpc.pb.go index 56b38bfbd5f..64580981fe3 100644 --- a/go/vt/proto/vtrpc/vtrpc.pb.go +++ b/go/vt/proto/vtrpc/vtrpc.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v3.21.3 // source: vtrpc.proto @@ -372,49 +372,39 @@ func (x *RPCError) GetCode() Code { var File_vtrpc_proto protoreflect.FileDescriptor -var file_vtrpc_proto_rawDesc = string([]byte{ - 0x0a, 0x0b, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x76, - 0x74, 0x72, 0x70, 0x63, 0x22, 0x82, 0x01, 0x0a, 0x08, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, - 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x12, - 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x0a, - 0x0c, 0x73, 0x75, 0x62, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x12, 0x16, 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0x58, 0x0a, 0x08, 0x52, 0x50, 0x43, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x1f, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, - 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, - 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x0b, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, - 0x6f, 0x64, 0x65, 0x2a, 0xd8, 0x02, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x06, 0x0a, 0x02, - 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, - 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x02, 0x12, - 0x14, 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, - 0x45, 0x4e, 0x54, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x44, 0x45, 0x41, 0x44, 0x4c, 0x49, 0x4e, - 0x45, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, - 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x41, - 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x53, 0x10, 0x06, 0x12, - 0x15, 0x0a, 0x11, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, - 0x4e, 0x49, 0x45, 0x44, 0x10, 0x07, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x45, 0x58, 0x48, 0x41, 0x55, 0x53, 0x54, 0x45, 0x44, 0x10, 0x08, 0x12, 0x17, - 0x0a, 0x13, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4e, 0x44, - 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x09, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x42, 0x4f, 0x52, 0x54, - 0x45, 0x44, 0x10, 0x0a, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x55, 0x54, 0x5f, 0x4f, 0x46, 0x5f, 0x52, - 0x41, 0x4e, 0x47, 0x45, 0x10, 0x0b, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x49, 0x4d, 0x50, 0x4c, - 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x45, 0x44, 0x10, 0x0c, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, 0x54, - 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x0d, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x41, 0x56, 0x41, - 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x0e, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x41, 0x54, 0x41, - 0x5f, 0x4c, 0x4f, 0x53, 0x53, 0x10, 0x0f, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x4e, 0x41, 0x55, 0x54, - 0x48, 0x45, 0x4e, 0x54, 0x49, 0x43, 0x41, 0x54, 0x45, 0x44, 0x10, 0x10, 0x12, 0x11, 0x0a, 0x0d, - 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x10, 0x11, 0x12, - 0x0d, 0x0a, 0x09, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x12, 0x42, 0x35, - 0x0a, 0x0f, 0x69, 0x6f, 0x2e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x5a, 0x22, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, - 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x76, 0x74, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_vtrpc_proto_rawDesc = "" + + "\n" + + "\vvtrpc.proto\x12\x05vtrpc\"\x82\x01\n" + + "\bCallerID\x12\x1c\n" + + "\tprincipal\x18\x01 \x01(\tR\tprincipal\x12\x1c\n" + + "\tcomponent\x18\x02 \x01(\tR\tcomponent\x12\"\n" + + "\fsubcomponent\x18\x03 \x01(\tR\fsubcomponent\x12\x16\n" + + "\x06groups\x18\x04 \x03(\tR\x06groups\"X\n" + + "\bRPCError\x12\x18\n" + + "\amessage\x18\x02 \x01(\tR\amessage\x12\x1f\n" + + "\x04code\x18\x03 \x01(\x0e2\v.vtrpc.CodeR\x04codeJ\x04\b\x01\x10\x02R\vlegacy_code*\xd8\x02\n" + + "\x04Code\x12\x06\n" + + "\x02OK\x10\x00\x12\f\n" + + "\bCANCELED\x10\x01\x12\v\n" + + "\aUNKNOWN\x10\x02\x12\x14\n" + + "\x10INVALID_ARGUMENT\x10\x03\x12\x15\n" + + "\x11DEADLINE_EXCEEDED\x10\x04\x12\r\n" + + "\tNOT_FOUND\x10\x05\x12\x12\n" + + "\x0eALREADY_EXISTS\x10\x06\x12\x15\n" + + "\x11PERMISSION_DENIED\x10\a\x12\x16\n" + + "\x12RESOURCE_EXHAUSTED\x10\b\x12\x17\n" + + "\x13FAILED_PRECONDITION\x10\t\x12\v\n" + + "\aABORTED\x10\n" + + "\x12\x10\n" + + "\fOUT_OF_RANGE\x10\v\x12\x11\n" + + "\rUNIMPLEMENTED\x10\f\x12\f\n" + + "\bINTERNAL\x10\r\x12\x0f\n" + + "\vUNAVAILABLE\x10\x0e\x12\r\n" + + "\tDATA_LOSS\x10\x0f\x12\x13\n" + + "\x0fUNAUTHENTICATED\x10\x10\x12\x11\n" + + "\rCLUSTER_EVENT\x10\x11\x12\r\n" + + "\tREAD_ONLY\x10\x12B5\n" + + "\x0fio.vitess.protoZ\"vitess.io/vitess/go/vt/proto/vtrpcb\x06proto3" var ( file_vtrpc_proto_rawDescOnce sync.Once diff --git a/go/vt/proto/vttest/vttest.pb.go b/go/vt/proto/vttest/vttest.pb.go index 9d091b4c758..dc68466bf02 100644 --- a/go/vt/proto/vttest/vttest.pb.go +++ b/go/vt/proto/vttest/vttest.pb.go @@ -41,7 +41,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v3.21.3 // source: vttest.proto @@ -270,41 +270,22 @@ func (x *VTTestTopology) GetMirrorRules() *vschema.MirrorRules { var File_vttest_proto protoreflect.FileDescriptor -var file_vttest_proto_rawDesc = string([]byte{ - 0x0a, 0x0c, 0x76, 0x74, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, - 0x76, 0x74, 0x74, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x45, 0x0a, 0x05, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x64, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6f, 0x76, - 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x62, - 0x4e, 0x61, 0x6d, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x22, 0x9f, 0x01, 0x0a, - 0x08, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, - 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, - 0x76, 0x74, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x06, 0x73, 0x68, - 0x61, 0x72, 0x64, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x72, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x64, 0x6f, - 0x6e, 0x6c, 0x79, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0b, 0x72, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x03, - 0x10, 0x04, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0xcb, - 0x01, 0x0a, 0x0e, 0x56, 0x54, 0x54, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, - 0x79, 0x12, 0x2e, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x4b, 0x65, - 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x3a, 0x0a, 0x0d, 0x72, 0x6f, 0x75, 0x74, 0x69, - 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, - 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x0c, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, - 0x6c, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x76, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, - 0x0b, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x42, 0x25, 0x5a, 0x23, - 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, - 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x74, 0x74, - 0x65, 0x73, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_vttest_proto_rawDesc = "" + + "\n" + + "\fvttest.proto\x12\x06vttest\x1a\rvschema.proto\"E\n" + + "\x05Shard\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12(\n" + + "\x10db_name_override\x18\x02 \x01(\tR\x0edbNameOverride\"\x9f\x01\n" + + "\bKeyspace\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12%\n" + + "\x06shards\x18\x02 \x03(\v2\r.vttest.ShardR\x06shards\x12#\n" + + "\rreplica_count\x18\x06 \x01(\x05R\freplicaCount\x12!\n" + + "\frdonly_count\x18\a \x01(\x05R\vrdonlyCountJ\x04\b\x03\x10\x04J\x04\b\x04\x10\x05J\x04\b\x05\x10\x06\"\xcb\x01\n" + + "\x0eVTTestTopology\x12.\n" + + "\tkeyspaces\x18\x01 \x03(\v2\x10.vttest.KeyspaceR\tkeyspaces\x12\x14\n" + + "\x05cells\x18\x02 \x03(\tR\x05cells\x12:\n" + + "\rrouting_rules\x18\x03 \x01(\v2\x15.vschema.RoutingRulesR\froutingRules\x127\n" + + "\fmirror_rules\x18\x04 \x01(\v2\x14.vschema.MirrorRulesR\vmirrorRulesB%Z#vitess.io/vitess/go/vt/proto/vttestb\x06proto3" var ( file_vttest_proto_rawDescOnce sync.Once diff --git a/go/vt/proto/vttime/vttime.pb.go b/go/vt/proto/vttime/vttime.pb.go index b5dc3260797..29ce2a572ea 100644 --- a/go/vt/proto/vttime/vttime.pb.go +++ b/go/vt/proto/vttime/vttime.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v3.21.3 // source: vttime.proto @@ -146,21 +146,15 @@ func (x *Duration) GetNanos() int32 { var File_vttime_proto protoreflect.FileDescriptor -var file_vttime_proto_rawDesc = string([]byte{ - 0x0a, 0x0c, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, - 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x42, 0x0a, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x61, 0x6e, 0x6f, - 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6e, - 0x61, 0x6e, 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0x3a, 0x0a, 0x08, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x42, 0x25, 0x5a, 0x23, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, - 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_vttime_proto_rawDesc = "" + + "\n" + + "\fvttime.proto\x12\x06vttime\"B\n" + + "\x04Time\x12\x18\n" + + "\aseconds\x18\x01 \x01(\x03R\aseconds\x12 \n" + + "\vnanoseconds\x18\x02 \x01(\x05R\vnanoseconds\":\n" + + "\bDuration\x12\x18\n" + + "\aseconds\x18\x01 \x01(\x03R\aseconds\x12\x14\n" + + "\x05nanos\x18\x02 \x01(\x05R\x05nanosB%Z#vitess.io/vitess/go/vt/proto/vttimeb\x06proto3" var ( file_vttime_proto_rawDescOnce sync.Once diff --git a/go/vt/schemamanager/schemamanager.go b/go/vt/schemamanager/schemamanager.go index 8a695a1164e..84d5398fbbf 100644 --- a/go/vt/schemamanager/schemamanager.go +++ b/go/vt/schemamanager/schemamanager.go @@ -30,10 +30,10 @@ import ( const ( // SchemaChangeDirName is the key name in the ControllerFactory params. // It specifies the schema change directory. - SchemaChangeDirName = "schema_change_dir" + SchemaChangeDirName = "schema-change-dir" // SchemaChangeUser is the key name in the ControllerFactory params. // It specifies the user who submits this schema change. - SchemaChangeUser = "schema_change_user" + SchemaChangeUser = "schema-change-user" ) // ControllerFactory takes a set params and construct a Controller instance. diff --git a/go/vt/schemamanager/tablet_executor.go b/go/vt/schemamanager/tablet_executor.go index 60e86bf7faf..b59058a25a5 100644 --- a/go/vt/schemamanager/tablet_executor.go +++ b/go/vt/schemamanager/tablet_executor.go @@ -466,7 +466,7 @@ func (exec *TabletExecutor) Execute(ctx context.Context, sqls []string) *Execute if exec.batchSize > 1 { // Before we proceed to batch, we need to validate there's no conflicts. if !exec.isDirectStrategy() { - return errorExecResult(fmt.Errorf("--batch-size requires 'direct' ddl-strategy")) + return errorExecResult(fmt.Errorf("--batch-size requires 'direct' ddl_strategy")) } if exec.hasProvidedUUIDs() { return errorExecResult(fmt.Errorf("--batch-size conflicts with --uuid-list. Batching does not support UUIDs.")) diff --git a/go/vt/servenv/grpc_auth.go b/go/vt/servenv/grpc_auth.go index 7cbbce7d65a..a9b3c86c273 100644 --- a/go/vt/servenv/grpc_auth.go +++ b/go/vt/servenv/grpc_auth.go @@ -26,6 +26,7 @@ import ( "google.golang.org/grpc/status" "vitess.io/vitess/go/vt/log" + "vitess.io/vitess/go/vt/utils" ) var grpcAuthServerFlagHooks []func(*pflag.FlagSet) @@ -37,7 +38,7 @@ var grpcAuthServerFlagHooks []func(*pflag.FlagSet) // ParseFlags(WithArgs)? if they wish to expose Authenticator functionality. func RegisterGRPCServerAuthFlags() { OnParse(func(fs *pflag.FlagSet) { - fs.StringVar(&gRPCAuth, "grpc_auth_mode", gRPCAuth, "Which auth plugin implementation to use (eg: static)") + utils.SetFlagStringVar(fs, &gRPCAuth, "grpc-auth-mode", gRPCAuth, "Which auth plugin implementation to use (eg: static)") for _, fn := range grpcAuthServerFlagHooks { fn(fs) @@ -45,7 +46,7 @@ func RegisterGRPCServerAuthFlags() { }) } -// GRPCAuth returns the value of the `--grpc_auth_mode` flag. +// GRPCAuth returns the value of the `--grpc-auth-mode` flag. func GRPCAuth() string { return gRPCAuth } diff --git a/go/vt/servenv/grpc_server.go b/go/vt/servenv/grpc_server.go index 8d30ee6d253..8965ac8952b 100644 --- a/go/vt/servenv/grpc_server.go +++ b/go/vt/servenv/grpc_server.go @@ -38,6 +38,7 @@ import ( "vitess.io/vitess/go/vt/grpccommon" "vitess.io/vitess/go/vt/grpcoptionaltls" "vitess.io/vitess/go/vt/log" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vttls" ) @@ -129,47 +130,48 @@ var ( // ParseFlags(WithArgs)? if they wish to run a gRPC server. func RegisterGRPCServerFlags() { OnParse(func(fs *pflag.FlagSet) { - fs.IntVar(&gRPCPort, "grpc_port", gRPCPort, "Port to listen on for gRPC calls. If zero, do not listen.") - fs.StringVar(&gRPCBindAddress, "grpc_bind_address", gRPCBindAddress, "Bind address for gRPC calls. If empty, listen on all addresses.") - fs.DurationVar(&gRPCMaxConnectionAge, "grpc_max_connection_age", gRPCMaxConnectionAge, "Maximum age of a client connection before GoAway is sent.") - fs.DurationVar(&gRPCMaxConnectionAgeGrace, "grpc_max_connection_age_grace", gRPCMaxConnectionAgeGrace, "Additional grace period after grpc_max_connection_age, after which connections are forcibly closed.") - fs.IntVar(&gRPCInitialConnWindowSize, "grpc_server_initial_conn_window_size", gRPCInitialConnWindowSize, "gRPC server initial connection window size") - fs.IntVar(&gRPCInitialWindowSize, "grpc_server_initial_window_size", gRPCInitialWindowSize, "gRPC server initial window size") - fs.DurationVar(&gRPCKeepAliveEnforcementPolicyMinTime, "grpc_server_keepalive_enforcement_policy_min_time", gRPCKeepAliveEnforcementPolicyMinTime, "gRPC server minimum keepalive time") - fs.BoolVar(&gRPCKeepAliveEnforcementPolicyPermitWithoutStream, "grpc_server_keepalive_enforcement_policy_permit_without_stream", gRPCKeepAliveEnforcementPolicyPermitWithoutStream, "gRPC server permit client keepalive pings even when there are no active streams (RPCs)") - - fs.StringVar(&gRPCCert, "grpc_cert", gRPCCert, "server certificate to use for gRPC connections, requires grpc_key, enables TLS") - fs.StringVar(&gRPCKey, "grpc_key", gRPCKey, "server private key to use for gRPC connections, requires grpc_cert, enables TLS") - fs.StringVar(&gRPCCA, "grpc_ca", gRPCCA, "server CA to use for gRPC connections, requires TLS, and enforces client certificate check") - fs.StringVar(&gRPCCRL, "grpc_crl", gRPCCRL, "path to a certificate revocation list in PEM format, client certificates will be further verified against this file during TLS handshake") - fs.BoolVar(&gRPCEnableOptionalTLS, "grpc_enable_optional_tls", gRPCEnableOptionalTLS, "enable optional TLS mode when a server accepts both TLS and plain-text connections on the same port") - fs.StringVar(&gRPCServerCA, "grpc_server_ca", gRPCServerCA, "path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients") - fs.DurationVar(&gRPCKeepaliveTime, "grpc_server_keepalive_time", gRPCKeepaliveTime, "After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive.") - fs.DurationVar(&gRPCKeepaliveTimeout, "grpc_server_keepalive_timeout", gRPCKeepaliveTimeout, "After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed.") + + utils.SetFlagIntVar(fs, &gRPCPort, "grpc-port", gRPCPort, "Port to listen on for gRPC calls. If zero, do not listen.") + utils.SetFlagStringVar(fs, &gRPCBindAddress, "grpc-bind-address", gRPCBindAddress, "Bind address for gRPC calls. If empty, listen on all addresses.") + utils.SetFlagDurationVar(fs, &gRPCMaxConnectionAge, "grpc-max-connection-age", gRPCMaxConnectionAge, "Maximum age of a client connection before GoAway is sent.") + utils.SetFlagDurationVar(fs, &gRPCMaxConnectionAgeGrace, "grpc-max-connection-age-grace", gRPCMaxConnectionAgeGrace, "Additional grace period after grpc-max-connection-age, after which connections are forcibly closed.") + utils.SetFlagIntVar(fs, &gRPCInitialConnWindowSize, "grpc-server-initial-conn-window-size", gRPCInitialConnWindowSize, "gRPC server initial connection window size") + utils.SetFlagIntVar(fs, &gRPCInitialWindowSize, "grpc-server-initial-window-size", gRPCInitialWindowSize, "gRPC server initial window size") + utils.SetFlagDurationVar(fs, &gRPCKeepAliveEnforcementPolicyMinTime, "grpc-server-keepalive-enforcement-policy-min-time", gRPCKeepAliveEnforcementPolicyMinTime, "gRPC server minimum keepalive time") + utils.SetFlagBoolVar(fs, &gRPCKeepAliveEnforcementPolicyPermitWithoutStream, "grpc-server-keepalive-enforcement-policy-permit-without-stream", gRPCKeepAliveEnforcementPolicyPermitWithoutStream, "gRPC server permit client keepalive pings even when there are no active streams (RPCs)") + + utils.SetFlagStringVar(fs, &gRPCCert, "grpc-cert", gRPCCert, "server certificate to use for gRPC connections, requires grpc-key, enables TLS") + utils.SetFlagStringVar(fs, &gRPCKey, "grpc-key", gRPCKey, "server private key to use for gRPC connections, requires grpc-cert, enables TLS") + utils.SetFlagStringVar(fs, &gRPCCA, "grpc-ca", gRPCCA, "server CA to use for gRPC connections, requires TLS, and enforces client certificate check") + utils.SetFlagStringVar(fs, &gRPCCRL, "grpc-crl", gRPCCRL, "path to a certificate revocation list in PEM format, client certificates will be further verified against this file during TLS handshake") + utils.SetFlagBoolVar(fs, &gRPCEnableOptionalTLS, "grpc-enable-optional-tls", gRPCEnableOptionalTLS, "enable optional TLS mode when a server accepts both TLS and plain-text connections on the same port") + utils.SetFlagStringVar(fs, &gRPCServerCA, "grpc-server-ca", gRPCServerCA, "path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients") + utils.SetFlagDurationVar(fs, &gRPCKeepaliveTime, "grpc-server-keepalive-time", gRPCKeepaliveTime, "After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive.") + utils.SetFlagDurationVar(fs, &gRPCKeepaliveTimeout, "grpc-server-keepalive-timeout", gRPCKeepaliveTimeout, "After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed.") }) } -// GRPCCert returns the value of the `--grpc_cert` flag. +// GRPCCert returns the value of the `--grpc-cert` flag. func GRPCCert() string { return gRPCCert } -// GRPCCertificateAuthority returns the value of the `--grpc_ca` flag. +// GRPCCertificateAuthority returns the value of the `--grpc-ca` flag. func GRPCCertificateAuthority() string { return gRPCCA } -// GRPCKey returns the value of the `--grpc_key` flag. +// GRPCKey returns the value of the `--grpc-key` flag. func GRPCKey() string { return gRPCKey } -// GRPCPort returns the value of the `--grpc_port` flag. +// GRPCPort returns the value of the `--grpc-port` flag. func GRPCPort() int { return gRPCPort } -// GRPCPort returns the value of the `--grpc_bind_address` flag. +// GRPCPort returns the value of the `--grpc-bind-address` flag. func GRPCBindAddress() string { return gRPCBindAddress } diff --git a/go/vt/servenv/grpc_server_auth_mtls.go b/go/vt/servenv/grpc_server_auth_mtls.go index 49116803765..42259ba505a 100644 --- a/go/vt/servenv/grpc_server_auth_mtls.go +++ b/go/vt/servenv/grpc_server_auth_mtls.go @@ -27,6 +27,7 @@ import ( "google.golang.org/grpc/status" "vitess.io/vitess/go/vt/log" + "vitess.io/vitess/go/vt/utils" ) var ( @@ -37,7 +38,7 @@ var ( ) func registerGRPCServerAuthMTLSFlags(fs *pflag.FlagSet) { - fs.StringVar(&clientCertSubstrings, "grpc_auth_mtls_allowed_substrings", clientCertSubstrings, "List of substrings of at least one of the client certificate names (separated by colon).") + utils.SetFlagStringVar(fs, &clientCertSubstrings, "grpc-auth-mtls-allowed-substrings", clientCertSubstrings, "List of substrings of at least one of the client certificate names (separated by colon).") } // MtlsAuthPlugin implements static username/password authentication for grpc. It contains an array of username/passwords @@ -76,7 +77,7 @@ func mtlsAuthPluginInitializer() (Authenticator, error) { } // ClientCertSubstrings returns the value of the -// `--grpc_auth_mtls_allowed_substrings` flag. +// `--grpc-auth-mtls-allowed-substrings` flag. func ClientCertSubstrings() string { return clientCertSubstrings } diff --git a/go/vt/servenv/grpc_server_auth_static.go b/go/vt/servenv/grpc_server_auth_static.go index b7c7142508a..5c4a7a2773c 100644 --- a/go/vt/servenv/grpc_server_auth_static.go +++ b/go/vt/servenv/grpc_server_auth_static.go @@ -28,6 +28,7 @@ import ( "google.golang.org/grpc/status" "vitess.io/vitess/go/vt/log" + "vitess.io/vitess/go/vt/utils" ) var ( @@ -45,7 +46,7 @@ const ( ) func registerGRPCServerAuthStaticFlags(fs *pflag.FlagSet) { - fs.StringVar(&credsFile, "grpc_auth_static_password_file", credsFile, "JSON File to read the users/passwords from.") + utils.SetFlagStringVar(fs, &credsFile, "grpc-auth-static-password-file", credsFile, "JSON File to read the users/passwords from.") } // StaticAuthConfigEntry is the container for server side credentials. Current implementation matches the @@ -98,7 +99,7 @@ func newStaticAuthContext(ctx context.Context, username string) context.Context func staticAuthPluginInitializer() (Authenticator, error) { entries := make([]StaticAuthConfigEntry, 0) if credsFile == "" { - err := fmt.Errorf("failed to load static auth plugin. Plugin configured but grpc_auth_static_password_file not provided") + err := fmt.Errorf("failed to load static auth plugin. Plugin configured but grpc-auth-static-password-file not provided") return nil, err } @@ -116,7 +117,7 @@ func staticAuthPluginInitializer() (Authenticator, error) { staticAuthPlugin := &StaticAuthPlugin{ entries: entries, } - log.Info("static auth plugin have initialized successfully with config from grpc_auth_static_password_file") + log.Info("static auth plugin have initialized successfully with config from grpc-auth-static-password-file") return staticAuthPlugin, nil } diff --git a/go/vt/servenv/mysql.go b/go/vt/servenv/mysql.go index c0af2a7ee39..05c59dd486b 100644 --- a/go/vt/servenv/mysql.go +++ b/go/vt/servenv/mysql.go @@ -22,6 +22,7 @@ import ( "github.com/spf13/pflag" "vitess.io/vitess/go/mysql/config" + "vitess.io/vitess/go/vt/utils" ) // mySQLServerVersion is what Vitess will present as it's version during the connection handshake, @@ -32,10 +33,10 @@ var mySQLServerVersion = fmt.Sprintf("%s-Vitess", config.DefaultMySQLVersion) // RegisterMySQLServerFlags installs the flags needed to specify or expose a // particular MySQL server version from Vitess. func RegisterMySQLServerFlags(fs *pflag.FlagSet) { - fs.StringVar(&mySQLServerVersion, "mysql_server_version", mySQLServerVersion, "MySQL server version to advertise.") + utils.SetFlagStringVar(fs, &mySQLServerVersion, "mysql-server-version", mySQLServerVersion, "MySQL server version to advertise.") } -// MySQLServerVersion returns the value of the `--mysql_server_version` flag. +// MySQLServerVersion returns the value of the `--mysql-server-version` flag. func MySQLServerVersion() string { return mySQLServerVersion } diff --git a/go/vt/servenv/pid_file.go b/go/vt/servenv/pid_file.go index 67faaf184bd..49899d05ea4 100644 --- a/go/vt/servenv/pid_file.go +++ b/go/vt/servenv/pid_file.go @@ -23,7 +23,7 @@ import ( "vitess.io/vitess/go/vt/log" ) -var pidFile string // registered in RegisterFlags as --pid_file +var pidFile string // registered in RegisterFlags as --pid-file func init() { pidFileCreated := false diff --git a/go/vt/servenv/servenv.go b/go/vt/servenv/servenv.go index 42ce4a9cf12..d7ddccf1890 100644 --- a/go/vt/servenv/servenv.go +++ b/go/vt/servenv/servenv.go @@ -49,6 +49,7 @@ import ( "vitess.io/vitess/go/vt/grpccommon" "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/logutil" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vterrors" // Include deprecation warnings for soon-to-be-unsupported flag invocations. @@ -100,28 +101,28 @@ var timeouts = &TimeoutFlags{ func RegisterFlags() { OnParse(func(fs *pflag.FlagSet) { fs.DurationVar(&timeouts.LameduckPeriod, "lameduck-period", timeouts.LameduckPeriod, "keep running at least this long after SIGTERM before stopping") - fs.DurationVar(&timeouts.OnTermTimeout, "onterm_timeout", timeouts.OnTermTimeout, "wait no more than this for OnTermSync handlers before stopping") - fs.DurationVar(&timeouts.OnCloseTimeout, "onclose_timeout", timeouts.OnCloseTimeout, "wait no more than this for OnClose handlers before stopping") + utils.SetFlagDurationVar(fs, &timeouts.OnTermTimeout, "onterm-timeout", timeouts.OnTermTimeout, "wait no more than this for OnTermSync handlers before stopping") + utils.SetFlagDurationVar(fs, &timeouts.OnCloseTimeout, "onclose-timeout", timeouts.OnCloseTimeout, "wait no more than this for OnClose handlers before stopping") fs.BoolVar(&catchSigpipe, "catch-sigpipe", catchSigpipe, "catch and ignore SIGPIPE on stdout and stderr if specified") fs.IntVar(&maxStackSize, "max-stack-size", maxStackSize, "configure the maximum stack size in bytes") fs.IntVar(&tableRefreshInterval, "table-refresh-interval", tableRefreshInterval, "interval in milliseconds to refresh tables in status page with refreshRequired class") // pid_file.go - fs.StringVar(&pidFile, "pid_file", pidFile, "If set, the process will write its pid to the named file, and delete it on graceful shutdown.") + utils.SetFlagStringVar(fs, &pidFile, "pid-file", pidFile, "If set, the process will write its pid to the named file, and delete it on graceful shutdown.") }) } func RegisterFlagsWithTimeouts(tf *TimeoutFlags) { OnParse(func(fs *pflag.FlagSet) { fs.DurationVar(&tf.LameduckPeriod, "lameduck-period", tf.LameduckPeriod, "keep running at least this long after SIGTERM before stopping") - fs.DurationVar(&tf.OnTermTimeout, "onterm_timeout", tf.OnTermTimeout, "wait no more than this for OnTermSync handlers before stopping") - fs.DurationVar(&tf.OnCloseTimeout, "onclose_timeout", tf.OnCloseTimeout, "wait no more than this for OnClose handlers before stopping") + utils.SetFlagDurationVar(fs, &tf.OnTermTimeout, "onterm-timeout", tf.OnTermTimeout, "wait no more than this for OnTermSync handlers before stopping") + utils.SetFlagDurationVar(fs, &tf.OnCloseTimeout, "onclose-timeout", tf.OnCloseTimeout, "wait no more than this for OnClose handlers before stopping") fs.BoolVar(&catchSigpipe, "catch-sigpipe", catchSigpipe, "catch and ignore SIGPIPE on stdout and stderr if specified") fs.IntVar(&maxStackSize, "max-stack-size", maxStackSize, "configure the maximum stack size in bytes") fs.IntVar(&tableRefreshInterval, "table-refresh-interval", tableRefreshInterval, "interval in milliseconds to refresh tables in status page with refreshRequired class") // pid_file.go - fs.StringVar(&pidFile, "pid_file", pidFile, "If set, the process will write its pid to the named file, and delete it on graceful shutdown.") + utils.SetFlagStringVar(fs, &pidFile, "pid-file", pidFile, "If set, the process will write its pid to the named file, and delete it on graceful shutdown.") timeouts = tf }) @@ -169,7 +170,7 @@ func OnTerm(f func()) { // This allows the program to change its behavior during the lameduck period. // // All hooks are run in parallel, and the process will do its best to wait -// (up to -onterm_timeout) for all of them to finish before dying. +// (up to -onterm-timeout) for all of them to finish before dying. // // See also: OnTerm func OnTermSync(f func()) { diff --git a/go/vt/servenv/service_map.go b/go/vt/servenv/service_map.go index 69d5cd0bcbc..cd1bf758272 100644 --- a/go/vt/servenv/service_map.go +++ b/go/vt/servenv/service_map.go @@ -20,6 +20,7 @@ import ( "github.com/spf13/pflag" "vitess.io/vitess/go/vt/log" + "vitess.io/vitess/go/vt/utils" ) var ( @@ -27,17 +28,17 @@ var ( // serviceMap is the used version of the service map. // init() functions can add default values to it (using InitServiceMap). - // service_map command line parameter will alter the map. + // service-map command line parameter will alter the map. // Can only be used after servenv.Init has been called. serviceMap = make(map[string]bool) ) // RegisterServiceMapFlag registers an OnParse hook to install the -// `--service_map` flag for a given cmd. It must be called before ParseFlags or +// `--service-map` flag for a given cmd. It must be called before ParseFlags or // ParseFlagsWithArgs. func RegisterServiceMapFlag() { OnParse(func(fs *pflag.FlagSet) { - fs.StringSliceVar(&serviceMapFlag, "service_map", serviceMapFlag, "comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice") + utils.SetFlagStringSliceVar(fs, &serviceMapFlag, "service-map", serviceMapFlag, "comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice") }) OnInit(updateServiceMap) } @@ -63,9 +64,9 @@ func updateServiceMap() { // (and also logs how to enable / disable it) func checkServiceMap(protocol, name string) bool { if serviceMap[protocol+"-"+name] { - log.Infof("Registering %v for %v, disable it with -%v-%v service_map parameter", name, protocol, protocol, name) + log.Infof("Registering %v for %v, disable it with -%v-%v service-map parameter", name, protocol, protocol, name) return true } - log.Infof("Not registering %v for %v, enable it with %v-%v service_map parameter", name, protocol, protocol, name) + log.Infof("Not registering %v for %v, enable it with %v-%v service-map parameter", name, protocol, protocol, name) return false } diff --git a/go/vt/servenv/version.go b/go/vt/servenv/version.go index 072938bfdf2..bc7f2ef0de0 100644 --- a/go/vt/servenv/version.go +++ b/go/vt/servenv/version.go @@ -1,5 +1,5 @@ /* -Copyright 2024 The Vitess Authors. +Copyright 2025 The Vitess Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -19,4 +19,4 @@ package servenv // DO NOT EDIT // THIS FILE IS AUTO-GENERATED DURING NEW RELEASES BY THE VITESS-RELEASER -const versionName = "22.0.0-SNAPSHOT" +const versionName = "23.0.0-SNAPSHOT" diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go index a81e2f276f4..013b7d8d9e2 100644 --- a/go/vt/sqlparser/ast.go +++ b/go/vt/sqlparser/ast.go @@ -640,8 +640,15 @@ type ( // TxAccessMode is an enum for Transaction Access Mode TxAccessMode int8 + // BeginType is an enum for the type of BEGIN statement. + BeginType int8 + // Begin represents a Begin statement. Begin struct { + // We need to differentiate between BEGIN and START TRANSACTION statements + // because inside a stored procedure the former is considered part of a BEGIN...END statement, + // while the latter starts a transaction. + Type BeginType TxAccessModes []TxAccessMode } diff --git a/go/vt/sqlparser/ast_equals.go b/go/vt/sqlparser/ast_equals.go index 0af55f326b2..b5e54309115 100644 --- a/go/vt/sqlparser/ast_equals.go +++ b/go/vt/sqlparser/ast_equals.go @@ -2071,7 +2071,8 @@ func (cmp *Comparator) RefOfBegin(a, b *Begin) bool { if a == nil || b == nil { return false } - return cmp.SliceOfTxAccessMode(a.TxAccessModes, b.TxAccessModes) + return a.Type == b.Type && + cmp.SliceOfTxAccessMode(a.TxAccessModes, b.TxAccessModes) } // RefOfBeginEndStatement does deep equals between the two objects. diff --git a/go/vt/sqlparser/ast_format.go b/go/vt/sqlparser/ast_format.go index 589b0d50103..e181b2bb143 100644 --- a/go/vt/sqlparser/ast_format.go +++ b/go/vt/sqlparser/ast_format.go @@ -326,6 +326,10 @@ func (node *AlterMigration) Format(buf *TrackedBuffer) { alterType = "complete" case CompleteAllMigrationType: alterType = "complete all" + case PostponeCompleteMigrationType: + alterType = "postpone complete" + case PostponeCompleteAllMigrationType: + alterType = "postpone complete all" case CancelMigrationType: alterType = "cancel" case CancelAllMigrationType: @@ -1184,7 +1188,7 @@ func (node *Commit) Format(buf *TrackedBuffer) { // Format formats the node. func (node *Begin) Format(buf *TrackedBuffer) { - if node.TxAccessModes == nil { + if node.Type == BeginStmt { buf.literal("begin") return } diff --git a/go/vt/sqlparser/ast_format_fast.go b/go/vt/sqlparser/ast_format_fast.go index 3cc95f7bee5..5a1c709b97a 100644 --- a/go/vt/sqlparser/ast_format_fast.go +++ b/go/vt/sqlparser/ast_format_fast.go @@ -456,6 +456,10 @@ func (node *AlterMigration) FormatFast(buf *TrackedBuffer) { alterType = "complete" case CompleteAllMigrationType: alterType = "complete all" + case PostponeCompleteMigrationType: + alterType = "postpone complete" + case PostponeCompleteAllMigrationType: + alterType = "postpone complete all" case CancelMigrationType: alterType = "cancel" case CancelAllMigrationType: @@ -1560,7 +1564,7 @@ func (node *Commit) FormatFast(buf *TrackedBuffer) { // FormatFast formats the node. func (node *Begin) FormatFast(buf *TrackedBuffer) { - if node.TxAccessModes == nil { + if node.Type == BeginStmt { buf.WriteString("begin") return } diff --git a/go/vt/sqlparser/cached_size.go b/go/vt/sqlparser/cached_size.go index 7743a86172b..8b3edeab970 100644 --- a/go/vt/sqlparser/cached_size.go +++ b/go/vt/sqlparser/cached_size.go @@ -421,7 +421,7 @@ func (cached *Begin) CachedSize(alloc bool) int64 { } size := int64(0) if alloc { - size += int64(24) + size += int64(32) } // field TxAccessModes []vitess.io/vitess/go/vt/sqlparser.TxAccessMode { diff --git a/go/vt/sqlparser/comments.go b/go/vt/sqlparser/comments.go index dff6f60e531..03a482470ee 100644 --- a/go/vt/sqlparser/comments.go +++ b/go/vt/sqlparser/comments.go @@ -43,7 +43,7 @@ const ( DirectiveIgnoreMaxPayloadSize = "IGNORE_MAX_PAYLOAD_SIZE" // DirectiveIgnoreMaxMemoryRows skips memory row validation when set. DirectiveIgnoreMaxMemoryRows = "IGNORE_MAX_MEMORY_ROWS" - // DirectiveAllowScatter lets scatter plans pass through even when they are turned off by `no-scatter`. + // DirectiveAllowScatter lets scatter plans pass through even when they are turned off by `no_scatter`. DirectiveAllowScatter = "ALLOW_SCATTER" // DirectiveAllowHashJoin lets the planner use hash join if possible DirectiveAllowHashJoin = "ALLOW_HASH_JOIN" diff --git a/go/vt/sqlparser/constants.go b/go/vt/sqlparser/constants.go index 6889141c9d2..2fb40f289a9 100644 --- a/go/vt/sqlparser/constants.go +++ b/go/vt/sqlparser/constants.go @@ -960,6 +960,8 @@ const ( LaunchAllMigrationType CompleteMigrationType CompleteAllMigrationType + PostponeCompleteMigrationType + PostponeCompleteAllMigrationType CancelMigrationType CancelAllMigrationType CleanupMigrationType @@ -995,6 +997,12 @@ const ( ReadOnly ) +// BEGIN statement type +const ( + BeginStmt BeginType = iota + StartTransactionStmt +) + // Enum Types of WKT functions const ( GeometryFromText GeomFromWktType = iota diff --git a/go/vt/sqlparser/keywords.go b/go/vt/sqlparser/keywords.go index c851eed64cf..6eadf43a361 100644 --- a/go/vt/sqlparser/keywords.go +++ b/go/vt/sqlparser/keywords.go @@ -518,6 +518,7 @@ var keywords = []keyword{ {"pointn", ST_PointN}, {"polygon", POLYGON}, {"position", POSITION}, + {"postpone", POSTPONE}, {"preceding", PRECEDING}, {"precision", UNUSED}, {"prepare", PREPARE}, @@ -765,6 +766,7 @@ var keywords = []keyword{ {"utc_time", UTC_TIME}, {"utc_timestamp", UTC_TIMESTAMP}, {"validation", VALIDATION}, + {"value", VALUE}, {"values", VALUES}, {"var_pop", VAR_POP}, {"var_samp", VAR_SAMP}, diff --git a/go/vt/sqlparser/normalizer.go b/go/vt/sqlparser/normalizer.go index e435ad0957d..e5f1b9bc040 100644 --- a/go/vt/sqlparser/normalizer.go +++ b/go/vt/sqlparser/normalizer.go @@ -45,6 +45,7 @@ type ( bindVars map[string]*querypb.BindVariable reserved *ReservedVars vals map[Literal]string + tupleVals map[string]string err error inDerived int inSelect int @@ -145,6 +146,7 @@ func newNormalizer( bindVars: bindVars, reserved: reserved, vals: make(map[Literal]string), + tupleVals: make(map[string]string), bindVarNeeds: &BindVarNeeds{}, keyspace: keyspace, selectLimit: selectLimit, @@ -174,7 +176,7 @@ func (nz *normalizer) determineQueryRewriteStrategy(in Statement) { func (nz *normalizer) walkDown(node, _ SQLNode) bool { switch node := node.(type) { case *Begin, *Commit, *Rollback, *Savepoint, *SRollback, *Release, *OtherAdmin, *Analyze, - *PrepareStmt, *ExecuteStmt, *FramePoint, *ColName, TableName, *ConvertType: + *PrepareStmt, *ExecuteStmt, *FramePoint, *ColName, TableName, *ConvertType, *CreateProcedure: // These statement do not need normalizing return false case *AssignmentExpr: @@ -470,8 +472,22 @@ func (nz *normalizer) rewriteInComparisons(node *ComparisonExpr) { Value: bval.Value, }) } - bvname := nz.reserved.nextUnusedVar() - nz.bindVars[bvname] = bvals + + var bvname string + + if key, err := bvals.MarshalVT(); err != nil { + bvname = nz.reserved.nextUnusedVar() + nz.bindVars[bvname] = bvals + } else { + // Check if we can find key in tuplevals + if bvname, ok = nz.tupleVals[string(key)]; !ok { + bvname = nz.reserved.nextUnusedVar() + } + + nz.bindVars[bvname] = bvals + nz.tupleVals[string(key)] = bvname + } + node.Right = ListArg(bvname) } diff --git a/go/vt/sqlparser/normalizer_test.go b/go/vt/sqlparser/normalizer_test.go index 596df245c26..1a59ae57c13 100644 --- a/go/vt/sqlparser/normalizer_test.go +++ b/go/vt/sqlparser/normalizer_test.go @@ -317,7 +317,13 @@ func TestNormalize(t *testing.T) { "bv1": sqltypes.TestBindVariable([]any{1, "2"}), }, }, { - // EXPLAIN query will be normalized and not parameterized + // repeated IN clause with vals + in: "select * from t where v1 in (1, '2') OR v2 in (1, '2')", + outstmt: "select * from t where v1 in ::bv1 or v2 in ::bv1", + outbv: map[string]*querypb.BindVariable{ + "bv1": sqltypes.TestBindVariable([]any{1, "2"}), + }, + }, { // EXPLAIN query will be normalized and not parameterized in: "explain select @x from t where v1 in (1, '2')", outstmt: "explain select :__vtudvx as `@x` from t where v1 in (1, '2')", outbv: map[string]*querypb.BindVariable{}, @@ -441,6 +447,11 @@ func TestNormalize(t *testing.T) { "bv1": sqltypes.Int64BindVariable(1), "bv2": sqltypes.Int64BindVariable(0), }, + }, { + // Verify we don't change anything in the normalization of create procedures. + in: "CREATE PROCEDURE p2 (in x BIGINT) BEGIN declare y DECIMAL(14,2); START TRANSACTION; set y = 4.2; SELECT 128 from dual; COMMIT; END", + outstmt: "create procedure p2 (in x BIGINT) begin declare y DECIMAL(14,2); start transaction; set y = 4.2; select 128 from dual; commit; end;", + outbv: map[string]*querypb.BindVariable{}, }} parser := NewTestParser() for _, tc := range testcases { @@ -1320,9 +1331,9 @@ JOIN warehouse%d AS w ON c_w_id=w_id WHERE w_id = %d AND c_d_id = %d AND c_id = %d`, - `SELECT d_next_o_id, d_tax -FROM district%d -WHERE d_w_id = %d + `SELECT d_next_o_id, d_tax +FROM district%d +WHERE d_w_id = %d AND d_id = %d FOR UPDATE`, `UPDATE district%d SET d_next_o_id = %d @@ -1332,58 +1343,58 @@ WHERE d_id = %d AND d_w_id= %d`, VALUES (%d,%d,%d,%d,NOW(),%d,%d)`, `INSERT INTO new_orders%d (no_o_id, no_d_id, no_w_id) VALUES (%d,%d,%d)`, - `SELECT i_price, i_name, i_data + `SELECT i_price, i_name, i_data FROM item%d WHERE i_id = %d`, - `SELECT s_quantity, s_data, s_dist_%s s_dist -FROM stock%d + `SELECT s_quantity, s_data, s_dist_%s s_dist +FROM stock%d WHERE s_i_id = %d AND s_w_id= %d FOR UPDATE`, `UPDATE stock%d SET s_quantity = %d -WHERE s_i_id = %d +WHERE s_i_id = %d AND s_w_id= %d`, `INSERT INTO order_line%d (ol_o_id, ol_d_id, ol_w_id, ol_number, ol_i_id, ol_supply_w_id, ol_quantity, ol_amount, ol_dist_info) VALUES (%d,%d,%d,%d,%d,%d,%d,%d,'%s')`, `UPDATE warehouse%d -SET w_ytd = w_ytd + %d +SET w_ytd = w_ytd + %d WHERE w_id = %d`, `SELECT w_street_1, w_street_2, w_city, w_state, w_zip, w_name FROM warehouse%d WHERE w_id = %d`, - `UPDATE district%d -SET d_ytd = d_ytd + %d -WHERE d_w_id = %d + `UPDATE district%d +SET d_ytd = d_ytd + %d +WHERE d_w_id = %d AND d_id= %d`, - `SELECT d_street_1, d_street_2, d_city, d_state, d_zip, d_name + `SELECT d_street_1, d_street_2, d_city, d_state, d_zip, d_name FROM district%d -WHERE d_w_id = %d +WHERE d_w_id = %d AND d_id = %d`, `SELECT count(c_id) namecnt FROM customer%d -WHERE c_w_id = %d +WHERE c_w_id = %d AND c_d_id= %d AND c_last='%s'`, `SELECT c_first, c_middle, c_last, c_street_1, c_street_2, c_city, c_state, c_zip, c_phone, c_credit, c_credit_lim, c_discount, c_balance, c_ytd_payment, c_since FROM customer%d -WHERE c_w_id = %d +WHERE c_w_id = %d AND c_d_id= %d AND c_id=%d FOR UPDATE`, `SELECT c_data FROM customer%d -WHERE c_w_id = %d +WHERE c_w_id = %d AND c_d_id=%d AND c_id= %d`, `UPDATE customer%d SET c_balance=%f, c_ytd_payment=%f, c_data='%s' -WHERE c_w_id = %d +WHERE c_w_id = %d AND c_d_id=%d AND c_id=%d`, `UPDATE customer%d SET c_balance=%f, c_ytd_payment=%f -WHERE c_w_id = %d +WHERE c_w_id = %d AND c_d_id=%d AND c_id=%d`, `INSERT INTO history%d @@ -1391,71 +1402,71 @@ AND c_id=%d`, VALUES (%d,%d,%d,%d,%d,NOW(),%d,'%s')`, `SELECT count(c_id) namecnt FROM customer%d -WHERE c_w_id = %d +WHERE c_w_id = %d AND c_d_id= %d AND c_last='%s'`, `SELECT c_balance, c_first, c_middle, c_id FROM customer%d -WHERE c_w_id = %d +WHERE c_w_id = %d AND c_d_id= %d AND c_last='%s' ORDER BY c_first`, `SELECT c_balance, c_first, c_middle, c_last FROM customer%d -WHERE c_w_id = %d +WHERE c_w_id = %d AND c_d_id=%d AND c_id=%d`, `SELECT o_id, o_carrier_id, o_entry_d -FROM orders%d -WHERE o_w_id = %d -AND o_d_id = %d -AND o_c_id = %d +FROM orders%d +WHERE o_w_id = %d +AND o_d_id = %d +AND o_c_id = %d ORDER BY o_id DESC`, `SELECT ol_i_id, ol_supply_w_id, ol_quantity, ol_amount, ol_delivery_d FROM order_line%d WHERE ol_w_id = %d AND ol_d_id = %d AND ol_o_id = %d`, `SELECT no_o_id -FROM new_orders%d -WHERE no_d_id = %d -AND no_w_id = %d +FROM new_orders%d +WHERE no_d_id = %d +AND no_w_id = %d ORDER BY no_o_id ASC LIMIT 1 FOR UPDATE`, `DELETE FROM new_orders%d -WHERE no_o_id = %d -AND no_d_id = %d +WHERE no_o_id = %d +AND no_d_id = %d AND no_w_id = %d`, `SELECT o_c_id -FROM orders%d -WHERE o_id = %d -AND o_d_id = %d +FROM orders%d +WHERE o_id = %d +AND o_d_id = %d AND o_w_id = %d`, - `UPDATE orders%d + `UPDATE orders%d SET o_carrier_id = %d -WHERE o_id = %d -AND o_d_id = %d +WHERE o_id = %d +AND o_d_id = %d AND o_w_id = %d`, - `UPDATE order_line%d + `UPDATE order_line%d SET ol_delivery_d = NOW() -WHERE ol_o_id = %d -AND ol_d_id = %d +WHERE ol_o_id = %d +AND ol_d_id = %d AND ol_w_id = %d`, `SELECT SUM(ol_amount) sm -FROM order_line%d -WHERE ol_o_id = %d -AND ol_d_id = %d +FROM order_line%d +WHERE ol_o_id = %d +AND ol_d_id = %d AND ol_w_id = %d`, - `UPDATE customer%d + `UPDATE customer%d SET c_balance = c_balance + %f, c_delivery_cnt = c_delivery_cnt + 1 -WHERE c_id = %d -AND c_d_id = %d +WHERE c_id = %d +AND c_d_id = %d AND c_w_id = %d`, - `SELECT d_next_o_id + `SELECT d_next_o_id FROM district%d WHERE d_id = %d AND d_w_id= %d`, `SELECT COUNT(DISTINCT(s.s_i_id)) FROM stock%d AS s -JOIN order_line%d AS ol ON ol.ol_w_id=s.s_w_id AND ol.ol_i_id=s.s_i_id -WHERE ol.ol_w_id = %d +JOIN order_line%d AS ol ON ol.ol_w_id=s.s_w_id AND ol.ol_i_id=s.s_i_id +WHERE ol.ol_w_id = %d AND ol.ol_d_id = %d -AND ol.ol_o_id < %d +AND ol.ol_o_id < %d AND ol.ol_o_id >= %d AND s.s_w_id= %d AND s.s_quantity < %d `, @@ -1466,7 +1477,7 @@ AND ol_o_id < %d AND ol_o_id >= %d`, WHERE s_w_id = %d AND s_i_id = %d AND s_quantity < %d`, `SELECT min(no_o_id) mo -FROM new_orders%d +FROM new_orders%d WHERE no_w_id = %d AND no_d_id = %d`, `SELECT o_id FROM orders%d o, (SELECT o_c_id,o_w_id,o_d_id,count(distinct o_id) FROM orders%d WHERE o_w_id=%d AND o_d_id=%d AND o_id > 2100 AND o_id < %d GROUP BY o_c_id,o_d_id,o_w_id having count( distinct o_id) > 1 limit 1) t WHERE t.o_w_id=o.o_w_id and t.o_d_id=o.o_d_id and t.o_c_id=o.o_c_id limit 1 `, `DELETE FROM order_line%d where ol_w_id=%d AND ol_d_id=%d AND ol_o_id=%d`, diff --git a/go/vt/sqlparser/parse_test.go b/go/vt/sqlparser/parse_test.go index d0fddcce7a1..f51f604bae3 100644 --- a/go/vt/sqlparser/parse_test.go +++ b/go/vt/sqlparser/parse_test.go @@ -42,6 +42,8 @@ var ( partialDDL bool ignoreNormalizerTest bool }{{ + input: "select a and b member of (c) from dual", + }, { input: "select * from foo limit 5 + 5", }, { input: "create table x(location GEOMETRYCOLLECTION DEFAULT (POINT(7.0, 3.0)))", @@ -1262,13 +1264,31 @@ var ( }, { input: "insert /* multi-value list */ into a values (1, 2), (3, 4)", }, { - input: "insert /* no values */ into a values ()", + input: "insert /* simple */ into a value (1)", + output: "insert /* simple */ into a values (1)", + }, { + input: "insert /* a.b */ into a.b value (1)", + output: "insert /* a.b */ into a.b values (1)", + }, { + input: "insert /* multi-value */ into a value (1, 2)", + output: "insert /* multi-value */ into a values (1, 2)", + }, { + input: "insert /* multi-value list */ into a value (1, 2), (3, 4)", + output: "insert /* multi-value list */ into a values (1, 2), (3, 4)", + }, { + input: "insert /* no values */ into a value ()", + output: "insert /* no values */ into a values ()", }, { input: "insert /* set */ into a set a = 1, b = 2", output: "insert /* set */ into a(a, b) values (1, 2)", }, { input: "insert /* set default */ into a set a = default, b = 2", output: "insert /* set default */ into a(a, b) values (default, 2)", + }, { + input: "replace into a values (1, 2), (3, 4)", + }, { + input: "replace into a value (1, 2), (3, 4)", + output: "replace into a values (1, 2), (3, 4)", }, { input: "insert /* value expression list */ into a values (a + 1, 2 * 3)", }, { @@ -2144,14 +2164,14 @@ var ( input: "create procedure DeclareAndIfProcedure(in input_value int) begin declare message varchar(50); if input_value > 100 then set message = 'High'; elseif input_value > 50 then set message = 'Medium'; else set message = 'Low'; end if; select message; end;", output: "create procedure DeclareAndIfProcedure (in input_value int) begin declare message varchar(50); if input_value > 100 then set message = 'High'; elseif input_value > 50 then set message = 'Medium'; else set message = 'Low'; end if; select message from dual; end;", }, { - input: "create procedure NestedIfProcedure(in value int) begin if value > 0 then if value > 100 then select 'Very High'; else select 'High'; end if; else select 'Low or Negative'; end if; end;", - output: "create procedure NestedIfProcedure (in value int) begin if value > 0 then if value > 100 then select 'Very High' from dual; else select 'High' from dual; end if; else select 'Low or Negative' from dual; end if; end;", + input: "create procedure NestedIfProcedure(in test_value int) begin if test_value > 0 then if test_value > 100 then select 'Very High'; else select 'High'; end if; else select 'Low or Negative'; end if; end;", + output: "create procedure NestedIfProcedure (in test_value int) begin if test_value > 0 then if test_value > 100 then select 'Very High' from dual; else select 'High' from dual; end if; else select 'Low or Negative' from dual; end if; end;", }, { input: "create procedure MultipleDeclareProcedure(in val1 int, in val2 int) begin declare sum_result int; declare diff_result int; set sum_result = val1 + val2; set diff_result = val1 - val2; select sum_result as Sum, diff_result as Difference; end;", output: "create procedure MultipleDeclareProcedure (in val1 int, in val2 int) begin declare sum_result int; declare diff_result int; set sum_result = val1 + val2; set diff_result = val1 - val2; select sum_result as `Sum`, diff_result as Difference from dual; end;", }, { - input: "create procedure ErrorHandlingProcedure(in value int) begin declare exit handler for sqlexception begin select 'An error occurred'; end; if value < 0 then signal sqlstate '45000' set message_text = 'Negative values not allowed'; else select 'Valid value'; end if; end;", - output: "create procedure ErrorHandlingProcedure (in value int) begin declare exit handler for sqlexception begin select 'An error occurred' from dual; end; if value < 0 then signal sqlstate '45000' set message_text = 'Negative values not allowed'; else select 'Valid value' from dual; end if; end;", + input: "create procedure ErrorHandlingProcedure(in test_value int) begin declare exit handler for sqlexception begin select 'An error occurred'; end; if test_value < 0 then signal sqlstate '45000' set message_text = 'Negative values not allowed'; else select 'Valid value'; end if; end;", + output: "create procedure ErrorHandlingProcedure (in test_value int) begin declare exit handler for sqlexception begin select 'An error occurred' from dual; end; if test_value < 0 then signal sqlstate '45000' set message_text = 'Negative values not allowed'; else select 'Valid value' from dual; end if; end;", }, { input: "create procedure HandlerWithSQLEXCEPTION() begin declare undo handler for sqlexception begin select 'SQL Exception occurred'; end; insert into non_existing_table values (1); end;", output: "create procedure HandlerWithSQLEXCEPTION () begin declare undo handler for sqlexception begin select 'SQL Exception occurred' from dual; end; insert into non_existing_table values (1); end;", @@ -2206,6 +2226,8 @@ var ( }, { input: "create procedure ConditionWithSignalAndHandler() begin declare custom_error condition for sqlstate '45000'; declare exit handler for custom_error begin select 'Handled with custom condition and signal'; end; signal sqlstate '45000' set message_text = 'Custom signal triggered'; end;", output: "create procedure ConditionWithSignalAndHandler () begin declare custom_error condition for sqlstate '45000'; declare exit handler for custom_error begin select 'Handled with custom condition and signal' from dual; end; signal sqlstate '45000' set message_text = 'Custom signal triggered'; end;", + }, { + input: "create procedure t1 (in x BIGINT) begin start transaction; insert into unsharded_a values (1, 'a', 'a'); commit; end;", }, { input: "create /*vt+ strategy=online */ or replace view v as select a, b, c from t", }, { @@ -2563,6 +2585,10 @@ var ( input: "alter vitess_migration '9748c3b7_7fdb_11eb_ac2c_f875a4d24e90' complete", }, { input: "alter vitess_migration complete all", + }, { + input: "alter vitess_migration '9748c3b7_7fdb_11eb_ac2c_f875a4d24e90' postpone complete", + }, { + input: "alter vitess_migration postpone complete all", }, { input: "alter vitess_migration '9748c3b7_7fdb_11eb_ac2c_f875a4d24e90' cancel", }, { @@ -2883,8 +2909,7 @@ var ( input: "begin;", output: "begin", }, { - input: "start transaction", - output: "begin", + input: "start transaction", }, { input: "start transaction with consistent snapshot", }, { diff --git a/go/vt/sqlparser/parser.go b/go/vt/sqlparser/parser.go index 0fe43db947a..7c1d00416f3 100644 --- a/go/vt/sqlparser/parser.go +++ b/go/vt/sqlparser/parser.go @@ -242,6 +242,38 @@ func (p *Parser) SplitStatement(blob string) (string, string, error) { return blob, "", nil } +var validCreatePrefixes = [][]int{ + // These are the tokens (in order) for valid "create procedure" forms. + {CREATE, PROCEDURE}, + {CREATE, DEFINER, '=', CURRENT_USER, PROCEDURE}, + {CREATE, DEFINER, '=', CURRENT_USER, '(', ')', PROCEDURE}, + {CREATE, DEFINER, '=', STRING, PROCEDURE}, + {CREATE, DEFINER, '=', STRING, AT_ID, PROCEDURE}, + {CREATE, DEFINER, '=', ID, PROCEDURE}, + {CREATE, DEFINER, '=', ID, AT_ID, PROCEDURE}, +} + +// matchesCreateProcedurePrefix checks if the given token sequence +// is a create procedure statement or not. +func matchesCreateProcedurePrefix(tokens []int) bool { + // Check each candidate sequence. + for _, pattern := range validCreatePrefixes { + if len(tokens) >= len(pattern) { + match := true + for i, tok := range pattern { + if tokens[i] != tok { + match = false + break + } + } + if match { + return true + } + } + } + return false +} + // SplitStatementToPieces splits raw sql statement that may have multi sql pieces to sql pieces // returns the sql pieces blob contains; or error if sql cannot be parsed. func (p *Parser) SplitStatementToPieces(blob string) (pieces []string, err error) { @@ -263,27 +295,25 @@ func (p *Parser) SplitStatementToPieces(blob string) (pieces []string, err error var stmt string stmtBegin := 0 emptyStatement := true - var prevToken int - var isCreateProcedureStatement bool + var startTokens []int // holds the first tokens of the current statement + loop: for { tkn, _ = tokenizer.Scan() switch tkn { case ';': + // Potential end of the statement. stmt = blob[stmtBegin : tokenizer.Pos-1] - // We now try to parse the statement to see if its complete. - // If it is a create procedure, then it might not be complete, and we - // would need to scan to the next ; - if isCreateProcedureStatement && p.IsStatementIncomplete(stmt) { + // If it's a create procedure statement and is incomplete, skip appending. + if matchesCreateProcedurePrefix(startTokens) && p.IsStatementIncomplete(stmt) { continue } if !emptyStatement { pieces = append(pieces, stmt) // We can now reset the variables for the next statement. - // It starts off as an empty statement and we don't know if it is - // a create procedure statement yet. + // It starts off as an empty statement. emptyStatement = true - isCreateProcedureStatement = false + startTokens = startTokens[:0] // clear token slice } stmtBegin = tokenizer.Pos case 0, eofChar: @@ -296,16 +326,15 @@ loop: } break loop case COMMENT: - // We want to ignore comments and not store them in the prevToken for knowing - // if the current statement is a create procedure statement. + // Skip comments entirely without altering the token list. continue - case PROCEDURE: - if prevToken == CREATE { - isCreateProcedureStatement = true - } - fallthrough default: - prevToken = tkn + // If we're at the very start of a statement, or we haven't filled out enough tokens + // for our valid prefix match (assuming our longest valid sequence is 10 tokens), + // accumulate the token. + if len(startTokens) < 10 { + startTokens = append(startTokens, tkn) + } emptyStatement = false } } diff --git a/go/vt/sqlparser/parser_test.go b/go/vt/sqlparser/parser_test.go index 107bb5ae34c..3e86b10ba0e 100644 --- a/go/vt/sqlparser/parser_test.go +++ b/go/vt/sqlparser/parser_test.go @@ -137,12 +137,35 @@ func TestSplitStatementToPieces(t *testing.T) { // Test that we don't split on semicolons inside create procedure calls. input: "select * from t1;create procedure p1 (in country CHAR(3), out cities INT) begin select count(*) from x where d = e; end;select * from t2", lenWanted: 3, + }, { + // Create procedure with comments. + input: "select * from t1; /* comment1 */ create /* comment2 */ procedure /* comment3 */ p1 (in country CHAR(3), out cities INT) begin select count(*) from x where d = e; end;select * from t2", + lenWanted: 3, + }, { + // Create procedure with definer current_user. + input: "create DEFINER=CURRENT_USER procedure p1 (in country CHAR(3)) begin declare abc DECIMAL(14,2); DECLARE def DECIMAL(14,2); end", + lenWanted: 1, + }, { + // Create procedure with definer current_user(). + input: "create DEFINER=CURRENT_USER() procedure p1 (in country CHAR(3)) begin declare abc DECIMAL(14,2); DECLARE def DECIMAL(14,2); end", + lenWanted: 1, + }, { + // Create procedure with definer string. + input: "create DEFINER='root' procedure p1 (in country CHAR(3)) begin declare abc DECIMAL(14,2); DECLARE def DECIMAL(14,2); end", + lenWanted: 1, + }, { + // Create procedure with definer string at_id. + input: "create DEFINER='root'@localhost procedure p1 (in country CHAR(3)) begin declare abc DECIMAL(14,2); DECLARE def DECIMAL(14,2); end", + lenWanted: 1, + }, { + // Create procedure with definer id. + input: "create DEFINER=`root` procedure p1 (in country CHAR(3)) begin declare abc DECIMAL(14,2); DECLARE def DECIMAL(14,2); end", + lenWanted: 1, + }, { + // Create procedure with definer id at_id. + input: "create DEFINER=`root`@`localhost` procedure p1 (in country CHAR(3)) begin declare abc DECIMAL(14,2); DECLARE def DECIMAL(14,2); end", + lenWanted: 1, }, - { - // Create procedure with comments. - input: "select * from t1; /* comment1 */ create /* comment2 */ procedure /* comment3 */ p1 (in country CHAR(3), out cities INT) begin select count(*) from x where d = e; end;select * from t2", - lenWanted: 3, - }, } parser := NewTestParser() diff --git a/go/vt/sqlparser/precedence.go b/go/vt/sqlparser/precedence.go index 1b5576f65b1..785c0f59391 100644 --- a/go/vt/sqlparser/precedence.go +++ b/go/vt/sqlparser/precedence.go @@ -56,9 +56,7 @@ func precedenceFor(in Expr) Precendence { return P13 case *BetweenExpr: return P12 - case *ComparisonExpr: - return P11 - case *IsExpr: + case *ComparisonExpr, *IsExpr, *MemberOfExpr: return P11 case *BinaryExpr: switch node.Operator { diff --git a/go/vt/sqlparser/precedence_test.go b/go/vt/sqlparser/precedence_test.go index d031a65d733..8631cff7d70 100644 --- a/go/vt/sqlparser/precedence_test.go +++ b/go/vt/sqlparser/precedence_test.go @@ -21,6 +21,8 @@ import ( "testing" "time" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) @@ -161,6 +163,11 @@ func TestParens(t *testing.T) { {in: "(~ (1||0)) IS NULL", expected: "~(1 or 0) is null"}, {in: "1 not like ('a' is null)", expected: "1 not like ('a' is null)"}, {in: ":vtg1 not like (:vtg2 is null)", expected: ":vtg1 not like (:vtg2 is null)"}, + {in: "a and b member of (c)", expected: "a and b member of (c)"}, + { + in: "foo is null and (bar = true or cast('1448364' as unsigned) member of (baz))", + expected: "foo is null and (bar = true or cast('1448364' as unsigned) member of (baz))", + }, } parser := NewTestParser() @@ -196,3 +203,25 @@ func TestRandom(t *testing.T) { require.Equal(t, outputOfParseResult, inputQ) } } + +func TestPrecedenceOfMemberOfWithAndWithoutParser(t *testing.T) { + // This test was used to expose the difference in precedence between the parser and the ast formatter + expression := "a and b member of (c)" + + // hand coded ast with the expected precedence + ast1 := &AndExpr{ + Left: NewColName("a"), + Right: &MemberOfExpr{ + Value: NewColName("b"), + JSONArr: NewColName("c"), + }, + } + + assert.Equal(t, expression, String(ast1)) + + // Now let's try it through the parser + ast2, err := NewTestParser().ParseExpr(expression) + require.NoError(t, err) + + assert.Equal(t, expression, String(ast2)) +} diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index 38c2b7e8527..405f46820df 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -42,173 +42,173 @@ func markBindVariable(yylex yyLexer, bvar string) { yylex.(*Tokenizer).BindVars[bvar] = struct{}{} } -const MEMBER = 57346 -const MULTIPLE_TEXT_LITERAL = 57347 -const FUNCTION_CALL_NON_KEYWORD = 57348 -const STRING_TYPE_PREFIX_NON_KEYWORD = 57349 -const ANY_SOME = 57350 -const SELECT_OPTIONS = 57351 -const LEX_ERROR = 57352 -const UNION = 57353 -const SELECT = 57354 -const STREAM = 57355 -const VSTREAM = 57356 -const INSERT = 57357 -const UPDATE = 57358 -const DELETE = 57359 -const FROM = 57360 -const WHERE = 57361 -const GROUP = 57362 -const HAVING = 57363 -const ORDER = 57364 -const BY = 57365 -const LIMIT = 57366 -const OFFSET = 57367 -const FOR = 57368 -const DISTINCT = 57369 -const AS = 57370 -const EXISTS = 57371 -const ASC = 57372 -const DESC = 57373 -const INTO = 57374 -const DUPLICATE = 57375 -const DEFAULT = 57376 -const SET = 57377 -const LOCK = 57378 -const UNLOCK = 57379 -const KEYS = 57380 -const DO = 57381 -const CALL = 57382 -const ALL = 57383 -const ANY = 57384 -const SOME = 57385 -const DISTINCTROW = 57386 -const PARSER = 57387 -const GENERATED = 57388 -const ALWAYS = 57389 -const OUTFILE = 57390 -const S3 = 57391 -const DATA = 57392 -const LOAD = 57393 -const LINES = 57394 -const TERMINATED = 57395 -const ESCAPED = 57396 -const ENCLOSED = 57397 -const DUMPFILE = 57398 -const CSV = 57399 -const HEADER = 57400 -const MANIFEST = 57401 -const OVERWRITE = 57402 -const STARTING = 57403 -const OPTIONALLY = 57404 -const VALUES = 57405 -const LAST_INSERT_ID = 57406 -const NEXT = 57407 -const VALUE = 57408 -const SHARE = 57409 -const MODE = 57410 -const SQL_NO_CACHE = 57411 -const SQL_CACHE = 57412 -const SQL_CALC_FOUND_ROWS = 57413 -const SQL_SMALL_RESULT = 57414 -const SQL_BIG_RESULT = 57415 -const HIGH_PRIORITY = 57416 -const JOIN = 57417 -const STRAIGHT_JOIN = 57418 -const LEFT = 57419 -const RIGHT = 57420 -const INNER = 57421 -const OUTER = 57422 -const CROSS = 57423 -const NATURAL = 57424 -const USE = 57425 -const FORCE = 57426 -const ON = 57427 -const USING = 57428 -const INPLACE = 57429 -const COPY = 57430 -const INSTANT = 57431 -const ALGORITHM = 57432 -const NONE = 57433 -const SHARED = 57434 -const EXCLUSIVE = 57435 -const SUBQUERY_AS_EXPR = 57436 -const STRING = 57437 -const SQL_BUFFER_RESULT = 57438 -const ID = 57439 -const AT_ID = 57440 -const AT_AT_ID = 57441 -const HEX = 57442 -const NCHAR_STRING = 57443 -const INTEGRAL = 57444 -const FLOAT = 57445 -const DECIMAL = 57446 -const HEXNUM = 57447 -const COMMENT = 57448 -const COMMENT_KEYWORD = 57449 -const BITNUM = 57450 -const BIT_LITERAL = 57451 -const COMPRESSION = 57452 -const VALUE_ARG = 57453 -const LIST_ARG = 57454 -const OFFSET_ARG = 57455 -const JSON_PRETTY = 57456 -const JSON_STORAGE_SIZE = 57457 -const JSON_STORAGE_FREE = 57458 -const JSON_CONTAINS = 57459 -const JSON_CONTAINS_PATH = 57460 -const JSON_EXTRACT = 57461 -const JSON_KEYS = 57462 -const JSON_OVERLAPS = 57463 -const JSON_SEARCH = 57464 -const JSON_VALUE = 57465 -const JSON_ARRAYAGG = 57466 -const JSON_OBJECTAGG = 57467 -const EXTRACT = 57468 -const NULL = 57469 -const UNKNOWN = 57470 -const TRUE = 57471 -const FALSE = 57472 -const OFF = 57473 -const DISCARD = 57474 -const IMPORT = 57475 -const ENABLE = 57476 -const DISABLE = 57477 -const TABLESPACE = 57478 -const VIRTUAL = 57479 -const STORED = 57480 -const BOTH = 57481 -const LEADING = 57482 -const TRAILING = 57483 -const KILL = 57484 -const TRACE = 57485 -const EMPTY_FROM_CLAUSE = 57486 -const LOWER_THAN_CHARSET = 57487 -const CHARSET = 57488 -const UNIQUE = 57489 -const KEY = 57490 -const EXPRESSION_PREC_SETTER = 57491 -const OR = 57492 -const XOR = 57493 -const AND = 57494 -const NOT = 57495 -const BETWEEN = 57496 -const CASE = 57497 -const WHEN = 57498 -const THEN = 57499 -const ELSE = 57500 -const ELSEIF = 57501 -const END = 57502 -const LE = 57503 -const GE = 57504 -const NE = 57505 -const NULL_SAFE_EQUAL = 57506 -const IS = 57507 -const LIKE = 57508 -const REGEXP = 57509 -const RLIKE = 57510 -const IN = 57511 -const ASSIGNMENT_OPT = 57512 +const MULTIPLE_TEXT_LITERAL = 57346 +const FUNCTION_CALL_NON_KEYWORD = 57347 +const STRING_TYPE_PREFIX_NON_KEYWORD = 57348 +const ANY_SOME = 57349 +const SELECT_OPTIONS = 57350 +const LEX_ERROR = 57351 +const UNION = 57352 +const SELECT = 57353 +const STREAM = 57354 +const VSTREAM = 57355 +const INSERT = 57356 +const UPDATE = 57357 +const DELETE = 57358 +const FROM = 57359 +const WHERE = 57360 +const GROUP = 57361 +const HAVING = 57362 +const ORDER = 57363 +const BY = 57364 +const LIMIT = 57365 +const OFFSET = 57366 +const FOR = 57367 +const DISTINCT = 57368 +const AS = 57369 +const EXISTS = 57370 +const ASC = 57371 +const DESC = 57372 +const INTO = 57373 +const DUPLICATE = 57374 +const DEFAULT = 57375 +const SET = 57376 +const LOCK = 57377 +const UNLOCK = 57378 +const KEYS = 57379 +const DO = 57380 +const CALL = 57381 +const ALL = 57382 +const ANY = 57383 +const SOME = 57384 +const DISTINCTROW = 57385 +const PARSER = 57386 +const GENERATED = 57387 +const ALWAYS = 57388 +const OUTFILE = 57389 +const S3 = 57390 +const DATA = 57391 +const LOAD = 57392 +const LINES = 57393 +const TERMINATED = 57394 +const ESCAPED = 57395 +const ENCLOSED = 57396 +const DUMPFILE = 57397 +const CSV = 57398 +const HEADER = 57399 +const MANIFEST = 57400 +const OVERWRITE = 57401 +const STARTING = 57402 +const OPTIONALLY = 57403 +const VALUES = 57404 +const LAST_INSERT_ID = 57405 +const NEXT = 57406 +const VALUE = 57407 +const SHARE = 57408 +const MODE = 57409 +const SQL_NO_CACHE = 57410 +const SQL_CACHE = 57411 +const SQL_CALC_FOUND_ROWS = 57412 +const SQL_SMALL_RESULT = 57413 +const SQL_BIG_RESULT = 57414 +const HIGH_PRIORITY = 57415 +const JOIN = 57416 +const STRAIGHT_JOIN = 57417 +const LEFT = 57418 +const RIGHT = 57419 +const INNER = 57420 +const OUTER = 57421 +const CROSS = 57422 +const NATURAL = 57423 +const USE = 57424 +const FORCE = 57425 +const ON = 57426 +const USING = 57427 +const INPLACE = 57428 +const COPY = 57429 +const INSTANT = 57430 +const ALGORITHM = 57431 +const NONE = 57432 +const SHARED = 57433 +const EXCLUSIVE = 57434 +const SUBQUERY_AS_EXPR = 57435 +const STRING = 57436 +const SQL_BUFFER_RESULT = 57437 +const ID = 57438 +const AT_ID = 57439 +const AT_AT_ID = 57440 +const HEX = 57441 +const NCHAR_STRING = 57442 +const INTEGRAL = 57443 +const FLOAT = 57444 +const DECIMAL = 57445 +const HEXNUM = 57446 +const COMMENT = 57447 +const COMMENT_KEYWORD = 57448 +const BITNUM = 57449 +const BIT_LITERAL = 57450 +const COMPRESSION = 57451 +const VALUE_ARG = 57452 +const LIST_ARG = 57453 +const OFFSET_ARG = 57454 +const JSON_PRETTY = 57455 +const JSON_STORAGE_SIZE = 57456 +const JSON_STORAGE_FREE = 57457 +const JSON_CONTAINS = 57458 +const JSON_CONTAINS_PATH = 57459 +const JSON_EXTRACT = 57460 +const JSON_KEYS = 57461 +const JSON_OVERLAPS = 57462 +const JSON_SEARCH = 57463 +const JSON_VALUE = 57464 +const JSON_ARRAYAGG = 57465 +const JSON_OBJECTAGG = 57466 +const EXTRACT = 57467 +const NULL = 57468 +const UNKNOWN = 57469 +const TRUE = 57470 +const FALSE = 57471 +const OFF = 57472 +const DISCARD = 57473 +const IMPORT = 57474 +const ENABLE = 57475 +const DISABLE = 57476 +const TABLESPACE = 57477 +const VIRTUAL = 57478 +const STORED = 57479 +const BOTH = 57480 +const LEADING = 57481 +const TRAILING = 57482 +const KILL = 57483 +const TRACE = 57484 +const EMPTY_FROM_CLAUSE = 57485 +const LOWER_THAN_CHARSET = 57486 +const CHARSET = 57487 +const UNIQUE = 57488 +const KEY = 57489 +const EXPRESSION_PREC_SETTER = 57490 +const OR = 57491 +const XOR = 57492 +const AND = 57493 +const NOT = 57494 +const BETWEEN = 57495 +const CASE = 57496 +const WHEN = 57497 +const THEN = 57498 +const ELSE = 57499 +const ELSEIF = 57500 +const END = 57501 +const LE = 57502 +const GE = 57503 +const NE = 57504 +const NULL_SAFE_EQUAL = 57505 +const IS = 57506 +const LIKE = 57507 +const REGEXP = 57508 +const RLIKE = 57509 +const IN = 57510 +const ASSIGNMENT_OPT = 57511 +const MEMBER = 57512 const SHIFT_LEFT = 57513 const SHIFT_RIGHT = 57514 const DIV = 57515 @@ -362,458 +362,458 @@ const FORCE_CUTOVER = 57662 const CUTOVER_THRESHOLD = 57663 const EXPIRE = 57664 const RATIO = 57665 -const VITESS_THROTTLER = 57666 -const BEGIN = 57667 -const START = 57668 -const TRANSACTION = 57669 -const COMMIT = 57670 -const ROLLBACK = 57671 -const SAVEPOINT = 57672 -const RELEASE = 57673 -const WORK = 57674 -const CONSISTENT = 57675 -const SNAPSHOT = 57676 -const UNRESOLVED = 57677 -const TRANSACTIONS = 57678 -const BIT = 57679 -const TINYINT = 57680 -const SMALLINT = 57681 -const MEDIUMINT = 57682 -const INT = 57683 -const INTEGER = 57684 -const BIGINT = 57685 -const INTNUM = 57686 -const REAL = 57687 -const DOUBLE = 57688 -const FLOAT_TYPE = 57689 -const FLOAT4_TYPE = 57690 -const FLOAT8_TYPE = 57691 -const DECIMAL_TYPE = 57692 -const NUMERIC = 57693 -const TIME = 57694 -const TIMESTAMP = 57695 -const DATETIME = 57696 -const YEAR = 57697 -const CHAR = 57698 -const VARCHAR = 57699 -const BOOL = 57700 -const CHARACTER = 57701 -const VARBINARY = 57702 -const NCHAR = 57703 -const TEXT = 57704 -const TINYTEXT = 57705 -const MEDIUMTEXT = 57706 -const LONGTEXT = 57707 -const BLOB = 57708 -const TINYBLOB = 57709 -const MEDIUMBLOB = 57710 -const LONGBLOB = 57711 -const JSON = 57712 -const JSON_SCHEMA_VALID = 57713 -const JSON_SCHEMA_VALIDATION_REPORT = 57714 -const ENUM = 57715 -const GEOMETRY = 57716 -const POINT = 57717 -const LINESTRING = 57718 -const POLYGON = 57719 -const GEOMCOLLECTION = 57720 -const GEOMETRYCOLLECTION = 57721 -const MULTIPOINT = 57722 -const MULTILINESTRING = 57723 -const MULTIPOLYGON = 57724 -const ASCII = 57725 -const UNICODE = 57726 -const VECTOR = 57727 -const NULLX = 57728 -const AUTO_INCREMENT = 57729 -const APPROXNUM = 57730 -const SIGNED = 57731 -const UNSIGNED = 57732 -const ZEROFILL = 57733 -const PURGE = 57734 -const BEFORE = 57735 -const CODE = 57736 -const COLLATION = 57737 -const COLUMNS = 57738 -const DATABASES = 57739 -const ENGINES = 57740 -const EVENT = 57741 -const EXTENDED = 57742 -const FIELDS = 57743 -const FULL = 57744 -const FUNCTION = 57745 -const GTID_EXECUTED = 57746 -const KEYSPACES = 57747 -const OPEN = 57748 -const PLUGINS = 57749 -const PRIVILEGES = 57750 -const PROCESSLIST = 57751 -const SCHEMAS = 57752 -const TABLES = 57753 -const TRIGGERS = 57754 -const USER = 57755 -const VGTID_EXECUTED = 57756 -const VITESS_KEYSPACES = 57757 -const VITESS_METADATA = 57758 -const VITESS_MIGRATIONS = 57759 -const VITESS_REPLICATION_STATUS = 57760 -const VITESS_SHARDS = 57761 -const VITESS_TABLETS = 57762 -const VITESS_TARGET = 57763 -const VSCHEMA = 57764 -const VITESS_THROTTLED_APPS = 57765 -const NAMES = 57766 -const GLOBAL = 57767 -const SESSION = 57768 -const ISOLATION = 57769 -const LEVEL = 57770 -const READ = 57771 -const WRITE = 57772 -const ONLY = 57773 -const REPEATABLE = 57774 -const COMMITTED = 57775 -const UNCOMMITTED = 57776 -const SERIALIZABLE = 57777 -const CLASS_ORIGIN = 57778 -const SUBCLASS_ORIGIN = 57779 -const MESSAGE_TEXT = 57780 -const MYSQL_ERRNO = 57781 -const CONSTRAINT_CATALOG = 57782 -const CONSTRAINT_SCHEMA = 57783 -const CONSTRAINT_NAME = 57784 -const CATALOG_NAME = 57785 -const SCHEMA_NAME = 57786 -const TABLE_NAME = 57787 -const COLUMN_NAME = 57788 -const CURSOR_NAME = 57789 -const ADDDATE = 57790 -const CURRENT_TIMESTAMP = 57791 -const DATABASE = 57792 -const CURRENT_DATE = 57793 -const CURDATE = 57794 -const DATE_ADD = 57795 -const DATE_SUB = 57796 -const NOW = 57797 -const SUBDATE = 57798 -const CURTIME = 57799 -const CURRENT_TIME = 57800 -const LOCALTIME = 57801 -const LOCALTIMESTAMP = 57802 -const CURRENT_USER = 57803 -const UTC_DATE = 57804 -const UTC_TIME = 57805 -const UTC_TIMESTAMP = 57806 -const SYSDATE = 57807 -const DAY = 57808 -const DAY_HOUR = 57809 -const DAY_MICROSECOND = 57810 -const DAY_MINUTE = 57811 -const DAY_SECOND = 57812 -const HOUR = 57813 -const HOUR_MICROSECOND = 57814 -const HOUR_MINUTE = 57815 -const HOUR_SECOND = 57816 -const MICROSECOND = 57817 -const MINUTE = 57818 -const MINUTE_MICROSECOND = 57819 -const MINUTE_SECOND = 57820 -const MONTH = 57821 -const QUARTER = 57822 -const SECOND = 57823 -const SECOND_MICROSECOND = 57824 -const YEAR_MONTH = 57825 -const WEEK = 57826 -const SQL_TSI_DAY = 57827 -const SQL_TSI_WEEK = 57828 -const SQL_TSI_HOUR = 57829 -const SQL_TSI_MINUTE = 57830 -const SQL_TSI_MONTH = 57831 -const SQL_TSI_QUARTER = 57832 -const SQL_TSI_SECOND = 57833 -const SQL_TSI_MICROSECOND = 57834 -const SQL_TSI_YEAR = 57835 -const REPLACE = 57836 -const CONVERT = 57837 -const CAST = 57838 -const SUBSTR = 57839 -const SUBSTRING = 57840 -const MID = 57841 -const SEPARATOR = 57842 -const TIMESTAMPADD = 57843 -const TIMESTAMPDIFF = 57844 -const WEIGHT_STRING = 57845 -const LTRIM = 57846 -const RTRIM = 57847 -const TRIM = 57848 -const JSON_ARRAY = 57849 -const JSON_OBJECT = 57850 -const JSON_QUOTE = 57851 -const JSON_DEPTH = 57852 -const JSON_TYPE = 57853 -const JSON_LENGTH = 57854 -const JSON_VALID = 57855 -const JSON_ARRAY_APPEND = 57856 -const JSON_ARRAY_INSERT = 57857 -const JSON_INSERT = 57858 -const JSON_MERGE = 57859 -const JSON_MERGE_PATCH = 57860 -const JSON_MERGE_PRESERVE = 57861 -const JSON_REMOVE = 57862 -const JSON_REPLACE = 57863 -const JSON_SET = 57864 -const JSON_UNQUOTE = 57865 -const COUNT = 57866 -const AVG = 57867 -const MAX = 57868 -const MIN = 57869 -const SUM = 57870 -const GROUP_CONCAT = 57871 -const BIT_AND = 57872 -const BIT_OR = 57873 -const BIT_XOR = 57874 -const STD = 57875 -const STDDEV = 57876 -const STDDEV_POP = 57877 -const STDDEV_SAMP = 57878 -const VAR_POP = 57879 -const VAR_SAMP = 57880 -const VARIANCE = 57881 -const ANY_VALUE = 57882 -const REGEXP_INSTR = 57883 -const REGEXP_LIKE = 57884 -const REGEXP_REPLACE = 57885 -const REGEXP_SUBSTR = 57886 -const ExtractValue = 57887 -const UpdateXML = 57888 -const GET_LOCK = 57889 -const RELEASE_LOCK = 57890 -const RELEASE_ALL_LOCKS = 57891 -const IS_FREE_LOCK = 57892 -const IS_USED_LOCK = 57893 -const LOCATE = 57894 -const POSITION = 57895 -const ST_GeometryCollectionFromText = 57896 -const ST_GeometryFromText = 57897 -const ST_LineStringFromText = 57898 -const ST_MultiLineStringFromText = 57899 -const ST_MultiPointFromText = 57900 -const ST_MultiPolygonFromText = 57901 -const ST_PointFromText = 57902 -const ST_PolygonFromText = 57903 -const ST_GeometryCollectionFromWKB = 57904 -const ST_GeometryFromWKB = 57905 -const ST_LineStringFromWKB = 57906 -const ST_MultiLineStringFromWKB = 57907 -const ST_MultiPointFromWKB = 57908 -const ST_MultiPolygonFromWKB = 57909 -const ST_PointFromWKB = 57910 -const ST_PolygonFromWKB = 57911 -const ST_AsBinary = 57912 -const ST_AsText = 57913 -const ST_Dimension = 57914 -const ST_Envelope = 57915 -const ST_IsSimple = 57916 -const ST_IsEmpty = 57917 -const ST_GeometryType = 57918 -const ST_X = 57919 -const ST_Y = 57920 -const ST_Latitude = 57921 -const ST_Longitude = 57922 -const ST_EndPoint = 57923 -const ST_IsClosed = 57924 -const ST_Length = 57925 -const ST_NumPoints = 57926 -const ST_StartPoint = 57927 -const ST_PointN = 57928 -const ST_Area = 57929 -const ST_Centroid = 57930 -const ST_ExteriorRing = 57931 -const ST_InteriorRingN = 57932 -const ST_NumInteriorRings = 57933 -const ST_NumGeometries = 57934 -const ST_GeometryN = 57935 -const ST_LongFromGeoHash = 57936 -const ST_PointFromGeoHash = 57937 -const ST_LatFromGeoHash = 57938 -const ST_GeoHash = 57939 -const ST_AsGeoJSON = 57940 -const ST_GeomFromGeoJSON = 57941 -const MATCH = 57942 -const AGAINST = 57943 -const BOOLEAN = 57944 -const LANGUAGE = 57945 -const WITH = 57946 -const QUERY = 57947 -const EXPANSION = 57948 -const WITHOUT = 57949 -const VALIDATION = 57950 -const ROLLUP = 57951 -const UNUSED = 57952 -const ARRAY = 57953 -const BYTE = 57954 -const CUME_DIST = 57955 -const DESCRIPTION = 57956 -const DENSE_RANK = 57957 -const EMPTY = 57958 -const EXCEPT = 57959 -const FIRST_VALUE = 57960 -const GROUPING = 57961 -const GROUPS = 57962 -const JSON_TABLE = 57963 -const LAG = 57964 -const LAST_VALUE = 57965 -const LATERAL = 57966 -const LEAD = 57967 -const NTH_VALUE = 57968 -const NTILE = 57969 -const OF = 57970 -const OVER = 57971 -const PERCENT_RANK = 57972 -const RANK = 57973 -const RECURSIVE = 57974 -const ROW_NUMBER = 57975 -const SYSTEM = 57976 -const WINDOW = 57977 -const ACTIVE = 57978 -const ADMIN = 57979 -const AUTOEXTEND_SIZE = 57980 -const BUCKETS = 57981 -const CLONE = 57982 -const COLUMN_FORMAT = 57983 -const COMPONENT = 57984 -const DEFINITION = 57985 -const ENFORCED = 57986 -const ENGINE_ATTRIBUTE = 57987 -const EXCLUDE = 57988 -const FOLLOWING = 57989 -const GET_MASTER_PUBLIC_KEY = 57990 -const GET_SOURCE_PUBLIC_KEY = 57991 -const HISTOGRAM = 57992 -const HISTORY = 57993 -const INACTIVE = 57994 -const INVISIBLE = 57995 -const LOCKED = 57996 -const MASTER_COMPRESSION_ALGORITHMS = 57997 -const MASTER_PUBLIC_KEY_PATH = 57998 -const MASTER_TLS_CIPHERSUITES = 57999 -const MASTER_ZSTD_COMPRESSION_LEVEL = 58000 -const NESTED = 58001 -const NETWORK_NAMESPACE = 58002 -const NOWAIT = 58003 -const NULLS = 58004 -const OJ = 58005 -const OLD = 58006 -const OPTIONAL = 58007 -const ORDINALITY = 58008 -const ORGANIZATION = 58009 -const OTHERS = 58010 -const PARTIAL = 58011 -const PATH = 58012 -const PERSIST = 58013 -const PERSIST_ONLY = 58014 -const PRECEDING = 58015 -const PRIVILEGE_CHECKS_USER = 58016 -const PROCESS = 58017 -const RANDOM = 58018 -const REFERENCE = 58019 -const REQUIRE_ROW_FORMAT = 58020 -const RESOURCE = 58021 -const RESPECT = 58022 -const RESTART = 58023 -const RETAIN = 58024 -const REUSE = 58025 -const ROLE = 58026 -const SECONDARY = 58027 -const SECONDARY_ENGINE = 58028 -const SECONDARY_ENGINE_ATTRIBUTE = 58029 -const SECONDARY_LOAD = 58030 -const SECONDARY_UNLOAD = 58031 -const SIMPLE = 58032 -const SKIP = 58033 -const SOURCE_COMPRESSION_ALGORITHMS = 58034 -const SOURCE_PUBLIC_KEY_PATH = 58035 -const SOURCE_TLS_CIPHERSUITES = 58036 -const SOURCE_ZSTD_COMPRESSION_LEVEL = 58037 -const SRID = 58038 -const THREAD_PRIORITY = 58039 -const TIES = 58040 -const UNBOUNDED = 58041 -const VCPU = 58042 -const VISIBLE = 58043 -const RETURNING = 58044 -const MANUAL = 58045 -const PARALLEL = 58046 -const QUALIFY = 58047 -const TABLESAMPLE = 58048 -const OUT = 58049 -const INOUT = 58050 -const FORMAT_BYTES = 58051 -const FORMAT_PICO_TIME = 58052 -const PS_CURRENT_THREAD_ID = 58053 -const PS_THREAD_ID = 58054 -const GTID_SUBSET = 58055 -const GTID_SUBTRACT = 58056 -const WAIT_FOR_EXECUTED_GTID_SET = 58057 -const WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS = 58058 -const FORMAT = 58059 -const TREE = 58060 -const VITESS = 58061 -const TRADITIONAL = 58062 -const VTEXPLAIN = 58063 -const VEXPLAIN = 58064 -const PLAN = 58065 -const LOCAL = 58066 -const LOW_PRIORITY = 58067 -const NO_WRITE_TO_BINLOG = 58068 -const LOGS = 58069 -const ERROR = 58070 -const GENERAL = 58071 -const HOSTS = 58072 -const OPTIMIZER_COSTS = 58073 -const USER_RESOURCES = 58074 -const SLOW = 58075 -const CHANNEL = 58076 -const RELAY = 58077 -const EXPORT = 58078 -const CURRENT = 58079 -const ROW = 58080 -const ROWS = 58081 -const AVG_ROW_LENGTH = 58082 -const CONNECTION = 58083 -const CHECKSUM = 58084 -const DELAY_KEY_WRITE = 58085 -const ENCRYPTION = 58086 -const ENGINE = 58087 -const INSERT_METHOD = 58088 -const MAX_ROWS = 58089 -const MIN_ROWS = 58090 -const PACK_KEYS = 58091 -const PASSWORD = 58092 -const FIXED = 58093 -const DYNAMIC = 58094 -const COMPRESSED = 58095 -const REDUNDANT = 58096 -const COMPACT = 58097 -const ROW_FORMAT = 58098 -const STATS_AUTO_RECALC = 58099 -const STATS_PERSISTENT = 58100 -const STATS_SAMPLE_PAGES = 58101 -const STORAGE = 58102 -const MEMORY = 58103 -const DISK = 58104 -const PARTITIONS = 58105 -const LINEAR = 58106 -const RANGE = 58107 -const LIST = 58108 -const SUBPARTITION = 58109 -const SUBPARTITIONS = 58110 -const HASH = 58111 +const POSTPONE = 57666 +const VITESS_THROTTLER = 57667 +const BEGIN = 57668 +const START = 57669 +const TRANSACTION = 57670 +const COMMIT = 57671 +const ROLLBACK = 57672 +const SAVEPOINT = 57673 +const RELEASE = 57674 +const WORK = 57675 +const CONSISTENT = 57676 +const SNAPSHOT = 57677 +const UNRESOLVED = 57678 +const TRANSACTIONS = 57679 +const BIT = 57680 +const TINYINT = 57681 +const SMALLINT = 57682 +const MEDIUMINT = 57683 +const INT = 57684 +const INTEGER = 57685 +const BIGINT = 57686 +const INTNUM = 57687 +const REAL = 57688 +const DOUBLE = 57689 +const FLOAT_TYPE = 57690 +const FLOAT4_TYPE = 57691 +const FLOAT8_TYPE = 57692 +const DECIMAL_TYPE = 57693 +const NUMERIC = 57694 +const TIME = 57695 +const TIMESTAMP = 57696 +const DATETIME = 57697 +const YEAR = 57698 +const CHAR = 57699 +const VARCHAR = 57700 +const BOOL = 57701 +const CHARACTER = 57702 +const VARBINARY = 57703 +const NCHAR = 57704 +const TEXT = 57705 +const TINYTEXT = 57706 +const MEDIUMTEXT = 57707 +const LONGTEXT = 57708 +const BLOB = 57709 +const TINYBLOB = 57710 +const MEDIUMBLOB = 57711 +const LONGBLOB = 57712 +const JSON = 57713 +const JSON_SCHEMA_VALID = 57714 +const JSON_SCHEMA_VALIDATION_REPORT = 57715 +const ENUM = 57716 +const GEOMETRY = 57717 +const POINT = 57718 +const LINESTRING = 57719 +const POLYGON = 57720 +const GEOMCOLLECTION = 57721 +const GEOMETRYCOLLECTION = 57722 +const MULTIPOINT = 57723 +const MULTILINESTRING = 57724 +const MULTIPOLYGON = 57725 +const ASCII = 57726 +const UNICODE = 57727 +const VECTOR = 57728 +const NULLX = 57729 +const AUTO_INCREMENT = 57730 +const APPROXNUM = 57731 +const SIGNED = 57732 +const UNSIGNED = 57733 +const ZEROFILL = 57734 +const PURGE = 57735 +const BEFORE = 57736 +const CODE = 57737 +const COLLATION = 57738 +const COLUMNS = 57739 +const DATABASES = 57740 +const ENGINES = 57741 +const EVENT = 57742 +const EXTENDED = 57743 +const FIELDS = 57744 +const FULL = 57745 +const FUNCTION = 57746 +const GTID_EXECUTED = 57747 +const KEYSPACES = 57748 +const OPEN = 57749 +const PLUGINS = 57750 +const PRIVILEGES = 57751 +const PROCESSLIST = 57752 +const SCHEMAS = 57753 +const TABLES = 57754 +const TRIGGERS = 57755 +const USER = 57756 +const VGTID_EXECUTED = 57757 +const VITESS_KEYSPACES = 57758 +const VITESS_METADATA = 57759 +const VITESS_MIGRATIONS = 57760 +const VITESS_REPLICATION_STATUS = 57761 +const VITESS_SHARDS = 57762 +const VITESS_TABLETS = 57763 +const VITESS_TARGET = 57764 +const VSCHEMA = 57765 +const VITESS_THROTTLED_APPS = 57766 +const NAMES = 57767 +const GLOBAL = 57768 +const SESSION = 57769 +const ISOLATION = 57770 +const LEVEL = 57771 +const READ = 57772 +const WRITE = 57773 +const ONLY = 57774 +const REPEATABLE = 57775 +const COMMITTED = 57776 +const UNCOMMITTED = 57777 +const SERIALIZABLE = 57778 +const CLASS_ORIGIN = 57779 +const SUBCLASS_ORIGIN = 57780 +const MESSAGE_TEXT = 57781 +const MYSQL_ERRNO = 57782 +const CONSTRAINT_CATALOG = 57783 +const CONSTRAINT_SCHEMA = 57784 +const CONSTRAINT_NAME = 57785 +const CATALOG_NAME = 57786 +const SCHEMA_NAME = 57787 +const TABLE_NAME = 57788 +const COLUMN_NAME = 57789 +const CURSOR_NAME = 57790 +const ADDDATE = 57791 +const CURRENT_TIMESTAMP = 57792 +const DATABASE = 57793 +const CURRENT_DATE = 57794 +const CURDATE = 57795 +const DATE_ADD = 57796 +const DATE_SUB = 57797 +const NOW = 57798 +const SUBDATE = 57799 +const CURTIME = 57800 +const CURRENT_TIME = 57801 +const LOCALTIME = 57802 +const LOCALTIMESTAMP = 57803 +const CURRENT_USER = 57804 +const UTC_DATE = 57805 +const UTC_TIME = 57806 +const UTC_TIMESTAMP = 57807 +const SYSDATE = 57808 +const DAY = 57809 +const DAY_HOUR = 57810 +const DAY_MICROSECOND = 57811 +const DAY_MINUTE = 57812 +const DAY_SECOND = 57813 +const HOUR = 57814 +const HOUR_MICROSECOND = 57815 +const HOUR_MINUTE = 57816 +const HOUR_SECOND = 57817 +const MICROSECOND = 57818 +const MINUTE = 57819 +const MINUTE_MICROSECOND = 57820 +const MINUTE_SECOND = 57821 +const MONTH = 57822 +const QUARTER = 57823 +const SECOND = 57824 +const SECOND_MICROSECOND = 57825 +const YEAR_MONTH = 57826 +const WEEK = 57827 +const SQL_TSI_DAY = 57828 +const SQL_TSI_WEEK = 57829 +const SQL_TSI_HOUR = 57830 +const SQL_TSI_MINUTE = 57831 +const SQL_TSI_MONTH = 57832 +const SQL_TSI_QUARTER = 57833 +const SQL_TSI_SECOND = 57834 +const SQL_TSI_MICROSECOND = 57835 +const SQL_TSI_YEAR = 57836 +const REPLACE = 57837 +const CONVERT = 57838 +const CAST = 57839 +const SUBSTR = 57840 +const SUBSTRING = 57841 +const MID = 57842 +const SEPARATOR = 57843 +const TIMESTAMPADD = 57844 +const TIMESTAMPDIFF = 57845 +const WEIGHT_STRING = 57846 +const LTRIM = 57847 +const RTRIM = 57848 +const TRIM = 57849 +const JSON_ARRAY = 57850 +const JSON_OBJECT = 57851 +const JSON_QUOTE = 57852 +const JSON_DEPTH = 57853 +const JSON_TYPE = 57854 +const JSON_LENGTH = 57855 +const JSON_VALID = 57856 +const JSON_ARRAY_APPEND = 57857 +const JSON_ARRAY_INSERT = 57858 +const JSON_INSERT = 57859 +const JSON_MERGE = 57860 +const JSON_MERGE_PATCH = 57861 +const JSON_MERGE_PRESERVE = 57862 +const JSON_REMOVE = 57863 +const JSON_REPLACE = 57864 +const JSON_SET = 57865 +const JSON_UNQUOTE = 57866 +const COUNT = 57867 +const AVG = 57868 +const MAX = 57869 +const MIN = 57870 +const SUM = 57871 +const GROUP_CONCAT = 57872 +const BIT_AND = 57873 +const BIT_OR = 57874 +const BIT_XOR = 57875 +const STD = 57876 +const STDDEV = 57877 +const STDDEV_POP = 57878 +const STDDEV_SAMP = 57879 +const VAR_POP = 57880 +const VAR_SAMP = 57881 +const VARIANCE = 57882 +const ANY_VALUE = 57883 +const REGEXP_INSTR = 57884 +const REGEXP_LIKE = 57885 +const REGEXP_REPLACE = 57886 +const REGEXP_SUBSTR = 57887 +const ExtractValue = 57888 +const UpdateXML = 57889 +const GET_LOCK = 57890 +const RELEASE_LOCK = 57891 +const RELEASE_ALL_LOCKS = 57892 +const IS_FREE_LOCK = 57893 +const IS_USED_LOCK = 57894 +const LOCATE = 57895 +const POSITION = 57896 +const ST_GeometryCollectionFromText = 57897 +const ST_GeometryFromText = 57898 +const ST_LineStringFromText = 57899 +const ST_MultiLineStringFromText = 57900 +const ST_MultiPointFromText = 57901 +const ST_MultiPolygonFromText = 57902 +const ST_PointFromText = 57903 +const ST_PolygonFromText = 57904 +const ST_GeometryCollectionFromWKB = 57905 +const ST_GeometryFromWKB = 57906 +const ST_LineStringFromWKB = 57907 +const ST_MultiLineStringFromWKB = 57908 +const ST_MultiPointFromWKB = 57909 +const ST_MultiPolygonFromWKB = 57910 +const ST_PointFromWKB = 57911 +const ST_PolygonFromWKB = 57912 +const ST_AsBinary = 57913 +const ST_AsText = 57914 +const ST_Dimension = 57915 +const ST_Envelope = 57916 +const ST_IsSimple = 57917 +const ST_IsEmpty = 57918 +const ST_GeometryType = 57919 +const ST_X = 57920 +const ST_Y = 57921 +const ST_Latitude = 57922 +const ST_Longitude = 57923 +const ST_EndPoint = 57924 +const ST_IsClosed = 57925 +const ST_Length = 57926 +const ST_NumPoints = 57927 +const ST_StartPoint = 57928 +const ST_PointN = 57929 +const ST_Area = 57930 +const ST_Centroid = 57931 +const ST_ExteriorRing = 57932 +const ST_InteriorRingN = 57933 +const ST_NumInteriorRings = 57934 +const ST_NumGeometries = 57935 +const ST_GeometryN = 57936 +const ST_LongFromGeoHash = 57937 +const ST_PointFromGeoHash = 57938 +const ST_LatFromGeoHash = 57939 +const ST_GeoHash = 57940 +const ST_AsGeoJSON = 57941 +const ST_GeomFromGeoJSON = 57942 +const MATCH = 57943 +const AGAINST = 57944 +const BOOLEAN = 57945 +const LANGUAGE = 57946 +const WITH = 57947 +const QUERY = 57948 +const EXPANSION = 57949 +const WITHOUT = 57950 +const VALIDATION = 57951 +const ROLLUP = 57952 +const UNUSED = 57953 +const ARRAY = 57954 +const BYTE = 57955 +const CUME_DIST = 57956 +const DESCRIPTION = 57957 +const DENSE_RANK = 57958 +const EMPTY = 57959 +const EXCEPT = 57960 +const FIRST_VALUE = 57961 +const GROUPING = 57962 +const GROUPS = 57963 +const JSON_TABLE = 57964 +const LAG = 57965 +const LAST_VALUE = 57966 +const LATERAL = 57967 +const LEAD = 57968 +const NTH_VALUE = 57969 +const NTILE = 57970 +const OF = 57971 +const OVER = 57972 +const PERCENT_RANK = 57973 +const RANK = 57974 +const RECURSIVE = 57975 +const ROW_NUMBER = 57976 +const SYSTEM = 57977 +const WINDOW = 57978 +const ACTIVE = 57979 +const ADMIN = 57980 +const AUTOEXTEND_SIZE = 57981 +const BUCKETS = 57982 +const CLONE = 57983 +const COLUMN_FORMAT = 57984 +const COMPONENT = 57985 +const DEFINITION = 57986 +const ENFORCED = 57987 +const ENGINE_ATTRIBUTE = 57988 +const EXCLUDE = 57989 +const FOLLOWING = 57990 +const GET_MASTER_PUBLIC_KEY = 57991 +const GET_SOURCE_PUBLIC_KEY = 57992 +const HISTOGRAM = 57993 +const HISTORY = 57994 +const INACTIVE = 57995 +const INVISIBLE = 57996 +const LOCKED = 57997 +const MASTER_COMPRESSION_ALGORITHMS = 57998 +const MASTER_PUBLIC_KEY_PATH = 57999 +const MASTER_TLS_CIPHERSUITES = 58000 +const MASTER_ZSTD_COMPRESSION_LEVEL = 58001 +const NESTED = 58002 +const NETWORK_NAMESPACE = 58003 +const NOWAIT = 58004 +const NULLS = 58005 +const OJ = 58006 +const OLD = 58007 +const OPTIONAL = 58008 +const ORDINALITY = 58009 +const ORGANIZATION = 58010 +const OTHERS = 58011 +const PARTIAL = 58012 +const PATH = 58013 +const PERSIST = 58014 +const PERSIST_ONLY = 58015 +const PRECEDING = 58016 +const PRIVILEGE_CHECKS_USER = 58017 +const PROCESS = 58018 +const RANDOM = 58019 +const REFERENCE = 58020 +const REQUIRE_ROW_FORMAT = 58021 +const RESOURCE = 58022 +const RESPECT = 58023 +const RESTART = 58024 +const RETAIN = 58025 +const REUSE = 58026 +const ROLE = 58027 +const SECONDARY = 58028 +const SECONDARY_ENGINE = 58029 +const SECONDARY_ENGINE_ATTRIBUTE = 58030 +const SECONDARY_LOAD = 58031 +const SECONDARY_UNLOAD = 58032 +const SIMPLE = 58033 +const SKIP = 58034 +const SOURCE_COMPRESSION_ALGORITHMS = 58035 +const SOURCE_PUBLIC_KEY_PATH = 58036 +const SOURCE_TLS_CIPHERSUITES = 58037 +const SOURCE_ZSTD_COMPRESSION_LEVEL = 58038 +const SRID = 58039 +const THREAD_PRIORITY = 58040 +const TIES = 58041 +const UNBOUNDED = 58042 +const VCPU = 58043 +const VISIBLE = 58044 +const RETURNING = 58045 +const MANUAL = 58046 +const PARALLEL = 58047 +const QUALIFY = 58048 +const TABLESAMPLE = 58049 +const OUT = 58050 +const INOUT = 58051 +const FORMAT_BYTES = 58052 +const FORMAT_PICO_TIME = 58053 +const PS_CURRENT_THREAD_ID = 58054 +const PS_THREAD_ID = 58055 +const GTID_SUBSET = 58056 +const GTID_SUBTRACT = 58057 +const WAIT_FOR_EXECUTED_GTID_SET = 58058 +const WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS = 58059 +const FORMAT = 58060 +const TREE = 58061 +const VITESS = 58062 +const TRADITIONAL = 58063 +const VTEXPLAIN = 58064 +const VEXPLAIN = 58065 +const PLAN = 58066 +const LOCAL = 58067 +const LOW_PRIORITY = 58068 +const NO_WRITE_TO_BINLOG = 58069 +const LOGS = 58070 +const ERROR = 58071 +const GENERAL = 58072 +const HOSTS = 58073 +const OPTIMIZER_COSTS = 58074 +const USER_RESOURCES = 58075 +const SLOW = 58076 +const CHANNEL = 58077 +const RELAY = 58078 +const EXPORT = 58079 +const CURRENT = 58080 +const ROW = 58081 +const ROWS = 58082 +const AVG_ROW_LENGTH = 58083 +const CONNECTION = 58084 +const CHECKSUM = 58085 +const DELAY_KEY_WRITE = 58086 +const ENCRYPTION = 58087 +const ENGINE = 58088 +const INSERT_METHOD = 58089 +const MAX_ROWS = 58090 +const MIN_ROWS = 58091 +const PACK_KEYS = 58092 +const PASSWORD = 58093 +const FIXED = 58094 +const DYNAMIC = 58095 +const COMPRESSED = 58096 +const REDUNDANT = 58097 +const COMPACT = 58098 +const ROW_FORMAT = 58099 +const STATS_AUTO_RECALC = 58100 +const STATS_PERSISTENT = 58101 +const STATS_SAMPLE_PAGES = 58102 +const STORAGE = 58103 +const MEMORY = 58104 +const DISK = 58105 +const PARTITIONS = 58106 +const LINEAR = 58107 +const RANGE = 58108 +const LIST = 58109 +const SUBPARTITION = 58110 +const SUBPARTITIONS = 58111 +const HASH = 58112 var yyToknames = [...]string{ "$end", "error", "$unk", - "MEMBER", "MULTIPLE_TEXT_LITERAL", "FUNCTION_CALL_NON_KEYWORD", "STRING_TYPE_PREFIX_NON_KEYWORD", @@ -988,6 +988,7 @@ var yyToknames = [...]string{ "RLIKE", "IN", "ASSIGNMENT_OPT", + "MEMBER", "'&'", "SHIFT_LEFT", "SHIFT_RIGHT", @@ -1150,6 +1151,7 @@ var yyToknames = [...]string{ "CUTOVER_THRESHOLD", "EXPIRE", "RATIO", + "POSTPONE", "VITESS_THROTTLER", "BEGIN", "START", @@ -1611,275 +1613,278 @@ var yyExca = [...]int{ 1, -1, -2, 0, -1, 4, + 15, 110, 16, 110, - 17, 110, -2, 6, -1, 57, 1, 225, - 787, 225, + 788, 225, -2, 233, -1, 58, - 149, 233, + 148, 233, 192, 233, - 376, 233, + 377, 233, -2, 593, -1, 66, - 38, 855, - 265, 855, - 276, 855, - 312, 869, - 313, 869, - -2, 857, + 37, 857, + 265, 857, + 276, 857, + 312, 871, + 313, 871, + -2, 859, -1, 71, - 267, 893, - -2, 891, + 267, 895, + -2, 893, -1, 132, 1, 226, - 787, 226, + 788, 226, -2, 233, -1, 143, - 150, 478, + 149, 478, 270, 478, -2, 582, -1, 162, - 149, 233, + 148, 233, 192, 233, - 376, 233, + 377, 233, -2, 602, - -1, 780, - 178, 102, + -1, 781, + 177, 102, -2, 104, - -1, 989, - 95, 1731, - -2, 1553, -1, 990, - 95, 1732, - 237, 1736, - -2, 1554, + 94, 1735, + -2, 1555, -1, 991, - 237, 1735, + 94, 1736, + 237, 1740, + -2, 1556, + -1, 992, + 237, 1739, -2, 103, - -1, 1077, - 65, 967, - -2, 980, - -1, 1082, - 264, 1714, - -2, 1623, - -1, 1164, - 275, 1180, - 280, 1180, + -1, 1078, + 64, 969, + -2, 982, + -1, 1083, + 264, 1718, + -2, 1625, + -1, 1165, + 275, 1182, + 280, 1182, -2, 489, - -1, 1252, + -1, 1253, 1, 650, - 787, 650, + 788, 650, -2, 233, - -1, 1577, - 237, 1736, - -2, 1554, - -1, 1790, - 65, 968, - -2, 984, + -1, 1578, + 237, 1740, + -2, 1556, -1, 1791, - 65, 969, - -2, 985, - -1, 1868, - 149, 233, + 64, 970, + -2, 986, + -1, 1792, + 64, 971, + -2, 987, + -1, 1869, + 148, 233, 192, 233, - 376, 233, + 377, 233, -2, 528, - -1, 1945, - 150, 478, + -1, 1946, + 149, 478, 270, 478, -2, 582, - -1, 1954, - 275, 1181, - 280, 1181, + -1, 1955, + 275, 1183, + 280, 1183, -2, 490, - -1, 2402, + -1, 2404, + 237, 1744, + -2, 1738, + -1, 2405, 237, 1740, - -2, 1734, - -1, 2403, - 237, 1736, - -2, 1732, - -1, 2521, - 149, 233, + -2, 1736, + -1, 2523, + 148, 233, 192, 233, - 376, 233, + 377, 233, -2, 529, - -1, 2528, - 28, 254, + -1, 2530, + 27, 254, -2, 256, - -1, 3004, - 86, 160, - 96, 160, - -2, 1047, - -1, 3069, - 762, 772, - -2, 746, - -1, 3303, - 55, 1673, - -2, 1667, - -1, 3622, - 97, 1614, - -2, 1619, - -1, 4147, - 762, 772, - -2, 760, - -1, 4187, + -1, 2989, + 94, 1683, + -2, 962, + -1, 3010, + 85, 160, + 95, 160, + -2, 1049, + -1, 3075, + 763, 774, + -2, 748, + -1, 3311, + 54, 1675, + -2, 1669, + -1, 3630, + 96, 1616, + -2, 1621, + -1, 4156, + 763, 774, + -2, 762, + -1, 4196, + 15, 110, 16, 110, - 17, 110, - 165, 91, - -2, 881, - -1, 4244, - 165, 92, + 164, 91, + -2, 883, + -1, 4253, + 164, 92, -2, 110, - -1, 4264, - 98, 704, - 104, 704, - 114, 704, - 194, 704, - 195, 704, - 196, 704, - 197, 704, - 198, 704, - 199, 704, - 200, 704, - 201, 704, - 202, 704, - 203, 704, - 204, 704, - 205, 704, - 206, 704, - 207, 704, - 208, 704, - 209, 704, - 210, 704, - 211, 704, - 212, 704, - 213, 704, - 214, 704, - 215, 704, - 216, 704, - 217, 704, - 218, 704, - 219, 704, - 220, 704, - 221, 704, - 222, 704, - 223, 704, - 224, 704, - 225, 704, - 226, 704, - 227, 704, - 228, 704, - 229, 704, - 230, 704, - 231, 704, - 232, 704, - 233, 704, - 234, 704, - 235, 704, - -2, 2137, - -1, 4337, - 163, 97, - 165, 97, + -1, 4273, + 97, 706, + 103, 706, + 113, 706, + 194, 706, + 195, 706, + 196, 706, + 197, 706, + 198, 706, + 199, 706, + 200, 706, + 201, 706, + 202, 706, + 203, 706, + 204, 706, + 205, 706, + 206, 706, + 207, 706, + 208, 706, + 209, 706, + 210, 706, + 211, 706, + 212, 706, + 213, 706, + 214, 706, + 215, 706, + 216, 706, + 217, 706, + 218, 706, + 219, 706, + 220, 706, + 221, 706, + 222, 706, + 223, 706, + 224, 706, + 225, 706, + 226, 706, + 227, 706, + 228, 706, + 229, 706, + 230, 706, + 231, 706, + 232, 706, + 233, 706, + 234, 706, + 235, 706, + -2, 2141, + -1, 4346, + 162, 97, + 164, 97, -2, 110, - -1, 4421, - 165, 96, + -1, 4430, + 164, 96, -2, 110, - -1, 4427, + -1, 4436, + 15, 110, 16, 110, - 17, 110, -2, 101, } const yyPrivate = 57344 -const yyLast = 62988 +const yyLast = 60101 var yyAct = [...]int{ - 1005, 3786, 3787, 3785, 2196, 92, 4379, 1000, 4368, 992, - 4245, 4244, 4246, 4397, 953, 4129, 954, 812, 4385, 4384, - 4226, 3430, 4315, 4314, 2518, 4262, 4342, 2208, 3580, 1322, - 2075, 3735, 4179, 4386, 3444, 3355, 4391, 1871, 3362, 4108, - 4031, 3399, 90, 2431, 1320, 9, 2433, 2578, 3154, 3239, - 3428, 3370, 2588, 3408, 3413, 3410, 3409, 3723, 3407, 3412, - 3411, 3427, 958, 784, 3320, 1196, 3317, 46, 3828, 3316, - 3634, 3620, 2977, 3839, 3128, 3153, 129, 993, 2492, 2472, - 4106, 3656, 2489, 3304, 3314, 2964, 778, 2557, 779, 1928, - 3039, 1075, 3610, 92, 3110, 3451, 3066, 2949, 2562, 3040, - 2619, 3041, 2506, 1134, 1102, 171, 2989, 47, 2493, 2970, - 1072, 2494, 2922, 2388, 1075, 2451, 2938, 45, 2230, 2356, - 2192, 1109, 2948, 3101, 2142, 2355, 2597, 1952, 2481, 1144, - 157, 2564, 1172, 1970, 3032, 1081, 1154, 1860, 1159, 3006, - 781, 1840, 3645, 1101, 1007, 1808, 2496, 955, 1825, 3319, - 2460, 111, 1771, 1074, 2236, 1078, 1590, 112, 2167, 2156, - 107, 1515, 1498, 2070, 1959, 1141, 782, 1162, 1138, 1142, - 1165, 1160, 2553, 794, 1161, 1859, 1104, 2554, 789, 2473, - 1119, 3823, 1121, 2920, 1845, 1097, 1085, 1245, 1793, 3815, - 2244, 2231, 106, 2263, 1573, 1549, 1310, 1098, 2083, 14, - 1080, 135, 2133, 13, 12, 133, 1070, 114, 175, 134, - 1079, 3581, 140, 1944, 141, 1114, 1083, 89, 771, 1296, - 4242, 113, 1256, 1250, 1318, 1198, 99, 1594, 6, 4369, - 2590, 2591, 2592, 2590, 3724, 3396, 3057, 1599, 1215, 1216, - 1217, 1113, 1220, 1221, 1222, 1223, 714, 4163, 1226, 1227, - 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, - 1238, 1239, 1240, 1241, 1242, 1135, 136, 1089, 1201, 2634, - 3681, 774, 142, 4164, 3089, 3088, 3716, 1176, 1069, 2036, - 4286, 1827, 3118, 1244, 3119, 3790, 4159, 2428, 2429, 2149, - 4158, 1267, 2148, 2147, 2146, 2145, 772, 1087, 4, 1209, - 1090, 2144, 1128, 1129, 4, 2114, 1823, 1266, 1073, 4137, - 3054, 1071, 1175, 3059, 2918, 711, 1151, 712, 3300, 2623, - 2966, 1830, 4318, 2687, 1828, 756, 3243, 1127, 1131, 957, - 1146, 1202, 1205, 1206, 1150, 4416, 4373, 4313, 1149, 4290, - 1103, 136, 1148, 750, 4288, 4359, 118, 119, 120, 3584, - 123, 1831, 3418, 3583, 1829, 1218, 3418, 199, 1512, 3079, - 706, 1509, 4372, 3790, 2469, 4289, 1006, 2622, 2468, 3415, - 4287, 3082, 769, 770, 4109, 2883, 750, 2154, 3470, 4241, - 4027, 3789, 1063, 1064, 1065, 1066, 1152, 4026, 756, 1077, - 1057, 1532, 91, 1082, 1200, 995, 1058, 1009, 1010, 1011, - 996, 101, 4159, 997, 998, 3729, 999, 1199, 3730, 136, - 4328, 4037, 3416, 4284, 1068, 2980, 3416, 3747, 3736, 1116, - 1117, 1127, 1131, 957, 1012, 1013, 1804, 3830, 4223, 2579, - 1500, 1528, 4272, 2616, 4036, 2201, 3746, 750, 4267, 3496, - 2462, 3422, 1303, 2981, 1305, 3422, 2919, 3015, 3352, 3353, - 3014, 4227, 4270, 3016, 2513, 2514, 2126, 2127, 1861, 3789, - 1862, 3351, 4277, 4278, 3117, 2691, 1511, 2512, 3100, 1516, - 750, 1286, 3372, 3373, 2694, 101, 1291, 1292, 1061, 4271, - 1060, 745, 4130, 1302, 1304, 91, 1014, 1015, 1016, 1017, - 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, - 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, - 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, - 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 4231, 730, - 1274, 91, 2621, 1516, 93, 1275, 103, 1315, 1287, 91, - 1529, 1274, 1530, 1531, 2692, 1280, 1275, 3027, 2531, 2530, - 3448, 3446, 728, 3175, 1273, 3478, 1272, 2973, 2974, 3476, - 1493, 2685, 750, 2573, 750, 2125, 764, 3419, 101, 2129, - 751, 3419, 1510, 3102, 1249, 2079, 1257, 1258, 768, 762, - 3439, 3452, 103, 2430, 4079, 1293, 4080, 2567, 1526, 4319, - 3853, 2026, 3371, 725, 1300, 1294, 1775, 3067, 1301, 2598, - 2944, 2452, 740, 751, 3374, 1499, 3703, 1219, 1306, 1261, - 4320, 2958, 3286, 2959, 101, 1819, 1260, 735, 2450, 2660, - 3287, 2661, 101, 2662, 1289, 1290, 1253, 1307, 1492, 738, - 1312, 2452, 748, 1262, 3105, 1295, 2027, 1288, 2028, 3718, - 749, 3717, 2641, 2663, 1281, 1299, 1225, 3449, 3447, 1550, - 2272, 1314, 1526, 1224, 2637, 4011, 1155, 1313, 2601, 3794, - 1156, 3440, 3441, 2639, 751, 1120, 3714, 2490, 1130, 1124, - 1122, 2688, 3467, 2689, 1551, 1552, 1553, 1554, 1555, 1556, - 1557, 1559, 1558, 1560, 1561, 4344, 4345, 4346, 4347, 4348, - 4349, 4350, 4351, 4352, 4353, 4354, 4355, 751, 2642, 1156, - 715, 1522, 717, 731, 1514, 753, 2638, 752, 721, 3060, - 719, 723, 732, 724, 1778, 718, 1937, 729, 2080, 2640, - 720, 733, 734, 737, 741, 742, 743, 739, 736, 3631, - 727, 754, 1194, 3176, 1193, 1192, 3055, 1191, 1190, 1189, - 1188, 1187, 1182, 1195, 3374, 1319, 1139, 1319, 1319, 1857, - 1137, 2566, 4417, 1139, 3394, 3242, 1139, 1167, 1168, 4426, - 2461, 2264, 1130, 1124, 1122, 1522, 2266, 1204, 2071, 1115, - 2271, 2267, 3106, 1167, 2268, 2269, 2270, 1203, 1248, 2265, - 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 751, - 2627, 751, 3713, 2626, 3077, 2067, 1501, 1075, 1574, 1579, - 1580, 1212, 1583, 1585, 1586, 1587, 1588, 1589, 3623, 1592, - 1593, 1595, 1595, 101, 1595, 1595, 1600, 1600, 1600, 1603, + 1006, 3794, 3796, 4393, 4254, 92, 4253, 3795, 1001, 4255, + 4388, 4377, 4406, 4138, 4394, 3438, 4235, 813, 4323, 954, + 4324, 955, 4271, 3588, 993, 4351, 1323, 2520, 2077, 3744, + 1872, 4188, 3452, 3363, 3370, 4040, 2433, 2580, 4395, 4400, + 3407, 2210, 3416, 4117, 3421, 3324, 3418, 2198, 3417, 3837, + 3415, 3162, 3420, 3732, 3419, 4115, 3378, 2590, 3436, 3247, + 3435, 3161, 2491, 129, 785, 2981, 3665, 3136, 90, 3322, + 2968, 9, 3618, 3312, 2494, 2985, 2559, 779, 1197, 3328, + 2474, 2435, 994, 780, 3045, 1321, 3325, 3118, 3072, 3459, + 2953, 1076, 1929, 92, 2564, 2621, 3046, 3642, 1135, 3047, + 2508, 1971, 3848, 2952, 2995, 959, 47, 1103, 2974, 1073, + 46, 1110, 2453, 2926, 1076, 2496, 2390, 2194, 171, 2942, + 2232, 3628, 2144, 45, 2358, 3108, 2495, 2357, 2599, 1145, + 2483, 157, 2566, 1953, 3038, 1861, 1155, 3012, 1841, 1809, + 1147, 1102, 1826, 1173, 2498, 2462, 1008, 1772, 1591, 3653, + 3327, 1160, 2158, 2072, 111, 1960, 112, 1142, 1139, 1516, + 2238, 1082, 1166, 1499, 2555, 1161, 1163, 1162, 1143, 2556, + 2475, 1860, 1120, 1846, 790, 1122, 107, 1098, 2265, 1086, + 3832, 1246, 106, 2924, 1794, 2246, 1550, 1574, 1099, 14, + 13, 12, 956, 2135, 1311, 2085, 1075, 3824, 1079, 1081, + 135, 175, 133, 134, 3589, 1071, 140, 141, 2169, 99, + 1600, 1115, 783, 113, 1084, 772, 1080, 1257, 1251, 1105, + 1297, 1319, 1595, 114, 4251, 6, 1945, 89, 4378, 3733, + 3404, 1114, 2592, 3063, 795, 2037, 1245, 715, 1199, 2592, + 2593, 2594, 3095, 3094, 2636, 3725, 1070, 4295, 1828, 3126, + 3127, 1216, 1217, 1218, 4172, 1221, 1222, 1223, 1224, 136, + 4167, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, + 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1136, 3426, + 4173, 1202, 4168, 1090, 3690, 142, 2151, 3799, 1177, 2150, + 1091, 2149, 3423, 773, 1130, 2148, 1268, 3799, 1129, 1088, + 4, 2430, 2431, 1072, 1824, 2147, 4, 1152, 4146, 782, + 1210, 1176, 3065, 757, 1128, 1132, 958, 2146, 1074, 2116, + 1267, 2922, 3308, 1104, 101, 712, 3060, 713, 2691, 2625, + 1203, 1206, 1207, 1151, 136, 1150, 1149, 2970, 3085, 3424, + 3251, 1831, 4425, 4327, 4322, 4368, 1219, 4382, 118, 119, + 120, 1829, 123, 3592, 751, 3591, 1007, 2471, 2470, 199, + 1805, 3088, 707, 751, 4118, 2887, 4299, 2156, 3430, 3478, + 3426, 1832, 4168, 4381, 770, 771, 1513, 2624, 4250, 1510, + 4036, 1830, 1069, 3798, 1064, 1065, 1066, 1067, 1128, 1132, + 958, 1078, 4298, 3798, 4297, 1083, 4035, 3738, 1153, 1058, + 3739, 2698, 136, 1201, 996, 1059, 1010, 1011, 1012, 997, + 1200, 3839, 998, 999, 4337, 1000, 4046, 4293, 3756, 1501, + 4296, 1117, 1118, 3745, 4232, 2581, 2618, 4045, 1529, 2203, + 3424, 4276, 3504, 1013, 1014, 3359, 2464, 751, 3360, 3361, + 2923, 2623, 1058, 1530, 3125, 1531, 1532, 996, 1059, 1010, + 1011, 1012, 997, 2695, 3755, 998, 999, 3106, 1000, 3430, + 4236, 3021, 2514, 1287, 3020, 2515, 2516, 3022, 1862, 1533, + 1863, 2696, 2128, 2129, 1062, 1061, 1013, 1014, 1275, 1292, + 1293, 1316, 1275, 1276, 1512, 4139, 2081, 1276, 1288, 1517, + 3033, 1274, 751, 1273, 3066, 3427, 1015, 1016, 1017, 1018, + 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, + 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, + 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, + 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 4240, 1015, + 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, + 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, + 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, + 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, + 1056, 4240, 3183, 752, 3486, 2575, 3427, 3484, 1289, 1294, + 3447, 1511, 752, 1281, 1500, 1494, 1315, 2432, 4281, 1295, + 2533, 2532, 1314, 765, 2689, 3456, 3454, 2127, 1527, 2569, + 4328, 91, 91, 91, 2131, 2962, 769, 2963, 4279, 91, + 1551, 763, 93, 2977, 2978, 3107, 3460, 3109, 4286, 4287, + 2082, 4329, 1776, 3447, 1121, 3073, 2984, 2659, 3380, 3381, + 4088, 2600, 4089, 3475, 2948, 4280, 1552, 1553, 1554, 1555, + 1556, 1557, 1558, 1560, 1559, 1561, 1562, 1131, 1125, 1123, + 2027, 2643, 2989, 103, 2989, 2988, 752, 2988, 776, 3294, + 103, 2641, 3448, 3449, 2454, 3639, 2692, 3295, 2693, 4353, + 4354, 4355, 4356, 4357, 4358, 4359, 4360, 4361, 4362, 4363, + 4364, 3712, 1493, 1282, 101, 101, 101, 2664, 2452, 2665, + 1820, 2666, 101, 3457, 3455, 2028, 1313, 2029, 1290, 1291, + 1296, 2454, 1308, 1254, 2640, 3448, 3449, 2644, 3113, 3727, + 3726, 752, 1523, 2667, 1226, 1515, 1225, 2642, 2639, 751, + 4020, 1131, 1125, 1123, 2651, 2646, 2648, 2649, 2647, 2652, + 2653, 2654, 2655, 1156, 2603, 2650, 1320, 1157, 1320, 1320, + 3803, 2492, 1157, 3061, 1195, 1858, 1194, 1193, 1192, 3379, + 1191, 1190, 1189, 3184, 1188, 1183, 1779, 1938, 1196, 3382, + 3250, 3382, 1140, 1220, 2568, 4426, 1140, 1169, 3402, 1205, + 1138, 1140, 1168, 1116, 1106, 1168, 4435, 1112, 1112, 1204, + 2463, 2073, 3114, 2629, 2628, 2069, 1502, 101, 1076, 1575, + 1580, 1581, 1213, 1584, 1586, 1587, 1588, 1589, 1590, 3631, + 1593, 1594, 1596, 1596, 3067, 1596, 1596, 1601, 1601, 1601, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, @@ -1892,1244 +1897,991 @@ var yyAct = [...]int{ 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, - 1724, 1725, 1726, 1584, 4136, 1575, 1827, 1727, 3058, 1729, - 1730, 1731, 1732, 1733, 1308, 1153, 4182, 1567, 1568, 1569, - 1570, 1600, 1600, 1600, 1600, 1600, 1600, 1581, 1123, 1489, - 1571, 1490, 1491, 3745, 3832, 3831, 1740, 1741, 1742, 1743, + 1724, 1725, 1726, 1727, 1260, 4145, 1828, 2622, 1728, 3064, + 1730, 1731, 1732, 1733, 1734, 4191, 1309, 1124, 752, 1490, + 3841, 3840, 1601, 1601, 1601, 1601, 1601, 1601, 1154, 1491, + 1492, 2039, 2038, 2040, 2041, 2042, 3087, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, - 1259, 2956, 4276, 1858, 1185, 3081, 3788, 1174, 1251, 1174, - 1183, 100, 1564, 750, 3679, 3680, 3682, 1270, 4229, 1276, - 1277, 1278, 1279, 2038, 2037, 2039, 2040, 2041, 4142, 4401, - 1521, 1518, 1519, 1520, 1525, 1527, 1524, 3061, 1523, 755, - 94, 1284, 3290, 1316, 1317, 4274, 2620, 1271, 1517, 1596, - 4275, 1597, 1598, 3080, 1564, 1174, 4228, 2476, 1081, 3091, - 746, 3632, 2943, 2692, 1601, 1602, 1958, 1768, 2459, 2458, - 1508, 1251, 1123, 1774, 1174, 747, 3420, 3421, 1764, 2693, - 3420, 3421, 1075, 2457, 3788, 2453, 1075, 3109, 2068, 3424, - 1265, 705, 1075, 3424, 1521, 1518, 1519, 1520, 1525, 1527, - 1524, 4302, 1523, 4390, 100, 4301, 1174, 4414, 2570, 3122, - 2618, 4282, 1517, 2923, 2925, 2056, 3568, 4125, 750, 3099, - 3358, 1173, 3098, 1173, 3670, 2055, 3468, 3251, 1081, 1565, - 1566, 1815, 3652, 1765, 1818, 2648, 2644, 2646, 2647, 2645, - 2649, 2650, 2651, 2652, 1782, 3011, 2976, 2895, 1786, 2571, - 100, 2709, 2204, 3250, 1074, 2971, 92, 2569, 100, 1849, - 2519, 1728, 2476, 3270, 1264, 3268, 1186, 713, 1564, 1173, - 132, 3359, 1184, 1822, 1561, 1167, 1170, 1171, 1804, 1139, - 3350, 1249, 1243, 1164, 1168, 1544, 1957, 2245, 1173, 1784, - 2720, 2572, 1093, 111, 126, 1785, 3361, 1311, 1081, 112, - 1269, 1931, 1211, 1765, 2246, 2568, 4420, 1766, 1734, 1735, - 1736, 1737, 1738, 1739, 4393, 1297, 3356, 1772, 46, 4150, - 1173, 1197, 3709, 3644, 1780, 1177, 1167, 1934, 1935, 1936, - 1179, 2463, 2138, 2064, 1180, 1178, 3372, 3373, 1863, 4297, - 751, 2084, 1826, 3357, 1249, 3112, 1812, 1247, 3149, 114, - 3111, 4380, 4408, 1814, 1813, 2237, 1181, 2729, 4257, 1174, - 2954, 2237, 4329, 2720, 2474, 2475, 3129, 1531, 1283, 3112, - 1530, 1531, 4399, 127, 3111, 4400, 1950, 4398, 3363, 1285, - 3848, 2052, 1806, 2053, 3687, 2021, 2054, 3686, 1769, 2605, - 1783, 1967, 2228, 1966, 2011, 2012, 1956, 1819, 2924, 1943, - 2017, 2018, 2615, 1262, 2077, 1071, 2172, 2613, 1781, 1073, - 1962, 1821, 1185, 1960, 1960, 1809, 1811, 1319, 2617, 1183, - 2003, 2173, 1562, 1563, 2171, 1174, 1972, 1088, 1973, 2610, - 1975, 1977, 2610, 1964, 1981, 1983, 1985, 1987, 1989, 4403, - 4321, 3671, 1854, 1855, 2243, 751, 1961, 2060, 4323, 2058, - 2059, 2057, 2061, 2062, 2063, 1268, 3371, 1246, 4019, 1923, - 1999, 3131, 4418, 2002, 3742, 2004, 3743, 4018, 3374, 2474, - 2475, 1252, 2614, 1173, 1298, 2612, 1816, 1532, 1177, 1167, - 1941, 1940, 1939, 1179, 1787, 1248, 1953, 1180, 1178, 1552, - 1553, 1554, 1555, 1556, 1557, 1559, 1558, 1560, 1561, 198, - 2085, 2051, 2007, 2220, 2209, 2210, 2211, 2212, 2222, 2213, - 2214, 2215, 2227, 2223, 2216, 2217, 2224, 2225, 2226, 2218, - 2219, 2221, 137, 1174, 1554, 1555, 1556, 1557, 1559, 1558, - 1560, 1561, 4193, 2072, 2073, 3141, 3140, 3139, 180, 1173, - 3133, 1210, 3137, 4117, 3132, 1207, 3130, 101, 1248, 1100, - 4009, 3135, 1556, 1557, 1559, 1558, 1560, 1561, 4419, 2046, - 3134, 2044, 1804, 2033, 1150, 1100, 3759, 2170, 1149, 2390, - 2242, 136, 1148, 198, 2160, 2161, 2699, 2700, 2392, 3136, - 3138, 4194, 3758, 3694, 3020, 3693, 2160, 2161, 2158, 2159, - 3360, 2090, 4118, 3029, 1004, 3683, 137, 3397, 177, 1319, - 1319, 178, 2086, 2087, 1538, 1539, 1540, 1541, 1542, 1543, - 1537, 1534, 180, 2157, 2112, 92, 2091, 3390, 92, 1009, - 1010, 1011, 3037, 2098, 2099, 2100, 1529, 197, 1530, 1531, - 2045, 3036, 2043, 3035, 2032, 4422, 2576, 1173, 2047, 2031, - 2030, 2111, 2029, 1167, 1170, 1171, 2019, 1139, 1760, 2013, - 2010, 1164, 1168, 1758, 2009, 756, 2008, 1979, 1756, 1779, - 2134, 1757, 1755, 2134, 1759, 1099, 1100, 3676, 3298, 756, - 4357, 1495, 177, 1163, 3018, 178, 756, 46, 1857, 1532, - 46, 2200, 2088, 2199, 2199, 2197, 2197, 1833, 4322, 2092, - 1532, 2094, 2095, 2096, 2097, 1933, 4370, 1550, 2101, 4145, - 1546, 197, 1547, 1094, 4309, 1804, 1532, 2586, 4144, 2585, - 2113, 1095, 4121, 2584, 1550, 2583, 4120, 1548, 1562, 1563, - 1545, 4119, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1559, - 1558, 1560, 1561, 2582, 2162, 2581, 1834, 4014, 1081, 1551, - 1552, 1553, 1554, 1555, 1556, 1557, 1559, 1558, 1560, 1561, - 1550, 3999, 3121, 181, 3998, 1099, 1100, 3847, 1764, 3845, - 2283, 1550, 187, 2708, 1551, 1552, 1553, 1554, 1555, 1556, - 1557, 1559, 1558, 1560, 1561, 1551, 1552, 1553, 1554, 1555, - 1556, 1557, 1559, 1558, 1560, 1561, 1551, 1552, 1553, 1554, - 1555, 1556, 1557, 1559, 1558, 1560, 1561, 3755, 2175, 1763, - 2177, 2178, 2179, 2180, 2181, 2182, 2184, 2186, 2187, 2188, - 2189, 2190, 2191, 1765, 2137, 1762, 2232, 2137, 2135, 2136, - 2139, 2135, 2136, 2119, 2120, 2176, 1532, 181, 1529, 2169, - 1530, 1531, 1575, 1933, 1804, 1532, 187, 4299, 117, 1529, - 2725, 1530, 1531, 1532, 3364, 1528, 1804, 2389, 3368, 116, - 2238, 115, 2174, 1933, 4222, 1529, 3367, 1530, 1531, 110, - 1532, 1933, 4203, 2768, 3151, 1761, 108, 3691, 2402, 2401, - 3675, 2307, 110, 1528, 1804, 117, 109, 1532, 1592, 2203, - 1933, 4199, 1804, 2400, 108, 2299, 116, 1766, 115, 3453, - 3369, 3450, 172, 3393, 109, 4099, 1804, 3727, 4135, 3365, - 4022, 1804, 1933, 4010, 3366, 2247, 2248, 2249, 2250, 3727, - 1804, 1933, 3725, 2610, 1804, 3007, 1550, 2391, 2724, 2261, - 3650, 1804, 2850, 1804, 1804, 2282, 3392, 4334, 1804, 3383, - 3382, 4138, 2228, 3103, 2297, 4332, 1804, 1804, 2467, 2770, - 1803, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1559, 1558, - 1560, 1561, 4237, 1804, 4046, 1804, 2399, 3046, 1532, 2405, - 2406, 1804, 3380, 3381, 4045, 2498, 172, 3378, 3379, 4235, - 1804, 4003, 1532, 3378, 3377, 1529, 3033, 1530, 1531, 111, - 2986, 1804, 2756, 3008, 1529, 112, 1530, 1531, 1760, 2402, - 2487, 2941, 1529, 3010, 1530, 1531, 2692, 3090, 1927, 3071, - 4002, 111, 1754, 2435, 2400, 110, 2528, 112, 1532, 1529, - 2682, 1530, 1531, 1532, 2380, 2381, 2382, 2383, 2384, 2674, - 1532, 2447, 2168, 3064, 3065, 3007, 1529, 2500, 1530, 1531, - 2673, 2404, 2632, 1098, 2407, 2408, 1532, 2441, 1144, 2442, - 2202, 1804, 3485, 2220, 2209, 2210, 2211, 2212, 2222, 2213, - 2214, 2215, 2227, 2223, 2216, 2217, 2224, 2225, 2226, 2218, - 2219, 2221, 2631, 1532, 4233, 1804, 1144, 2455, 2423, 2939, - 2425, 3643, 2471, 2538, 2539, 2540, 2532, 1089, 2533, 2534, - 2535, 2536, 2537, 2523, 2522, 2436, 2541, 110, 2115, 2081, - 2504, 2448, 2543, 3008, 2042, 2545, 2546, 2547, 2548, 2034, - 4092, 1804, 3647, 2692, 2024, 4090, 1804, 1529, 2454, 1530, - 1531, 2020, 2599, 1804, 101, 2016, 2015, 2464, 2526, 2014, - 2559, 1529, 1835, 1530, 1531, 1933, 1932, 3629, 4087, 1804, - 1532, 1309, 2477, 2978, 2565, 3068, 1532, 1927, 1926, 1869, - 1868, 2485, 2978, 173, 2510, 1128, 1129, 2509, 1550, 2508, - 185, 2525, 1804, 116, 2524, 4069, 1804, 1529, 3345, 1530, - 1531, 3051, 1529, 2596, 1530, 1531, 1532, 2575, 2692, 1529, - 3646, 1530, 1531, 1551, 1552, 1553, 1554, 1555, 1556, 1557, - 1559, 1558, 1560, 1561, 3315, 1529, 2527, 1530, 1531, 1528, - 1076, 1176, 193, 4177, 2604, 3643, 2985, 2607, 1532, 2608, - 4149, 1960, 2560, 2556, 2549, 2551, 2552, 2574, 2611, 1532, - 2986, 1933, 1529, 1532, 1530, 1531, 2624, 173, 1532, 3643, - 4113, 2986, 3609, 1804, 185, 3588, 1175, 1528, 3602, 1804, - 3380, 2603, 2560, 2606, 2602, 3273, 2511, 2850, 2628, 1532, - 2625, 103, 2629, 2630, 1532, 174, 179, 176, 182, 183, - 184, 186, 188, 189, 190, 191, 2753, 2986, 3599, 1804, - 2752, 192, 194, 195, 196, 2697, 193, 2610, 2593, 2480, - 2482, 2483, 2610, 101, 1075, 1075, 1075, 2636, 2466, 1529, - 1532, 1530, 1531, 1820, 2635, 1529, 1532, 1530, 1531, 2426, - 3597, 1804, 1532, 2202, 1585, 3695, 1585, 2140, 2124, 2066, - 1856, 3560, 1804, 1836, 1158, 3558, 1804, 1532, 1157, 3445, - 3554, 1804, 2712, 1532, 4280, 1529, 4205, 1530, 1531, 174, - 179, 176, 182, 183, 184, 186, 188, 189, 190, 191, - 3663, 3551, 1804, 1532, 4033, 192, 194, 195, 196, 4000, - 3860, 130, 2666, 3708, 2402, 2401, 3705, 1529, 3689, 1530, - 1531, 1995, 3696, 3697, 3698, 3501, 3400, 2716, 1529, 2715, - 1530, 1531, 1529, 3500, 1530, 1531, 1929, 1529, 2558, 1530, - 1531, 4034, 3549, 1804, 1532, 3402, 3398, 2573, 3547, 1804, - 1532, 3296, 3072, 3043, 3545, 1804, 1532, 2555, 1529, 2550, - 1530, 1531, 2544, 1529, 2542, 1530, 1531, 2684, 1532, 3543, - 1804, 2049, 1532, 1955, 1251, 3541, 1804, 1951, 1996, 1997, - 1998, 1925, 2690, 1532, 128, 3042, 2439, 1532, 3657, 3658, - 2117, 1532, 3699, 2705, 4365, 2707, 1532, 2698, 4363, 1529, - 1532, 1530, 1531, 4316, 2710, 1529, 2711, 1530, 1531, 4157, - 2704, 1529, 4074, 1530, 1531, 3660, 3628, 2701, 2702, 2703, - 2706, 3627, 3626, 3315, 3291, 2169, 1529, 2667, 1530, 1531, - 2713, 710, 1529, 4307, 1530, 1531, 3539, 1804, 1532, 3043, - 3662, 3334, 3537, 1804, 3333, 3700, 3701, 3702, 3535, 1804, - 4153, 3337, 1529, 4035, 1530, 1531, 3338, 2118, 2676, 2677, - 3533, 1804, 1532, 2679, 3531, 1804, 2470, 1091, 3335, 1832, - 2728, 1532, 2680, 3336, 2445, 3529, 1804, 3305, 3307, 3527, - 1804, 2894, 2718, 3525, 1804, 1532, 3308, 3840, 3523, 1804, - 3651, 3278, 2717, 1529, 1532, 1530, 1531, 3838, 1532, 1529, - 3277, 1530, 1531, 1532, 1991, 1529, 3636, 1530, 1531, 1532, - 773, 3639, 2766, 2926, 3635, 2882, 2735, 1529, 1092, 1530, - 1531, 1529, 2929, 1530, 1531, 2199, 3814, 2197, 3813, 2764, - 3521, 1804, 1529, 2750, 1530, 1531, 1529, 1532, 1530, 1531, - 1529, 3302, 1530, 1531, 4116, 1529, 1075, 1530, 1531, 1529, - 2065, 1530, 1531, 1059, 3507, 1804, 3376, 1992, 1993, 1994, - 3025, 2927, 3047, 3483, 1804, 2659, 3339, 2245, 2995, 2996, - 2983, 2984, 2165, 2163, 2164, 1532, 2658, 2915, 1804, 2498, - 1108, 3812, 1075, 3003, 2246, 2657, 4041, 1529, 2656, 1530, - 1531, 1804, 2655, 2654, 1107, 2913, 1804, 2653, 1214, 1213, - 108, 2888, 1804, 3461, 2930, 3042, 2932, 4339, 3115, 1532, - 109, 1529, 1081, 1530, 1531, 2982, 4305, 1532, 2168, 1494, - 1529, 1081, 1530, 1531, 3078, 137, 3641, 110, 1532, 2865, - 1804, 2963, 46, 4395, 1529, 3295, 1530, 1531, 1532, 2482, - 2483, 3000, 1532, 1529, 3002, 1530, 1531, 1529, 2670, 1530, - 1531, 2947, 1529, 1772, 1530, 1531, 1532, 3001, 1529, 2917, - 1530, 1531, 4341, 108, 117, 2972, 4340, 2857, 1804, 110, - 4240, 1532, 4029, 109, 3375, 116, 2999, 115, 1532, 2465, - 2946, 2942, 1145, 3611, 2945, 110, 1529, 2937, 1530, 1531, - 1532, 1826, 3076, 3028, 3030, 2961, 1765, 3031, 3276, 2696, - 115, 3665, 2975, 2123, 1532, 2122, 3275, 3021, 3005, 2848, - 1804, 1532, 3045, 4098, 4097, 4077, 3846, 3048, 3049, 2960, - 2846, 1804, 3844, 116, 1529, 3009, 1530, 1531, 3843, 3012, - 2833, 1804, 1532, 3087, 2831, 1804, 3825, 3019, 3706, 2425, - 1532, 2565, 3022, 117, 3640, 3638, 3403, 2594, 2829, 1804, - 1938, 117, 1106, 3621, 116, 3824, 115, 1532, 1529, 3034, - 1530, 1531, 116, 2827, 1804, 2978, 1529, 3798, 1530, 1531, - 2825, 1804, 1532, 4367, 4366, 3044, 1532, 1529, 2941, 1530, - 1531, 3179, 2823, 1804, 2754, 2437, 3052, 1529, 1850, 1530, - 1531, 1529, 1842, 1530, 1531, 1532, 2821, 1804, 121, 122, - 4366, 1532, 3084, 3604, 1943, 1529, 4367, 1530, 1531, 4122, - 3674, 4186, 5, 3073, 3074, 1, 8, 1067, 3125, 3126, - 1529, 1532, 1530, 1531, 2819, 1804, 1497, 1529, 1532, 1530, - 1531, 3083, 2817, 1804, 1496, 3678, 4269, 1532, 3, 1529, - 726, 1530, 1531, 1532, 2427, 105, 1770, 1532, 4317, 2815, - 1804, 4265, 1532, 1529, 3085, 1530, 1531, 1532, 4266, 2035, - 1529, 3104, 1530, 1531, 2813, 1804, 2025, 1532, 2811, 1804, - 3737, 3107, 3142, 2354, 1532, 4030, 3826, 3123, 1838, 3827, - 3829, 1529, 1532, 1530, 1531, 3406, 2600, 2809, 1804, 1529, - 1532, 1530, 1531, 2807, 1804, 1532, 3160, 3161, 3162, 3163, - 3164, 3165, 3166, 3167, 3168, 3169, 1529, 1532, 1530, 1531, - 3704, 2563, 1166, 2805, 1804, 162, 3177, 2520, 2521, 3143, - 3600, 1529, 4217, 1530, 1531, 1529, 125, 1530, 1531, 2803, - 1804, 1132, 124, 3127, 1169, 2801, 1804, 1532, 1282, 2799, - 1804, 3144, 2595, 1532, 1529, 1804, 1530, 1531, 3728, 1837, - 1529, 3026, 1530, 1531, 2529, 1875, 3124, 1873, 1532, 2794, - 1804, 1874, 1872, 1877, 3237, 1876, 2790, 1804, 1532, 3181, - 1529, 4181, 1530, 1531, 3566, 3113, 3469, 1529, 3114, 1530, - 1531, 2755, 3562, 2389, 3567, 2389, 1529, 3498, 1530, 1531, - 1805, 1807, 1529, 3145, 1530, 1531, 1529, 2128, 1530, 1531, - 4324, 1529, 763, 1530, 1531, 3063, 1529, 2998, 1530, 1531, - 1532, 757, 200, 1864, 3244, 1532, 1529, 3246, 1530, 1531, - 3255, 1532, 2498, 1529, 1843, 1530, 1531, 2121, 1208, 2788, - 1804, 1529, 716, 1530, 1531, 2781, 1804, 3170, 3384, 1529, - 2633, 1530, 1531, 722, 1529, 1582, 1530, 1531, 4310, 2116, - 3217, 4134, 3274, 2391, 3013, 2391, 1529, 1893, 1530, 1531, - 2779, 1804, 3322, 1126, 92, 1118, 1096, 2498, 2498, 2498, - 2498, 2498, 3227, 3228, 3229, 3230, 3231, 1532, 2438, 2931, - 3245, 1125, 3247, 4007, 2500, 3323, 1529, 2498, 1530, 1531, - 2498, 3280, 1529, 3254, 1530, 1531, 3633, 3301, 3303, 2965, - 3282, 3255, 1532, 4006, 3306, 3299, 1081, 1529, 3710, 1530, - 1531, 4115, 1532, 3497, 3266, 3837, 4338, 1529, 1532, 1530, - 1531, 2077, 1532, 4204, 3023, 3219, 1078, 3221, 3344, 2500, - 2500, 2500, 2500, 2500, 3279, 3327, 3267, 3269, 3271, 1839, - 3272, 3281, 3289, 3232, 3233, 3234, 3235, 3587, 2727, 2500, - 3423, 2235, 2500, 3292, 3293, 3294, 1572, 3309, 3310, 1529, - 3431, 1530, 1531, 788, 1529, 3346, 1530, 1531, 3347, 3489, - 1529, 1080, 1530, 1531, 3436, 3328, 3435, 3432, 3331, 3329, - 3330, 1079, 3332, 1532, 3340, 111, 2497, 959, 3388, 3389, - 1824, 112, 1532, 3348, 3487, 3793, 1532, 2155, 3326, 786, - 785, 3312, 783, 2933, 1532, 3038, 3354, 2979, 3318, 1536, - 2911, 1532, 1535, 3318, 2910, 1880, 994, 2921, 1851, 3385, - 2990, 3387, 3386, 2988, 2987, 2668, 1529, 2505, 1530, 1531, - 2991, 2994, 2995, 2996, 2992, 3659, 2993, 2997, 3655, 4261, - 3657, 3658, 2499, 2495, 2940, 945, 944, 795, 3404, 2565, - 3425, 1529, 787, 1530, 1531, 777, 1008, 943, 942, 3433, - 3442, 1529, 3434, 1530, 1531, 2955, 1817, 1529, 4306, 1530, - 1531, 1529, 3297, 1530, 1531, 2906, 2957, 3024, 1532, 3457, - 3454, 3285, 3456, 1513, 2905, 1789, 1792, 2446, 2904, 1810, - 3464, 3466, 4140, 2695, 3495, 3405, 2903, 1788, 4147, 3471, - 3472, 3474, 3473, 2902, 3414, 3475, 3722, 3477, 3395, 3479, - 1894, 3490, 3491, 3492, 3493, 3494, 2991, 2994, 2995, 2996, - 2992, 3069, 2993, 2997, 2587, 1532, 74, 50, 4107, 1585, - 4178, 937, 1529, 1585, 1530, 1531, 934, 3795, 3796, 3797, - 3240, 1529, 3241, 1530, 1531, 1529, 4160, 1530, 1531, 3612, - 4161, 3614, 933, 1529, 4162, 1530, 1531, 2292, 1507, 1504, - 1529, 3053, 1530, 1531, 3622, 2130, 104, 1532, 3582, 3465, - 2901, 1532, 40, 39, 38, 3586, 1907, 1910, 1911, 1912, - 1913, 1914, 1915, 1532, 1916, 1917, 1919, 1920, 1918, 1921, - 1922, 1895, 1896, 1897, 1898, 1878, 1879, 1908, 37, 1881, - 36, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, - 30, 29, 1891, 1899, 1900, 1901, 1902, 2892, 1903, 1904, - 1905, 1906, 28, 27, 1892, 1532, 2498, 1529, 3321, 1530, - 1531, 26, 3619, 1532, 33, 23, 25, 1532, 24, 3672, - 3617, 1532, 3613, 22, 3615, 4377, 4378, 4407, 4243, 4183, - 1532, 3417, 4312, 3436, 1532, 3435, 3432, 4394, 1532, 2891, - 3673, 131, 1532, 2890, 4343, 3630, 1532, 3637, 4304, 3589, - 4303, 3591, 3592, 3593, 1529, 2889, 1530, 1531, 4254, 1532, - 3654, 3642, 4383, 3426, 4249, 3459, 3460, 1532, 2500, 60, - 57, 1532, 55, 3661, 139, 1532, 138, 58, 3664, 3668, - 3669, 56, 54, 53, 3667, 1532, 2240, 3666, 1254, 51, - 102, 2241, 1532, 35, 3684, 3685, 1529, 2886, 1530, 1531, - 1529, 34, 1530, 1531, 21, 2881, 20, 19, 18, 2874, - 1532, 17, 1529, 2873, 1530, 1531, 16, 3690, 15, 3692, - 11, 1532, 2872, 10, 43, 42, 2871, 41, 32, 2303, - 2870, 31, 44, 1532, 2869, 7, 2, 1532, 2868, 3056, - 2589, 1532, 3715, 0, 0, 0, 3719, 3720, 3721, 0, - 0, 2867, 0, 1532, 1529, 0, 1530, 1531, 0, 2866, - 0, 0, 1529, 2860, 1530, 1531, 1529, 2859, 1530, 1531, - 1529, 0, 1530, 1531, 1766, 3732, 3733, 2858, 0, 1529, - 3734, 1530, 1531, 1529, 2855, 1530, 1531, 1529, 0, 1530, - 1531, 1529, 0, 1530, 1531, 1529, 0, 1530, 1531, 0, - 0, 0, 2854, 0, 0, 0, 0, 0, 1529, 2386, - 1530, 1531, 3749, 2853, 0, 0, 1529, 0, 1530, 1531, - 1529, 1909, 1530, 1531, 1529, 2851, 1530, 1531, 0, 2844, - 1532, 0, 0, 2841, 1529, 1532, 1530, 1531, 3760, 2417, - 1532, 1529, 0, 1530, 1531, 2839, 0, 0, 0, 0, - 0, 0, 1532, 0, 0, 0, 1805, 2424, 1532, 1529, - 0, 1530, 1531, 0, 1532, 0, 0, 0, 0, 0, - 1529, 3811, 1530, 1531, 3818, 0, 3820, 3801, 0, 3802, - 3803, 3804, 1529, 0, 1530, 1531, 1529, 0, 1530, 1531, - 1529, 0, 1530, 1531, 0, 0, 0, 2449, 0, 3754, - 0, 0, 1529, 3791, 1530, 1531, 0, 3322, 0, 0, - 92, 0, 3322, 0, 1532, 0, 0, 0, 0, 1532, - 3821, 0, 2837, 0, 0, 1532, 0, 2796, 0, 0, - 3862, 1532, 2776, 2199, 0, 2197, 0, 0, 0, 0, - 0, 0, 0, 0, 2775, 0, 0, 0, 0, 0, - 2771, 3822, 1081, 0, 3852, 3854, 2769, 0, 0, 0, - 0, 0, 0, 0, 3842, 0, 3841, 0, 0, 0, - 3849, 3851, 46, 0, 0, 4013, 0, 0, 0, 1529, - 0, 1530, 1531, 0, 1529, 0, 1530, 1531, 0, 1529, - 0, 1530, 1531, 3711, 3712, 0, 0, 0, 3866, 3863, - 3864, 1529, 0, 1530, 1531, 0, 2761, 1529, 0, 1530, - 1531, 2732, 0, 1529, 3782, 1530, 1531, 2726, 0, 4005, - 0, 2577, 0, 2721, 0, 0, 0, 4004, 4020, 0, - 0, 0, 0, 0, 0, 0, 0, 4024, 4025, 0, - 0, 4032, 4015, 4016, 4017, 1794, 0, 4071, 4072, 0, - 0, 3318, 0, 0, 0, 4075, 0, 0, 2199, 1802, - 2197, 3856, 1795, 1529, 3819, 1530, 1531, 0, 1529, 0, - 1530, 1531, 0, 0, 1529, 0, 1530, 1531, 0, 0, - 1529, 0, 1530, 1531, 0, 0, 0, 2443, 2444, 1801, - 1799, 1800, 1796, 0, 1797, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4078, 0, 0, 0, 4081, - 0, 0, 0, 4123, 3322, 0, 0, 1798, 0, 0, - 0, 3858, 0, 0, 0, 0, 0, 0, 1603, 1604, - 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, - 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1623, 1624, 1625, - 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, - 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, - 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, - 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, - 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, - 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, - 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, - 1696, 1697, 1698, 1699, 1700, 1702, 1703, 1704, 1705, 1706, - 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, - 1717, 1723, 1724, 1725, 1726, 1740, 1741, 1742, 1743, 1744, - 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 4126, - 4076, 4095, 4127, 4124, 4105, 4104, 1794, 0, 4101, 0, - 4103, 0, 4141, 3321, 0, 0, 0, 4111, 3321, 0, - 1802, 0, 0, 1795, 0, 0, 0, 0, 0, 0, - 92, 0, 0, 0, 2714, 0, 0, 0, 2719, 4008, - 0, 0, 0, 0, 0, 0, 0, 0, 1790, 1791, - 1801, 1799, 1800, 1796, 0, 1797, 0, 0, 0, 0, - 0, 2722, 4143, 2723, 0, 0, 0, 0, 0, 2731, - 4131, 0, 1081, 2733, 2734, 4148, 0, 0, 1798, 0, - 4146, 4012, 2740, 2741, 2742, 2743, 2744, 2745, 2746, 2747, - 2748, 2749, 46, 2751, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 92, 0, 0, 2757, 2758, 2759, 2760, - 0, 2762, 2763, 4185, 2765, 4184, 0, 4166, 2767, 0, - 4167, 4201, 2772, 2773, 0, 2774, 0, 0, 2777, 2778, - 2780, 2782, 2783, 2784, 2785, 2786, 2787, 2789, 2791, 2792, - 2793, 2795, 4192, 2797, 2798, 2800, 2802, 2804, 2806, 2808, - 2810, 2812, 2814, 2816, 2818, 2820, 2822, 2824, 2826, 2828, - 2830, 2832, 2834, 2835, 2836, 46, 2838, 4230, 2840, 4206, - 2842, 2843, 4191, 2845, 2847, 2849, 4176, 0, 92, 2852, - 4216, 4128, 4195, 2856, 4032, 4219, 4215, 2861, 2862, 2863, - 2864, 4209, 4214, 4211, 4210, 1766, 4208, 4213, 4212, 0, - 2875, 2876, 2877, 2878, 2879, 2880, 0, 4238, 2884, 2885, - 3321, 0, 0, 0, 4256, 2887, 0, 4255, 0, 0, - 2893, 0, 0, 0, 0, 2896, 2897, 2898, 2899, 2900, - 4268, 4296, 4230, 4273, 4260, 92, 2907, 2908, 4285, 2909, - 46, 0, 2912, 2914, 2449, 4298, 2916, 4283, 0, 0, - 0, 4155, 0, 0, 0, 0, 2928, 4197, 0, 4165, - 3318, 0, 4295, 0, 0, 4202, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4300, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2962, 0, - 92, 4311, 0, 0, 0, 0, 0, 46, 0, 0, - 0, 4337, 2077, 4326, 0, 4327, 0, 4361, 0, 4330, - 2199, 0, 2197, 0, 0, 4336, 0, 0, 0, 0, - 0, 4133, 4356, 1766, 0, 4358, 4360, 4362, 92, 4364, - 4381, 0, 0, 0, 4230, 0, 0, 0, 4298, 0, - 4371, 0, 0, 0, 3436, 0, 3435, 3432, 0, 0, - 4392, 4382, 46, 0, 4151, 0, 0, 0, 0, 0, - 0, 0, 4291, 0, 0, 0, 0, 4396, 4139, 4404, - 0, 4402, 0, 0, 92, 4409, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4412, 0, 0, 0, - 46, 0, 0, 0, 0, 0, 0, 0, 4415, 92, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4421, 4425, 92, 92, 2199, 0, 2197, 4429, 92, 4428, - 4430, 4072, 4298, 4424, 4427, 0, 0, 0, 4298, 0, - 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, - 0, 0, 0, 0, 4196, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 46, 0, 0, 0, 0, 0, 0, 0, 198, - 0, 0, 0, 0, 46, 46, 0, 0, 0, 0, - 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 137, 0, 159, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, - 4248, 0, 0, 0, 0, 0, 0, 0, 0, 1893, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 170, 0, 0, 0, 0, 0, 158, 0, - 0, 0, 0, 0, 0, 0, 3155, 3156, 3157, 3158, - 3159, 0, 0, 198, 0, 0, 0, 0, 177, 1773, - 1893, 178, 0, 0, 3062, 0, 3174, 0, 0, 0, - 1933, 0, 0, 0, 0, 0, 137, 0, 159, 775, - 0, 0, 0, 146, 147, 169, 168, 197, 0, 0, - 0, 4325, 180, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 708, 0, 0, 170, 0, 0, 0, - 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1062, 0, 0, 0, 0, 0, 0, - 0, 0, 177, 0, 0, 178, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1880, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1946, 1947, 169, - 168, 197, 0, 0, 0, 0, 0, 1140, 0, 0, - 163, 144, 166, 151, 143, 1105, 164, 165, 1111, 1111, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 181, 0, 0, 0, 0, 1880, 0, - 0, 0, 187, 152, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 155, 153, - 148, 149, 150, 154, 0, 0, 0, 0, 0, 0, - 145, 0, 0, 0, 0, 0, 0, 0, 0, 156, - 0, 0, 1894, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 163, 1948, 166, 0, 1945, 0, - 164, 165, 0, 0, 3324, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, - 0, 0, 3342, 1894, 0, 0, 187, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1907, 1910, - 1911, 1912, 1913, 1914, 1915, 0, 1916, 1917, 1919, 1920, - 1918, 1921, 1922, 1895, 1896, 1897, 1898, 1878, 1879, 1908, - 0, 1881, 172, 1882, 1883, 1884, 1885, 1886, 1887, 1888, - 1889, 1890, 0, 0, 1891, 1899, 1900, 1901, 1902, 0, - 1903, 1904, 1905, 1906, 0, 0, 1892, 0, 0, 1907, - 1910, 1911, 1912, 1913, 1914, 1915, 0, 1916, 1917, 1919, - 1920, 1918, 1921, 1922, 1895, 1896, 1897, 1898, 1878, 1879, - 1908, 0, 1881, 0, 1882, 1883, 1884, 1885, 1886, 1887, - 1888, 1889, 1890, 0, 0, 1891, 1899, 1900, 1901, 1902, - 0, 1903, 1904, 1905, 1906, 0, 0, 1892, 0, 0, - 0, 3463, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, - 0, 0, 0, 3480, 3481, 0, 3482, 3484, 3486, 0, - 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3499, 0, 0, 0, 0, 3502, - 0, 3504, 3505, 3506, 3508, 3509, 3510, 3511, 3512, 3513, - 3514, 3515, 3516, 3517, 3518, 3519, 3520, 3522, 3524, 3526, - 3528, 3530, 3532, 3534, 3536, 3538, 3540, 3542, 3544, 3546, - 3548, 3550, 3552, 3553, 3555, 3556, 3557, 3559, 0, 0, - 3561, 0, 3563, 3564, 3565, 0, 0, 3569, 3570, 3571, - 3572, 3573, 3574, 3575, 3576, 3577, 3578, 3579, 0, 0, - 0, 0, 0, 0, 167, 0, 3585, 0, 0, 0, - 3590, 0, 0, 0, 3594, 3595, 0, 3596, 3598, 160, - 3601, 3603, 161, 3605, 3606, 3607, 3608, 0, 0, 0, - 0, 0, 0, 3616, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1909, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, - 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3648, 3649, 0, 0, 3653, 0, 0, - 0, 0, 0, 0, 1909, 0, 0, 0, 0, 0, - 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 160, 0, 0, 161, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, - 0, 0, 0, 0, 185, 174, 179, 176, 182, 183, - 184, 186, 188, 189, 190, 191, 0, 0, 0, 0, - 0, 192, 194, 195, 196, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3726, 0, - 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1255, 0, 1263, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3744, 0, 0, - 3748, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, - 179, 176, 182, 183, 184, 186, 188, 189, 190, 191, - 0, 0, 0, 0, 3761, 192, 194, 195, 196, 0, - 0, 0, 0, 0, 0, 0, 0, 1057, 0, 1503, - 0, 0, 995, 1058, 1009, 1010, 1011, 996, 0, 0, - 997, 998, 0, 999, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1533, 0, 0, 0, - 0, 1012, 1013, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3784, 0, - 0, 0, 0, 0, 0, 0, 0, 1591, 0, 0, - 0, 3792, 0, 0, 0, 0, 0, 0, 3799, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1014, 1015, 1016, 1017, 1018, 1019, 1020, - 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, - 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, - 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, - 1051, 1052, 1053, 1054, 1055, 4231, 0, 0, 0, 0, - 0, 0, 0, 0, 91, 48, 49, 93, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 98, 0, 0, 0, 52, 81, 82, - 0, 79, 83, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 80, 0, 0, 0, 3439, 0, 0, - 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, - 0, 0, 0, 4021, 0, 0, 0, 0, 0, 0, - 0, 0, 4028, 0, 0, 67, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 101, 4413, 0, - 0, 4038, 4039, 4040, 0, 4042, 0, 4043, 4044, 0, - 0, 0, 0, 4047, 4048, 4049, 4050, 4051, 4052, 4053, - 4054, 4055, 4056, 4057, 4058, 4059, 4060, 4061, 4062, 4063, - 4064, 4065, 4066, 4067, 4068, 0, 4070, 4073, 3440, 3441, - 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, - 0, 0, 4082, 4083, 4084, 4085, 4086, 4088, 4089, 4091, - 4093, 4094, 4096, 0, 0, 0, 4100, 0, 0, 0, - 4102, 0, 0, 0, 0, 0, 0, 4112, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1853, 0, 4132, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1841, 0, 0, 0, - 0, 0, 0, 1870, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 95, 59, 62, 61, 64, 0, 78, - 0, 0, 87, 84, 0, 4189, 0, 0, 0, 0, - 0, 0, 0, 0, 1930, 0, 0, 0, 0, 0, - 0, 4188, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4190, 66, 97, 96, - 0, 0, 76, 77, 63, 0, 0, 0, 0, 0, - 85, 86, 0, 0, 0, 0, 0, 0, 2005, 0, - 0, 0, 990, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2050, 4187, 69, 0, 70, 71, 72, - 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2078, 0, 0, 0, 0, - 0, 0, 0, 203, 0, 0, 203, 0, 0, 0, - 761, 2089, 0, 0, 0, 767, 0, 0, 2093, 2082, - 0, 0, 0, 0, 0, 0, 203, 0, 0, 2104, - 2105, 2106, 2107, 2108, 2109, 2110, 0, 0, 0, 0, - 0, 65, 0, 203, 0, 0, 0, 0, 0, 0, - 0, 0, 4156, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, - 203, 767, 0, 767, 0, 0, 4171, 0, 0, 0, - 0, 0, 4174, 0, 4175, 0, 0, 0, 198, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1942, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4200, 137, 0, 159, 0, 4229, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, - 0, 0, 0, 0, 0, 4224, 4225, 0, 0, 0, - 0, 0, 0, 94, 0, 0, 0, 0, 0, 4232, - 4234, 4236, 0, 4228, 0, 0, 0, 0, 0, 0, - 0, 170, 0, 0, 0, 0, 0, 158, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4259, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 177, 4281, 0, - 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1946, 1947, 169, 168, 197, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4308, 0, 2143, 0, 0, 0, 0, 0, - 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4331, 4333, 4335, 0, 0, 2150, 2151, - 2152, 2153, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2166, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4376, 0, 163, - 1948, 166, 0, 1945, 0, 164, 165, 0, 0, 2205, - 2206, 0, 0, 0, 0, 2229, 0, 0, 2233, 2234, - 0, 0, 181, 2239, 0, 0, 0, 0, 0, 0, - 0, 187, 0, 0, 0, 4405, 4406, 0, 2251, 2252, - 2253, 2254, 2255, 2256, 2257, 2258, 2259, 2260, 0, 2262, - 0, 75, 0, 2284, 2285, 2286, 2287, 2288, 2289, 2290, - 2291, 2293, 0, 2298, 0, 2300, 2301, 2302, 0, 2304, - 2305, 2306, 4423, 2308, 2309, 2310, 2311, 2312, 2313, 2314, - 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, - 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, - 2335, 2336, 2337, 2338, 2339, 2340, 2341, 2342, 2343, 2344, - 2345, 2346, 2347, 2348, 2349, 2350, 2351, 2352, 2353, 2357, - 2358, 2359, 2360, 2361, 2362, 2363, 2364, 2365, 2366, 2367, - 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, - 2378, 2379, 0, 0, 0, 0, 0, 2385, 0, 2387, - 0, 2393, 2394, 2395, 2396, 2397, 2398, 0, 0, 0, - 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, - 2409, 2410, 2411, 2412, 2413, 2414, 2415, 2416, 0, 2418, - 2419, 2420, 2421, 2422, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 91, 48, 49, 93, 0, 0, 0, 1111, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 98, 0, 0, 0, 52, 81, 82, 0, 79, - 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 80, 2484, 0, 0, 0, 0, 0, 0, 0, - 2488, 0, 2491, 103, 0, 2143, 0, 2478, 2479, 167, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2517, 0, 101, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1754, 1576, 1517, 3754, 1252, 3428, 3429, 2960, 2697, 3640, + 3797, 1859, 3366, 4151, 1568, 1569, 1570, 1571, 3432, 1175, + 3797, 3576, 3723, 1271, 1582, 1277, 1278, 1279, 1280, 4238, + 3688, 3689, 3691, 1186, 3086, 751, 1565, 1184, 1602, 1603, + 1565, 1124, 1572, 1252, 3298, 1597, 1959, 1598, 1599, 1317, + 1318, 1522, 1519, 1520, 1521, 1526, 1528, 1525, 3097, 1524, + 2927, 2929, 1175, 3367, 2696, 1272, 2947, 4237, 1769, 1518, + 2461, 2460, 4238, 2459, 1775, 3083, 2455, 3117, 2070, 1175, + 2478, 1266, 706, 1076, 4311, 1082, 4310, 1076, 3369, 1250, + 1509, 1258, 1259, 1076, 751, 4399, 3428, 3429, 3259, 3476, + 4291, 4423, 4134, 1816, 3105, 1285, 1819, 3104, 3364, 3432, + 4237, 1566, 1567, 757, 3679, 2620, 3661, 3017, 1304, 2980, + 1306, 1527, 1765, 1585, 1262, 2057, 2899, 2206, 3380, 3381, + 94, 1261, 2572, 3130, 1174, 3365, 3258, 2713, 1175, 2478, + 1766, 1850, 1729, 1265, 132, 2975, 714, 2521, 1263, 3722, + 1565, 1562, 3358, 4410, 2724, 1082, 1312, 92, 1533, 1303, + 1305, 1823, 751, 1530, 1545, 1531, 1532, 1958, 1805, 1094, + 4285, 3371, 2056, 2573, 2247, 4402, 3278, 1174, 1250, 1244, + 1270, 2571, 1735, 1736, 1737, 1738, 1739, 1740, 1783, 1533, + 1298, 2248, 1787, 1785, 1174, 1786, 1187, 111, 1075, 112, + 1185, 1557, 1558, 1560, 1559, 1561, 1562, 746, 1532, 2086, + 1766, 4159, 1198, 4283, 126, 2574, 1773, 1250, 4284, 1813, + 3718, 1175, 3652, 1781, 2465, 1082, 1815, 1814, 1932, 2570, + 2140, 1533, 100, 100, 100, 1523, 3276, 4417, 2066, 1864, + 100, 1935, 1936, 1937, 1248, 1827, 2928, 3120, 4429, 3379, + 4306, 4266, 3119, 1174, 2724, 731, 1531, 1532, 1178, 1168, + 3120, 3382, 46, 1180, 752, 3119, 114, 1181, 1179, 3157, + 1820, 1301, 1951, 1807, 4389, 1302, 1263, 2239, 729, 2733, + 1533, 2239, 2484, 2485, 2958, 1307, 1770, 4338, 2476, 2477, + 1784, 1212, 1782, 127, 1249, 1973, 3857, 1974, 1072, 1976, + 1978, 1944, 2079, 1982, 1984, 1986, 1988, 1990, 2012, 2013, + 1822, 1810, 1812, 3696, 2018, 2019, 2004, 1963, 1320, 726, + 1074, 2022, 1300, 752, 2619, 1961, 1961, 3695, 741, 2053, + 1817, 2054, 2245, 1284, 2055, 1269, 1174, 2607, 1962, 1855, + 1856, 1178, 1168, 736, 1286, 1253, 1180, 2476, 2477, 1299, + 1181, 1179, 1968, 1924, 1967, 1247, 739, 2230, 2062, 749, + 2059, 2060, 2058, 2063, 2064, 2065, 1957, 750, 2087, 2061, + 2612, 2617, 1182, 1175, 2615, 1942, 1940, 1186, 2612, 1965, + 1954, 1184, 1089, 1249, 3368, 1804, 4330, 1788, 3680, 4412, + 1530, 752, 1531, 1532, 2008, 1941, 2052, 4408, 3137, 4431, + 4409, 4427, 4407, 101, 4332, 1530, 2000, 1531, 1532, 2003, + 4202, 2005, 2274, 2616, 1175, 4028, 1533, 1530, 4027, 1531, + 1532, 2614, 1249, 2172, 2074, 2075, 4308, 716, 1805, 718, + 732, 1533, 754, 4018, 753, 722, 2244, 720, 724, 733, + 725, 3768, 719, 1533, 730, 2174, 3767, 721, 734, 735, + 738, 742, 743, 744, 740, 737, 1534, 728, 755, 4203, + 2175, 1563, 1564, 2173, 1151, 136, 1150, 1149, 2222, 2211, + 2212, 2213, 2214, 2224, 2215, 2216, 2217, 2229, 2225, 2218, + 2219, 2226, 2227, 2228, 2220, 2221, 2223, 1592, 1174, 2092, + 3493, 4126, 3703, 3139, 1168, 1171, 1172, 4428, 1140, 3702, + 1320, 1320, 1165, 1169, 2088, 2089, 4343, 1805, 1010, 1011, + 1012, 1175, 3751, 2114, 3752, 1101, 92, 3035, 2093, 92, + 2047, 2045, 3692, 2266, 1164, 2100, 2101, 2102, 2268, 1174, + 3405, 1211, 2273, 2269, 2034, 1208, 2270, 2271, 2272, 2113, + 4127, 2267, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, + 2283, 3398, 3043, 3042, 1522, 1519, 1520, 1521, 1526, 1528, + 1525, 1805, 1524, 1530, 3041, 1531, 1532, 2578, 3149, 3148, + 3147, 2048, 1518, 3141, 2032, 3145, 2031, 3140, 3306, 3138, + 2162, 2163, 2160, 2161, 3143, 2201, 2201, 2136, 2090, 1533, + 2136, 2046, 2044, 3142, 2030, 2094, 2020, 2096, 2097, 2098, + 2099, 2199, 2199, 2014, 2103, 2033, 2011, 2159, 2010, 2009, + 1980, 2233, 3144, 3146, 2729, 1780, 2115, 1530, 1496, 1531, + 1532, 46, 1100, 1101, 46, 2202, 1174, 1551, 757, 3129, + 2164, 1858, 1168, 1171, 1172, 1101, 1140, 4366, 3372, 2392, + 1165, 1169, 3376, 1533, 2162, 2163, 2703, 2704, 2394, 3685, + 3375, 757, 4331, 1552, 1553, 1554, 1555, 1556, 1557, 1558, + 1560, 1559, 1561, 1562, 1005, 1082, 1555, 1556, 1557, 1558, + 1560, 1559, 1561, 1562, 3024, 2285, 757, 2588, 4154, 2587, + 4341, 1805, 3651, 2586, 3377, 2585, 4246, 1805, 1805, 1095, + 4153, 775, 2728, 3373, 1934, 4379, 4147, 1096, 3374, 2584, + 1551, 2583, 1765, 1805, 117, 2139, 2137, 2138, 2139, 2137, + 2138, 4130, 2141, 4318, 1805, 116, 1834, 115, 4129, 2234, + 1766, 2121, 2122, 2774, 4244, 1805, 1552, 1553, 1554, 1555, + 1556, 1557, 1558, 1560, 1559, 1561, 1562, 1530, 4050, 1531, + 1532, 1100, 1101, 1530, 2176, 1531, 1532, 108, 108, 1530, + 4128, 1531, 1532, 2391, 110, 4023, 756, 109, 109, 1530, + 2772, 1531, 1532, 1533, 4008, 1835, 2404, 4007, 2403, 1533, + 1529, 1805, 2178, 2205, 2309, 1533, 3856, 747, 1576, 1593, + 3854, 1530, 3764, 1531, 1532, 1533, 1842, 1934, 1805, 4055, + 1805, 2171, 748, 1529, 1805, 1530, 2240, 1531, 1532, 1764, + 1551, 2249, 2250, 2251, 2252, 2770, 1763, 1533, 1762, 2393, + 3700, 2284, 1934, 4231, 1551, 2263, 1934, 4212, 1805, 1805, + 4054, 1533, 1934, 4208, 1931, 2402, 1552, 1553, 1554, 1555, + 1556, 1557, 1558, 1560, 1559, 1561, 1562, 4108, 1805, 2469, + 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1560, 1559, 1561, + 1562, 1539, 1540, 1541, 1542, 1543, 1544, 1538, 1535, 2401, + 3736, 4144, 2407, 2408, 3684, 1551, 2500, 2712, 2177, 3461, + 2179, 2180, 2181, 2182, 2183, 2184, 2186, 2188, 2189, 2190, + 2191, 2192, 2193, 111, 1805, 112, 3458, 2404, 3401, 2489, + 3400, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1560, 1559, + 1561, 1562, 4031, 1805, 3674, 111, 2437, 112, 1934, 4019, + 2530, 3110, 2449, 2170, 1552, 1553, 1554, 1555, 1556, 1557, + 1558, 1560, 1559, 1561, 1562, 1099, 1553, 1554, 1555, 1556, + 1557, 1558, 1560, 1559, 1561, 1562, 2443, 3052, 2444, 1145, + 1530, 3039, 1531, 1532, 3736, 1805, 2402, 4242, 1805, 2084, + 1934, 3734, 2612, 1805, 4012, 2301, 4101, 1805, 4011, 2425, + 1761, 1530, 2457, 1531, 1532, 1755, 1533, 1145, 4333, 3658, + 1805, 2502, 2854, 1805, 3637, 2540, 2541, 2542, 2686, 2525, + 2534, 2678, 2535, 2536, 2537, 2538, 2539, 1533, 2450, 2506, + 2543, 3391, 3390, 110, 1090, 3074, 2545, 2677, 2524, 2547, + 2548, 2549, 2550, 2456, 1530, 2634, 1531, 1532, 4099, 1805, + 2561, 2466, 2633, 1530, 2473, 1531, 1532, 3388, 3389, 3386, + 3387, 2601, 3386, 3385, 1530, 2479, 1531, 1532, 2567, 2438, + 1533, 2487, 2528, 2117, 2230, 4096, 1805, 116, 1130, 1533, + 2511, 2512, 1129, 2510, 2992, 1805, 2527, 1761, 2526, 2083, + 1533, 1551, 1759, 3013, 1547, 2945, 1548, 1757, 1805, 2598, + 1758, 1756, 2043, 1760, 2035, 1530, 2025, 1531, 1532, 110, + 2577, 1549, 1563, 1564, 1546, 2696, 3096, 1552, 1553, 1554, + 1555, 1556, 1557, 1558, 1560, 1559, 1561, 1562, 1928, 3077, + 3057, 1533, 1530, 2562, 1531, 1532, 2558, 2551, 2553, 2554, + 2021, 2606, 2017, 1177, 2609, 2760, 2610, 2576, 2016, 4078, + 1805, 1529, 2626, 1961, 3617, 1805, 1839, 2015, 1533, 3070, + 3071, 3014, 3013, 2562, 2605, 2608, 1176, 2604, 1836, 3610, + 1805, 3016, 2722, 2943, 3607, 1805, 2630, 2204, 1805, 3655, + 2631, 2632, 2721, 2627, 2982, 2222, 2211, 2212, 2213, 2214, + 2224, 2215, 2216, 2217, 2229, 2225, 2218, 2219, 2226, 2227, + 2228, 2220, 2221, 2223, 1934, 1933, 1530, 2701, 1531, 1532, + 4143, 1530, 1310, 1531, 1532, 2638, 1076, 1076, 1076, 3605, + 1805, 1928, 1927, 2637, 1870, 1869, 1530, 1838, 1531, 1532, + 3014, 1530, 1533, 1531, 1532, 4015, 1586, 1533, 1586, 1530, + 2696, 1531, 1532, 2982, 3568, 1805, 2991, 3654, 2152, 2153, + 2154, 2155, 1533, 3353, 2716, 3566, 1805, 1533, 2613, 2529, + 3323, 2992, 1529, 2696, 2168, 1533, 1530, 4186, 1531, 1532, + 1530, 3651, 1531, 1532, 2670, 1077, 1530, 4158, 1531, 1532, + 1934, 4122, 2992, 2404, 1530, 2403, 1531, 1532, 3596, 3388, + 3281, 1530, 1533, 1531, 1532, 2513, 1533, 2854, 2757, 2207, + 2208, 1530, 1533, 1531, 1532, 2231, 2756, 2992, 2235, 2236, + 1533, 2612, 1530, 2241, 1531, 1532, 2595, 1533, 2482, 2468, + 3651, 1821, 2612, 2428, 2204, 2142, 103, 1533, 2253, 2254, + 2255, 2256, 2257, 2258, 2259, 2260, 2261, 2262, 1533, 2264, + 2688, 2126, 2719, 2286, 2287, 2288, 2289, 2290, 2291, 2292, + 2293, 2295, 2694, 2300, 2068, 2302, 2303, 2304, 101, 2306, + 2307, 2308, 2702, 2310, 2311, 2312, 2313, 2314, 2315, 2316, + 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, + 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, + 2337, 2338, 2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346, + 2347, 2348, 2349, 2350, 2351, 2352, 2353, 2354, 2355, 2359, + 2360, 2361, 2362, 2363, 2364, 2365, 2366, 2367, 2368, 2369, + 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, + 2380, 2381, 2708, 1857, 1837, 2680, 2681, 2387, 2710, 2389, + 2683, 2395, 2396, 2397, 2398, 2399, 2400, 2717, 2732, 2684, + 2705, 2706, 2707, 2898, 1159, 1158, 3562, 1805, 2171, 101, + 2411, 2412, 2413, 2414, 2415, 2416, 2417, 2418, 4289, 2420, + 2421, 2422, 2423, 2424, 1530, 4214, 1531, 1532, 4042, 4009, + 3408, 3559, 1805, 3159, 3869, 2930, 130, 3717, 3714, 3698, + 2886, 3704, 3509, 2768, 3508, 1930, 2560, 3410, 2201, 3406, + 1533, 3304, 3048, 3557, 1805, 3078, 1806, 1808, 2557, 1112, + 2552, 2546, 2544, 1530, 2199, 1531, 1532, 2050, 1076, 3555, + 1805, 1956, 1952, 1926, 3049, 3553, 1805, 128, 1252, 3666, + 3667, 3551, 1805, 3453, 2709, 4043, 2711, 2933, 1530, 1533, + 1531, 1532, 2987, 2990, 3708, 2714, 3612, 2715, 3705, 3706, + 3707, 2500, 3549, 1805, 1076, 3009, 3049, 2480, 2481, 1996, + 1530, 4319, 1531, 1532, 1533, 2575, 2441, 2934, 2931, 2936, + 1894, 3547, 1805, 2119, 4374, 4372, 1530, 4325, 1531, 1532, + 2170, 4166, 1530, 2519, 1531, 1532, 1533, 4083, 1530, 3669, + 1531, 1532, 3636, 3545, 1805, 3672, 3635, 3709, 3710, 3711, + 3634, 3323, 1533, 1530, 2967, 1531, 1532, 3299, 1533, 1530, + 1082, 1531, 1532, 2986, 1533, 2671, 1997, 1998, 1999, 1082, + 2951, 3671, 3345, 1773, 3342, 3007, 2921, 3346, 1530, 1533, + 1531, 1532, 3343, 1992, 711, 1533, 2976, 3344, 3341, 4162, + 2120, 3543, 1805, 4044, 2472, 2563, 2950, 46, 2946, 1833, + 1530, 2949, 1531, 1532, 1533, 3823, 3006, 3822, 1767, 3008, + 2447, 2965, 3541, 1805, 3082, 1827, 3034, 3036, 4316, 3286, + 3037, 2979, 1092, 3608, 1766, 2941, 1533, 3285, 3011, 3539, + 1805, 3644, 4125, 3847, 3537, 1805, 1993, 1994, 1995, 3643, + 3535, 1805, 3027, 3660, 3849, 3015, 2988, 3051, 1530, 3018, + 1531, 1532, 3054, 3055, 3647, 3310, 2567, 3384, 3093, 3025, + 3821, 3533, 1805, 774, 2067, 3531, 1805, 1060, 3053, 1530, + 3719, 1531, 1532, 1093, 1533, 3529, 1805, 3028, 3031, 1881, + 1530, 3040, 1531, 1532, 2247, 1215, 1530, 3111, 1531, 1532, + 3574, 1530, 2663, 1531, 1532, 1533, 2662, 1530, 3050, 1531, + 1532, 2248, 2964, 3515, 1805, 2661, 1533, 3491, 1805, 2660, + 3058, 3570, 1533, 2167, 2165, 2166, 3090, 1533, 1530, 3044, + 1531, 1532, 1530, 1533, 1531, 1532, 1530, 1944, 1531, 1532, + 2658, 2657, 1530, 2656, 1531, 1532, 3347, 3069, 3001, 3002, + 3506, 3079, 3080, 1214, 1533, 2919, 1805, 1530, 1533, 1531, + 1532, 108, 1533, 3469, 3048, 3089, 3133, 3134, 1533, 3123, + 1530, 109, 1531, 1532, 1530, 3505, 1531, 1532, 1530, 4314, + 1531, 1532, 1495, 1533, 1895, 1530, 4348, 1531, 1532, 2720, + 3084, 1109, 3313, 3315, 137, 3649, 1533, 3112, 110, 3150, + 1533, 3316, 4404, 3115, 1533, 1108, 3131, 1530, 3303, 1531, + 1532, 1533, 1530, 2674, 1531, 1532, 3168, 3169, 3170, 3171, + 3172, 3173, 3174, 3175, 3176, 3177, 117, 2484, 2485, 4249, + 4038, 3091, 1530, 1533, 1531, 1532, 3185, 116, 1533, 115, + 3383, 3005, 2467, 4350, 2917, 1805, 1146, 110, 4349, 3619, + 3151, 1908, 1911, 1912, 1913, 1914, 1915, 1916, 1533, 1917, + 1918, 1920, 1921, 1919, 1922, 1923, 1896, 1897, 1898, 1899, + 1879, 1880, 1909, 2700, 1882, 2125, 1883, 1884, 1885, 1886, + 1887, 1888, 1889, 1890, 1891, 2892, 1805, 1892, 1900, 1901, + 1902, 1903, 2124, 1904, 1905, 1906, 1907, 115, 3245, 1893, + 3189, 1530, 116, 1531, 1532, 2869, 1805, 4107, 3833, 108, + 3121, 4106, 1805, 3122, 1530, 110, 1531, 1532, 2734, 109, + 4086, 3855, 2391, 3853, 2391, 3852, 117, 1533, 2740, 2741, + 2742, 2743, 3834, 2861, 1805, 3284, 3132, 116, 2982, 115, + 1533, 3715, 1530, 3283, 1531, 1532, 2997, 3000, 3001, 3002, + 2998, 3252, 2999, 3003, 3648, 3646, 2500, 3411, 117, 2596, + 1939, 3254, 1530, 117, 1531, 1532, 1107, 3807, 1533, 116, + 3178, 115, 2945, 1592, 116, 2852, 1805, 3629, 2393, 110, + 2393, 3497, 2242, 4376, 4375, 4376, 3187, 2243, 1533, 3225, + 1530, 3495, 1531, 1532, 2758, 3263, 3330, 2439, 92, 1851, + 1843, 121, 122, 2500, 2500, 2500, 2500, 2500, 3235, 3236, + 3237, 3238, 3239, 4375, 4131, 3683, 1533, 3253, 3288, 3255, + 3, 5, 1, 2500, 1068, 2305, 2500, 105, 4195, 3262, + 3290, 1498, 1530, 8, 1531, 1532, 3135, 1497, 1530, 3687, + 1531, 1532, 3280, 4278, 3152, 727, 2429, 3335, 1530, 3274, + 1531, 1532, 1771, 4326, 2079, 4274, 4275, 3352, 1533, 2036, + 2026, 2502, 3746, 2356, 1533, 3289, 1082, 4039, 3300, 3301, + 3302, 3287, 3835, 3297, 1533, 3836, 3263, 3838, 3414, 2602, + 3713, 3275, 3277, 3279, 2850, 1805, 3431, 2565, 2837, 1805, + 3317, 3318, 1167, 162, 2522, 2523, 3439, 3354, 4226, 125, + 3355, 1133, 3334, 1079, 1081, 2388, 2835, 1805, 2502, 2502, + 2502, 2502, 2502, 3440, 124, 3444, 1910, 3443, 3348, 3337, + 3338, 1080, 3340, 1170, 111, 1283, 112, 3356, 2502, 3336, + 2597, 2502, 3339, 3320, 3737, 2419, 3032, 3396, 3397, 2531, + 1876, 1530, 1874, 1531, 1532, 1530, 1875, 1531, 1532, 1873, + 3393, 1878, 1806, 2426, 3395, 3362, 3394, 1877, 4190, 2833, + 1805, 1842, 3477, 1530, 2759, 1531, 1532, 1533, 3575, 2130, + 764, 1533, 3004, 2831, 1805, 758, 200, 1865, 2567, 3412, + 1844, 2123, 3433, 1209, 717, 3392, 2635, 3326, 3450, 1533, + 723, 1583, 2118, 2451, 3326, 2829, 1805, 3282, 1767, 3019, + 2827, 1805, 1127, 1119, 1097, 2825, 1805, 2440, 2935, 2823, + 1805, 3465, 3462, 3464, 1126, 4016, 1530, 3331, 1531, 1532, + 2821, 1805, 3641, 3472, 3309, 2819, 1805, 3311, 3482, 3434, + 1530, 2969, 1531, 1532, 3314, 3498, 3499, 3500, 3501, 3502, + 3479, 3480, 1533, 3481, 3307, 2299, 3483, 4124, 3485, 3846, + 3487, 4347, 1530, 2915, 1531, 1532, 1533, 1530, 4213, 1531, + 1532, 3029, 1530, 1840, 1531, 1532, 1530, 1586, 1531, 1532, + 3595, 1586, 2731, 2817, 1805, 2237, 3413, 1530, 1533, 1531, + 1532, 1573, 1530, 1533, 1531, 1532, 789, 3620, 1533, 3622, + 2815, 1805, 1533, 2499, 2997, 3000, 3001, 3002, 2998, 960, + 2999, 3003, 3630, 1533, 3666, 3667, 1825, 3802, 1533, 3590, + 1530, 2157, 1531, 1532, 787, 786, 3594, 2579, 784, 2813, + 1805, 2937, 2983, 1537, 1536, 2382, 2383, 2384, 2385, 2386, + 1530, 995, 1531, 1532, 2925, 1852, 1533, 2996, 2994, 2993, + 2672, 2507, 2406, 3668, 3664, 2409, 2410, 1530, 4270, 1531, + 1532, 2501, 3329, 3473, 2497, 2944, 1533, 946, 945, 796, + 3621, 788, 3623, 3627, 2500, 778, 1009, 2811, 1805, 3625, + 944, 943, 3441, 1533, 3442, 2959, 1530, 3681, 1531, 1532, + 3128, 2427, 1818, 4315, 3305, 2961, 3030, 3293, 3638, 1514, + 1790, 1793, 3682, 2448, 3440, 3645, 3444, 1811, 3443, 3474, + 4149, 2699, 1533, 3503, 3650, 1789, 4156, 3154, 3155, 3156, + 3422, 3663, 3158, 3731, 3403, 3160, 3670, 3075, 3659, 2589, + 74, 50, 4116, 3673, 1530, 3675, 1531, 1532, 3467, 3468, + 3677, 3678, 4187, 938, 935, 3179, 3180, 3181, 3676, 3804, + 3805, 3806, 3248, 3249, 3186, 4169, 4170, 934, 4171, 3188, + 1533, 2294, 3190, 3191, 3192, 1508, 1505, 3059, 3193, 3194, + 2132, 104, 3195, 40, 3196, 3693, 3694, 39, 38, 2502, + 37, 3197, 36, 3198, 30, 29, 3699, 3199, 3701, 3200, + 28, 27, 3201, 26, 3202, 33, 3203, 23, 3204, 25, + 3205, 24, 3206, 22, 3207, 4386, 3208, 4387, 3209, 4416, + 3210, 4252, 3211, 4192, 3212, 3425, 3213, 4321, 3214, 2914, + 3215, 4403, 3216, 3724, 3217, 131, 3218, 3728, 3729, 3730, + 3219, 4352, 3220, 4313, 3221, 3743, 4312, 3222, 4263, 3223, + 4392, 3224, 4258, 2359, 3226, 60, 57, 3228, 3741, 3742, + 3230, 3231, 3232, 3233, 2809, 1805, 55, 139, 3234, 2359, + 2359, 2359, 2359, 2359, 2807, 1805, 138, 58, 56, 54, + 53, 3720, 3721, 1255, 3244, 51, 1530, 102, 1531, 1532, + 35, 3758, 3257, 34, 21, 3261, 3597, 20, 3599, 3600, + 3601, 19, 3769, 18, 3264, 3265, 3266, 3267, 3268, 3269, + 17, 2718, 1533, 3270, 3271, 2723, 3272, 16, 3273, 2805, + 1805, 1530, 15, 1531, 1532, 11, 10, 43, 42, 41, + 32, 1530, 31, 1531, 1532, 44, 7, 2, 2726, 3062, + 2727, 2591, 1112, 0, 0, 0, 2735, 1533, 0, 3820, + 2737, 2738, 3827, 0, 3829, 0, 0, 1533, 0, 2744, + 2745, 2746, 2747, 2748, 2749, 2750, 2751, 2752, 2753, 3810, + 2755, 3811, 3812, 3813, 3800, 3763, 1530, 0, 1531, 1532, + 0, 3321, 0, 0, 0, 3330, 0, 0, 92, 0, + 3330, 3830, 0, 2761, 2762, 2763, 2764, 0, 2766, 2767, + 0, 2769, 1533, 0, 0, 2771, 0, 0, 3351, 2776, + 2777, 0, 2778, 2201, 0, 2781, 2782, 2784, 2786, 2787, + 2788, 2789, 2790, 2791, 2793, 2795, 2796, 2797, 2799, 2199, + 2801, 2802, 2804, 2806, 2808, 2810, 2812, 2814, 2816, 2818, + 2820, 2822, 2824, 2826, 2828, 2830, 2832, 2834, 2836, 2838, + 2839, 2840, 3871, 2842, 4022, 2844, 1082, 2846, 2847, 3863, + 2849, 2851, 2853, 3862, 3860, 3409, 2856, 3861, 3858, 3851, + 2860, 3872, 3873, 3850, 2865, 2866, 2867, 2868, 3875, 3831, + 0, 0, 0, 0, 0, 0, 0, 2879, 2880, 2881, + 2882, 2883, 2884, 46, 0, 2888, 2889, 0, 0, 0, + 2803, 1805, 2891, 4014, 0, 4013, 0, 2897, 2798, 1805, + 0, 0, 2900, 2901, 2902, 2903, 2904, 0, 0, 0, + 0, 4033, 2910, 2911, 2912, 4034, 2913, 4081, 0, 2916, + 2918, 2451, 4080, 2920, 4024, 4025, 4026, 0, 2201, 0, + 3865, 0, 4029, 2932, 0, 0, 0, 0, 0, 0, + 3828, 0, 0, 0, 2199, 0, 0, 1530, 3496, 1531, + 1532, 4041, 0, 0, 0, 1530, 0, 1531, 1532, 0, + 0, 0, 0, 0, 3326, 2966, 0, 4084, 2739, 1530, + 0, 1531, 1532, 1533, 0, 0, 3511, 0, 4017, 0, + 0, 1533, 4132, 3330, 4087, 2754, 0, 0, 4090, 3867, + 0, 0, 0, 0, 0, 1533, 0, 1604, 1605, 1606, + 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, + 1617, 1618, 1619, 1620, 1621, 1622, 1624, 1625, 1626, 1627, + 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, + 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, + 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, + 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, + 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, + 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, + 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, + 1698, 1699, 1700, 1701, 1703, 1704, 1705, 1706, 1707, 1708, + 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, + 1724, 1725, 1726, 1727, 1741, 1742, 1743, 1744, 1745, 1746, + 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 4085, 4136, + 4137, 3329, 4114, 4133, 4113, 4135, 3329, 0, 4104, 0, + 0, 4150, 2794, 1805, 0, 4110, 0, 4112, 0, 0, + 198, 2792, 1805, 0, 0, 0, 0, 2785, 1805, 92, + 0, 2783, 1805, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2909, 180, + 0, 2427, 0, 0, 0, 3716, 0, 0, 4140, 1530, + 4021, 1531, 1532, 0, 0, 4155, 2908, 0, 1530, 0, + 1531, 1532, 0, 0, 1530, 0, 1531, 1532, 1530, 0, + 1531, 1532, 0, 0, 0, 1533, 4152, 1082, 3740, 0, + 4157, 0, 0, 0, 1533, 3163, 3164, 3165, 3166, 3167, + 1533, 0, 92, 0, 1533, 1530, 4194, 1531, 1532, 177, + 0, 4193, 178, 0, 0, 3182, 0, 0, 0, 4175, + 4210, 0, 4176, 1530, 46, 1531, 1532, 0, 0, 0, + 4142, 1533, 0, 0, 4201, 0, 0, 0, 197, 0, + 3759, 0, 3760, 0, 3761, 0, 3762, 0, 991, 1533, + 4185, 0, 4200, 0, 3765, 3766, 0, 4204, 0, 0, + 0, 0, 0, 4160, 3771, 0, 0, 4215, 0, 0, + 0, 4239, 0, 0, 4225, 4224, 0, 92, 3772, 4218, + 3773, 4223, 3774, 4220, 3775, 4219, 3776, 4217, 3777, 4222, + 3778, 4221, 3779, 0, 3780, 0, 3781, 0, 3782, 3329, + 3783, 0, 3784, 0, 3785, 0, 3786, 46, 3787, 203, + 4247, 3788, 203, 2907, 0, 3789, 762, 3790, 4265, 4264, + 0, 768, 0, 3792, 4041, 4228, 4269, 4277, 4282, 0, + 4305, 2906, 203, 4294, 92, 0, 4239, 0, 4307, 0, + 0, 0, 0, 0, 4292, 3809, 0, 0, 0, 203, + 0, 0, 0, 4205, 3814, 0, 3815, 3816, 0, 3817, + 4304, 3818, 4211, 4206, 0, 181, 3819, 0, 4309, 0, + 1530, 0, 1531, 1532, 187, 768, 203, 768, 0, 768, + 0, 0, 46, 4320, 0, 0, 0, 0, 1530, 92, + 1531, 1532, 0, 0, 2905, 4346, 1533, 0, 2079, 0, + 4335, 3859, 4336, 0, 3326, 0, 0, 3153, 2896, 4345, + 2201, 0, 0, 0, 1533, 3868, 0, 0, 3870, 4257, + 4365, 4367, 4339, 4373, 4371, 0, 2199, 92, 4369, 4390, + 3874, 4307, 0, 0, 0, 4380, 2895, 0, 4239, 46, + 2894, 0, 0, 3332, 4391, 4401, 3440, 4010, 3444, 4370, + 3443, 1530, 0, 1531, 1532, 0, 0, 4148, 0, 0, + 0, 0, 0, 3350, 4405, 1530, 0, 1531, 1532, 4411, + 0, 4413, 0, 92, 0, 0, 0, 1533, 4418, 0, + 0, 0, 4421, 2893, 0, 0, 0, 2890, 0, 0, + 0, 1533, 0, 1530, 46, 1531, 1532, 1530, 92, 1531, + 1532, 0, 4424, 0, 4430, 172, 4433, 0, 0, 0, + 4334, 92, 92, 0, 2201, 4307, 4437, 92, 4436, 1533, + 4081, 4307, 4438, 1533, 0, 4439, 0, 0, 0, 0, + 2199, 0, 46, 0, 0, 2885, 0, 0, 0, 3227, + 1530, 3229, 1531, 1532, 1530, 2878, 1531, 1532, 0, 91, + 48, 49, 93, 4434, 0, 2877, 0, 3240, 3241, 3242, + 3243, 0, 0, 0, 0, 0, 1533, 0, 98, 0, + 1533, 0, 52, 81, 82, 0, 79, 83, 46, 0, + 0, 0, 4119, 0, 3471, 0, 0, 0, 80, 0, + 0, 0, 1530, 0, 1531, 1532, 0, 0, 0, 0, + 103, 0, 1530, 46, 1531, 1532, 3488, 3489, 0, 3490, + 3492, 3494, 1530, 0, 1531, 1532, 46, 46, 1533, 0, + 67, 0, 46, 0, 0, 0, 0, 0, 1533, 0, + 4300, 0, 101, 4422, 0, 0, 0, 3507, 1533, 0, + 0, 0, 3510, 0, 3512, 3513, 3514, 3516, 3517, 3518, + 3519, 3520, 3521, 3522, 3523, 3524, 3525, 3526, 3527, 3528, + 3530, 3532, 3534, 3536, 3538, 3540, 3542, 3544, 3546, 3548, + 3550, 3552, 3554, 3556, 3558, 3560, 3561, 3563, 3564, 3565, + 3567, 2876, 88, 3569, 0, 3571, 3572, 3573, 0, 2875, + 3577, 3578, 3579, 3580, 3581, 3582, 3583, 3584, 3585, 3586, + 3587, 2874, 0, 0, 0, 0, 0, 0, 0, 3593, + 2873, 0, 0, 3598, 2872, 0, 0, 3602, 3603, 0, + 3604, 3606, 0, 3609, 3611, 0, 3613, 3614, 3615, 3616, + 0, 0, 0, 0, 0, 2871, 3624, 0, 1530, 0, + 1531, 1532, 0, 2870, 0, 0, 1530, 1894, 1531, 1532, + 0, 0, 2864, 0, 0, 0, 173, 2863, 1530, 0, + 1531, 1532, 0, 185, 1533, 0, 0, 1530, 0, 1531, + 1532, 1530, 1533, 1531, 1532, 0, 0, 0, 0, 95, + 59, 62, 61, 64, 1533, 78, 3656, 3657, 87, 84, + 3662, 4198, 1530, 1533, 1531, 1532, 2862, 1533, 0, 4163, + 1530, 0, 1531, 1532, 0, 193, 0, 4197, 1934, 1530, + 0, 1531, 1532, 2859, 1530, 0, 1531, 1532, 1533, 0, + 0, 0, 4199, 66, 97, 96, 1533, 0, 76, 77, + 63, 0, 0, 2858, 0, 1533, 85, 86, 2857, 0, + 1533, 0, 2855, 0, 0, 4177, 0, 0, 4178, 0, + 4179, 0, 0, 1530, 0, 1531, 1532, 0, 174, 179, + 176, 182, 183, 184, 186, 188, 189, 190, 191, 2848, + 1530, 0, 1531, 1532, 192, 194, 195, 196, 2845, 1533, + 0, 4196, 69, 2843, 70, 71, 72, 73, 198, 0, + 1530, 3735, 1531, 1532, 2841, 1530, 1533, 1531, 1532, 1530, + 0, 1531, 1532, 0, 0, 2800, 1881, 0, 0, 0, + 0, 137, 0, 0, 0, 2780, 1533, 0, 0, 2779, + 0, 1533, 0, 2775, 0, 1533, 1530, 180, 1531, 1532, + 3753, 0, 0, 3757, 0, 1530, 0, 1531, 1532, 0, + 1530, 0, 1531, 1532, 0, 0, 4256, 0, 65, 0, + 2773, 1530, 1533, 1531, 1532, 203, 0, 203, 0, 0, + 0, 1533, 1530, 4288, 1531, 1532, 1533, 3770, 0, 2765, + 0, 0, 1530, 3026, 1531, 1532, 1530, 1533, 1531, 1532, + 1530, 2736, 1531, 1532, 0, 0, 0, 177, 1533, 0, + 178, 4301, 0, 4302, 768, 4303, 768, 768, 1533, 0, + 0, 1895, 1533, 0, 0, 0, 1533, 1530, 0, 1531, + 1532, 0, 1767, 0, 0, 0, 197, 0, 768, 203, + 0, 0, 0, 0, 0, 0, 1530, 0, 1531, 1532, + 0, 3793, 0, 1533, 0, 0, 0, 0, 1530, 0, + 1531, 1532, 0, 0, 3801, 0, 0, 1578, 0, 0, + 94, 3808, 1533, 0, 0, 0, 0, 0, 2730, 0, + 0, 0, 2725, 0, 1533, 0, 0, 0, 1908, 1911, + 1912, 1913, 1914, 1915, 1916, 0, 1917, 1918, 1920, 1921, + 1919, 1922, 1923, 1896, 1897, 1898, 1899, 1879, 1880, 1909, + 4383, 1882, 4384, 1883, 1884, 1885, 1886, 1887, 1888, 1889, + 1890, 1891, 0, 0, 1892, 1900, 1901, 1902, 1903, 0, + 1904, 1905, 1906, 1907, 0, 1530, 1893, 1531, 1532, 1530, + 1795, 1531, 1532, 0, 0, 0, 0, 0, 0, 0, + 1795, 0, 0, 0, 1803, 0, 0, 1796, 4419, 4420, + 0, 1533, 0, 181, 1803, 1533, 0, 1796, 0, 0, + 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, + 100, 0, 2445, 2446, 1802, 1800, 1801, 1797, 0, 1798, + 0, 0, 1791, 1792, 1802, 1800, 1801, 1797, 0, 1798, + 0, 0, 0, 0, 0, 0, 0, 4030, 0, 0, + 0, 0, 1799, 0, 0, 0, 4037, 0, 0, 0, + 0, 0, 1799, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4047, 4048, 4049, 0, 4051, + 0, 4052, 4053, 0, 0, 0, 0, 4056, 4057, 4058, + 4059, 4060, 4061, 4062, 4063, 4064, 4065, 4066, 4067, 4068, + 4069, 4070, 4071, 4072, 4073, 4074, 4075, 4076, 4077, 0, + 4079, 4082, 3791, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4091, 4092, 4093, 4094, + 4095, 4097, 4098, 4100, 4102, 4103, 4105, 0, 75, 0, + 4109, 0, 0, 172, 4111, 0, 0, 0, 0, 0, + 0, 4121, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 203, 0, 0, 0, 768, 768, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4141, 0, 0, 1910, 203, 0, 0, 0, 990, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 768, 0, 0, 203, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 768, 0, 0, 0, + 0, 0, 0, 203, 0, 0, 0, 768, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 745, 0, 0, 0, 0, + 0, 767, 768, 0, 768, 0, 0, 0, 0, 0, + 0, 0, 768, 0, 0, 1578, 768, 0, 0, 768, + 768, 768, 768, 0, 768, 0, 768, 768, 0, 768, + 768, 768, 768, 768, 768, 0, 0, 0, 0, 0, + 0, 0, 1578, 768, 768, 1578, 768, 1578, 203, 768, + 0, 0, 0, 0, 0, 767, 0, 767, 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, - 203, 0, 0, 0, 0, 0, 0, 0, 91, 48, - 49, 93, 0, 0, 0, 88, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2561, 0, 98, 0, 0, - 0, 52, 81, 82, 4380, 79, 83, 767, 0, 767, - 767, 0, 0, 0, 0, 0, 0, 80, 160, 0, - 0, 161, 0, 0, 0, 0, 0, 0, 0, 103, - 0, 767, 203, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, - 0, 0, 173, 0, 0, 0, 0, 0, 0, 185, - 1577, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 95, 59, 62, 61, 64, 0, 78, 0, 0, - 87, 84, 0, 4189, 0, 0, 0, 0, 0, 2143, - 0, 193, 0, 0, 0, 2643, 0, 0, 0, 4188, - 0, 88, 0, 0, 0, 0, 2664, 2665, 0, 0, - 2669, 0, 0, 2672, 4190, 66, 97, 96, 0, 0, - 76, 77, 63, 2675, 0, 0, 0, 0, 85, 86, - 2678, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 174, 179, 176, 182, 183, 184, - 186, 188, 189, 190, 191, 0, 2681, 0, 0, 0, - 192, 194, 195, 196, 0, 0, 0, 0, 0, 0, - 0, 0, 4187, 69, 0, 70, 71, 72, 73, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 95, 59, 62, - 61, 64, 0, 78, 0, 0, 87, 84, 0, 4189, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4188, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, - 4190, 66, 97, 96, 0, 0, 76, 77, 63, 0, - 0, 0, 0, 0, 85, 86, 0, 0, 0, 0, + 0, 768, 0, 203, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 768, 0, 0, + 0, 768, 0, 0, 203, 203, 4120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 203, 0, 0, 173, 0, 4165, 0, 203, 0, + 0, 185, 0, 0, 0, 0, 0, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 768, 0, 0, 0, + 4180, 0, 0, 0, 0, 0, 4183, 0, 4184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4209, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 947, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4233, + 4234, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4241, 4243, 4245, 174, 179, 176, 182, + 183, 184, 186, 188, 189, 190, 191, 0, 0, 0, + 0, 0, 192, 194, 195, 196, 0, 0, 0, 0, + 0, 4268, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4290, 0, 0, 0, 0, 0, 766, 0, + 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1774, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1767, 137, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2730, 4187, 69, - 0, 70, 71, 72, 73, 0, 0, 2736, 2737, 2738, - 2739, 0, 0, 203, 0, 0, 0, 767, 767, 0, + 0, 180, 0, 0, 0, 0, 4317, 0, 0, 0, + 0, 0, 1137, 0, 1144, 0, 1148, 0, 768, 768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, - 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1591, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 767, 65, 0, 203, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, - 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, - 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 768, 0, 170, 709, 4340, 4342, 4344, + 4164, 158, 0, 0, 203, 0, 0, 0, 4174, 0, + 0, 0, 0, 0, 0, 0, 1063, 0, 0, 0, + 0, 177, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 767, 0, 767, 0, 0, - 0, 0, 0, 0, 0, 767, 0, 0, 1577, 767, - 0, 0, 767, 767, 767, 767, 0, 767, 0, 767, - 767, 0, 767, 767, 767, 767, 767, 767, 0, 0, - 0, 100, 0, 0, 0, 1577, 767, 767, 1577, 767, - 1577, 203, 767, 0, 0, 0, 0, 94, 0, 0, + 0, 4385, 0, 0, 0, 0, 146, 147, 169, 168, + 197, 0, 0, 0, 768, 0, 0, 0, 0, 0, + 1141, 0, 0, 0, 1578, 0, 0, 0, 0, 0, + 0, 0, 1767, 0, 0, 0, 0, 0, 0, 4414, + 4415, 0, 1578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1057, 767, 0, 203, 0, 995, 1058, - 1009, 1010, 1011, 996, 0, 0, 997, 998, 0, 999, - 767, 0, 0, 0, 767, 0, 0, 203, 203, 0, - 0, 0, 0, 0, 0, 0, 0, 1012, 1013, 0, - 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, - 1841, 203, 0, 3004, 0, 0, 0, 0, 0, 0, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 767, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, - 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1014, - 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, - 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, - 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, - 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, - 1055, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3092, 3093, 3094, - 3095, 3096, 3097, 3439, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2143, 3108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 163, 144, 166, 151, 143, 0, + 164, 165, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, + 0, 0, 0, 0, 0, 0, 187, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3116, 0, 0, 0, 0, 0, 0, 0, - 0, 767, 767, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 767, 3120, 0, 0, - 0, 0, 0, 0, 3440, 3441, 0, 203, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3146, 3147, 3148, 0, 0, 3150, - 0, 0, 3152, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3171, 3172, 3173, 0, 0, 767, 0, 0, - 0, 3178, 0, 0, 0, 0, 3180, 1577, 0, 3182, - 3183, 3184, 0, 0, 0, 3185, 3186, 0, 0, 3187, - 0, 3188, 0, 0, 0, 1577, 0, 0, 3189, 0, - 3190, 0, 0, 0, 3191, 0, 3192, 0, 0, 3193, - 0, 3194, 0, 3195, 0, 3196, 0, 3197, 0, 3198, - 0, 3199, 0, 3200, 0, 3201, 0, 3202, 0, 3203, - 0, 3204, 0, 3205, 0, 3206, 0, 3207, 0, 3208, - 0, 3209, 0, 3210, 0, 0, 0, 3211, 0, 3212, - 0, 3213, 0, 0, 3214, 0, 3215, 0, 3216, 0, - 2357, 3218, 0, 0, 3220, 0, 0, 3222, 3223, 3224, - 3225, 0, 0, 0, 0, 3226, 2357, 2357, 2357, 2357, - 2357, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3236, 0, 0, 0, 0, 0, 0, 0, 3249, - 0, 0, 3253, 0, 0, 0, 0, 0, 0, 0, - 0, 3256, 3257, 3258, 3259, 3260, 3261, 0, 0, 0, - 3262, 3263, 0, 3264, 0, 3265, 0, 0, 0, 0, - 0, 2403, 3283, 3284, 0, 3288, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1111, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, - 0, 767, 0, 0, 0, 0, 0, 0, 3313, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3343, 0, 767, 0, 0, 0, 0, - 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, + 0, 0, 155, 153, 148, 149, 150, 154, 0, 0, + 0, 0, 0, 0, 145, 0, 0, 0, 2405, 0, + 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 0, 0, 0, 767, - 0, 0, 2403, 203, 0, 203, 0, 203, 203, 0, - 0, 0, 0, 0, 0, 0, 0, 3429, 0, 0, - 3401, 0, 767, 0, 0, 0, 0, 0, 0, 0, - 0, 3443, 0, 91, 48, 49, 93, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3455, 0, 0, 3458, - 0, 0, 98, 0, 0, 0, 52, 81, 82, 0, - 79, 83, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, - 767, 0, 0, 0, 103, 0, 767, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 767, 0, 67, 0, 0, 0, 767, 767, - 0, 3488, 767, 0, 767, 0, 101, 0, 0, 0, - 767, 0, 989, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 767, 0, 0, 0, 0, - 767, 0, 0, 0, 767, 767, 88, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 744, - 0, 0, 0, 0, 0, 766, 0, 0, 0, 0, - 0, 0, 203, 0, 0, 0, 0, 0, 203, 0, - 0, 0, 0, 0, 3618, 0, 0, 0, 0, 203, - 203, 0, 0, 203, 0, 203, 203, 0, 0, 0, - 3624, 3625, 0, 0, 0, 0, 203, 0, 0, 0, - 0, 0, 0, 203, 0, 0, 0, 0, 0, 766, - 0, 766, 0, 766, 0, 0, 0, 0, 0, 0, - 0, 0, 95, 59, 62, 61, 64, 0, 78, 203, - 0, 87, 84, 0, 0, 0, 203, 0, 0, 0, - 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 66, 97, 96, 0, - 0, 76, 77, 63, 3688, 0, 0, 0, 0, 85, - 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 203, 0, 0, 0, 0, 768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1577, 0, 2403, 3707, 0, - 0, 0, 0, 68, 69, 0, 70, 71, 72, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 768, 0, 0, 0, 0, 0, 0, 0, + 203, 0, 0, 0, 0, 0, 0, 172, 0, 0, + 0, 0, 0, 0, 767, 1489, 767, 767, 0, 0, + 0, 0, 203, 0, 0, 0, 768, 0, 0, 2405, + 203, 0, 203, 0, 203, 203, 0, 0, 767, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3731, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3750, 0, 3751, 0, 3752, 0, 3753, - 0, 0, 0, 0, 0, 0, 0, 3756, 3757, 0, - 0, 0, 0, 0, 0, 0, 946, 3762, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 768, 0, 0, + 0, 0, 0, 768, 0, 167, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 768, + 0, 0, 0, 0, 0, 768, 768, 0, 0, 768, + 0, 768, 0, 0, 0, 0, 0, 768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3763, 0, 3764, 0, 3765, 0, 3766, 0, 3767, - 0, 3768, 0, 3769, 0, 3770, 0, 3771, 0, 3772, - 0, 3773, 0, 3774, 0, 3775, 0, 3776, 0, 3777, - 0, 3778, 0, 0, 3779, 0, 0, 0, 3780, 0, - 3781, 0, 0, 0, 0, 0, 3783, 0, 0, 0, - 0, 0, 94, 0, 0, 0, 0, 0, 0, 765, - 0, 0, 0, 0, 0, 0, 0, 0, 3800, 0, - 0, 0, 0, 0, 0, 0, 0, 3805, 0, 3806, - 3807, 0, 3808, 3833, 3809, 0, 3834, 3835, 3836, 3810, - 1057, 0, 0, 1100, 0, 0, 1058, 0, 0, 203, - 0, 0, 0, 0, 0, 0, 2198, 203, 0, 0, - 0, 0, 0, 1136, 0, 1143, 0, 1147, 767, 0, - 0, 0, 0, 0, 3850, 0, 0, 0, 0, 0, - 767, 767, 767, 203, 0, 0, 0, 3859, 0, 0, - 3861, 0, 0, 0, 0, 0, 767, 0, 0, 0, - 0, 0, 3865, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 100, 0, 0, 0, 0, 0, 0, 4001, - 0, 203, 0, 0, 0, 0, 203, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1014, 1015, 1016, 1017, - 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, - 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, - 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, - 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 768, 0, 0, 0, 0, 768, 0, 198, + 0, 768, 768, 0, 0, 0, 0, 0, 0, 0, + 3068, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 137, 0, 159, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 160, 0, 0, 161, 180, 203, + 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 203, 203, 0, + 0, 203, 0, 203, 203, 0, 0, 0, 173, 0, + 0, 0, 170, 0, 203, 185, 0, 0, 158, 0, + 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1322, 0, 1322, 1322, 0, 0, 0, 177, 0, + 0, 178, 0, 0, 0, 0, 0, 203, 0, 0, + 0, 0, 0, 0, 203, 1503, 0, 193, 0, 768, + 0, 0, 0, 1947, 1948, 169, 168, 197, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1256, + 0, 1264, 0, 0, 767, 767, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 174, 179, 176, 182, 183, 184, 186, 188, 189, 190, + 191, 0, 0, 0, 0, 0, 192, 194, 195, 196, + 0, 767, 0, 1578, 0, 2405, 0, 0, 0, 0, + 0, 0, 0, 1504, 0, 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, 0, 0, - 0, 0, 0, 0, 767, 0, 0, 0, 767, 767, - 75, 0, 0, 767, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1577, - 767, 0, 0, 0, 4110, 0, 0, 0, 0, 0, - 203, 203, 203, 203, 203, 203, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, - 203, 0, 0, 0, 0, 0, 1057, 0, 0, 0, - 0, 0, 1058, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2198, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 766, 1488, 766, - 766, 767, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 163, 1949, 166, 0, 1946, 0, 164, 165, 0, + 0, 0, 767, 0, 767, 0, 0, 0, 0, 0, + 0, 0, 767, 0, 181, 1577, 767, 0, 0, 767, + 767, 767, 767, 187, 767, 0, 767, 767, 0, 767, + 767, 767, 767, 767, 767, 0, 0, 0, 0, 0, + 0, 0, 1577, 767, 767, 1577, 767, 1577, 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1576, 767, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, - 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, - 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, - 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, - 1052, 1053, 1054, 1055, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4152, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 767, 0, 0, + 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4168, 767, 0, - 4169, 0, 4170, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1777, 1778, 0, 0, 0, 0, 203, 0, 0, + 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 768, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1894, 0, 768, 768, + 768, 203, 0, 0, 0, 0, 0, 0, 1848, 0, + 0, 0, 0, 0, 768, 0, 0, 0, 0, 0, + 0, 0, 0, 1866, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1925, 0, 0, 0, 0, 203, + 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, + 0, 0, 167, 0, 0, 0, 0, 0, 0, 1137, + 0, 1955, 0, 0, 0, 0, 0, 0, 0, 1964, + 0, 0, 0, 1966, 0, 0, 1969, 1970, 1972, 1972, + 0, 1972, 0, 1972, 1972, 0, 1981, 1972, 1972, 1972, + 1972, 1972, 0, 0, 0, 0, 0, 0, 1854, 0, + 2001, 2002, 0, 1137, 0, 0, 2007, 0, 0, 0, + 0, 0, 0, 0, 768, 0, 0, 1871, 767, 767, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 767, 0, 768, 0, 0, 2049, 0, + 0, 0, 768, 0, 0, 0, 768, 768, 0, 0, + 0, 768, 0, 0, 2071, 1881, 0, 0, 2076, 0, + 0, 160, 0, 0, 161, 0, 0, 1578, 768, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 203, 203, + 203, 203, 203, 203, 0, 0, 0, 0, 0, 0, + 0, 0, 2006, 0, 767, 173, 0, 0, 0, 0, + 0, 0, 185, 1322, 1577, 0, 0, 0, 0, 203, + 203, 0, 0, 2209, 0, 0, 0, 0, 0, 0, + 0, 0, 1577, 0, 0, 0, 0, 2051, 0, 0, + 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, + 0, 0, 0, 0, 193, 0, 0, 0, 0, 2080, + 1895, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 768, 0, 0, 0, 2091, 0, 0, 0, 0, + 0, 0, 2095, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2106, 2107, 2108, 2109, 2110, 2111, 2112, + 0, 0, 0, 0, 0, 0, 0, 174, 179, 176, + 182, 183, 184, 186, 188, 189, 190, 191, 0, 0, + 0, 768, 0, 192, 194, 195, 196, 1908, 1911, 1912, + 1913, 1914, 1915, 1916, 0, 1917, 1918, 1920, 1921, 1919, + 1922, 1923, 1896, 1897, 1898, 1899, 1879, 1880, 1909, 0, + 1882, 0, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, + 1891, 0, 0, 1892, 1900, 1901, 1902, 1903, 767, 1904, + 1905, 1906, 1907, 0, 0, 1893, 198, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1943, 0, 0, + 0, 0, 0, 0, 0, 1322, 1322, 0, 0, 137, + 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, + 2133, 0, 0, 0, 0, 180, 0, 0, 767, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 768, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 768, 170, + 0, 0, 767, 0, 0, 158, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2195, 0, 0, 0, 177, 0, 0, 178, 768, + 0, 0, 0, 0, 0, 0, 767, 0, 0, 767, 0, 0, 0, 0, 203, 203, 203, 0, 203, 0, + 1947, 1948, 169, 168, 197, 0, 0, 0, 2145, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 768, + 0, 0, 0, 1578, 0, 0, 768, 0, 0, 768, + 1578, 203, 203, 203, 203, 203, 0, 0, 0, 0, + 0, 0, 0, 203, 0, 0, 0, 0, 0, 203, + 0, 203, 0, 0, 203, 203, 203, 767, 0, 0, + 0, 0, 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, - 0, 0, 0, 1577, 0, 0, 767, 767, 1577, 203, - 203, 203, 203, 203, 0, 0, 0, 0, 4247, 0, - 0, 203, 0, 0, 0, 0, 0, 203, 0, 203, - 0, 0, 203, 203, 203, 4279, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 766, 766, 0, - 0, 0, 0, 4292, 0, 4293, 0, 4294, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1321, 0, 1321, 1321, 0, 0, 767, 0, 0, - 1577, 0, 0, 0, 0, 767, 0, 0, 0, 0, - 203, 0, 0, 0, 766, 1502, 0, 0, 0, 0, - 0, 0, 0, 0, 203, 0, 0, 0, 0, 766, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, - 766, 0, 203, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 766, 0, 766, 0, 0, - 0, 0, 4374, 0, 4375, 766, 0, 0, 1576, 766, - 0, 0, 766, 766, 766, 766, 0, 766, 0, 766, - 766, 0, 766, 766, 766, 766, 766, 766, 0, 0, - 0, 0, 0, 0, 0, 1576, 766, 766, 1576, 766, - 1576, 0, 766, 0, 0, 0, 0, 0, 0, 0, - 4410, 4411, 0, 0, 0, 0, 0, 0, 0, 0, - 101, 0, 0, 1057, 0, 0, 0, 0, 995, 1058, - 1009, 1010, 1011, 996, 766, 0, 997, 998, 0, 999, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 766, 0, 0, 0, 766, 1004, 0, 1012, 1013, 0, - 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 203, 0, 766, - 0, 0, 0, 0, 0, 0, 0, 3437, 3438, 0, - 0, 0, 0, 203, 203, 0, 0, 0, 0, 1014, - 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, - 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, - 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, - 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, - 1055, 0, 0, 0, 0, 0, 0, 0, 203, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, - 0, 1776, 1777, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3439, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 767, 767, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1847, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1865, 0, 0, 0, 0, 767, 767, - 767, 767, 0, 0, 1924, 0, 0, 0, 0, 0, - 0, 766, 766, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3440, 3441, 766, 0, 0, 1136, - 0, 1954, 0, 0, 0, 0, 0, 0, 0, 1963, - 0, 0, 0, 1965, 0, 0, 1968, 1969, 1971, 1971, - 0, 1971, 0, 1971, 1971, 0, 1980, 1971, 1971, 1971, - 1971, 1971, 0, 0, 0, 0, 0, 0, 0, 0, - 2000, 2001, 0, 1136, 0, 0, 2006, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 766, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1576, 0, 0, - 0, 0, 0, 0, 0, 0, 2207, 0, 2048, 0, - 0, 0, 0, 0, 0, 1576, 0, 0, 0, 0, - 0, 960, 0, 0, 2069, 0, 0, 964, 2074, 0, - 0, 961, 962, 0, 0, 0, 963, 965, 0, 0, + 0, 0, 1910, 0, 0, 767, 767, 0, 0, 767, + 0, 767, 0, 0, 0, 0, 0, 767, 163, 1949, + 166, 0, 1946, 0, 164, 165, 0, 0, 0, 768, + 0, 0, 1578, 0, 0, 0, 0, 768, 0, 0, + 0, 181, 203, 0, 0, 1322, 0, 0, 0, 0, + 187, 0, 767, 0, 0, 0, 203, 767, 0, 0, + 0, 767, 767, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 203, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 767, 0, 767, 0, 203, - 0, 0, 0, 1321, 0, 0, 203, 0, 0, 203, - 203, 203, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1577, 0, 0, 0, - 203, 0, 0, 767, 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 203, 0, 0, 767, 0, 0, + 0, 0, 0, 1848, 0, 0, 1322, 948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, + 0, 172, 0, 0, 0, 0, 1137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, + 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 203, 0, 0, 1144, 0, 2486, 0, 0, 0, + 2582, 710, 0, 1577, 2490, 767, 2493, 203, 203, 2145, + 0, 0, 0, 0, 0, 0, 1137, 0, 1087, 0, + 0, 0, 1144, 1964, 0, 0, 1964, 0, 1964, 0, + 0, 0, 0, 0, 2611, 0, 1113, 1113, 0, 167, + 0, 0, 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 766, 0, 0, 0, 0, + 0, 0, 203, 0, 0, 0, 0, 0, 0, 1137, + 0, 0, 0, 0, 2195, 0, 0, 0, 2195, 2195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1321, 1321, 0, 0, 0, - 0, 0, 0, 0, 767, 0, 0, 0, 0, 766, - 2131, 767, 766, 767, 0, 0, 0, 0, 0, 0, - 0, 0, 767, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, + 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 767, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 768, + 768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2193, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, + 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 768, 768, 768, 768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 766, 0, 0, 0, 0, 0, 766, 0, 0, 0, + 0, 0, 173, 0, 0, 0, 0, 0, 0, 185, + 0, 0, 0, 0, 0, 0, 2690, 0, 0, 0, + 0, 0, 0, 2145, 0, 0, 0, 0, 0, 2645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 766, 0, 0, 0, 0, 0, 766, 766, - 0, 0, 766, 0, 766, 0, 0, 0, 0, 0, - 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2668, 2669, 0, 0, 2673, 0, 0, 2676, 0, + 0, 193, 0, 0, 0, 0, 0, 0, 2679, 0, + 0, 0, 0, 0, 0, 2682, 767, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 767, 767, + 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2685, 1322, 0, 767, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 174, 179, 176, 182, 183, 184, + 186, 188, 189, 190, 191, 0, 0, 0, 0, 0, + 192, 194, 195, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3023, 0, 0, 0, 0, 0, 0, 0, 0, 768, + 0, 768, 0, 203, 0, 0, 0, 0, 0, 0, + 203, 0, 0, 203, 203, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 766, 0, 0, 0, 0, - 766, 0, 0, 0, 766, 766, 0, 0, 0, 0, + 1578, 0, 0, 0, 203, 0, 0, 768, 0, 0, + 768, 0, 0, 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 767, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, + 0, 0, 0, 0, 0, 767, 0, 0, 0, 0, + 0, 0, 767, 0, 0, 0, 767, 767, 0, 0, + 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 768, 1577, 767, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, + 0, 0, 768, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 767, 203, 0, 0, - 0, 0, 0, 0, 0, 1321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1058, 0, 0, 0, 0, 996, + 1059, 1010, 1011, 1012, 997, 0, 0, 998, 999, 0, + 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2938, 0, 0, 0, 0, 1013, 1014, + 0, 767, 0, 0, 0, 2954, 2955, 2956, 0, 768, + 0, 0, 0, 0, 0, 0, 768, 0, 768, 0, + 0, 2971, 0, 0, 0, 0, 0, 768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 767, 0, 0, 0, 0, 0, 0, 768, 0, + 0, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, + 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, + 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, + 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, + 1054, 1055, 1056, 0, 710, 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2440, 0, 0, 0, 0, - 0, 766, 767, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 767, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1577, 767, 0, 767, 2456, - 0, 0, 0, 0, 0, 947, 0, 0, 0, 0, + 0, 3056, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3010, 0, + 0, 0, 1148, 0, 0, 0, 0, 0, 0, 3076, + 0, 0, 0, 1964, 1964, 3447, 0, 0, 3081, 0, + 0, 0, 0, 0, 0, 0, 767, 0, 710, 0, + 0, 0, 0, 0, 0, 3092, 0, 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 767, 2403, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1847, 0, 0, 1321, 0, 0, 0, - 0, 0, 0, 0, 0, 1576, 0, 766, 0, 0, - 0, 0, 0, 0, 0, 0, 1136, 0, 0, 0, - 0, 0, 767, 767, 0, 0, 201, 0, 0, 709, - 0, 0, 0, 203, 767, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 709, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1086, 0, 0, 0, - 0, 0, 767, 0, 1143, 0, 0, 0, 0, 0, - 2580, 0, 0, 0, 1112, 1112, 0, 0, 0, 0, - 0, 0, 0, 709, 0, 0, 1136, 0, 0, 0, - 0, 0, 1143, 1963, 0, 0, 1963, 0, 1963, 0, - 0, 0, 0, 767, 2609, 203, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1579, 0, 768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, + 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 767, 0, 0, 0, 0, 0, 0, 1136, - 0, 0, 0, 0, 2193, 0, 0, 0, 2193, 2193, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 767, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 767, 0, 766, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 766, 766, 766, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2686, 766, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3017, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1321, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 766, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 766, 0, 0, - 0, 0, 0, 0, 766, 0, 0, 0, 766, 766, - 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1576, - 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2934, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2950, 2951, 2952, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2967, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 709, 0, 709, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 766, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 766, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3050, 0, 0, 0, 0, 0, 0, 0, 0, 766, - 0, 0, 0, 0, 0, 709, 0, 0, 0, 0, - 0, 1147, 0, 0, 0, 0, 0, 0, 3070, 0, - 0, 0, 1963, 1963, 0, 0, 0, 3075, 0, 0, - 0, 0, 0, 1578, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3086, 0, 0, 0, 0, 766, - 0, 0, 0, 1576, 0, 0, 766, 766, 1576, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3391, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2193, 0, 766, 0, 0, - 1576, 0, 0, 0, 0, 766, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2193, 0, 0, 0, 0, - 0, 0, 3462, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 709, 0, 0, 0, - 3238, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 766, 0, 1321, 0, 0, 0, 0, 0, 0, 0, - 1086, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1971, 0, 0, 0, 0, 0, 0, - 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 709, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1321, 0, 0, 0, 0, 0, 0, - 3325, 1971, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1578, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3677, 0, 1578, 0, - 0, 1578, 0, 1578, 709, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2022, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 766, 766, 0, 0, 709, - 0, 1136, 0, 0, 0, 0, 0, 0, 0, 1147, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2076, 709, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 709, 766, 766, - 766, 766, 0, 0, 709, 0, 0, 0, 0, 0, - 0, 0, 0, 2102, 2103, 709, 709, 709, 709, 709, - 709, 709, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1924, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 766, 0, 766, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1576, 0, 0, 0, - 0, 0, 0, 766, 0, 766, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 766, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 766, - 1578, 0, 0, 0, 0, 0, 0, 0, 0, 1147, - 1147, 0, 0, 0, 0, 0, 0, 0, 1578, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3738, 3739, 3740, 3741, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 766, 0, 0, 0, 0, 0, - 0, 766, 0, 766, 0, 0, 0, 0, 0, 0, - 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2076, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2022, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1112, 0, 0, 0, 3816, - 0, 3816, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1086, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3855, 0, 3857, - 0, 0, 0, 766, 0, 0, 0, 0, 709, 0, - 0, 0, 0, 0, 0, 2076, 709, 0, 709, 0, - 709, 2507, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 766, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1147, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4023, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1321, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1576, 766, 0, 766, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 766, 766, 0, 0, 0, 0, 3816, 0, - 0, 0, 0, 0, 0, 3816, 0, 3816, 0, 0, - 0, 0, 0, 0, 0, 0, 4114, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 766, 766, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 766, 0, 0, 1147, 0, 0, - 0, 0, 0, 0, 0, 709, 0, 0, 0, 0, - 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 709, 709, 0, 0, 709, 0, 2671, 709, - 0, 0, 766, 0, 0, 0, 0, 0, 0, 709, - 0, 0, 0, 0, 0, 0, 709, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 709, 766, 0, 0, 0, 0, 0, 2683, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 766, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 766, 0, 0, 0, 1147, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1578, 0, - 2076, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1147, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 766, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4172, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4180, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1147, 0, 4198, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1321, 1321, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3887, 3889, - 3888, 3954, 3955, 3956, 3957, 3958, 3959, 3960, 3890, 3891, - 837, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4250, 4258, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4263, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 768, 203, 0, 0, 0, 0, 3448, 3449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4180, 0, 0, 0, - 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, - 2022, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, + 0, 0, 0, 1577, 0, 0, 767, 0, 2195, 767, + 1577, 0, 3098, 3099, 3100, 3101, 3102, 3103, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 768, 0, 0, + 0, 0, 0, 2145, 3116, 0, 0, 768, 0, 0, + 0, 91, 48, 49, 93, 0, 0, 0, 2195, 0, + 1578, 768, 0, 768, 0, 0, 0, 0, 0, 3124, + 98, 0, 3399, 0, 52, 81, 82, 0, 79, 83, + 0, 0, 0, 0, 0, 0, 0, 768, 2405, 767, + 80, 0, 1577, 0, 0, 0, 0, 767, 0, 0, + 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 67, 0, 0, 0, 0, 768, 768, 0, + 0, 0, 0, 0, 101, 0, 0, 0, 203, 768, + 0, 0, 0, 0, 0, 0, 3470, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3246, 0, 0, 0, 768, 0, 0, + 0, 0, 0, 0, 88, 1322, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 710, + 0, 0, 0, 4389, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1972, 0, 768, 0, + 203, 0, 0, 1087, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 768, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 768, 0, 0, + 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 767, 0, 1322, 0, 0, 0, + 0, 0, 710, 3333, 0, 0, 1972, 0, 768, 0, + 0, 95, 59, 62, 61, 64, 0, 78, 0, 0, + 87, 84, 0, 4198, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4197, + 0, 0, 0, 0, 1579, 0, 0, 0, 0, 3291, + 3292, 0, 3296, 0, 4199, 66, 97, 96, 0, 0, + 76, 77, 63, 0, 0, 0, 0, 0, 85, 86, + 0, 1579, 0, 0, 1579, 0, 1579, 710, 0, 0, + 0, 768, 0, 0, 0, 0, 1137, 0, 0, 0, + 0, 0, 0, 0, 1148, 0, 0, 2023, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2953, 1147, 0, 0, + 0, 0, 710, 4196, 69, 0, 70, 71, 72, 73, + 3686, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2078, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1924, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4263, 0, 0, 0, - 0, 0, 0, 0, 709, 0, 0, 0, 0, 709, + 710, 0, 0, 0, 0, 0, 0, 710, 0, 767, + 767, 0, 0, 0, 0, 0, 2104, 2105, 710, 710, + 710, 710, 710, 710, 710, 0, 0, 0, 0, 0, + 65, 0, 0, 0, 0, 0, 3437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4258, 0, 0, + 3451, 0, 767, 767, 767, 767, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3463, 0, 0, + 3466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 91, 48, 49, + 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1925, 0, 0, 0, 0, 98, 0, 0, 0, + 52, 81, 82, 0, 79, 83, 0, 0, 0, 0, + 0, 0, 94, 0, 0, 0, 80, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, + 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, + 88, 0, 0, 710, 0, 3626, 0, 0, 0, 0, + 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, + 1577, 3632, 3633, 0, 0, 0, 0, 767, 0, 0, + 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1148, 1148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4258, 0, 0, 0, 3895, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3903, - 3904, 0, 0, 3979, 3978, 3977, 0, 0, 3975, 3976, - 3974, 0, 1578, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 709, 709, 709, 709, 709, 709, 0, + 0, 1579, 0, 0, 0, 0, 767, 0, 0, 3747, + 3748, 3749, 3750, 0, 0, 0, 0, 95, 59, 62, + 61, 64, 767, 78, 0, 3697, 87, 84, 0, 4198, + 0, 0, 0, 0, 767, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4197, 0, 0, 0, 0, + 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4199, 66, 97, 96, 0, 0, 76, 77, 63, 0, + 0, 0, 0, 0, 85, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 709, 709, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, + 0, 0, 0, 0, 0, 0, 767, 0, 767, 4196, + 69, 0, 70, 71, 72, 73, 0, 767, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2078, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 767, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3825, 0, 3825, 0, + 0, 0, 2023, 0, 0, 0, 65, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1113, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3864, 0, 0, 3866, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1087, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 710, 0, 0, 0, 0, 0, 0, 2078, 710, + 0, 710, 0, 710, 2509, 0, 0, 0, 0, 0, + 0, 0, 0, 1148, 3842, 0, 0, 3843, 3844, 3845, + 0, 0, 0, 0, 0, 0, 0, 0, 94, 4032, + 0, 0, 0, 0, 0, 0, 0, 0, 767, 0, + 0, 1322, 0, 0, 0, 0, 0, 0, 0, 91, + 48, 49, 93, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, + 0, 767, 52, 81, 82, 0, 79, 83, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3825, 0, 0, 0, + 67, 0, 0, 3825, 0, 3825, 0, 0, 0, 0, + 0, 0, 101, 0, 4123, 0, 0, 767, 100, 0, + 0, 0, 0, 0, 0, 0, 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3980, 960, 709, 813, - 814, 3981, 3982, 964, 3983, 816, 817, 961, 962, 0, - 811, 815, 963, 965, 0, 0, 0, 0, 0, 0, + 1577, 767, 0, 767, 0, 1148, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 88, 0, 0, 0, 0, 767, 767, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 710, 0, + 0, 0, 0, 0, 710, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 710, 710, 0, 0, + 710, 0, 2675, 710, 0, 0, 0, 767, 767, 0, + 0, 0, 0, 710, 0, 0, 0, 0, 0, 767, + 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 710, 0, 0, 0, + 0, 0, 0, 2687, 0, 0, 0, 767, 0, 95, + 59, 62, 61, 64, 0, 78, 0, 0, 87, 84, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1148, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 767, 0, + 0, 0, 0, 66, 97, 96, 0, 0, 76, 77, + 63, 0, 0, 0, 767, 0, 85, 86, 1148, 0, + 0, 0, 0, 0, 0, 0, 0, 767, 0, 0, + 0, 0, 1579, 0, 2078, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 767, 0, + 0, 68, 69, 0, 70, 71, 72, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3884, - 3885, 3886, 3892, 3893, 3894, 3905, 3952, 3953, 3961, 3963, - 916, 3962, 3964, 3965, 3966, 3969, 3970, 3971, 3972, 3967, - 3968, 3973, 3867, 3871, 3868, 3869, 3870, 3882, 3872, 3873, - 3874, 3875, 3876, 3877, 3878, 3879, 3880, 3881, 3883, 3984, - 3985, 3986, 3987, 3988, 3989, 3898, 3902, 3901, 3899, 3900, - 3896, 3897, 3924, 3923, 3925, 3926, 3927, 3928, 3929, 3930, - 3932, 3931, 3933, 3934, 3935, 3936, 3937, 3938, 3906, 3907, - 3910, 3911, 3909, 3908, 3912, 3921, 3922, 3913, 3914, 3915, - 3916, 3917, 3918, 3920, 3919, 3939, 3940, 3941, 3942, 3943, - 3945, 3944, 3948, 3949, 3947, 3946, 3951, 3950, 0, 0, + 0, 0, 0, 0, 4181, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4189, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4161, 0, 1148, 0, + 4207, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, + 0, 767, 0, 0, 1322, 1322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 966, 0, 967, 0, 0, 971, 0, 0, 0, - 973, 972, 0, 974, 936, 935, 0, 0, 968, 969, - 0, 970, 0, 0, 0, 0, 0, 0, 0, 0, + 3896, 3898, 3897, 3963, 3964, 3965, 3966, 3967, 3968, 3969, + 3899, 3900, 838, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4259, 4267, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4189, 0, 0, 0, 0, 0, + 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1058, 0, 0, 1101, 0, 0, + 1059, 0, 0, 0, 0, 0, 710, 0, 0, 0, + 2200, 0, 0, 0, 2023, 1148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1925, 0, 0, 0, 0, 0, 0, 0, 0, + 2957, 0, 0, 0, 4272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1112, 0, 709, 709, 709, - 0, 709, 0, 0, 0, 0, 0, 3990, 3991, 3992, - 3993, 3994, 3995, 3996, 3997, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1578, 0, 0, 0, - 0, 1578, 709, 709, 709, 709, 709, 0, 0, 0, - 0, 0, 0, 0, 3341, 0, 0, 0, 0, 0, - 2022, 0, 709, 0, 0, 709, 3349, 2076, 0, 0, + 0, 0, 0, 0, 0, 4267, 0, 0, 710, 0, + 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, + 100, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, + 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, + 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, + 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, + 1054, 1055, 1056, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4267, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3912, 3913, 0, 0, 3988, 3987, 3986, + 0, 0, 3984, 3985, 3983, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1579, 0, 75, 0, + 0, 0, 0, 0, 0, 0, 0, 710, 710, 710, + 710, 710, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 710, 710, + 3989, 961, 0, 814, 815, 3990, 3991, 965, 3992, 817, + 818, 962, 963, 0, 812, 816, 964, 966, 0, 0, + 0, 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1578, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 709, 0, 0, + 0, 0, 0, 3893, 3894, 3895, 3901, 3902, 3903, 3914, + 3961, 3962, 3970, 3972, 917, 3971, 3973, 3974, 3975, 3978, + 3979, 3980, 3981, 3976, 3977, 3982, 3876, 3880, 3877, 3878, + 3879, 3891, 3881, 3882, 3883, 3884, 3885, 3886, 3887, 3888, + 3889, 3890, 3892, 3993, 3994, 3995, 3996, 3997, 3998, 3907, + 3911, 3910, 3908, 3909, 3905, 3906, 3933, 3932, 3934, 3935, + 3936, 3937, 3938, 3939, 3941, 3940, 3942, 3943, 3944, 3945, + 3946, 3947, 3915, 3916, 3919, 3920, 3918, 3917, 3921, 3930, + 3931, 3922, 3923, 3924, 3925, 3926, 3927, 3929, 3928, 3948, + 3949, 3950, 3951, 3952, 3954, 3953, 3957, 3958, 3956, 3955, + 3960, 3959, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 967, 0, 968, 0, 0, + 972, 0, 0, 0, 974, 973, 0, 975, 937, 936, + 0, 0, 969, 970, 0, 971, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 709, 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3999, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 0, + 0, 1113, 0, 710, 710, 710, 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1579, 0, 0, 0, 0, 0, 0, 1579, + 710, 710, 710, 710, 710, 0, 0, 0, 0, 0, + 0, 0, 3349, 0, 0, 0, 0, 0, 2023, 0, + 710, 0, 0, 710, 3357, 2078, 101, 0, 0, 1058, + 0, 0, 0, 0, 996, 1059, 1010, 1011, 1012, 997, + 0, 0, 998, 999, 0, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1005, 0, 1013, 1014, 0, 0, 0, 0, 0, + 0, 1058, 0, 0, 0, 0, 0, 1059, 0, 0, + 0, 1579, 0, 0, 0, 0, 0, 2200, 0, 0, + 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 710, 0, 0, 0, 0, + 0, 0, 0, 0, 3445, 3446, 0, 0, 0, 0, + 0, 0, 710, 0, 0, 710, 1015, 1016, 1017, 1018, + 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, + 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, + 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, + 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1015, 1016, + 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, + 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, + 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, + 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 709, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3448, 3449, 0, 0, 710, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 710, 0, 0, 0, 0, 0, 0, 0, 0, 961, + 0, 0, 0, 0, 0, 965, 0, 0, 0, 962, + 963, 0, 0, 0, 964, 966, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3151,18 +2903,18 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2023, 0, 0, 0, 0, 0, 0, 710, + 0, 0, 710, 710, 710, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1579, + 0, 0, 0, 2023, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2022, 0, 0, 0, 0, 0, 0, 709, - 0, 0, 709, 709, 709, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1578, - 0, 0, 0, 2022, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2023, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2022, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3191,1788 +2943,1626 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2023, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2022, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, - 1471, 1450, 557, 0, 1391, 1474, 1356, 1377, 1484, 1380, - 1383, 1428, 1331, 1406, 438, 1374, 1360, 1326, 1368, 1327, - 1358, 1393, 286, 1355, 1452, 1410, 1473, 385, 283, 1333, - 1324, 212, 530, 1361, 453, 1379, 211, 1431, 511, 268, - 396, 393, 615, 298, 289, 285, 264, 336, 405, 450, - 547, 444, 1480, 389, 1416, 0, 522, 422, 1578, 0, - 0, 1457, 1456, 1384, 1395, 1462, 1404, 1443, 1389, 1430, - 1343, 1415, 1475, 1375, 1425, 1476, 342, 262, 344, 210, - 435, 523, 302, 0, 0, 0, 4218, 4220, 536, 991, - 0, 0, 0, 0, 4221, 0, 0, 0, 0, 249, - 0, 0, 256, 0, 0, 0, 370, 379, 378, 358, - 359, 361, 363, 369, 376, 382, 355, 364, 1371, 1422, - 641, 1469, 1372, 1424, 281, 340, 288, 280, 612, 1481, - 1461, 1330, 1403, 1468, 1398, 628, 2022, 0, 238, 1472, - 1397, 0, 1427, 0, 1487, 1325, 1418, 0, 1328, 1332, - 1483, 1466, 1364, 1365, 291, 0, 0, 0, 0, 0, - 0, 0, 1394, 1405, 1440, 1444, 1387, 0, 0, 0, - 0, 0, 0, 0, 0, 1362, 0, 1414, 0, 0, - 0, 1337, 1329, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2076, 0, - 0, 0, 0, 0, 0, 1392, 0, 0, 0, 0, - 1342, 0, 1363, 1441, 0, 1323, 313, 1334, 423, 273, - 0, 477, 1354, 319, 334, 1340, 1369, 1470, 1458, 1459, - 1460, 1339, 1448, 1465, 1388, 661, 1467, 1386, 1385, 1435, - 1338, 1455, 1378, 384, 1336, 349, 205, 233, 0, 1376, - 434, 485, 497, 1454, 1453, 1359, 1370, 269, 1367, 495, - 448, 636, 243, 300, 482, 455, 493, 463, 303, 1413, - 1433, 494, 391, 617, 473, 633, 662, 663, 279, 428, - 647, 551, 655, 680, 234, 276, 442, 535, 639, 519, - 417, 613, 614, 348, 518, 311, 209, 388, 668, 232, - 503, 390, 253, 241, 619, 644, 315, 267, 305, 480, - 675, 221, 546, 630, 250, 507, 0, 0, 683, 258, - 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, - 0, 481, 284, 309, 0, 0, 274, 437, 621, 622, - 272, 684, 237, 654, 228, 1335, 653, 430, 616, 627, - 414, 402, 227, 625, 412, 401, 353, 374, 375, 296, - 324, 470, 394, 471, 323, 325, 425, 424, 426, 215, - 640, 658, 0, 216, 0, 524, 643, 685, 475, 220, - 244, 245, 248, 1353, 295, 299, 307, 310, 320, 321, - 331, 386, 441, 469, 465, 474, 1449, 610, 634, 648, - 660, 666, 667, 669, 670, 671, 672, 673, 676, 674, - 429, 329, 520, 352, 392, 1438, 1486, 447, 496, 251, - 638, 521, 240, 604, 418, 427, 259, 261, 260, 235, - 512, 609, 246, 266, 207, 1347, 1352, 1345, 0, 270, - 271, 1419, 605, 1348, 1346, 1408, 1409, 1349, 1477, 1478, - 1479, 1463, 686, 687, 688, 689, 690, 691, 692, 693, - 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, - 681, 537, 543, 538, 539, 540, 541, 542, 0, 544, - 1442, 1341, 0, 1350, 1351, 419, 1451, 623, 624, 704, - 403, 510, 635, 354, 368, 371, 360, 380, 0, 381, - 356, 357, 362, 365, 366, 367, 372, 373, 377, 383, - 263, 218, 410, 420, 608, 330, 224, 225, 226, 553, - 554, 555, 556, 651, 652, 656, 213, 486, 487, 488, - 489, 308, 646, 326, 492, 491, 350, 351, 398, 472, - 569, 571, 582, 586, 588, 590, 596, 599, 570, 572, - 583, 587, 589, 591, 597, 600, 559, 561, 563, 565, - 578, 577, 574, 602, 603, 580, 585, 564, 576, 581, - 594, 601, 598, 558, 562, 566, 575, 593, 592, 573, - 584, 595, 579, 567, 560, 568, 1412, 204, 229, 387, - 1482, 478, 304, 682, 650, 508, 645, 214, 231, 1344, - 278, 1357, 1366, 0, 1373, 1381, 1382, 1396, 1399, 1400, - 1401, 1402, 1420, 1421, 1423, 1432, 1434, 1437, 1439, 1446, - 1464, 1485, 206, 208, 217, 230, 242, 247, 254, 277, - 292, 294, 301, 314, 327, 328, 337, 338, 341, 347, - 399, 406, 407, 408, 409, 431, 432, 433, 436, 439, - 440, 443, 445, 446, 449, 454, 458, 459, 460, 462, - 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, - 506, 513, 514, 515, 516, 517, 525, 526, 531, 532, - 533, 534, 545, 618, 620, 637, 657, 664, 504, 404, - 452, 476, 611, 1429, 1390, 317, 318, 467, 468, 332, - 333, 678, 679, 316, 632, 665, 629, 677, 659, 461, - 397, 1411, 1417, 400, 297, 322, 339, 1426, 649, 527, - 236, 490, 306, 265, 1445, 1447, 219, 257, 239, 275, - 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, - 483, 252, 509, 548, 549, 550, 552, 415, 282, 456, - 1407, 1436, 395, 606, 607, 335, 416, 0, 0, 0, - 0, 0, 0, 1471, 1450, 557, 0, 1391, 1474, 1356, - 1377, 1484, 1380, 1383, 1428, 1331, 1406, 438, 1374, 1360, - 1326, 1368, 1327, 1358, 1393, 286, 1355, 1452, 1410, 1473, - 385, 283, 1333, 1324, 212, 530, 1361, 453, 1379, 211, - 1431, 511, 268, 396, 393, 615, 298, 289, 285, 264, - 336, 405, 450, 547, 444, 1480, 389, 1416, 0, 522, - 422, 0, 0, 0, 1457, 1456, 1384, 1395, 1462, 1404, - 1443, 1389, 1430, 1343, 1415, 1475, 1375, 1425, 1476, 342, - 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, - 0, 536, 202, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, - 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, - 364, 1371, 1422, 641, 1469, 1372, 1424, 281, 340, 288, - 280, 612, 1481, 1461, 1330, 1403, 1468, 1398, 628, 0, - 0, 238, 1472, 1397, 0, 1427, 0, 1487, 1325, 1418, - 0, 1328, 1332, 1483, 1466, 1364, 1365, 291, 0, 0, - 0, 0, 0, 0, 0, 1394, 1405, 1440, 1444, 1387, - 0, 0, 0, 0, 0, 0, 3350, 0, 1362, 0, - 1414, 0, 0, 0, 1337, 1329, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1392, 0, - 0, 0, 0, 1342, 0, 1363, 1441, 0, 1323, 313, - 1334, 423, 273, 0, 477, 1354, 319, 334, 1340, 1369, - 1470, 1458, 1459, 1460, 1339, 1448, 1465, 1388, 661, 1467, - 1386, 1385, 1435, 1338, 1455, 1378, 384, 1336, 349, 205, - 233, 0, 1376, 434, 485, 497, 1454, 1453, 1359, 1370, - 269, 1367, 495, 448, 636, 243, 300, 482, 455, 493, - 463, 303, 1413, 1433, 494, 391, 617, 473, 633, 662, - 663, 279, 428, 647, 551, 655, 680, 234, 276, 442, - 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, - 388, 668, 232, 503, 390, 253, 241, 619, 644, 315, - 267, 305, 480, 675, 221, 546, 630, 250, 507, 0, - 0, 683, 258, 529, 642, 631, 223, 626, 528, 413, + 0, 1472, 1451, 557, 0, 1392, 1475, 1357, 1378, 1485, + 1381, 1384, 1429, 1332, 1407, 438, 1375, 1361, 1327, 1369, + 1328, 1359, 1394, 286, 1356, 1453, 1411, 1474, 385, 283, + 1334, 1325, 212, 530, 1362, 453, 1380, 211, 1432, 511, + 268, 396, 393, 615, 298, 289, 285, 264, 336, 405, + 450, 547, 444, 1481, 389, 1417, 651, 522, 422, 1579, + 0, 0, 1458, 1457, 1385, 1396, 1463, 1405, 1444, 1390, + 1431, 1344, 1416, 1476, 1376, 1426, 1477, 342, 262, 344, + 210, 435, 523, 302, 0, 0, 0, 4227, 4229, 536, + 992, 0, 0, 0, 0, 4230, 0, 0, 0, 0, + 249, 0, 0, 256, 0, 0, 0, 370, 379, 378, + 358, 359, 361, 363, 369, 376, 382, 355, 364, 1372, + 1423, 641, 1470, 1373, 1425, 281, 340, 288, 280, 612, + 1482, 1462, 1331, 1404, 1469, 1399, 628, 2023, 0, 238, + 1473, 1398, 0, 1428, 0, 1488, 1326, 1419, 0, 1329, + 1333, 1484, 1467, 1365, 1366, 291, 0, 0, 0, 0, + 0, 0, 0, 1395, 1406, 1441, 1445, 1388, 0, 416, + 0, 0, 0, 0, 0, 0, 0, 1363, 0, 1415, + 0, 0, 0, 1338, 1330, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2078, + 0, 0, 0, 0, 0, 0, 0, 1393, 0, 0, + 0, 0, 1343, 0, 1364, 1442, 0, 1324, 313, 1335, + 423, 273, 0, 477, 1355, 319, 334, 1341, 1370, 1471, + 1459, 1460, 1461, 1340, 1449, 1466, 1389, 662, 1468, 1387, + 1386, 1436, 1339, 1456, 1379, 384, 1337, 349, 205, 233, + 0, 1377, 434, 485, 497, 1455, 1454, 1360, 1371, 269, + 1368, 495, 448, 636, 243, 300, 482, 455, 493, 463, + 303, 1414, 1434, 494, 391, 617, 473, 633, 663, 664, + 279, 428, 647, 551, 656, 681, 234, 276, 442, 535, + 639, 519, 417, 613, 614, 348, 518, 311, 209, 388, + 669, 232, 503, 390, 253, 241, 619, 644, 315, 267, + 305, 480, 0, 676, 221, 546, 630, 250, 507, 0, + 0, 684, 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, 274, - 437, 621, 622, 272, 684, 237, 654, 228, 1335, 653, + 437, 621, 622, 272, 685, 237, 655, 228, 1336, 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, 425, - 424, 426, 215, 640, 658, 0, 216, 0, 524, 643, - 685, 475, 220, 244, 245, 248, 1353, 295, 299, 307, - 310, 320, 321, 331, 386, 441, 469, 465, 474, 1449, - 610, 634, 648, 660, 666, 667, 669, 670, 671, 672, - 673, 676, 674, 429, 329, 520, 352, 392, 1438, 1486, + 424, 426, 215, 640, 659, 0, 216, 0, 524, 643, + 686, 475, 220, 244, 245, 248, 1354, 295, 299, 307, + 310, 320, 321, 331, 386, 441, 469, 465, 474, 1450, + 610, 634, 648, 661, 667, 668, 670, 671, 672, 673, + 674, 677, 675, 429, 329, 520, 352, 392, 1439, 1487, 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, - 261, 260, 235, 512, 609, 246, 266, 207, 1347, 1352, - 1345, 0, 270, 271, 1419, 605, 1348, 1346, 1408, 1409, - 1349, 1477, 1478, 1479, 1463, 686, 687, 688, 689, 690, - 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, - 701, 702, 703, 681, 537, 543, 538, 539, 540, 541, - 542, 0, 544, 1442, 1341, 0, 1350, 1351, 419, 1451, - 623, 624, 704, 403, 510, 635, 354, 368, 371, 360, + 261, 260, 235, 512, 609, 246, 266, 207, 1348, 1353, + 1346, 0, 270, 271, 1420, 605, 1349, 1347, 1409, 1410, + 1350, 1478, 1479, 1480, 1464, 687, 688, 689, 690, 691, + 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 704, 682, 537, 543, 538, 539, 540, 541, + 542, 0, 544, 1443, 1342, 0, 1351, 1352, 419, 1452, + 623, 624, 705, 403, 510, 635, 354, 368, 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, 224, - 225, 226, 553, 554, 555, 556, 651, 652, 656, 213, + 225, 226, 553, 554, 555, 556, 652, 653, 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, 575, - 593, 592, 573, 584, 595, 579, 567, 560, 568, 1412, - 204, 229, 387, 1482, 478, 304, 682, 650, 508, 645, - 214, 231, 1344, 278, 1357, 1366, 0, 1373, 1381, 1382, - 1396, 1399, 1400, 1401, 1402, 1420, 1421, 1423, 1432, 1434, - 1437, 1439, 1446, 1464, 1485, 206, 208, 217, 230, 242, + 593, 592, 573, 584, 595, 579, 567, 560, 568, 1413, + 204, 229, 387, 1483, 478, 304, 683, 650, 508, 645, + 214, 231, 1345, 278, 1358, 1367, 0, 1374, 1382, 1383, + 1397, 1400, 1401, 1402, 1403, 1421, 1422, 1424, 1433, 1435, + 1438, 1440, 1447, 1465, 1486, 206, 208, 217, 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, - 526, 531, 532, 533, 534, 545, 618, 620, 637, 657, - 664, 504, 404, 452, 476, 611, 1429, 1390, 317, 318, - 467, 468, 332, 333, 678, 679, 316, 632, 665, 629, - 677, 659, 461, 397, 1411, 1417, 400, 297, 322, 339, - 1426, 649, 527, 236, 490, 306, 265, 1445, 1447, 219, + 526, 531, 532, 533, 534, 545, 618, 620, 637, 658, + 665, 504, 404, 452, 476, 611, 1430, 1391, 317, 318, + 467, 468, 332, 333, 679, 680, 316, 632, 666, 629, + 678, 660, 461, 397, 1412, 1418, 400, 297, 322, 339, + 1427, 649, 527, 236, 490, 306, 265, 1446, 1448, 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, 552, - 415, 282, 456, 1407, 1436, 395, 606, 607, 335, 416, - 0, 0, 0, 0, 0, 0, 1471, 1450, 557, 0, - 1391, 1474, 1356, 1377, 1484, 1380, 1383, 1428, 1331, 1406, - 438, 1374, 1360, 1326, 1368, 1327, 1358, 1393, 286, 1355, - 1452, 1410, 1473, 385, 283, 1333, 1324, 212, 530, 1361, - 453, 1379, 211, 1431, 511, 268, 396, 393, 615, 298, - 289, 285, 264, 336, 405, 450, 547, 444, 1480, 389, - 1416, 0, 522, 422, 0, 0, 0, 1457, 1456, 1384, - 1395, 1462, 1404, 1443, 1389, 1430, 1343, 1415, 1475, 1375, - 1425, 1476, 342, 262, 344, 210, 435, 523, 302, 0, - 0, 0, 0, 0, 536, 756, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 249, 0, 0, 256, 0, - 0, 0, 370, 379, 378, 358, 359, 361, 363, 369, - 376, 382, 355, 364, 1371, 1422, 641, 1469, 1372, 1424, - 281, 340, 288, 280, 612, 1481, 1461, 1330, 1403, 1468, - 1398, 628, 0, 0, 238, 1472, 1397, 0, 1427, 0, - 1487, 1325, 1418, 0, 1328, 1332, 1483, 1466, 1364, 1365, - 291, 0, 0, 0, 0, 0, 0, 0, 1394, 1405, - 1440, 1444, 1387, 0, 0, 0, 0, 0, 0, 3311, - 0, 1362, 0, 1414, 0, 0, 0, 1337, 1329, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1392, 0, 0, 0, 0, 1342, 0, 1363, 1441, - 0, 1323, 313, 1334, 423, 273, 0, 477, 1354, 319, - 334, 1340, 1369, 1470, 1458, 1459, 1460, 1339, 1448, 1465, - 1388, 661, 1467, 1386, 1385, 1435, 1338, 1455, 1378, 384, - 1336, 349, 205, 233, 0, 1376, 434, 485, 497, 1454, - 1453, 1359, 1370, 269, 1367, 495, 448, 636, 243, 300, - 482, 455, 493, 463, 303, 1413, 1433, 494, 391, 617, - 473, 633, 662, 663, 279, 428, 647, 551, 655, 680, - 234, 276, 442, 535, 639, 519, 417, 613, 614, 348, - 518, 311, 209, 388, 668, 232, 503, 390, 253, 241, - 619, 644, 315, 267, 305, 480, 675, 221, 546, 630, - 250, 507, 0, 0, 683, 258, 529, 642, 631, 223, - 626, 528, 413, 345, 346, 222, 0, 481, 284, 309, - 0, 0, 274, 437, 621, 622, 272, 684, 237, 654, - 228, 1335, 653, 430, 616, 627, 414, 402, 227, 625, - 412, 401, 353, 374, 375, 296, 324, 470, 394, 471, - 323, 325, 425, 424, 426, 215, 640, 658, 0, 216, - 0, 524, 643, 685, 475, 220, 244, 245, 248, 1353, - 295, 299, 307, 310, 320, 321, 331, 386, 441, 469, - 465, 474, 1449, 610, 634, 648, 660, 666, 667, 669, - 670, 671, 672, 673, 676, 674, 429, 329, 520, 352, - 392, 1438, 1486, 447, 496, 251, 638, 521, 240, 604, - 418, 427, 259, 261, 260, 235, 512, 609, 246, 266, - 207, 1347, 1352, 1345, 0, 270, 271, 1419, 605, 1348, - 1346, 1408, 1409, 1349, 1477, 1478, 1479, 1463, 686, 687, - 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, - 698, 699, 700, 701, 702, 703, 681, 537, 543, 538, - 539, 540, 541, 542, 0, 544, 1442, 1341, 0, 1350, - 1351, 419, 1451, 623, 624, 704, 403, 510, 635, 354, - 368, 371, 360, 380, 0, 381, 356, 357, 362, 365, - 366, 367, 372, 373, 377, 383, 263, 218, 410, 420, - 608, 330, 224, 225, 226, 553, 554, 555, 556, 651, - 652, 656, 213, 486, 487, 488, 489, 308, 646, 326, - 492, 491, 350, 351, 398, 472, 569, 571, 582, 586, - 588, 590, 596, 599, 570, 572, 583, 587, 589, 591, - 597, 600, 559, 561, 563, 565, 578, 577, 574, 602, - 603, 580, 585, 564, 576, 581, 594, 601, 598, 558, - 562, 566, 575, 593, 592, 573, 584, 595, 579, 567, - 560, 568, 1412, 204, 229, 387, 1482, 478, 304, 682, - 650, 508, 645, 214, 231, 1344, 278, 1357, 1366, 0, - 1373, 1381, 1382, 1396, 1399, 1400, 1401, 1402, 1420, 1421, - 1423, 1432, 1434, 1437, 1439, 1446, 1464, 1485, 206, 208, - 217, 230, 242, 247, 254, 277, 292, 294, 301, 314, - 327, 328, 337, 338, 341, 347, 399, 406, 407, 408, - 409, 431, 432, 433, 436, 439, 440, 443, 445, 446, - 449, 454, 458, 459, 460, 462, 464, 466, 479, 484, - 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, - 516, 517, 525, 526, 531, 532, 533, 534, 545, 618, - 620, 637, 657, 664, 504, 404, 452, 476, 611, 1429, - 1390, 317, 318, 467, 468, 332, 333, 678, 679, 316, - 632, 665, 629, 677, 659, 461, 397, 1411, 1417, 400, - 297, 322, 339, 1426, 649, 527, 236, 490, 306, 265, - 1445, 1447, 219, 257, 239, 275, 290, 293, 343, 411, - 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, - 549, 550, 552, 415, 282, 456, 1407, 1436, 395, 606, - 607, 335, 416, 0, 0, 0, 0, 0, 0, 1471, - 1450, 557, 0, 1391, 1474, 1356, 1377, 1484, 1380, 1383, - 1428, 1331, 1406, 438, 1374, 1360, 1326, 1368, 1327, 1358, - 1393, 286, 1355, 1452, 1410, 1473, 385, 283, 1333, 1324, - 212, 530, 1361, 453, 1379, 211, 1431, 511, 268, 396, + 415, 282, 456, 1408, 1437, 395, 606, 607, 335, 1472, + 1451, 557, 0, 1392, 1475, 1357, 1378, 1485, 1381, 1384, + 1429, 1332, 1407, 438, 1375, 1361, 1327, 1369, 1328, 1359, + 1394, 286, 1356, 1453, 1411, 1474, 385, 283, 1334, 1325, + 212, 530, 1362, 453, 1380, 211, 1432, 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, 405, 450, 547, - 444, 1480, 389, 1416, 0, 522, 422, 0, 0, 0, - 1457, 1456, 1384, 1395, 1462, 1404, 1443, 1389, 1430, 1343, - 1415, 1475, 1375, 1425, 1476, 342, 262, 344, 210, 435, - 523, 302, 0, 0, 0, 0, 0, 536, 991, 0, + 444, 1481, 389, 1417, 651, 522, 422, 0, 0, 0, + 1458, 1457, 1385, 1396, 1463, 1405, 1444, 1390, 1431, 1344, + 1416, 1476, 1376, 1426, 1477, 342, 262, 344, 210, 435, + 523, 302, 0, 0, 0, 0, 0, 536, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, 378, 358, 359, - 361, 363, 369, 376, 382, 355, 364, 1371, 1422, 641, - 1469, 1372, 1424, 281, 340, 288, 280, 612, 1481, 1461, - 1330, 1403, 1468, 1398, 628, 0, 0, 238, 1472, 1397, - 0, 1427, 0, 1487, 1325, 1418, 0, 1328, 1332, 1483, - 1466, 1364, 1365, 291, 0, 0, 0, 0, 0, 0, - 0, 1394, 1405, 1440, 1444, 1387, 0, 0, 0, 0, - 0, 0, 2486, 0, 1362, 0, 1414, 0, 0, 0, - 1337, 1329, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1392, 0, 0, 0, 0, 1342, - 0, 1363, 1441, 0, 1323, 313, 1334, 423, 273, 0, - 477, 1354, 319, 334, 1340, 1369, 1470, 1458, 1459, 1460, - 1339, 1448, 1465, 1388, 661, 1467, 1386, 1385, 1435, 1338, - 1455, 1378, 384, 1336, 349, 205, 233, 0, 1376, 434, - 485, 497, 1454, 1453, 1359, 1370, 269, 1367, 495, 448, - 636, 243, 300, 482, 455, 493, 463, 303, 1413, 1433, - 494, 391, 617, 473, 633, 662, 663, 279, 428, 647, - 551, 655, 680, 234, 276, 442, 535, 639, 519, 417, - 613, 614, 348, 518, 311, 209, 388, 668, 232, 503, - 390, 253, 241, 619, 644, 315, 267, 305, 480, 675, - 221, 546, 630, 250, 507, 0, 0, 683, 258, 529, + 361, 363, 369, 376, 382, 355, 364, 1372, 1423, 641, + 1470, 1373, 1425, 281, 340, 288, 280, 612, 1482, 1462, + 1331, 1404, 1469, 1399, 628, 0, 0, 238, 1473, 1398, + 0, 1428, 0, 1488, 1326, 1419, 0, 1329, 1333, 1484, + 1467, 1365, 1366, 291, 0, 0, 0, 0, 0, 0, + 0, 1395, 1406, 1441, 1445, 1388, 0, 416, 0, 0, + 0, 0, 0, 3358, 0, 1363, 0, 1415, 0, 0, + 0, 1338, 1330, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1393, 0, 0, 0, 0, + 1343, 0, 1364, 1442, 0, 1324, 313, 1335, 423, 273, + 0, 477, 1355, 319, 334, 1341, 1370, 1471, 1459, 1460, + 1461, 1340, 1449, 1466, 1389, 662, 1468, 1387, 1386, 1436, + 1339, 1456, 1379, 384, 1337, 349, 205, 233, 0, 1377, + 434, 485, 497, 1455, 1454, 1360, 1371, 269, 1368, 495, + 448, 636, 243, 300, 482, 455, 493, 463, 303, 1414, + 1434, 494, 391, 617, 473, 633, 663, 664, 279, 428, + 647, 551, 656, 681, 234, 276, 442, 535, 639, 519, + 417, 613, 614, 348, 518, 311, 209, 388, 669, 232, + 503, 390, 253, 241, 619, 644, 315, 267, 305, 480, + 0, 676, 221, 546, 630, 250, 507, 0, 0, 684, + 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, + 222, 0, 481, 284, 309, 0, 0, 274, 437, 621, + 622, 272, 685, 237, 655, 228, 1336, 654, 430, 616, + 627, 414, 402, 227, 625, 412, 401, 353, 374, 375, + 296, 324, 470, 394, 471, 323, 325, 425, 424, 426, + 215, 640, 659, 0, 216, 0, 524, 643, 686, 475, + 220, 244, 245, 248, 1354, 295, 299, 307, 310, 320, + 321, 331, 386, 441, 469, 465, 474, 1450, 610, 634, + 648, 661, 667, 668, 670, 671, 672, 673, 674, 677, + 675, 429, 329, 520, 352, 392, 1439, 1487, 447, 496, + 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, + 235, 512, 609, 246, 266, 207, 1348, 1353, 1346, 0, + 270, 271, 1420, 605, 1349, 1347, 1409, 1410, 1350, 1478, + 1479, 1480, 1464, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, + 704, 682, 537, 543, 538, 539, 540, 541, 542, 0, + 544, 1443, 1342, 0, 1351, 1352, 419, 1452, 623, 624, + 705, 403, 510, 635, 354, 368, 371, 360, 380, 0, + 381, 356, 357, 362, 365, 366, 367, 372, 373, 377, + 383, 263, 218, 410, 420, 608, 330, 224, 225, 226, + 553, 554, 555, 556, 652, 653, 657, 213, 486, 487, + 488, 489, 308, 646, 326, 492, 491, 350, 351, 398, + 472, 569, 571, 582, 586, 588, 590, 596, 599, 570, + 572, 583, 587, 589, 591, 597, 600, 559, 561, 563, + 565, 578, 577, 574, 602, 603, 580, 585, 564, 576, + 581, 594, 601, 598, 558, 562, 566, 575, 593, 592, + 573, 584, 595, 579, 567, 560, 568, 1413, 204, 229, + 387, 1483, 478, 304, 683, 650, 508, 645, 214, 231, + 1345, 278, 1358, 1367, 0, 1374, 1382, 1383, 1397, 1400, + 1401, 1402, 1403, 1421, 1422, 1424, 1433, 1435, 1438, 1440, + 1447, 1465, 1486, 206, 208, 217, 230, 242, 247, 254, + 277, 292, 294, 301, 314, 327, 328, 337, 338, 341, + 347, 399, 406, 407, 408, 409, 431, 432, 433, 436, + 439, 440, 443, 445, 446, 449, 454, 458, 459, 460, + 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, + 505, 506, 513, 514, 515, 516, 517, 525, 526, 531, + 532, 533, 534, 545, 618, 620, 637, 658, 665, 504, + 404, 452, 476, 611, 1430, 1391, 317, 318, 467, 468, + 332, 333, 679, 680, 316, 632, 666, 629, 678, 660, + 461, 397, 1412, 1418, 400, 297, 322, 339, 1427, 649, + 527, 236, 490, 306, 265, 1446, 1448, 219, 257, 239, + 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, + 255, 483, 252, 509, 548, 549, 550, 552, 415, 282, + 456, 1408, 1437, 395, 606, 607, 335, 1472, 1451, 557, + 0, 1392, 1475, 1357, 1378, 1485, 1381, 1384, 1429, 1332, + 1407, 438, 1375, 1361, 1327, 1369, 1328, 1359, 1394, 286, + 1356, 1453, 1411, 1474, 385, 283, 1334, 1325, 212, 530, + 1362, 453, 1380, 211, 1432, 511, 268, 396, 393, 615, + 298, 289, 285, 264, 336, 405, 450, 547, 444, 1481, + 389, 1417, 651, 522, 422, 0, 0, 0, 1458, 1457, + 1385, 1396, 1463, 1405, 1444, 1390, 1431, 1344, 1416, 1476, + 1376, 1426, 1477, 342, 262, 344, 210, 435, 523, 302, + 0, 0, 0, 0, 0, 536, 757, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 249, 0, 0, 256, + 0, 0, 0, 370, 379, 378, 358, 359, 361, 363, + 369, 376, 382, 355, 364, 1372, 1423, 641, 1470, 1373, + 1425, 281, 340, 288, 280, 612, 1482, 1462, 1331, 1404, + 1469, 1399, 628, 0, 0, 238, 1473, 1398, 0, 1428, + 0, 1488, 1326, 1419, 0, 1329, 1333, 1484, 1467, 1365, + 1366, 291, 0, 0, 0, 0, 0, 0, 0, 1395, + 1406, 1441, 1445, 1388, 0, 416, 0, 0, 0, 0, + 0, 3319, 0, 1363, 0, 1415, 0, 0, 0, 1338, + 1330, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1393, 0, 0, 0, 0, 1343, 0, + 1364, 1442, 0, 1324, 313, 1335, 423, 273, 0, 477, + 1355, 319, 334, 1341, 1370, 1471, 1459, 1460, 1461, 1340, + 1449, 1466, 1389, 662, 1468, 1387, 1386, 1436, 1339, 1456, + 1379, 384, 1337, 349, 205, 233, 0, 1377, 434, 485, + 497, 1455, 1454, 1360, 1371, 269, 1368, 495, 448, 636, + 243, 300, 482, 455, 493, 463, 303, 1414, 1434, 494, + 391, 617, 473, 633, 663, 664, 279, 428, 647, 551, + 656, 681, 234, 276, 442, 535, 639, 519, 417, 613, + 614, 348, 518, 311, 209, 388, 669, 232, 503, 390, + 253, 241, 619, 644, 315, 267, 305, 480, 0, 676, + 221, 546, 630, 250, 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, 274, 437, 621, 622, 272, - 684, 237, 654, 228, 1335, 653, 430, 616, 627, 414, + 685, 237, 655, 228, 1336, 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, 425, 424, 426, 215, 640, - 658, 0, 216, 0, 524, 643, 685, 475, 220, 244, - 245, 248, 1353, 295, 299, 307, 310, 320, 321, 331, - 386, 441, 469, 465, 474, 1449, 610, 634, 648, 660, - 666, 667, 669, 670, 671, 672, 673, 676, 674, 429, - 329, 520, 352, 392, 1438, 1486, 447, 496, 251, 638, + 659, 0, 216, 0, 524, 643, 686, 475, 220, 244, + 245, 248, 1354, 295, 299, 307, 310, 320, 321, 331, + 386, 441, 469, 465, 474, 1450, 610, 634, 648, 661, + 667, 668, 670, 671, 672, 673, 674, 677, 675, 429, + 329, 520, 352, 392, 1439, 1487, 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, 235, 512, - 609, 246, 266, 207, 1347, 1352, 1345, 0, 270, 271, - 1419, 605, 1348, 1346, 1408, 1409, 1349, 1477, 1478, 1479, - 1463, 686, 687, 688, 689, 690, 691, 692, 693, 694, - 695, 696, 697, 698, 699, 700, 701, 702, 703, 681, - 537, 543, 538, 539, 540, 541, 542, 0, 544, 1442, - 1341, 0, 1350, 1351, 419, 1451, 623, 624, 704, 403, + 609, 246, 266, 207, 1348, 1353, 1346, 0, 270, 271, + 1420, 605, 1349, 1347, 1409, 1410, 1350, 1478, 1479, 1480, + 1464, 687, 688, 689, 690, 691, 692, 693, 694, 695, + 696, 697, 698, 699, 700, 701, 702, 703, 704, 682, + 537, 543, 538, 539, 540, 541, 542, 0, 544, 1443, + 1342, 0, 1351, 1352, 419, 1452, 623, 624, 705, 403, 510, 635, 354, 368, 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, 224, 225, 226, 553, 554, - 555, 556, 651, 652, 656, 213, 486, 487, 488, 489, + 555, 556, 652, 653, 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, 575, 593, 592, 573, 584, - 595, 579, 567, 560, 568, 1412, 204, 229, 387, 1482, - 478, 304, 682, 650, 508, 645, 214, 231, 1344, 278, - 1357, 1366, 0, 1373, 1381, 1382, 1396, 1399, 1400, 1401, - 1402, 1420, 1421, 1423, 1432, 1434, 1437, 1439, 1446, 1464, - 1485, 206, 208, 217, 230, 242, 247, 254, 277, 292, + 595, 579, 567, 560, 568, 1413, 204, 229, 387, 1483, + 478, 304, 683, 650, 508, 645, 214, 231, 1345, 278, + 1358, 1367, 0, 1374, 1382, 1383, 1397, 1400, 1401, 1402, + 1403, 1421, 1422, 1424, 1433, 1435, 1438, 1440, 1447, 1465, + 1486, 206, 208, 217, 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, 531, 532, 533, - 534, 545, 618, 620, 637, 657, 664, 504, 404, 452, - 476, 611, 1429, 1390, 317, 318, 467, 468, 332, 333, - 678, 679, 316, 632, 665, 629, 677, 659, 461, 397, - 1411, 1417, 400, 297, 322, 339, 1426, 649, 527, 236, - 490, 306, 265, 1445, 1447, 219, 257, 239, 275, 290, + 534, 545, 618, 620, 637, 658, 665, 504, 404, 452, + 476, 611, 1430, 1391, 317, 318, 467, 468, 332, 333, + 679, 680, 316, 632, 666, 629, 678, 660, 461, 397, + 1412, 1418, 400, 297, 322, 339, 1427, 649, 527, 236, + 490, 306, 265, 1446, 1448, 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, - 252, 509, 548, 549, 550, 552, 415, 282, 456, 1407, - 1436, 395, 606, 607, 335, 416, 0, 0, 0, 0, - 0, 0, 1471, 1450, 557, 0, 1391, 1474, 1356, 1377, - 1484, 1380, 1383, 1428, 1331, 1406, 438, 1374, 1360, 1326, - 1368, 1327, 1358, 1393, 286, 1355, 1452, 1410, 1473, 385, - 283, 1333, 1324, 212, 530, 1361, 453, 1379, 211, 1431, - 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, - 405, 450, 547, 444, 1480, 389, 1416, 0, 522, 422, - 0, 0, 0, 1457, 1456, 1384, 1395, 1462, 1404, 1443, - 1389, 1430, 1343, 1415, 1475, 1375, 1425, 1476, 342, 262, - 344, 210, 435, 523, 302, 0, 101, 0, 0, 0, - 536, 756, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, - 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, - 1371, 1422, 641, 1469, 1372, 1424, 281, 340, 288, 280, - 612, 1481, 1461, 1330, 1403, 1468, 1398, 628, 0, 0, - 238, 1472, 1397, 0, 1427, 0, 1487, 1325, 1418, 0, - 1328, 1332, 1483, 1466, 1364, 1365, 291, 0, 0, 0, - 0, 0, 0, 0, 1394, 1405, 1440, 1444, 1387, 0, - 0, 0, 0, 0, 0, 0, 0, 1362, 0, 1414, - 0, 0, 0, 1337, 1329, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1392, 0, 0, - 0, 0, 1342, 0, 1363, 1441, 0, 1323, 313, 1334, - 423, 273, 0, 477, 1354, 319, 334, 1340, 1369, 1470, - 1458, 1459, 1460, 1339, 1448, 1465, 1388, 661, 1467, 1386, - 1385, 1435, 1338, 1455, 1378, 384, 1336, 349, 205, 233, - 0, 1376, 434, 485, 497, 1454, 1453, 1359, 1370, 269, - 1367, 495, 448, 636, 243, 300, 482, 455, 493, 463, - 303, 1413, 1433, 494, 391, 617, 473, 633, 662, 663, - 279, 428, 647, 551, 655, 680, 234, 276, 442, 535, - 639, 519, 417, 613, 614, 348, 518, 311, 209, 388, - 668, 232, 503, 390, 253, 241, 619, 644, 315, 267, - 305, 480, 675, 221, 546, 630, 250, 507, 0, 0, - 683, 258, 529, 642, 631, 223, 626, 528, 413, 345, - 346, 222, 0, 481, 284, 309, 0, 0, 274, 437, - 621, 622, 272, 684, 237, 654, 228, 1335, 653, 430, - 616, 627, 414, 402, 227, 625, 412, 401, 353, 374, - 375, 296, 324, 470, 394, 471, 323, 325, 425, 424, - 426, 215, 640, 658, 0, 216, 0, 524, 643, 685, - 475, 220, 244, 245, 248, 1353, 295, 299, 307, 310, - 320, 321, 331, 386, 441, 469, 465, 474, 1449, 610, - 634, 648, 660, 666, 667, 669, 670, 671, 672, 673, - 676, 674, 429, 329, 520, 352, 392, 1438, 1486, 447, - 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, - 260, 235, 512, 609, 246, 266, 207, 1347, 1352, 1345, - 0, 270, 271, 1419, 605, 1348, 1346, 1408, 1409, 1349, - 1477, 1478, 1479, 1463, 686, 687, 688, 689, 690, 691, - 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, - 702, 703, 681, 537, 543, 538, 539, 540, 541, 542, - 0, 544, 1442, 1341, 0, 1350, 1351, 419, 1451, 623, - 624, 704, 403, 510, 635, 354, 368, 371, 360, 380, - 0, 381, 356, 357, 362, 365, 366, 367, 372, 373, - 377, 383, 263, 218, 410, 420, 608, 330, 224, 225, - 226, 553, 554, 555, 556, 651, 652, 656, 213, 486, - 487, 488, 489, 308, 646, 326, 492, 491, 350, 351, - 398, 472, 569, 571, 582, 586, 588, 590, 596, 599, - 570, 572, 583, 587, 589, 591, 597, 600, 559, 561, - 563, 565, 578, 577, 574, 602, 603, 580, 585, 564, - 576, 581, 594, 601, 598, 558, 562, 566, 575, 593, - 592, 573, 584, 595, 579, 567, 560, 568, 1412, 204, - 229, 387, 1482, 478, 304, 682, 650, 508, 645, 214, - 231, 1344, 278, 1357, 1366, 0, 1373, 1381, 1382, 1396, - 1399, 1400, 1401, 1402, 1420, 1421, 1423, 1432, 1434, 1437, - 1439, 1446, 1464, 1485, 206, 208, 217, 230, 242, 247, - 254, 277, 292, 294, 301, 314, 327, 328, 337, 338, - 341, 347, 399, 406, 407, 408, 409, 431, 432, 433, - 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, - 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, - 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, - 531, 532, 533, 534, 545, 618, 620, 637, 657, 664, - 504, 404, 452, 476, 611, 1429, 1390, 317, 318, 467, - 468, 332, 333, 678, 679, 316, 632, 665, 629, 677, - 659, 461, 397, 1411, 1417, 400, 297, 322, 339, 1426, - 649, 527, 236, 490, 306, 265, 1445, 1447, 219, 257, - 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, - 287, 255, 483, 252, 509, 548, 549, 550, 552, 415, - 282, 456, 1407, 1436, 395, 606, 607, 335, 416, 0, - 0, 0, 0, 0, 0, 1471, 1450, 557, 0, 1391, - 1474, 1356, 1377, 1484, 1380, 1383, 1428, 1331, 1406, 438, - 1374, 1360, 1326, 1368, 1327, 1358, 1393, 286, 1355, 1452, - 1410, 1473, 385, 283, 1333, 1324, 212, 530, 1361, 453, - 1379, 211, 1431, 511, 268, 396, 393, 615, 298, 289, - 285, 264, 336, 405, 450, 547, 444, 1480, 389, 1416, - 0, 522, 422, 0, 0, 0, 1457, 1456, 1384, 1395, - 1462, 1404, 1443, 1389, 1430, 1343, 1415, 1475, 1375, 1425, - 1476, 342, 262, 344, 210, 435, 523, 302, 0, 0, - 0, 0, 0, 536, 202, 0, 0, 0, 0, 0, + 252, 509, 548, 549, 550, 552, 415, 282, 456, 1408, + 1437, 395, 606, 607, 335, 1472, 1451, 557, 0, 1392, + 1475, 1357, 1378, 1485, 1381, 1384, 1429, 1332, 1407, 438, + 1375, 1361, 1327, 1369, 1328, 1359, 1394, 286, 1356, 1453, + 1411, 1474, 385, 283, 1334, 1325, 212, 530, 1362, 453, + 1380, 211, 1432, 511, 268, 396, 393, 615, 298, 289, + 285, 264, 336, 405, 450, 547, 444, 1481, 389, 1417, + 651, 522, 422, 0, 0, 0, 1458, 1457, 1385, 1396, + 1463, 1405, 1444, 1390, 1431, 1344, 1416, 1476, 1376, 1426, + 1477, 342, 262, 344, 210, 435, 523, 302, 0, 0, + 0, 0, 0, 536, 992, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, 378, 358, 359, 361, 363, 369, 376, - 382, 355, 364, 1371, 1422, 641, 1469, 1372, 1424, 281, - 340, 288, 280, 612, 1481, 1461, 1330, 1403, 1468, 1398, - 628, 0, 0, 238, 1472, 1397, 0, 1427, 0, 1487, - 1325, 1418, 0, 1328, 1332, 1483, 1466, 1364, 1365, 291, - 0, 0, 0, 0, 0, 0, 0, 1394, 1405, 1440, - 1444, 1387, 0, 0, 0, 0, 0, 0, 0, 0, - 1362, 0, 1414, 0, 0, 0, 1337, 1329, 0, 0, + 382, 355, 364, 1372, 1423, 641, 1470, 1373, 1425, 281, + 340, 288, 280, 612, 1482, 1462, 1331, 1404, 1469, 1399, + 628, 0, 0, 238, 1473, 1398, 0, 1428, 0, 1488, + 1326, 1419, 0, 1329, 1333, 1484, 1467, 1365, 1366, 291, + 0, 0, 0, 0, 0, 0, 0, 1395, 1406, 1441, + 1445, 1388, 0, 416, 0, 0, 0, 0, 0, 2488, + 0, 1363, 0, 1415, 0, 0, 0, 1338, 1330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1392, 0, 0, 0, 0, 1342, 0, 1363, 1441, 0, - 1323, 313, 1334, 423, 273, 0, 477, 1354, 319, 334, - 1340, 1369, 1470, 1458, 1459, 1460, 1339, 1448, 1465, 1388, - 661, 1467, 1386, 1385, 1435, 1338, 1455, 1378, 384, 1336, - 349, 205, 233, 0, 1376, 434, 485, 497, 1454, 1453, - 1359, 1370, 269, 1367, 495, 448, 636, 243, 300, 482, - 455, 493, 463, 303, 1413, 1433, 494, 391, 617, 473, - 633, 662, 663, 279, 428, 647, 551, 655, 680, 234, - 276, 442, 535, 639, 519, 417, 613, 614, 348, 518, - 311, 209, 388, 668, 232, 503, 390, 253, 241, 619, - 644, 315, 267, 305, 480, 675, 221, 546, 630, 250, - 507, 0, 0, 683, 258, 529, 642, 631, 223, 626, + 0, 1393, 0, 0, 0, 0, 1343, 0, 1364, 1442, + 0, 1324, 313, 1335, 423, 273, 0, 477, 1355, 319, + 334, 1341, 1370, 1471, 1459, 1460, 1461, 1340, 1449, 1466, + 1389, 662, 1468, 1387, 1386, 1436, 1339, 1456, 1379, 384, + 1337, 349, 205, 233, 0, 1377, 434, 485, 497, 1455, + 1454, 1360, 1371, 269, 1368, 495, 448, 636, 243, 300, + 482, 455, 493, 463, 303, 1414, 1434, 494, 391, 617, + 473, 633, 663, 664, 279, 428, 647, 551, 656, 681, + 234, 276, 442, 535, 639, 519, 417, 613, 614, 348, + 518, 311, 209, 388, 669, 232, 503, 390, 253, 241, + 619, 644, 315, 267, 305, 480, 0, 676, 221, 546, + 630, 250, 507, 0, 0, 684, 258, 529, 642, 631, + 223, 626, 528, 413, 345, 346, 222, 0, 481, 284, + 309, 0, 0, 274, 437, 621, 622, 272, 685, 237, + 655, 228, 1336, 654, 430, 616, 627, 414, 402, 227, + 625, 412, 401, 353, 374, 375, 296, 324, 470, 394, + 471, 323, 325, 425, 424, 426, 215, 640, 659, 0, + 216, 0, 524, 643, 686, 475, 220, 244, 245, 248, + 1354, 295, 299, 307, 310, 320, 321, 331, 386, 441, + 469, 465, 474, 1450, 610, 634, 648, 661, 667, 668, + 670, 671, 672, 673, 674, 677, 675, 429, 329, 520, + 352, 392, 1439, 1487, 447, 496, 251, 638, 521, 240, + 604, 418, 427, 259, 261, 260, 235, 512, 609, 246, + 266, 207, 1348, 1353, 1346, 0, 270, 271, 1420, 605, + 1349, 1347, 1409, 1410, 1350, 1478, 1479, 1480, 1464, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, + 698, 699, 700, 701, 702, 703, 704, 682, 537, 543, + 538, 539, 540, 541, 542, 0, 544, 1443, 1342, 0, + 1351, 1352, 419, 1452, 623, 624, 705, 403, 510, 635, + 354, 368, 371, 360, 380, 0, 381, 356, 357, 362, + 365, 366, 367, 372, 373, 377, 383, 263, 218, 410, + 420, 608, 330, 224, 225, 226, 553, 554, 555, 556, + 652, 653, 657, 213, 486, 487, 488, 489, 308, 646, + 326, 492, 491, 350, 351, 398, 472, 569, 571, 582, + 586, 588, 590, 596, 599, 570, 572, 583, 587, 589, + 591, 597, 600, 559, 561, 563, 565, 578, 577, 574, + 602, 603, 580, 585, 564, 576, 581, 594, 601, 598, + 558, 562, 566, 575, 593, 592, 573, 584, 595, 579, + 567, 560, 568, 1413, 204, 229, 387, 1483, 478, 304, + 683, 650, 508, 645, 214, 231, 1345, 278, 1358, 1367, + 0, 1374, 1382, 1383, 1397, 1400, 1401, 1402, 1403, 1421, + 1422, 1424, 1433, 1435, 1438, 1440, 1447, 1465, 1486, 206, + 208, 217, 230, 242, 247, 254, 277, 292, 294, 301, + 314, 327, 328, 337, 338, 341, 347, 399, 406, 407, + 408, 409, 431, 432, 433, 436, 439, 440, 443, 445, + 446, 449, 454, 458, 459, 460, 462, 464, 466, 479, + 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, + 515, 516, 517, 525, 526, 531, 532, 533, 534, 545, + 618, 620, 637, 658, 665, 504, 404, 452, 476, 611, + 1430, 1391, 317, 318, 467, 468, 332, 333, 679, 680, + 316, 632, 666, 629, 678, 660, 461, 397, 1412, 1418, + 400, 297, 322, 339, 1427, 649, 527, 236, 490, 306, + 265, 1446, 1448, 219, 257, 239, 275, 290, 293, 343, + 411, 421, 451, 457, 312, 287, 255, 483, 252, 509, + 548, 549, 550, 552, 415, 282, 456, 1408, 1437, 395, + 606, 607, 335, 1472, 1451, 557, 0, 1392, 1475, 1357, + 1378, 1485, 1381, 1384, 1429, 1332, 1407, 438, 1375, 1361, + 1327, 1369, 1328, 1359, 1394, 286, 1356, 1453, 1411, 1474, + 385, 283, 1334, 1325, 212, 530, 1362, 453, 1380, 211, + 1432, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 1481, 389, 1417, 651, 522, + 422, 0, 0, 0, 1458, 1457, 1385, 1396, 1463, 1405, + 1444, 1390, 1431, 1344, 1416, 1476, 1376, 1426, 1477, 342, + 262, 344, 210, 435, 523, 302, 0, 101, 0, 0, + 0, 536, 757, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 1372, 1423, 641, 1470, 1373, 1425, 281, 340, 288, + 280, 612, 1482, 1462, 1331, 1404, 1469, 1399, 628, 0, + 0, 238, 1473, 1398, 0, 1428, 0, 1488, 1326, 1419, + 0, 1329, 1333, 1484, 1467, 1365, 1366, 291, 0, 0, + 0, 0, 0, 0, 0, 1395, 1406, 1441, 1445, 1388, + 0, 416, 0, 0, 0, 0, 0, 0, 0, 1363, + 0, 1415, 0, 0, 0, 1338, 1330, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1393, + 0, 0, 0, 0, 1343, 0, 1364, 1442, 0, 1324, + 313, 1335, 423, 273, 0, 477, 1355, 319, 334, 1341, + 1370, 1471, 1459, 1460, 1461, 1340, 1449, 1466, 1389, 662, + 1468, 1387, 1386, 1436, 1339, 1456, 1379, 384, 1337, 349, + 205, 233, 0, 1377, 434, 485, 497, 1455, 1454, 1360, + 1371, 269, 1368, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 1414, 1434, 494, 391, 617, 473, 633, + 663, 664, 279, 428, 647, 551, 656, 681, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 0, 676, 221, 546, 630, 250, + 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, - 0, 274, 437, 621, 622, 272, 684, 237, 654, 228, - 1335, 653, 430, 616, 627, 414, 402, 227, 625, 412, + 0, 274, 437, 621, 622, 272, 685, 237, 655, 228, + 1336, 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, - 325, 425, 424, 426, 215, 640, 658, 0, 216, 0, - 524, 643, 685, 475, 220, 244, 245, 248, 1353, 295, + 325, 425, 424, 426, 215, 640, 659, 0, 216, 0, + 524, 643, 686, 475, 220, 244, 245, 248, 1354, 295, 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, - 474, 1449, 610, 634, 648, 660, 666, 667, 669, 670, - 671, 672, 673, 676, 674, 429, 329, 520, 352, 392, - 1438, 1486, 447, 496, 251, 638, 521, 240, 604, 418, + 474, 1450, 610, 634, 648, 661, 667, 668, 670, 671, + 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, + 1439, 1487, 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, - 1347, 1352, 1345, 0, 270, 271, 1419, 605, 1348, 1346, - 1408, 1409, 1349, 1477, 1478, 1479, 1463, 686, 687, 688, - 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, - 699, 700, 701, 702, 703, 681, 537, 543, 538, 539, - 540, 541, 542, 0, 544, 1442, 1341, 0, 1350, 1351, - 419, 1451, 623, 624, 704, 403, 510, 635, 354, 368, + 1348, 1353, 1346, 0, 270, 271, 1420, 605, 1349, 1347, + 1409, 1410, 1350, 1478, 1479, 1480, 1464, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 682, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 1443, 1342, 0, 1351, 1352, + 419, 1452, 623, 624, 705, 403, 510, 635, 354, 368, 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, - 330, 224, 225, 226, 553, 554, 555, 556, 651, 652, - 656, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 330, 224, 225, 226, 553, 554, 555, 556, 652, 653, + 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, - 568, 1412, 204, 229, 387, 1482, 478, 304, 682, 650, - 508, 645, 214, 231, 1344, 278, 1357, 1366, 0, 1373, - 1381, 1382, 1396, 1399, 1400, 1401, 1402, 1420, 1421, 1423, - 1432, 1434, 1437, 1439, 1446, 1464, 1485, 206, 208, 217, + 568, 1413, 204, 229, 387, 1483, 478, 304, 683, 650, + 508, 645, 214, 231, 1345, 278, 1358, 1367, 0, 1374, + 1382, 1383, 1397, 1400, 1401, 1402, 1403, 1421, 1422, 1424, + 1433, 1435, 1438, 1440, 1447, 1465, 1486, 206, 208, 217, 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, - 637, 657, 664, 504, 404, 452, 476, 611, 1429, 1390, - 317, 318, 467, 468, 332, 333, 678, 679, 316, 632, - 665, 629, 677, 659, 461, 397, 1411, 1417, 400, 297, - 322, 339, 1426, 649, 527, 236, 490, 306, 265, 1445, - 1447, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 637, 658, 665, 504, 404, 452, 476, 611, 1430, 1391, + 317, 318, 467, 468, 332, 333, 679, 680, 316, 632, + 666, 629, 678, 660, 461, 397, 1412, 1418, 400, 297, + 322, 339, 1427, 649, 527, 236, 490, 306, 265, 1446, + 1448, 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, - 550, 552, 415, 282, 456, 1407, 1436, 395, 606, 607, - 335, 416, 0, 0, 0, 0, 0, 0, 1471, 1450, - 557, 0, 1391, 1474, 1356, 1377, 1484, 1380, 1383, 1428, - 1331, 1406, 438, 1374, 1360, 1326, 1368, 1327, 1358, 1393, - 286, 1355, 1452, 1410, 1473, 385, 283, 1333, 1324, 212, - 530, 1361, 453, 1379, 211, 1431, 511, 268, 396, 393, - 615, 298, 289, 285, 264, 336, 405, 450, 547, 444, - 1480, 389, 1416, 0, 522, 422, 0, 0, 0, 1457, - 1456, 1384, 1395, 1462, 1404, 1443, 1389, 1430, 1343, 1415, - 1475, 1375, 1425, 1476, 342, 262, 344, 210, 435, 523, - 302, 0, 0, 0, 0, 0, 536, 756, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, - 256, 0, 0, 0, 370, 379, 378, 358, 359, 361, - 363, 369, 376, 382, 355, 364, 1371, 1422, 641, 1469, - 1372, 1424, 281, 340, 288, 280, 612, 1481, 1461, 1330, - 1403, 1468, 1398, 628, 0, 0, 238, 1472, 1397, 0, - 1427, 0, 1487, 1325, 1418, 0, 1328, 1332, 1483, 1466, - 1364, 1365, 291, 0, 0, 0, 0, 0, 0, 0, - 1394, 1405, 1440, 1444, 1387, 0, 0, 0, 0, 0, - 0, 0, 0, 1362, 0, 1414, 0, 0, 0, 1337, - 1329, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1392, 0, 0, 0, 0, 1342, 0, - 1363, 1441, 0, 1323, 313, 1334, 423, 273, 0, 477, - 1354, 319, 334, 1340, 1369, 1470, 1458, 1459, 1460, 1339, - 1448, 1465, 1388, 661, 1467, 1386, 1385, 1435, 1338, 1455, - 1378, 384, 1336, 349, 205, 233, 0, 1376, 434, 485, - 497, 1454, 1453, 1359, 1370, 269, 1367, 495, 448, 636, - 243, 300, 482, 455, 493, 463, 303, 1413, 1433, 494, - 391, 617, 473, 633, 662, 663, 279, 428, 647, 551, - 655, 680, 234, 276, 442, 535, 639, 519, 417, 613, - 614, 348, 518, 311, 209, 388, 668, 232, 503, 390, - 253, 241, 619, 644, 315, 267, 305, 480, 675, 221, - 546, 630, 250, 507, 0, 0, 683, 258, 529, 642, - 631, 223, 626, 528, 413, 345, 346, 222, 0, 481, - 284, 309, 0, 0, 274, 437, 621, 622, 272, 684, - 237, 654, 228, 1335, 653, 430, 616, 627, 414, 402, - 227, 625, 412, 401, 353, 374, 375, 296, 324, 470, - 394, 471, 323, 325, 425, 424, 426, 215, 640, 658, - 0, 216, 0, 524, 643, 685, 475, 220, 244, 245, - 248, 1353, 295, 299, 307, 310, 320, 321, 331, 386, - 441, 469, 465, 474, 1449, 610, 634, 648, 660, 666, - 667, 669, 670, 671, 672, 673, 676, 674, 429, 329, - 520, 352, 392, 1438, 1486, 447, 496, 251, 638, 521, - 240, 604, 418, 427, 259, 261, 260, 235, 512, 609, - 246, 266, 207, 1347, 1352, 1345, 0, 270, 271, 1419, - 605, 1348, 1346, 1408, 1409, 1349, 1477, 1478, 1479, 1463, - 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, - 696, 697, 698, 699, 700, 701, 702, 703, 681, 537, - 543, 538, 539, 540, 541, 542, 0, 544, 1442, 1341, - 0, 1350, 1351, 419, 1451, 623, 624, 704, 403, 510, - 635, 354, 368, 371, 360, 380, 0, 381, 356, 357, - 362, 365, 366, 367, 372, 373, 377, 383, 263, 218, - 410, 420, 608, 330, 224, 225, 226, 553, 554, 555, - 556, 651, 652, 656, 213, 486, 487, 488, 489, 308, - 646, 326, 492, 491, 350, 351, 398, 472, 569, 571, - 582, 586, 588, 590, 596, 599, 570, 572, 583, 587, - 589, 591, 597, 600, 559, 561, 563, 565, 578, 577, - 574, 602, 603, 580, 585, 564, 576, 581, 594, 601, - 598, 558, 562, 566, 575, 593, 592, 573, 584, 595, - 579, 567, 560, 568, 1412, 204, 229, 387, 1482, 478, - 304, 682, 650, 508, 645, 214, 231, 1344, 278, 1357, - 1366, 0, 1373, 1381, 1382, 1396, 1399, 1400, 1401, 1402, - 1420, 1421, 1423, 1432, 1434, 1437, 1439, 1446, 1464, 1485, - 206, 208, 217, 230, 242, 247, 254, 277, 292, 294, - 301, 314, 327, 328, 337, 338, 341, 347, 399, 406, - 407, 408, 409, 431, 432, 433, 436, 439, 440, 443, - 445, 446, 449, 454, 458, 459, 460, 462, 464, 466, - 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, - 514, 515, 516, 517, 525, 526, 531, 532, 533, 534, - 545, 618, 620, 637, 657, 664, 504, 404, 452, 476, - 611, 1429, 1390, 317, 318, 467, 468, 332, 333, 678, - 679, 316, 632, 665, 629, 677, 659, 461, 397, 1411, - 1417, 400, 297, 322, 339, 1426, 649, 527, 236, 490, - 306, 265, 1445, 1447, 219, 257, 239, 275, 290, 293, - 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, - 509, 548, 549, 550, 552, 415, 282, 456, 1407, 1436, - 395, 606, 607, 335, 416, 0, 0, 0, 0, 0, - 0, 1471, 1450, 557, 0, 1391, 1474, 1356, 1377, 1484, - 1380, 1383, 1428, 1331, 1406, 438, 1374, 1360, 1326, 1368, - 1327, 1358, 1393, 286, 1355, 1452, 1410, 1473, 385, 283, - 1333, 1324, 212, 530, 1361, 453, 1379, 211, 1431, 511, + 550, 552, 415, 282, 456, 1408, 1437, 395, 606, 607, + 335, 1472, 1451, 557, 0, 1392, 1475, 1357, 1378, 1485, + 1381, 1384, 1429, 1332, 1407, 438, 1375, 1361, 1327, 1369, + 1328, 1359, 1394, 286, 1356, 1453, 1411, 1474, 385, 283, + 1334, 1325, 212, 530, 1362, 453, 1380, 211, 1432, 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, 405, - 450, 547, 444, 1480, 389, 1416, 0, 522, 422, 0, - 0, 0, 1457, 1456, 1384, 1395, 1462, 1404, 1443, 1389, - 1430, 1343, 1415, 1475, 1375, 1425, 1476, 342, 262, 344, + 450, 547, 444, 1481, 389, 1417, 651, 522, 422, 0, + 0, 0, 1458, 1457, 1385, 1396, 1463, 1405, 1444, 1390, + 1431, 1344, 1416, 1476, 1376, 1426, 1477, 342, 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, 0, 536, - 991, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, 378, - 358, 359, 361, 363, 369, 376, 382, 355, 364, 1371, - 1422, 641, 1469, 1372, 1424, 281, 340, 288, 280, 612, - 1481, 1461, 1330, 1403, 1468, 1398, 628, 0, 0, 238, - 1472, 1397, 0, 1427, 0, 1487, 1325, 1418, 0, 1328, - 1332, 1483, 1466, 1364, 1365, 291, 0, 0, 0, 0, - 0, 0, 0, 1394, 1405, 1440, 1444, 1387, 0, 0, - 0, 0, 0, 0, 0, 0, 1362, 0, 1414, 0, - 0, 0, 1337, 1329, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1392, 0, 0, 0, - 0, 1342, 0, 1363, 1441, 0, 1323, 313, 1334, 423, - 273, 0, 477, 1354, 319, 334, 1340, 1369, 1470, 1458, - 1459, 1460, 1339, 1448, 1465, 1388, 661, 1467, 1386, 1385, - 1435, 1338, 1455, 1378, 384, 1336, 349, 205, 233, 0, - 1376, 434, 485, 497, 1454, 1453, 1359, 1370, 269, 1367, - 495, 448, 636, 243, 300, 482, 455, 493, 463, 303, - 1413, 1433, 494, 391, 617, 473, 633, 662, 663, 279, - 428, 647, 551, 655, 680, 234, 276, 442, 535, 639, - 519, 417, 613, 614, 348, 518, 311, 209, 388, 668, - 232, 503, 390, 253, 241, 619, 644, 315, 267, 305, - 480, 675, 221, 546, 630, 250, 507, 0, 0, 683, + 358, 359, 361, 363, 369, 376, 382, 355, 364, 1372, + 1423, 641, 1470, 1373, 1425, 281, 340, 288, 280, 612, + 1482, 1462, 1331, 1404, 1469, 1399, 628, 0, 0, 238, + 1473, 1398, 0, 1428, 0, 1488, 1326, 1419, 0, 1329, + 1333, 1484, 1467, 1365, 1366, 291, 0, 0, 0, 0, + 0, 0, 0, 1395, 1406, 1441, 1445, 1388, 0, 416, + 0, 0, 0, 0, 0, 0, 0, 1363, 0, 1415, + 0, 0, 0, 1338, 1330, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1393, 0, 0, + 0, 0, 1343, 0, 1364, 1442, 0, 1324, 313, 1335, + 423, 273, 0, 477, 1355, 319, 334, 1341, 1370, 1471, + 1459, 1460, 1461, 1340, 1449, 1466, 1389, 662, 1468, 1387, + 1386, 1436, 1339, 1456, 1379, 384, 1337, 349, 205, 233, + 0, 1377, 434, 485, 497, 1455, 1454, 1360, 1371, 269, + 1368, 495, 448, 636, 243, 300, 482, 455, 493, 463, + 303, 1414, 1434, 494, 391, 617, 473, 633, 663, 664, + 279, 428, 647, 551, 656, 681, 234, 276, 442, 535, + 639, 519, 417, 613, 614, 348, 518, 311, 209, 388, + 669, 232, 503, 390, 253, 241, 619, 644, 315, 267, + 305, 480, 0, 676, 221, 546, 630, 250, 507, 0, + 0, 684, 258, 529, 642, 631, 223, 626, 528, 413, + 345, 346, 222, 0, 481, 284, 309, 0, 0, 274, + 437, 621, 622, 272, 685, 237, 655, 228, 1336, 654, + 430, 616, 627, 414, 402, 227, 625, 412, 401, 353, + 374, 375, 296, 324, 470, 394, 471, 323, 325, 425, + 424, 426, 215, 640, 659, 0, 216, 0, 524, 643, + 686, 475, 220, 244, 245, 248, 1354, 295, 299, 307, + 310, 320, 321, 331, 386, 441, 469, 465, 474, 1450, + 610, 634, 648, 661, 667, 668, 670, 671, 672, 673, + 674, 677, 675, 429, 329, 520, 352, 392, 1439, 1487, + 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, + 261, 260, 235, 512, 609, 246, 266, 207, 1348, 1353, + 1346, 0, 270, 271, 1420, 605, 1349, 1347, 1409, 1410, + 1350, 1478, 1479, 1480, 1464, 687, 688, 689, 690, 691, + 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 704, 682, 537, 543, 538, 539, 540, 541, + 542, 0, 544, 1443, 1342, 0, 1351, 1352, 419, 1452, + 623, 624, 705, 403, 510, 635, 354, 368, 371, 360, + 380, 0, 381, 356, 357, 362, 365, 366, 367, 372, + 373, 377, 383, 263, 218, 410, 420, 608, 330, 224, + 225, 226, 553, 554, 555, 556, 652, 653, 657, 213, + 486, 487, 488, 489, 308, 646, 326, 492, 491, 350, + 351, 398, 472, 569, 571, 582, 586, 588, 590, 596, + 599, 570, 572, 583, 587, 589, 591, 597, 600, 559, + 561, 563, 565, 578, 577, 574, 602, 603, 580, 585, + 564, 576, 581, 594, 601, 598, 558, 562, 566, 575, + 593, 592, 573, 584, 595, 579, 567, 560, 568, 1413, + 204, 229, 387, 1483, 478, 304, 683, 650, 508, 645, + 214, 231, 1345, 278, 1358, 1367, 0, 1374, 1382, 1383, + 1397, 1400, 1401, 1402, 1403, 1421, 1422, 1424, 1433, 1435, + 1438, 1440, 1447, 1465, 1486, 206, 208, 217, 230, 242, + 247, 254, 277, 292, 294, 301, 314, 327, 328, 337, + 338, 341, 347, 399, 406, 407, 408, 409, 431, 432, + 433, 436, 439, 440, 443, 445, 446, 449, 454, 458, + 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, + 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, + 526, 531, 532, 533, 534, 545, 618, 620, 637, 658, + 665, 504, 404, 452, 476, 611, 1430, 1391, 317, 318, + 467, 468, 332, 333, 679, 680, 316, 632, 666, 629, + 678, 660, 461, 397, 1412, 1418, 400, 297, 322, 339, + 1427, 649, 527, 236, 490, 306, 265, 1446, 1448, 219, + 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, + 312, 287, 255, 483, 252, 509, 548, 549, 550, 552, + 415, 282, 456, 1408, 1437, 395, 606, 607, 335, 1472, + 1451, 557, 0, 1392, 1475, 1357, 1378, 1485, 1381, 1384, + 1429, 1332, 1407, 438, 1375, 1361, 1327, 1369, 1328, 1359, + 1394, 286, 1356, 1453, 1411, 1474, 385, 283, 1334, 1325, + 212, 530, 1362, 453, 1380, 211, 1432, 511, 268, 396, + 393, 615, 298, 289, 285, 264, 336, 405, 450, 547, + 444, 1481, 389, 1417, 651, 522, 422, 0, 0, 0, + 1458, 1457, 1385, 1396, 1463, 1405, 1444, 1390, 1431, 1344, + 1416, 1476, 1376, 1426, 1477, 342, 262, 344, 210, 435, + 523, 302, 0, 0, 0, 0, 0, 536, 757, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, + 0, 256, 0, 0, 0, 370, 379, 378, 358, 359, + 361, 363, 369, 376, 382, 355, 364, 1372, 1423, 641, + 1470, 1373, 1425, 281, 340, 288, 280, 612, 1482, 1462, + 1331, 1404, 1469, 1399, 628, 0, 0, 238, 1473, 1398, + 0, 1428, 0, 1488, 1326, 1419, 0, 1329, 1333, 1484, + 1467, 1365, 1366, 291, 0, 0, 0, 0, 0, 0, + 0, 1395, 1406, 1441, 1445, 1388, 0, 416, 0, 0, + 0, 0, 0, 0, 0, 1363, 0, 1415, 0, 0, + 0, 1338, 1330, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1393, 0, 0, 0, 0, + 1343, 0, 1364, 1442, 0, 1324, 313, 1335, 423, 273, + 0, 477, 1355, 319, 334, 1341, 1370, 1471, 1459, 1460, + 1461, 1340, 1449, 1466, 1389, 662, 1468, 1387, 1386, 1436, + 1339, 1456, 1379, 384, 1337, 349, 205, 233, 0, 1377, + 434, 485, 497, 1455, 1454, 1360, 1371, 269, 1368, 495, + 448, 636, 243, 300, 482, 455, 493, 463, 303, 1414, + 1434, 494, 391, 617, 473, 633, 663, 664, 279, 428, + 647, 551, 656, 681, 234, 276, 442, 535, 639, 519, + 417, 613, 614, 348, 518, 311, 209, 388, 669, 232, + 503, 390, 253, 241, 619, 644, 315, 267, 305, 480, + 0, 676, 221, 546, 630, 250, 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, 274, 437, 621, - 622, 272, 684, 237, 654, 228, 1335, 653, 430, 616, + 622, 272, 685, 237, 655, 228, 1336, 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, 425, 424, 426, - 215, 640, 658, 0, 216, 0, 524, 643, 685, 475, - 220, 244, 245, 248, 1353, 295, 299, 307, 310, 320, - 321, 331, 386, 441, 469, 465, 474, 1449, 610, 634, - 648, 660, 666, 667, 669, 670, 671, 672, 673, 676, - 674, 429, 329, 520, 352, 392, 1438, 1486, 447, 496, + 215, 640, 659, 0, 216, 0, 524, 643, 686, 475, + 220, 244, 245, 248, 1354, 295, 299, 307, 310, 320, + 321, 331, 386, 441, 469, 465, 474, 1450, 610, 634, + 648, 661, 667, 668, 670, 671, 672, 673, 674, 677, + 675, 429, 329, 520, 352, 392, 1439, 1487, 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, - 235, 512, 609, 246, 266, 207, 1347, 1352, 1345, 0, - 270, 271, 1419, 605, 1348, 1346, 1408, 1409, 1349, 1477, - 1478, 1479, 1463, 686, 687, 688, 689, 690, 691, 692, - 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, - 703, 681, 537, 543, 538, 539, 540, 541, 542, 0, - 544, 1442, 1341, 0, 1350, 1351, 419, 1451, 623, 624, - 704, 403, 510, 635, 354, 368, 371, 360, 380, 0, + 235, 512, 609, 246, 266, 207, 1348, 1353, 1346, 0, + 270, 271, 1420, 605, 1349, 1347, 1409, 1410, 1350, 1478, + 1479, 1480, 1464, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, + 704, 682, 537, 543, 538, 539, 540, 541, 542, 0, + 544, 1443, 1342, 0, 1351, 1352, 419, 1452, 623, 624, + 705, 403, 510, 635, 354, 368, 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, 224, 225, 226, - 553, 554, 555, 556, 651, 652, 656, 213, 486, 487, + 553, 554, 555, 556, 652, 653, 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, 575, 593, 592, - 573, 584, 595, 579, 567, 560, 568, 1412, 204, 229, - 387, 1482, 478, 304, 682, 650, 508, 645, 214, 231, - 1344, 278, 1357, 1366, 0, 1373, 1381, 1382, 1396, 1399, - 1400, 1401, 1402, 1420, 1421, 1423, 1432, 1434, 1437, 1439, - 1446, 1464, 1485, 206, 208, 217, 230, 242, 247, 254, + 573, 584, 595, 579, 567, 560, 568, 1413, 204, 229, + 387, 1483, 478, 304, 683, 650, 508, 645, 214, 231, + 1345, 278, 1358, 1367, 0, 1374, 1382, 1383, 1397, 1400, + 1401, 1402, 1403, 1421, 1422, 1424, 1433, 1435, 1438, 1440, + 1447, 1465, 1486, 206, 208, 217, 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, 531, - 532, 533, 534, 545, 618, 620, 637, 657, 664, 504, - 404, 452, 476, 611, 1429, 1390, 317, 318, 467, 468, - 332, 333, 678, 679, 316, 632, 665, 629, 677, 659, - 461, 397, 1411, 1417, 400, 297, 322, 339, 1426, 649, - 527, 236, 490, 306, 265, 1445, 1447, 219, 257, 239, + 532, 533, 534, 545, 618, 620, 637, 658, 665, 504, + 404, 452, 476, 611, 1430, 1391, 317, 318, 467, 468, + 332, 333, 679, 680, 316, 632, 666, 629, 678, 660, + 461, 397, 1412, 1418, 400, 297, 322, 339, 1427, 649, + 527, 236, 490, 306, 265, 1446, 1448, 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, 552, 415, 282, - 456, 1407, 1436, 395, 606, 607, 335, 416, 0, 0, - 0, 0, 0, 0, 0, 0, 557, 0, 809, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, - 0, 0, 796, 0, 0, 0, 286, 801, 0, 0, - 0, 385, 283, 0, 0, 212, 530, 0, 453, 0, - 211, 0, 511, 268, 396, 393, 615, 298, 289, 285, - 264, 336, 405, 450, 547, 444, 808, 389, 0, 0, - 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, - 803, 804, 0, 0, 0, 0, 0, 0, 0, 0, - 342, 262, 344, 210, 435, 523, 302, 0, 101, 0, - 0, 1057, 536, 991, 780, 957, 995, 1058, 1009, 1010, - 1011, 996, 0, 249, 997, 998, 256, 999, 0, 956, - 839, 841, 840, 906, 907, 908, 909, 910, 911, 912, - 842, 843, 837, 1004, 641, 1012, 1013, 0, 281, 340, - 288, 280, 612, 0, 0, 2294, 2295, 2296, 0, 628, - 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, - 776, 793, 0, 807, 0, 0, 0, 0, 291, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 790, 791, 0, 0, 0, - 0, 951, 0, 792, 0, 0, 800, 1014, 1015, 1016, - 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, - 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, - 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, - 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 802, + 456, 1408, 1437, 395, 606, 607, 335, 1472, 1451, 557, + 0, 1392, 1475, 1357, 1378, 1485, 1381, 1384, 1429, 1332, + 1407, 438, 1375, 1361, 1327, 1369, 1328, 1359, 1394, 286, + 1356, 1453, 1411, 1474, 385, 283, 1334, 1325, 212, 530, + 1362, 453, 1380, 211, 1432, 511, 268, 396, 393, 615, + 298, 289, 285, 264, 336, 405, 450, 547, 444, 1481, + 389, 1417, 651, 522, 422, 0, 0, 0, 1458, 1457, + 1385, 1396, 1463, 1405, 1444, 1390, 1431, 1344, 1416, 1476, + 1376, 1426, 1477, 342, 262, 344, 210, 435, 523, 302, + 0, 0, 0, 0, 0, 536, 992, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 249, 0, 0, 256, + 0, 0, 0, 370, 379, 378, 358, 359, 361, 363, + 369, 376, 382, 355, 364, 1372, 1423, 641, 1470, 1373, + 1425, 281, 340, 288, 280, 612, 1482, 1462, 1331, 1404, + 1469, 1399, 628, 0, 0, 238, 1473, 1398, 0, 1428, + 0, 1488, 1326, 1419, 0, 1329, 1333, 1484, 1467, 1365, + 1366, 291, 0, 0, 0, 0, 0, 0, 0, 1395, + 1406, 1441, 1445, 1388, 0, 416, 0, 0, 0, 0, + 0, 0, 0, 1363, 0, 1415, 0, 0, 0, 1338, + 1330, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1393, 0, 0, 0, 0, 1343, 0, + 1364, 1442, 0, 1324, 313, 1335, 423, 273, 0, 477, + 1355, 319, 334, 1341, 1370, 1471, 1459, 1460, 1461, 1340, + 1449, 1466, 1389, 662, 1468, 1387, 1386, 1436, 1339, 1456, + 1379, 384, 1337, 349, 205, 233, 0, 1377, 434, 485, + 497, 1455, 1454, 1360, 1371, 269, 1368, 495, 448, 636, + 243, 300, 482, 455, 493, 463, 303, 1414, 1434, 494, + 391, 617, 473, 633, 663, 664, 279, 428, 647, 551, + 656, 681, 234, 276, 442, 535, 639, 519, 417, 613, + 614, 348, 518, 311, 209, 388, 669, 232, 503, 390, + 253, 241, 619, 644, 315, 267, 305, 480, 0, 676, + 221, 546, 630, 250, 507, 0, 0, 684, 258, 529, + 642, 631, 223, 626, 528, 413, 345, 346, 222, 0, + 481, 284, 309, 0, 0, 274, 437, 621, 622, 272, + 685, 237, 655, 228, 1336, 654, 430, 616, 627, 414, + 402, 227, 625, 412, 401, 353, 374, 375, 296, 324, + 470, 394, 471, 323, 325, 425, 424, 426, 215, 640, + 659, 0, 216, 0, 524, 643, 686, 475, 220, 244, + 245, 248, 1354, 295, 299, 307, 310, 320, 321, 331, + 386, 441, 469, 465, 474, 1450, 610, 634, 648, 661, + 667, 668, 670, 671, 672, 673, 674, 677, 675, 429, + 329, 520, 352, 392, 1439, 1487, 447, 496, 251, 638, + 521, 240, 604, 418, 427, 259, 261, 260, 235, 512, + 609, 246, 266, 207, 1348, 1353, 1346, 0, 270, 271, + 1420, 605, 1349, 1347, 1409, 1410, 1350, 1478, 1479, 1480, + 1464, 687, 688, 689, 690, 691, 692, 693, 694, 695, + 696, 697, 698, 699, 700, 701, 702, 703, 704, 682, + 537, 543, 538, 539, 540, 541, 542, 0, 544, 1443, + 1342, 0, 1351, 1352, 419, 1452, 623, 624, 705, 403, + 510, 635, 354, 368, 371, 360, 380, 0, 381, 356, + 357, 362, 365, 366, 367, 372, 373, 377, 383, 263, + 218, 410, 420, 608, 330, 224, 225, 226, 553, 554, + 555, 556, 652, 653, 657, 213, 486, 487, 488, 489, + 308, 646, 326, 492, 491, 350, 351, 398, 472, 569, + 571, 582, 586, 588, 590, 596, 599, 570, 572, 583, + 587, 589, 591, 597, 600, 559, 561, 563, 565, 578, + 577, 574, 602, 603, 580, 585, 564, 576, 581, 594, + 601, 598, 558, 562, 566, 575, 593, 592, 573, 584, + 595, 579, 567, 560, 568, 1413, 204, 229, 387, 1483, + 478, 304, 683, 650, 508, 645, 214, 231, 1345, 278, + 1358, 1367, 0, 1374, 1382, 1383, 1397, 1400, 1401, 1402, + 1403, 1421, 1422, 1424, 1433, 1435, 1438, 1440, 1447, 1465, + 1486, 206, 208, 217, 230, 242, 247, 254, 277, 292, + 294, 301, 314, 327, 328, 337, 338, 341, 347, 399, + 406, 407, 408, 409, 431, 432, 433, 436, 439, 440, + 443, 445, 446, 449, 454, 458, 459, 460, 462, 464, + 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, + 513, 514, 515, 516, 517, 525, 526, 531, 532, 533, + 534, 545, 618, 620, 637, 658, 665, 504, 404, 452, + 476, 611, 1430, 1391, 317, 318, 467, 468, 332, 333, + 679, 680, 316, 632, 666, 629, 678, 660, 461, 397, + 1412, 1418, 400, 297, 322, 339, 1427, 649, 527, 236, + 490, 306, 265, 1446, 1448, 219, 257, 239, 275, 290, + 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, + 252, 509, 548, 549, 550, 552, 415, 282, 456, 1408, + 1437, 395, 606, 607, 335, 557, 0, 810, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 797, 0, 0, 0, 286, 802, 0, 0, 0, + 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 809, 389, 0, 651, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 804, + 805, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 101, 0, 0, + 1058, 536, 992, 781, 958, 996, 1059, 1010, 1011, 1012, + 997, 0, 249, 998, 999, 256, 1000, 0, 957, 840, + 842, 841, 907, 908, 909, 910, 911, 912, 913, 843, + 844, 838, 1005, 641, 1013, 1014, 0, 281, 340, 288, + 280, 612, 0, 0, 2296, 2297, 2298, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 777, + 794, 0, 808, 0, 0, 0, 0, 291, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 416, 0, 0, 0, 791, 792, 0, 0, 0, + 0, 952, 0, 793, 0, 0, 801, 1015, 1016, 1017, + 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, + 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, + 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, + 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, - 0, 0, 0, 0, 0, 0, 950, 0, 0, 661, - 0, 0, 948, 0, 0, 0, 0, 384, 0, 349, + 0, 0, 0, 0, 0, 0, 951, 0, 0, 662, + 0, 0, 949, 0, 0, 0, 0, 384, 0, 349, 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, - 0, 1001, 0, 495, 448, 636, 243, 300, 482, 455, + 0, 1002, 0, 495, 448, 636, 243, 300, 482, 455, 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, - 662, 663, 279, 428, 647, 551, 655, 680, 234, 276, + 663, 664, 279, 428, 647, 551, 656, 681, 234, 276, 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, - 209, 388, 668, 232, 503, 390, 253, 241, 619, 644, - 315, 267, 305, 480, 675, 221, 546, 630, 250, 507, - 0, 0, 683, 258, 529, 642, 631, 223, 626, 528, - 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, - 274, 437, 1002, 1003, 272, 684, 847, 654, 228, 0, - 653, 430, 616, 627, 414, 402, 227, 625, 412, 401, - 353, 855, 856, 296, 324, 932, 931, 930, 323, 325, - 928, 929, 927, 215, 640, 658, 0, 216, 0, 524, - 643, 685, 475, 220, 244, 245, 248, 0, 295, 299, - 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, - 0, 610, 634, 648, 660, 666, 667, 669, 670, 671, - 672, 673, 676, 674, 429, 329, 520, 352, 392, 0, - 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, - 259, 261, 260, 235, 512, 609, 246, 266, 938, 960, - 949, 813, 814, 939, 940, 964, 941, 816, 817, 961, - 962, 810, 811, 815, 963, 965, 686, 687, 688, 689, + 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 0, 676, 221, 546, 630, 250, + 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 1003, 1004, 272, 685, 848, 655, 228, + 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 856, 857, 296, 324, 933, 932, 931, 323, + 325, 929, 930, 928, 215, 640, 659, 0, 216, 0, + 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 661, 667, 668, 670, 671, + 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 939, + 961, 950, 814, 815, 940, 941, 965, 942, 817, 818, + 962, 963, 811, 812, 816, 964, 966, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, - 700, 701, 702, 703, 681, 537, 543, 538, 539, 540, - 541, 542, 0, 544, 952, 799, 798, 0, 805, 806, - 0, 835, 836, 838, 844, 845, 846, 857, 904, 905, - 913, 915, 916, 914, 917, 918, 919, 922, 923, 924, - 925, 920, 921, 926, 818, 822, 819, 820, 821, 833, - 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, - 834, 975, 976, 977, 978, 979, 980, 850, 854, 853, - 851, 852, 848, 849, 876, 875, 877, 878, 879, 880, - 881, 882, 884, 883, 885, 886, 887, 888, 889, 890, - 858, 859, 862, 863, 861, 860, 864, 873, 874, 865, - 866, 867, 868, 869, 870, 872, 871, 891, 892, 893, - 894, 895, 897, 896, 900, 901, 899, 898, 903, 902, - 797, 204, 229, 387, 0, 478, 304, 682, 650, 508, - 645, 214, 231, 966, 278, 967, 0, 0, 971, 0, - 0, 0, 973, 972, 0, 974, 936, 935, 0, 0, - 968, 969, 0, 970, 0, 0, 206, 208, 217, 230, - 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, - 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, - 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, - 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, - 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, - 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, - 657, 664, 504, 404, 452, 476, 611, 0, 0, 981, - 982, 983, 984, 985, 986, 987, 988, 316, 632, 665, - 629, 677, 659, 461, 397, 0, 0, 400, 297, 322, - 339, 0, 649, 527, 236, 490, 306, 265, 1056, 0, - 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, - 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, - 552, 415, 282, 456, 416, 0, 395, 606, 607, 335, - 0, 0, 0, 557, 0, 809, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 438, 0, 0, 0, 796, - 0, 0, 0, 286, 801, 0, 0, 0, 385, 283, - 0, 0, 212, 530, 0, 453, 0, 211, 0, 511, - 268, 396, 393, 615, 298, 289, 285, 264, 336, 405, - 450, 547, 444, 808, 389, 0, 0, 522, 422, 0, - 0, 0, 0, 0, 0, 0, 0, 803, 804, 0, - 0, 0, 0, 0, 0, 2515, 0, 342, 262, 344, - 210, 435, 523, 302, 0, 101, 0, 0, 1057, 536, - 991, 780, 957, 995, 1058, 1009, 1010, 1011, 996, 0, - 249, 997, 998, 256, 999, 0, 956, 839, 841, 840, - 906, 907, 908, 909, 910, 911, 912, 842, 843, 837, - 1004, 641, 1012, 1013, 2516, 281, 340, 288, 280, 612, - 0, 0, 0, 0, 0, 0, 628, 0, 0, 238, - 0, 0, 0, 0, 0, 0, 0, 776, 793, 0, - 807, 0, 0, 0, 0, 291, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 790, 791, 0, 0, 0, 0, 951, 0, - 792, 0, 0, 800, 1014, 1015, 1016, 1017, 1018, 1019, - 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, - 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, - 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, - 1050, 1051, 1052, 1053, 1054, 1055, 802, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 313, 0, 423, - 273, 0, 477, 0, 319, 334, 0, 0, 0, 0, - 0, 0, 0, 950, 0, 0, 661, 0, 0, 948, - 0, 0, 0, 0, 384, 0, 349, 205, 233, 0, - 0, 434, 485, 497, 0, 0, 0, 0, 1001, 0, - 495, 448, 636, 243, 300, 482, 455, 493, 463, 303, - 0, 0, 494, 391, 617, 473, 633, 662, 663, 279, - 428, 647, 551, 655, 680, 234, 276, 442, 535, 639, - 519, 417, 613, 614, 348, 518, 311, 209, 388, 668, - 232, 503, 390, 253, 241, 619, 644, 315, 267, 305, - 480, 675, 221, 546, 630, 250, 507, 0, 0, 683, + 700, 701, 702, 703, 704, 682, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 953, 800, 799, 0, 806, + 807, 0, 836, 837, 839, 845, 846, 847, 858, 905, + 906, 914, 916, 917, 915, 918, 919, 920, 923, 924, + 925, 926, 921, 922, 927, 819, 823, 820, 821, 822, + 834, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 835, 976, 977, 978, 979, 980, 981, 851, 855, + 854, 852, 853, 849, 850, 877, 876, 878, 879, 880, + 881, 882, 883, 885, 884, 886, 887, 888, 889, 890, + 891, 859, 860, 863, 864, 862, 861, 865, 874, 875, + 866, 867, 868, 869, 870, 871, 873, 872, 892, 893, + 894, 895, 896, 898, 897, 901, 902, 900, 899, 904, + 903, 798, 204, 229, 387, 0, 478, 304, 683, 650, + 508, 645, 214, 231, 967, 278, 968, 0, 0, 972, + 0, 0, 0, 974, 973, 0, 975, 937, 936, 0, + 0, 969, 970, 0, 971, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 658, 665, 504, 404, 452, 476, 611, 0, 0, + 982, 983, 984, 985, 986, 987, 988, 989, 316, 632, + 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 1057, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 0, 0, 395, 606, 607, + 335, 557, 0, 810, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 438, 0, 0, 0, 797, 0, 0, + 0, 286, 802, 0, 0, 0, 385, 283, 0, 0, + 212, 530, 0, 453, 0, 211, 0, 511, 268, 396, + 393, 615, 298, 289, 285, 264, 336, 405, 450, 547, + 444, 809, 389, 0, 651, 522, 422, 0, 0, 0, + 0, 0, 0, 0, 0, 804, 805, 0, 0, 0, + 0, 0, 0, 2517, 0, 342, 262, 344, 210, 435, + 523, 302, 0, 101, 0, 0, 1058, 536, 992, 781, + 958, 996, 1059, 1010, 1011, 1012, 997, 0, 249, 998, + 999, 256, 1000, 0, 957, 840, 842, 841, 907, 908, + 909, 910, 911, 912, 913, 843, 844, 838, 1005, 641, + 1013, 1014, 2518, 281, 340, 288, 280, 612, 0, 0, + 0, 0, 0, 0, 628, 0, 0, 238, 0, 0, + 0, 0, 0, 0, 0, 777, 794, 0, 808, 0, + 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, + 0, 791, 792, 0, 0, 0, 0, 952, 0, 793, + 0, 0, 801, 1015, 1016, 1017, 1018, 1019, 1020, 1021, + 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, + 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, + 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, + 1052, 1053, 1054, 1055, 1056, 803, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 313, 0, 423, 273, + 0, 477, 0, 319, 334, 0, 0, 0, 0, 0, + 0, 0, 951, 0, 0, 662, 0, 0, 949, 0, + 0, 0, 0, 384, 0, 349, 205, 233, 0, 0, + 434, 485, 497, 0, 0, 0, 0, 1002, 0, 495, + 448, 636, 243, 300, 482, 455, 493, 463, 303, 0, + 0, 494, 391, 617, 473, 633, 663, 664, 279, 428, + 647, 551, 656, 681, 234, 276, 442, 535, 639, 519, + 417, 613, 614, 348, 518, 311, 209, 388, 669, 232, + 503, 390, 253, 241, 619, 644, 315, 267, 305, 480, + 0, 676, 221, 546, 630, 250, 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, - 222, 0, 481, 284, 309, 0, 0, 274, 437, 1002, - 1003, 272, 684, 847, 654, 228, 0, 653, 430, 616, - 627, 414, 402, 227, 625, 412, 401, 353, 855, 856, - 296, 324, 932, 931, 930, 323, 325, 928, 929, 927, - 215, 640, 658, 0, 216, 0, 524, 643, 685, 475, + 222, 0, 481, 284, 309, 0, 0, 274, 437, 1003, + 1004, 272, 685, 848, 655, 228, 0, 654, 430, 616, + 627, 414, 402, 227, 625, 412, 401, 353, 856, 857, + 296, 324, 933, 932, 931, 323, 325, 929, 930, 928, + 215, 640, 659, 0, 216, 0, 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, 0, 610, 634, - 648, 660, 666, 667, 669, 670, 671, 672, 673, 676, - 674, 429, 329, 520, 352, 392, 0, 0, 447, 496, + 648, 661, 667, 668, 670, 671, 672, 673, 674, 677, + 675, 429, 329, 520, 352, 392, 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, - 235, 512, 609, 246, 266, 938, 960, 949, 813, 814, - 939, 940, 964, 941, 816, 817, 961, 962, 810, 811, - 815, 963, 965, 686, 687, 688, 689, 690, 691, 692, - 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, - 703, 681, 537, 543, 538, 539, 540, 541, 542, 0, - 544, 952, 799, 798, 0, 805, 806, 0, 835, 836, - 838, 844, 845, 846, 857, 904, 905, 913, 915, 916, - 914, 917, 918, 919, 922, 923, 924, 925, 920, 921, - 926, 818, 822, 819, 820, 821, 833, 823, 824, 825, - 826, 827, 828, 829, 830, 831, 832, 834, 975, 976, - 977, 978, 979, 980, 850, 854, 853, 851, 852, 848, - 849, 876, 875, 877, 878, 879, 880, 881, 882, 884, - 883, 885, 886, 887, 888, 889, 890, 858, 859, 862, - 863, 861, 860, 864, 873, 874, 865, 866, 867, 868, - 869, 870, 872, 871, 891, 892, 893, 894, 895, 897, - 896, 900, 901, 899, 898, 903, 902, 797, 204, 229, - 387, 0, 478, 304, 682, 650, 508, 645, 214, 231, - 966, 278, 967, 0, 0, 971, 0, 0, 0, 973, - 972, 0, 974, 936, 935, 0, 0, 968, 969, 0, - 970, 0, 0, 206, 208, 217, 230, 242, 247, 254, + 235, 512, 609, 246, 266, 939, 961, 950, 814, 815, + 940, 941, 965, 942, 817, 818, 962, 963, 811, 812, + 816, 964, 966, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, + 704, 682, 537, 543, 538, 539, 540, 541, 542, 0, + 544, 953, 800, 799, 0, 806, 807, 0, 836, 837, + 839, 845, 846, 847, 858, 905, 906, 914, 916, 917, + 915, 918, 919, 920, 923, 924, 925, 926, 921, 922, + 927, 819, 823, 820, 821, 822, 834, 824, 825, 826, + 827, 828, 829, 830, 831, 832, 833, 835, 976, 977, + 978, 979, 980, 981, 851, 855, 854, 852, 853, 849, + 850, 877, 876, 878, 879, 880, 881, 882, 883, 885, + 884, 886, 887, 888, 889, 890, 891, 859, 860, 863, + 864, 862, 861, 865, 874, 875, 866, 867, 868, 869, + 870, 871, 873, 872, 892, 893, 894, 895, 896, 898, + 897, 901, 902, 900, 899, 904, 903, 798, 204, 229, + 387, 0, 478, 304, 683, 650, 508, 645, 214, 231, + 967, 278, 968, 0, 0, 972, 0, 0, 0, 974, + 973, 0, 975, 937, 936, 0, 0, 969, 970, 0, + 971, 0, 0, 206, 208, 217, 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, 531, - 532, 533, 534, 545, 618, 620, 637, 657, 664, 504, - 404, 452, 476, 611, 0, 0, 981, 982, 983, 984, - 985, 986, 987, 988, 316, 632, 665, 629, 677, 659, + 532, 533, 534, 545, 618, 620, 637, 658, 665, 504, + 404, 452, 476, 611, 0, 0, 982, 983, 984, 985, + 986, 987, 988, 989, 316, 632, 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, 339, 0, 649, - 527, 236, 490, 306, 265, 1056, 0, 219, 257, 239, + 527, 236, 490, 306, 265, 1057, 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, 552, 415, 282, - 456, 416, 0, 395, 606, 607, 335, 0, 0, 91, - 557, 0, 809, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 438, 0, 0, 0, 796, 0, 0, 0, - 286, 801, 0, 0, 0, 385, 283, 0, 0, 212, - 530, 0, 453, 0, 211, 0, 511, 268, 396, 393, - 615, 298, 289, 285, 264, 336, 405, 450, 547, 444, - 1767, 389, 0, 0, 522, 422, 0, 0, 0, 0, - 0, 0, 0, 0, 803, 804, 0, 0, 0, 0, - 0, 0, 0, 0, 342, 262, 344, 210, 435, 523, - 302, 0, 101, 0, 0, 1057, 536, 991, 780, 957, - 995, 1058, 1009, 1010, 1011, 996, 0, 249, 997, 998, - 256, 999, 0, 956, 839, 841, 840, 906, 907, 908, - 909, 910, 911, 912, 842, 843, 837, 1004, 641, 1012, - 1013, 0, 281, 340, 288, 280, 612, 0, 0, 0, - 0, 0, 0, 628, 0, 0, 238, 0, 0, 0, - 0, 0, 0, 0, 776, 793, 0, 807, 0, 0, - 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 790, - 791, 0, 0, 0, 0, 951, 0, 792, 0, 0, - 800, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, - 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, - 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, - 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, - 1053, 1054, 1055, 802, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 313, 0, 423, 273, 0, 477, - 0, 319, 334, 0, 0, 0, 0, 0, 0, 0, - 950, 0, 0, 661, 0, 0, 948, 0, 0, 0, - 0, 384, 0, 349, 205, 233, 0, 0, 434, 485, - 497, 0, 0, 0, 0, 1001, 0, 495, 448, 636, - 243, 300, 482, 455, 493, 463, 303, 0, 0, 494, - 391, 617, 473, 633, 662, 663, 279, 428, 647, 551, - 655, 680, 234, 276, 442, 535, 639, 519, 417, 613, - 614, 348, 518, 311, 209, 388, 668, 232, 503, 390, - 253, 241, 619, 644, 315, 267, 305, 480, 675, 221, - 546, 630, 250, 507, 0, 0, 683, 258, 529, 642, + 456, 0, 0, 395, 606, 607, 335, 91, 557, 0, + 810, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 438, 0, 0, 0, 797, 0, 0, 0, 286, 802, + 0, 0, 0, 385, 283, 0, 0, 212, 530, 0, + 453, 0, 211, 0, 511, 268, 396, 393, 615, 298, + 289, 285, 264, 336, 405, 450, 547, 444, 1768, 389, + 0, 651, 522, 422, 0, 0, 0, 0, 0, 0, + 0, 0, 804, 805, 0, 0, 0, 0, 0, 0, + 0, 0, 342, 262, 344, 210, 435, 523, 302, 0, + 101, 0, 0, 1058, 536, 992, 781, 958, 996, 1059, + 1010, 1011, 1012, 997, 0, 249, 998, 999, 256, 1000, + 0, 957, 840, 842, 841, 907, 908, 909, 910, 911, + 912, 913, 843, 844, 838, 1005, 641, 1013, 1014, 0, + 281, 340, 288, 280, 612, 0, 0, 0, 0, 0, + 0, 628, 0, 0, 238, 0, 0, 0, 0, 0, + 0, 0, 777, 794, 0, 808, 0, 0, 0, 0, + 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 416, 0, 0, 0, 791, 792, + 0, 0, 0, 0, 952, 0, 793, 0, 0, 801, + 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, + 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, + 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, + 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, + 1055, 1056, 803, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 313, 0, 423, 273, 0, 477, 0, + 319, 334, 0, 0, 0, 0, 0, 0, 0, 951, + 0, 0, 662, 0, 0, 949, 0, 0, 0, 0, + 384, 0, 349, 205, 233, 0, 0, 434, 485, 497, + 0, 0, 0, 0, 1002, 0, 495, 448, 636, 243, + 300, 482, 455, 493, 463, 303, 0, 0, 494, 391, + 617, 473, 633, 663, 664, 279, 428, 647, 551, 656, + 681, 234, 276, 442, 535, 639, 519, 417, 613, 614, + 348, 518, 311, 209, 388, 669, 232, 503, 390, 253, + 241, 619, 644, 315, 267, 305, 480, 0, 676, 221, + 546, 630, 250, 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, 0, 481, - 284, 309, 0, 0, 274, 437, 1002, 1003, 272, 684, - 847, 654, 228, 0, 653, 430, 616, 627, 414, 402, - 227, 625, 412, 401, 353, 855, 856, 296, 324, 932, - 931, 930, 323, 325, 928, 929, 927, 215, 640, 658, - 0, 216, 0, 524, 643, 685, 475, 220, 244, 245, + 284, 309, 0, 0, 274, 437, 1003, 1004, 272, 685, + 848, 655, 228, 0, 654, 430, 616, 627, 414, 402, + 227, 625, 412, 401, 353, 856, 857, 296, 324, 933, + 932, 931, 323, 325, 929, 930, 928, 215, 640, 659, + 0, 216, 0, 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, 307, 310, 320, 321, 331, 386, - 441, 469, 465, 474, 0, 610, 634, 648, 660, 666, - 667, 669, 670, 671, 672, 673, 676, 674, 429, 329, + 441, 469, 465, 474, 0, 610, 634, 648, 661, 667, + 668, 670, 671, 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, 235, 512, 609, - 246, 266, 938, 960, 949, 813, 814, 939, 940, 964, - 941, 816, 817, 961, 962, 810, 811, 815, 963, 965, - 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, - 696, 697, 698, 699, 700, 701, 702, 703, 681, 537, - 543, 538, 539, 540, 541, 542, 0, 544, 952, 799, - 798, 0, 805, 806, 0, 835, 836, 838, 844, 845, - 846, 857, 904, 905, 913, 915, 916, 914, 917, 918, - 919, 922, 923, 924, 925, 920, 921, 926, 818, 822, - 819, 820, 821, 833, 823, 824, 825, 826, 827, 828, - 829, 830, 831, 832, 834, 975, 976, 977, 978, 979, - 980, 850, 854, 853, 851, 852, 848, 849, 876, 875, - 877, 878, 879, 880, 881, 882, 884, 883, 885, 886, - 887, 888, 889, 890, 858, 859, 862, 863, 861, 860, - 864, 873, 874, 865, 866, 867, 868, 869, 870, 872, - 871, 891, 892, 893, 894, 895, 897, 896, 900, 901, - 899, 898, 903, 902, 797, 204, 229, 387, 100, 478, - 304, 682, 650, 508, 645, 214, 231, 966, 278, 967, - 0, 0, 971, 0, 0, 0, 973, 972, 0, 974, - 936, 935, 0, 0, 968, 969, 0, 970, 0, 0, + 246, 266, 939, 961, 950, 814, 815, 940, 941, 965, + 942, 817, 818, 962, 963, 811, 812, 816, 964, 966, + 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, + 697, 698, 699, 700, 701, 702, 703, 704, 682, 537, + 543, 538, 539, 540, 541, 542, 0, 544, 953, 800, + 799, 0, 806, 807, 0, 836, 837, 839, 845, 846, + 847, 858, 905, 906, 914, 916, 917, 915, 918, 919, + 920, 923, 924, 925, 926, 921, 922, 927, 819, 823, + 820, 821, 822, 834, 824, 825, 826, 827, 828, 829, + 830, 831, 832, 833, 835, 976, 977, 978, 979, 980, + 981, 851, 855, 854, 852, 853, 849, 850, 877, 876, + 878, 879, 880, 881, 882, 883, 885, 884, 886, 887, + 888, 889, 890, 891, 859, 860, 863, 864, 862, 861, + 865, 874, 875, 866, 867, 868, 869, 870, 871, 873, + 872, 892, 893, 894, 895, 896, 898, 897, 901, 902, + 900, 899, 904, 903, 798, 204, 229, 387, 100, 478, + 304, 683, 650, 508, 645, 214, 231, 967, 278, 968, + 0, 0, 972, 0, 0, 0, 974, 973, 0, 975, + 937, 936, 0, 0, 969, 970, 0, 971, 0, 0, 206, 208, 217, 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, 531, 532, 533, 534, - 545, 618, 620, 637, 657, 664, 504, 404, 452, 476, - 611, 0, 0, 981, 982, 983, 984, 985, 986, 987, - 988, 316, 632, 665, 629, 677, 659, 461, 397, 0, + 545, 618, 620, 637, 658, 665, 504, 404, 452, 476, + 611, 0, 0, 982, 983, 984, 985, 986, 987, 988, + 989, 316, 632, 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, 339, 0, 649, 527, 236, 490, - 306, 265, 1056, 0, 219, 257, 239, 275, 290, 293, + 306, 265, 1057, 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, - 509, 548, 549, 550, 552, 415, 282, 456, 416, 0, - 395, 606, 607, 335, 0, 0, 0, 557, 0, 809, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, - 0, 0, 0, 796, 0, 0, 0, 286, 801, 0, - 0, 0, 385, 283, 0, 0, 212, 530, 0, 453, - 0, 211, 0, 511, 268, 396, 393, 615, 298, 289, - 285, 264, 336, 405, 450, 547, 444, 808, 389, 0, - 0, 522, 422, 0, 0, 0, 0, 0, 0, 0, - 0, 803, 804, 0, 0, 0, 0, 0, 0, 0, - 0, 342, 262, 344, 210, 435, 523, 302, 0, 101, - 0, 0, 1057, 536, 991, 780, 957, 995, 1058, 1009, - 1010, 1011, 996, 0, 249, 997, 998, 256, 999, 0, - 956, 839, 841, 840, 906, 907, 908, 909, 910, 911, - 912, 842, 843, 837, 1004, 641, 1012, 1013, 0, 281, - 340, 288, 280, 612, 0, 0, 0, 0, 0, 0, - 628, 0, 0, 238, 0, 0, 0, 0, 0, 0, - 0, 776, 793, 0, 807, 0, 0, 0, 0, 291, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 790, 791, 0, 0, - 0, 0, 951, 0, 792, 0, 0, 800, 1014, 1015, - 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, - 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, - 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, - 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, - 802, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 313, 0, 423, 273, 0, 477, 0, 319, 334, - 0, 0, 0, 0, 0, 0, 0, 950, 0, 0, - 661, 0, 0, 948, 0, 0, 0, 0, 384, 0, - 349, 205, 233, 0, 0, 434, 485, 497, 0, 0, - 0, 0, 1001, 0, 495, 448, 636, 243, 300, 482, - 455, 493, 463, 303, 4207, 0, 494, 391, 617, 473, - 633, 662, 663, 279, 428, 647, 551, 655, 680, 234, - 276, 442, 535, 639, 519, 417, 613, 614, 348, 518, - 311, 209, 388, 668, 232, 503, 390, 253, 241, 619, - 644, 315, 267, 305, 480, 675, 221, 546, 630, 250, - 507, 0, 0, 683, 258, 529, 642, 631, 223, 626, - 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, - 0, 274, 437, 1002, 1003, 272, 684, 847, 654, 228, - 0, 653, 430, 616, 627, 414, 402, 227, 625, 412, - 401, 353, 855, 856, 296, 324, 932, 931, 930, 323, - 325, 928, 929, 927, 215, 640, 658, 0, 216, 0, - 524, 643, 685, 475, 220, 244, 245, 248, 0, 295, - 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, - 474, 0, 610, 634, 648, 660, 666, 667, 669, 670, - 671, 672, 673, 676, 674, 429, 329, 520, 352, 392, - 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, - 427, 259, 261, 260, 235, 512, 609, 246, 266, 938, - 960, 949, 813, 814, 939, 940, 964, 941, 816, 817, - 961, 962, 810, 811, 815, 963, 965, 686, 687, 688, - 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, - 699, 700, 701, 702, 703, 681, 537, 543, 538, 539, - 540, 541, 542, 0, 544, 952, 799, 798, 0, 805, - 806, 0, 835, 836, 838, 844, 845, 846, 857, 904, - 905, 913, 915, 916, 914, 917, 918, 919, 922, 923, - 924, 925, 920, 921, 926, 818, 822, 819, 820, 821, - 833, 823, 824, 825, 826, 827, 828, 829, 830, 831, - 832, 834, 975, 976, 977, 978, 979, 980, 850, 854, - 853, 851, 852, 848, 849, 876, 875, 877, 878, 879, - 880, 881, 882, 884, 883, 885, 886, 887, 888, 889, - 890, 858, 859, 862, 863, 861, 860, 864, 873, 874, - 865, 866, 867, 868, 869, 870, 872, 871, 891, 892, - 893, 894, 895, 897, 896, 900, 901, 899, 898, 903, - 902, 797, 204, 229, 387, 0, 478, 304, 682, 650, - 508, 645, 214, 231, 966, 278, 967, 0, 0, 971, - 0, 0, 0, 973, 972, 0, 974, 936, 935, 0, - 0, 968, 969, 0, 970, 0, 0, 206, 208, 217, - 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, - 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, - 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, - 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, - 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, - 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, - 637, 657, 664, 504, 404, 452, 476, 611, 0, 0, - 981, 982, 983, 984, 985, 986, 987, 988, 316, 632, - 665, 629, 677, 659, 461, 397, 0, 0, 400, 297, - 322, 339, 0, 649, 527, 236, 490, 306, 265, 1056, - 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, - 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, - 550, 552, 415, 282, 456, 416, 0, 395, 606, 607, - 335, 0, 0, 0, 557, 0, 809, 0, 0, 0, + 509, 548, 549, 550, 552, 415, 282, 456, 0, 0, + 395, 606, 607, 335, 557, 0, 810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, - 796, 0, 0, 0, 286, 801, 0, 0, 0, 385, + 797, 0, 0, 0, 286, 802, 0, 0, 0, 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, - 405, 450, 547, 444, 808, 389, 0, 0, 522, 422, - 0, 0, 0, 0, 0, 0, 0, 0, 803, 804, + 405, 450, 547, 444, 809, 389, 0, 651, 522, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 804, 805, 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, - 344, 210, 435, 523, 302, 0, 101, 0, 1804, 1057, - 536, 991, 780, 957, 995, 1058, 1009, 1010, 1011, 996, - 0, 249, 997, 998, 256, 999, 0, 956, 839, 841, - 840, 906, 907, 908, 909, 910, 911, 912, 842, 843, - 837, 1004, 641, 1012, 1013, 0, 281, 340, 288, 280, + 344, 210, 435, 523, 302, 0, 101, 0, 0, 1058, + 536, 992, 781, 958, 996, 1059, 1010, 1011, 1012, 997, + 0, 249, 998, 999, 256, 1000, 0, 957, 840, 842, + 841, 907, 908, 909, 910, 911, 912, 913, 843, 844, + 838, 1005, 641, 1013, 1014, 0, 281, 340, 288, 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, - 238, 0, 0, 0, 0, 0, 0, 0, 776, 793, - 0, 807, 0, 0, 0, 0, 291, 0, 0, 0, + 238, 0, 0, 0, 0, 0, 0, 0, 777, 794, + 0, 808, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 790, 791, 0, 0, 0, 0, 951, - 0, 792, 0, 0, 800, 1014, 1015, 1016, 1017, 1018, + 416, 0, 0, 0, 791, 792, 0, 0, 0, 0, + 952, 0, 793, 0, 0, 801, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, - 1049, 1050, 1051, 1052, 1053, 1054, 1055, 802, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, - 423, 273, 0, 477, 0, 319, 334, 0, 0, 0, - 0, 0, 0, 0, 950, 0, 0, 661, 0, 0, - 948, 0, 0, 0, 0, 384, 0, 349, 205, 233, - 0, 0, 434, 485, 497, 0, 0, 0, 0, 1001, - 0, 495, 448, 636, 243, 300, 482, 455, 493, 463, - 303, 0, 0, 494, 391, 617, 473, 633, 662, 663, - 279, 428, 647, 551, 655, 680, 234, 276, 442, 535, - 639, 519, 417, 613, 614, 348, 518, 311, 209, 388, - 668, 232, 503, 390, 253, 241, 619, 644, 315, 267, - 305, 480, 675, 221, 546, 630, 250, 507, 0, 0, - 683, 258, 529, 642, 631, 223, 626, 528, 413, 345, - 346, 222, 0, 481, 284, 309, 0, 0, 274, 437, - 1002, 1003, 272, 684, 847, 654, 228, 0, 653, 430, - 616, 627, 414, 402, 227, 625, 412, 401, 353, 855, - 856, 296, 324, 932, 931, 930, 323, 325, 928, 929, - 927, 215, 640, 658, 0, 216, 0, 524, 643, 685, - 475, 220, 244, 245, 248, 0, 295, 299, 307, 310, - 320, 321, 331, 386, 441, 469, 465, 474, 0, 610, - 634, 648, 660, 666, 667, 669, 670, 671, 672, 673, - 676, 674, 429, 329, 520, 352, 392, 0, 0, 447, - 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, - 260, 235, 512, 609, 246, 266, 938, 960, 949, 813, - 814, 939, 940, 964, 941, 816, 817, 961, 962, 810, - 811, 815, 963, 965, 686, 687, 688, 689, 690, 691, - 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, - 702, 703, 681, 537, 543, 538, 539, 540, 541, 542, - 0, 544, 952, 799, 798, 0, 805, 806, 0, 835, - 836, 838, 844, 845, 846, 857, 904, 905, 913, 915, - 916, 914, 917, 918, 919, 922, 923, 924, 925, 920, - 921, 926, 818, 822, 819, 820, 821, 833, 823, 824, - 825, 826, 827, 828, 829, 830, 831, 832, 834, 975, - 976, 977, 978, 979, 980, 850, 854, 853, 851, 852, - 848, 849, 876, 875, 877, 878, 879, 880, 881, 882, - 884, 883, 885, 886, 887, 888, 889, 890, 858, 859, - 862, 863, 861, 860, 864, 873, 874, 865, 866, 867, - 868, 869, 870, 872, 871, 891, 892, 893, 894, 895, - 897, 896, 900, 901, 899, 898, 903, 902, 797, 204, - 229, 387, 0, 478, 304, 682, 650, 508, 645, 214, - 231, 966, 278, 967, 0, 0, 971, 0, 0, 0, - 973, 972, 0, 974, 936, 935, 0, 0, 968, 969, - 0, 970, 0, 0, 206, 208, 217, 230, 242, 247, - 254, 277, 292, 294, 301, 314, 327, 328, 337, 338, - 341, 347, 399, 406, 407, 408, 409, 431, 432, 433, - 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, - 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, - 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, - 531, 532, 533, 534, 545, 618, 620, 637, 657, 664, - 504, 404, 452, 476, 611, 0, 0, 981, 982, 983, - 984, 985, 986, 987, 988, 316, 632, 665, 629, 677, - 659, 461, 397, 0, 0, 400, 297, 322, 339, 0, - 649, 527, 236, 490, 306, 265, 1056, 0, 219, 257, - 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, - 287, 255, 483, 252, 509, 548, 549, 550, 552, 415, - 282, 456, 416, 0, 395, 606, 607, 335, 0, 0, - 0, 557, 0, 809, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 438, 0, 0, 0, 796, 0, 0, - 0, 286, 801, 0, 0, 0, 385, 283, 0, 0, - 212, 530, 0, 453, 0, 211, 0, 511, 268, 396, - 393, 615, 298, 289, 285, 264, 336, 405, 450, 547, - 444, 808, 389, 0, 0, 522, 422, 0, 0, 0, - 0, 0, 0, 0, 0, 803, 804, 0, 0, 0, - 0, 0, 0, 0, 0, 342, 262, 344, 210, 435, - 523, 302, 0, 101, 0, 0, 1057, 536, 991, 780, - 957, 995, 1058, 1009, 1010, 1011, 996, 0, 249, 997, - 998, 256, 999, 0, 956, 839, 841, 840, 906, 907, - 908, 909, 910, 911, 912, 842, 843, 837, 1004, 641, - 1012, 1013, 0, 281, 340, 288, 280, 612, 0, 0, - 0, 0, 0, 0, 628, 0, 0, 238, 0, 0, - 0, 0, 0, 0, 0, 776, 793, 0, 807, 0, - 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 790, 791, 1110, 0, 0, 0, 951, 0, 792, 0, - 0, 800, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, - 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, - 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, - 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, - 1052, 1053, 1054, 1055, 802, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 313, 0, 423, 273, 0, - 477, 0, 319, 334, 0, 0, 0, 0, 0, 0, - 0, 950, 0, 0, 661, 0, 0, 948, 0, 0, - 0, 0, 384, 0, 349, 205, 233, 0, 0, 434, - 485, 497, 0, 0, 0, 0, 1001, 0, 495, 448, - 636, 243, 300, 482, 455, 493, 463, 303, 0, 0, - 494, 391, 617, 473, 633, 662, 663, 279, 428, 647, - 551, 655, 680, 234, 276, 442, 535, 639, 519, 417, - 613, 614, 348, 518, 311, 209, 388, 668, 232, 503, - 390, 253, 241, 619, 644, 315, 267, 305, 480, 675, - 221, 546, 630, 250, 507, 0, 0, 683, 258, 529, - 642, 631, 223, 626, 528, 413, 345, 346, 222, 0, - 481, 284, 309, 0, 0, 274, 437, 1002, 1003, 272, - 684, 847, 654, 228, 0, 653, 430, 616, 627, 414, - 402, 227, 625, 412, 401, 353, 855, 856, 296, 324, - 932, 931, 930, 323, 325, 928, 929, 927, 215, 640, - 658, 0, 216, 0, 524, 643, 685, 475, 220, 244, - 245, 248, 0, 295, 299, 307, 310, 320, 321, 331, - 386, 441, 469, 465, 474, 0, 610, 634, 648, 660, - 666, 667, 669, 670, 671, 672, 673, 676, 674, 429, - 329, 520, 352, 392, 0, 0, 447, 496, 251, 638, - 521, 240, 604, 418, 427, 259, 261, 260, 235, 512, - 609, 246, 266, 938, 960, 949, 813, 814, 939, 940, - 964, 941, 816, 817, 961, 962, 810, 811, 815, 963, - 965, 686, 687, 688, 689, 690, 691, 692, 693, 694, - 695, 696, 697, 698, 699, 700, 701, 702, 703, 681, - 537, 543, 538, 539, 540, 541, 542, 0, 544, 952, - 799, 798, 0, 805, 806, 0, 835, 836, 838, 844, - 845, 846, 857, 904, 905, 913, 915, 916, 914, 917, - 918, 919, 922, 923, 924, 925, 920, 921, 926, 818, - 822, 819, 820, 821, 833, 823, 824, 825, 826, 827, - 828, 829, 830, 831, 832, 834, 975, 976, 977, 978, - 979, 980, 850, 854, 853, 851, 852, 848, 849, 876, - 875, 877, 878, 879, 880, 881, 882, 884, 883, 885, - 886, 887, 888, 889, 890, 858, 859, 862, 863, 861, - 860, 864, 873, 874, 865, 866, 867, 868, 869, 870, - 872, 871, 891, 892, 893, 894, 895, 897, 896, 900, - 901, 899, 898, 903, 902, 797, 204, 229, 387, 0, - 478, 304, 682, 650, 508, 645, 214, 231, 966, 278, - 967, 0, 0, 971, 0, 0, 0, 973, 972, 0, - 974, 936, 935, 0, 0, 968, 969, 0, 970, 0, - 0, 206, 208, 217, 230, 242, 247, 254, 277, 292, - 294, 301, 314, 327, 328, 337, 338, 341, 347, 399, - 406, 407, 408, 409, 431, 432, 433, 436, 439, 440, - 443, 445, 446, 449, 454, 458, 459, 460, 462, 464, - 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, - 513, 514, 515, 516, 517, 525, 526, 531, 532, 533, - 534, 545, 618, 620, 637, 657, 664, 504, 404, 452, - 476, 611, 0, 0, 981, 982, 983, 984, 985, 986, - 987, 988, 316, 632, 665, 629, 677, 659, 461, 397, - 0, 0, 400, 297, 322, 339, 0, 649, 527, 236, - 490, 306, 265, 1056, 0, 219, 257, 239, 275, 290, - 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, - 252, 509, 548, 549, 550, 552, 415, 282, 456, 416, - 0, 395, 606, 607, 335, 0, 0, 0, 557, 0, - 809, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 438, 0, 0, 0, 796, 0, 0, 0, 286, 801, - 0, 0, 0, 385, 283, 0, 0, 212, 530, 0, - 453, 0, 211, 0, 511, 268, 396, 393, 615, 298, - 289, 285, 264, 336, 405, 450, 547, 444, 808, 389, - 0, 0, 522, 422, 0, 0, 0, 0, 0, 0, - 0, 0, 803, 804, 0, 0, 0, 0, 0, 0, - 0, 0, 342, 262, 344, 210, 435, 523, 302, 0, - 101, 0, 0, 1057, 536, 991, 780, 957, 995, 1058, - 1009, 1010, 1011, 996, 0, 249, 997, 998, 256, 999, - 0, 956, 839, 841, 840, 906, 907, 908, 909, 910, - 911, 912, 842, 843, 837, 1004, 641, 1012, 1013, 0, - 281, 340, 288, 280, 612, 0, 0, 0, 0, 0, - 0, 628, 0, 0, 238, 0, 0, 0, 0, 0, - 0, 0, 776, 793, 0, 807, 0, 0, 0, 0, - 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 790, 791, 0, - 0, 0, 0, 951, 0, 792, 0, 0, 800, 1014, - 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, - 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, - 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, - 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, - 1055, 802, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 313, 0, 423, 273, 0, 477, 0, 319, - 334, 0, 0, 0, 0, 0, 0, 0, 950, 0, - 0, 661, 0, 0, 948, 0, 0, 0, 0, 384, - 0, 349, 205, 233, 0, 0, 434, 485, 497, 0, - 0, 0, 0, 1001, 0, 495, 448, 636, 243, 300, - 482, 455, 493, 463, 303, 0, 0, 494, 391, 617, - 473, 633, 662, 663, 279, 428, 647, 551, 655, 680, - 234, 276, 442, 535, 639, 519, 417, 613, 614, 348, - 518, 311, 209, 388, 668, 232, 503, 390, 253, 241, - 619, 644, 315, 267, 305, 480, 675, 221, 546, 630, - 250, 507, 0, 0, 683, 258, 529, 642, 631, 223, - 626, 528, 413, 345, 346, 222, 0, 481, 284, 309, - 0, 0, 274, 437, 1002, 1003, 272, 684, 847, 654, - 228, 0, 653, 430, 616, 627, 414, 402, 227, 625, - 412, 401, 353, 855, 856, 296, 324, 932, 931, 930, - 323, 325, 928, 929, 927, 215, 640, 658, 0, 216, - 0, 524, 643, 685, 475, 220, 244, 245, 248, 0, - 295, 299, 307, 310, 320, 321, 331, 386, 441, 469, - 465, 474, 0, 610, 634, 648, 660, 666, 667, 669, - 670, 671, 672, 673, 676, 674, 429, 329, 520, 352, - 392, 0, 0, 447, 496, 251, 638, 521, 240, 604, - 418, 427, 259, 261, 260, 235, 512, 609, 246, 266, - 938, 960, 949, 813, 814, 939, 940, 964, 941, 816, - 817, 961, 962, 810, 811, 815, 963, 965, 686, 687, - 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, - 698, 699, 700, 701, 702, 703, 681, 537, 543, 538, - 539, 540, 541, 542, 0, 544, 952, 799, 798, 0, - 805, 806, 0, 835, 836, 838, 844, 845, 846, 857, - 904, 905, 913, 915, 916, 914, 917, 918, 919, 922, - 923, 924, 925, 920, 921, 926, 818, 822, 819, 820, - 821, 833, 823, 824, 825, 826, 827, 828, 829, 830, - 831, 832, 834, 975, 976, 977, 978, 979, 980, 850, - 854, 853, 851, 852, 848, 849, 876, 875, 877, 878, - 879, 880, 881, 882, 884, 883, 885, 886, 887, 888, - 889, 890, 858, 859, 862, 863, 861, 860, 864, 873, - 874, 865, 866, 867, 868, 869, 870, 872, 871, 891, - 892, 893, 894, 895, 897, 896, 900, 901, 899, 898, - 903, 902, 797, 204, 229, 387, 0, 478, 304, 682, - 650, 508, 645, 214, 231, 966, 278, 967, 0, 0, - 971, 0, 0, 0, 973, 972, 0, 974, 936, 935, - 0, 0, 968, 969, 0, 970, 0, 0, 206, 208, - 217, 230, 242, 247, 254, 277, 292, 294, 301, 314, - 327, 328, 337, 338, 341, 347, 399, 406, 407, 408, - 409, 431, 432, 433, 436, 439, 440, 443, 445, 446, - 449, 454, 458, 459, 460, 462, 464, 466, 479, 484, - 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, - 516, 517, 525, 526, 531, 532, 533, 534, 545, 618, - 620, 637, 657, 664, 504, 404, 452, 476, 611, 0, - 0, 981, 982, 983, 984, 985, 986, 987, 988, 316, - 632, 665, 629, 677, 659, 461, 397, 0, 0, 400, - 297, 322, 339, 0, 649, 527, 236, 490, 306, 265, - 1056, 0, 219, 257, 239, 275, 290, 293, 343, 411, - 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, - 549, 550, 552, 415, 282, 456, 416, 0, 395, 606, - 607, 335, 0, 0, 0, 557, 0, 809, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, - 0, 796, 0, 0, 0, 286, 801, 0, 0, 0, - 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, - 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, - 336, 405, 450, 547, 444, 808, 389, 0, 0, 522, - 422, 0, 0, 0, 0, 0, 0, 0, 0, 803, - 804, 0, 0, 0, 0, 0, 0, 0, 0, 342, - 262, 344, 210, 435, 523, 302, 0, 101, 0, 0, - 1057, 536, 991, 780, 957, 995, 1058, 1009, 1010, 1011, - 996, 0, 249, 997, 998, 256, 999, 0, 956, 839, - 841, 840, 906, 907, 908, 909, 910, 911, 912, 842, - 843, 837, 1004, 641, 1012, 1013, 0, 281, 340, 288, - 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, - 0, 238, 0, 0, 0, 0, 0, 0, 0, 776, - 793, 0, 807, 0, 0, 0, 0, 291, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 790, 791, 0, 0, 0, 0, - 951, 0, 792, 0, 0, 800, 1014, 1015, 1016, 1017, - 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, - 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, - 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, - 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 3252, 0, + 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, - 0, 0, 0, 0, 0, 950, 0, 0, 661, 0, - 0, 948, 0, 0, 0, 0, 384, 0, 349, 205, + 0, 0, 0, 0, 0, 951, 0, 0, 662, 0, + 0, 949, 0, 0, 0, 0, 384, 0, 349, 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, - 1001, 0, 495, 448, 636, 243, 300, 482, 455, 493, - 463, 303, 0, 0, 494, 391, 617, 473, 633, 662, - 663, 279, 428, 647, 551, 655, 680, 234, 276, 442, + 1002, 0, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 4216, 0, 494, 391, 617, 473, 633, 663, + 664, 279, 428, 647, 551, 656, 681, 234, 276, 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, - 388, 668, 232, 503, 390, 253, 241, 619, 644, 315, - 267, 305, 480, 675, 221, 546, 630, 250, 507, 0, - 0, 683, 258, 529, 642, 631, 223, 626, 528, 413, - 345, 346, 222, 0, 481, 284, 309, 0, 0, 274, - 437, 1002, 1003, 272, 684, 847, 654, 228, 0, 653, - 430, 616, 627, 414, 402, 227, 625, 412, 401, 353, - 855, 856, 296, 324, 932, 931, 930, 323, 325, 928, - 929, 927, 215, 640, 658, 0, 216, 0, 524, 643, - 685, 475, 220, 244, 245, 248, 0, 295, 299, 307, - 310, 320, 321, 331, 386, 441, 469, 465, 474, 0, - 610, 634, 648, 660, 666, 667, 669, 670, 671, 672, - 673, 676, 674, 429, 329, 520, 352, 392, 0, 0, - 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, - 261, 260, 235, 512, 609, 246, 266, 938, 960, 949, - 813, 814, 939, 940, 964, 941, 816, 817, 961, 962, - 810, 811, 815, 963, 965, 686, 687, 688, 689, 690, + 388, 669, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 0, 676, 221, 546, 630, 250, 507, + 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, + 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, + 274, 437, 1003, 1004, 272, 685, 848, 655, 228, 0, + 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 353, 856, 857, 296, 324, 933, 932, 931, 323, 325, + 929, 930, 928, 215, 640, 659, 0, 216, 0, 524, + 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, + 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, + 0, 610, 634, 648, 661, 667, 668, 670, 671, 672, + 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, + 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, + 259, 261, 260, 235, 512, 609, 246, 266, 939, 961, + 950, 814, 815, 940, 941, 965, 942, 817, 818, 962, + 963, 811, 812, 816, 964, 966, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, - 701, 702, 703, 681, 537, 543, 538, 539, 540, 541, - 542, 0, 544, 952, 799, 798, 0, 805, 806, 0, - 835, 836, 838, 844, 845, 846, 857, 904, 905, 913, - 915, 916, 914, 917, 918, 919, 922, 923, 924, 925, - 920, 921, 926, 818, 822, 819, 820, 821, 833, 823, - 824, 825, 826, 827, 828, 829, 830, 831, 832, 834, - 975, 976, 977, 978, 979, 980, 850, 854, 853, 851, - 852, 848, 849, 876, 875, 877, 878, 879, 880, 881, - 882, 884, 883, 885, 886, 887, 888, 889, 890, 858, - 859, 862, 863, 861, 860, 864, 873, 874, 865, 866, - 867, 868, 869, 870, 872, 871, 891, 892, 893, 894, - 895, 897, 896, 900, 901, 899, 898, 903, 902, 797, - 204, 229, 387, 0, 478, 304, 682, 650, 508, 645, - 214, 231, 966, 278, 967, 0, 0, 971, 0, 0, - 0, 973, 972, 0, 974, 936, 935, 0, 0, 968, - 969, 0, 970, 0, 0, 206, 208, 217, 230, 242, - 247, 254, 277, 292, 294, 301, 314, 327, 328, 337, - 338, 341, 347, 399, 406, 407, 408, 409, 431, 432, - 433, 436, 439, 440, 443, 445, 446, 449, 454, 458, - 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, - 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, - 526, 531, 532, 533, 534, 545, 618, 620, 637, 657, - 664, 504, 404, 452, 476, 611, 0, 0, 981, 982, - 983, 984, 985, 986, 987, 988, 316, 632, 665, 629, - 677, 659, 461, 397, 0, 0, 400, 297, 322, 339, - 0, 649, 527, 236, 490, 306, 265, 1056, 0, 219, - 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, - 312, 287, 255, 483, 252, 509, 548, 549, 550, 552, - 415, 282, 456, 416, 0, 395, 606, 607, 335, 0, - 0, 0, 557, 0, 809, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 438, 0, 0, 0, 796, 0, - 0, 0, 286, 801, 0, 0, 0, 385, 283, 0, - 0, 212, 530, 0, 453, 0, 211, 0, 511, 268, - 396, 393, 615, 298, 289, 285, 264, 336, 405, 450, - 547, 444, 808, 389, 0, 0, 522, 422, 0, 0, - 0, 0, 0, 0, 0, 0, 803, 804, 0, 0, - 0, 0, 0, 0, 0, 0, 342, 262, 344, 210, - 435, 523, 302, 0, 101, 0, 0, 1057, 536, 991, - 780, 957, 995, 1058, 1009, 1010, 1011, 996, 0, 249, - 997, 998, 256, 999, 0, 956, 839, 841, 840, 906, - 907, 908, 909, 910, 911, 912, 842, 843, 837, 1004, - 641, 1012, 1013, 0, 281, 340, 288, 280, 612, 0, - 0, 0, 0, 0, 0, 628, 0, 0, 238, 0, - 0, 0, 0, 0, 0, 0, 776, 793, 0, 807, - 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 790, 791, 0, 0, 0, 0, 951, 0, 792, - 0, 0, 800, 1014, 1015, 1016, 1017, 1018, 1019, 1020, - 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, - 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, - 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, - 1051, 1052, 1053, 1054, 1055, 3248, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 313, 0, 423, 273, - 0, 477, 0, 319, 334, 0, 0, 0, 0, 0, - 0, 0, 950, 0, 0, 661, 0, 0, 948, 0, - 0, 0, 0, 384, 0, 349, 205, 233, 0, 0, - 434, 485, 497, 0, 0, 0, 0, 1001, 0, 495, - 448, 636, 243, 300, 482, 455, 493, 463, 303, 0, - 0, 494, 391, 617, 473, 633, 662, 663, 279, 428, - 647, 551, 655, 680, 234, 276, 442, 535, 639, 519, - 417, 613, 614, 348, 518, 311, 209, 388, 668, 232, - 503, 390, 253, 241, 619, 644, 315, 267, 305, 480, - 675, 221, 546, 630, 250, 507, 0, 0, 683, 258, + 701, 702, 703, 704, 682, 537, 543, 538, 539, 540, + 541, 542, 0, 544, 953, 800, 799, 0, 806, 807, + 0, 836, 837, 839, 845, 846, 847, 858, 905, 906, + 914, 916, 917, 915, 918, 919, 920, 923, 924, 925, + 926, 921, 922, 927, 819, 823, 820, 821, 822, 834, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, + 835, 976, 977, 978, 979, 980, 981, 851, 855, 854, + 852, 853, 849, 850, 877, 876, 878, 879, 880, 881, + 882, 883, 885, 884, 886, 887, 888, 889, 890, 891, + 859, 860, 863, 864, 862, 861, 865, 874, 875, 866, + 867, 868, 869, 870, 871, 873, 872, 892, 893, 894, + 895, 896, 898, 897, 901, 902, 900, 899, 904, 903, + 798, 204, 229, 387, 0, 478, 304, 683, 650, 508, + 645, 214, 231, 967, 278, 968, 0, 0, 972, 0, + 0, 0, 974, 973, 0, 975, 937, 936, 0, 0, + 969, 970, 0, 971, 0, 0, 206, 208, 217, 230, + 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, + 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, + 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, + 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, + 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, + 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, + 658, 665, 504, 404, 452, 476, 611, 0, 0, 982, + 983, 984, 985, 986, 987, 988, 989, 316, 632, 666, + 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, + 339, 0, 649, 527, 236, 490, 306, 265, 1057, 0, + 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, + 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, + 552, 415, 282, 456, 0, 0, 395, 606, 607, 335, + 557, 0, 810, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 438, 0, 0, 0, 797, 0, 0, 0, + 286, 802, 0, 0, 0, 385, 283, 0, 0, 212, + 530, 0, 453, 0, 211, 0, 511, 268, 396, 393, + 615, 298, 289, 285, 264, 336, 405, 450, 547, 444, + 809, 389, 0, 651, 522, 422, 0, 0, 0, 0, + 0, 0, 0, 0, 804, 805, 0, 0, 0, 0, + 0, 0, 0, 0, 342, 262, 344, 210, 435, 523, + 302, 0, 101, 0, 1805, 1058, 536, 992, 781, 958, + 996, 1059, 1010, 1011, 1012, 997, 0, 249, 998, 999, + 256, 1000, 0, 957, 840, 842, 841, 907, 908, 909, + 910, 911, 912, 913, 843, 844, 838, 1005, 641, 1013, + 1014, 0, 281, 340, 288, 280, 612, 0, 0, 0, + 0, 0, 0, 628, 0, 0, 238, 0, 0, 0, + 0, 0, 0, 0, 777, 794, 0, 808, 0, 0, + 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, + 791, 792, 0, 0, 0, 0, 952, 0, 793, 0, + 0, 801, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, + 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, + 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, + 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, + 1053, 1054, 1055, 1056, 803, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 313, 0, 423, 273, 0, + 477, 0, 319, 334, 0, 0, 0, 0, 0, 0, + 0, 951, 0, 0, 662, 0, 0, 949, 0, 0, + 0, 0, 384, 0, 349, 205, 233, 0, 0, 434, + 485, 497, 0, 0, 0, 0, 1002, 0, 495, 448, + 636, 243, 300, 482, 455, 493, 463, 303, 0, 0, + 494, 391, 617, 473, 633, 663, 664, 279, 428, 647, + 551, 656, 681, 234, 276, 442, 535, 639, 519, 417, + 613, 614, 348, 518, 311, 209, 388, 669, 232, 503, + 390, 253, 241, 619, 644, 315, 267, 305, 480, 0, + 676, 221, 546, 630, 250, 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, - 0, 481, 284, 309, 0, 0, 274, 437, 1002, 1003, - 272, 684, 847, 654, 228, 0, 653, 430, 616, 627, - 414, 402, 227, 625, 412, 401, 353, 855, 856, 296, - 324, 932, 931, 930, 323, 325, 928, 929, 927, 215, - 640, 658, 0, 216, 0, 524, 643, 685, 475, 220, + 0, 481, 284, 309, 0, 0, 274, 437, 1003, 1004, + 272, 685, 848, 655, 228, 0, 654, 430, 616, 627, + 414, 402, 227, 625, 412, 401, 353, 856, 857, 296, + 324, 933, 932, 931, 323, 325, 929, 930, 928, 215, + 640, 659, 0, 216, 0, 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, 0, 610, 634, 648, - 660, 666, 667, 669, 670, 671, 672, 673, 676, 674, + 661, 667, 668, 670, 671, 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, 235, - 512, 609, 246, 266, 938, 960, 949, 813, 814, 939, - 940, 964, 941, 816, 817, 961, 962, 810, 811, 815, - 963, 965, 686, 687, 688, 689, 690, 691, 692, 693, - 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, - 681, 537, 543, 538, 539, 540, 541, 542, 0, 544, - 952, 799, 798, 0, 805, 806, 0, 835, 836, 838, - 844, 845, 846, 857, 904, 905, 913, 915, 916, 914, - 917, 918, 919, 922, 923, 924, 925, 920, 921, 926, - 818, 822, 819, 820, 821, 833, 823, 824, 825, 826, - 827, 828, 829, 830, 831, 832, 834, 975, 976, 977, - 978, 979, 980, 850, 854, 853, 851, 852, 848, 849, - 876, 875, 877, 878, 879, 880, 881, 882, 884, 883, - 885, 886, 887, 888, 889, 890, 858, 859, 862, 863, - 861, 860, 864, 873, 874, 865, 866, 867, 868, 869, - 870, 872, 871, 891, 892, 893, 894, 895, 897, 896, - 900, 901, 899, 898, 903, 902, 797, 204, 229, 387, - 0, 478, 304, 682, 650, 508, 645, 214, 231, 966, - 278, 967, 0, 0, 971, 0, 0, 0, 973, 972, - 0, 974, 936, 935, 0, 0, 968, 969, 0, 970, + 512, 609, 246, 266, 939, 961, 950, 814, 815, 940, + 941, 965, 942, 817, 818, 962, 963, 811, 812, 816, + 964, 966, 687, 688, 689, 690, 691, 692, 693, 694, + 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 682, 537, 543, 538, 539, 540, 541, 542, 0, 544, + 953, 800, 799, 0, 806, 807, 0, 836, 837, 839, + 845, 846, 847, 858, 905, 906, 914, 916, 917, 915, + 918, 919, 920, 923, 924, 925, 926, 921, 922, 927, + 819, 823, 820, 821, 822, 834, 824, 825, 826, 827, + 828, 829, 830, 831, 832, 833, 835, 976, 977, 978, + 979, 980, 981, 851, 855, 854, 852, 853, 849, 850, + 877, 876, 878, 879, 880, 881, 882, 883, 885, 884, + 886, 887, 888, 889, 890, 891, 859, 860, 863, 864, + 862, 861, 865, 874, 875, 866, 867, 868, 869, 870, + 871, 873, 872, 892, 893, 894, 895, 896, 898, 897, + 901, 902, 900, 899, 904, 903, 798, 204, 229, 387, + 0, 478, 304, 683, 650, 508, 645, 214, 231, 967, + 278, 968, 0, 0, 972, 0, 0, 0, 974, 973, + 0, 975, 937, 936, 0, 0, 969, 970, 0, 971, 0, 0, 206, 208, 217, 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, 531, 532, - 533, 534, 545, 618, 620, 637, 657, 664, 504, 404, - 452, 476, 611, 0, 0, 981, 982, 983, 984, 985, - 986, 987, 988, 316, 632, 665, 629, 677, 659, 461, + 533, 534, 545, 618, 620, 637, 658, 665, 504, 404, + 452, 476, 611, 0, 0, 982, 983, 984, 985, 986, + 987, 988, 989, 316, 632, 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, 339, 0, 649, 527, - 236, 490, 306, 265, 1056, 0, 219, 257, 239, 275, + 236, 490, 306, 265, 1057, 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, 552, 415, 282, 456, - 416, 0, 395, 606, 607, 335, 0, 0, 0, 557, - 0, 809, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 438, 0, 0, 0, 796, 0, 0, 0, 286, - 801, 0, 0, 0, 385, 283, 0, 0, 212, 530, - 0, 453, 0, 211, 0, 511, 268, 396, 393, 615, - 298, 289, 285, 264, 336, 405, 450, 547, 444, 808, - 389, 0, 0, 522, 422, 0, 0, 0, 0, 0, - 0, 0, 0, 803, 804, 0, 0, 0, 0, 0, - 0, 0, 0, 342, 262, 344, 210, 435, 523, 302, - 0, 101, 0, 0, 1057, 536, 991, 1131, 957, 995, - 1058, 1009, 1010, 1011, 996, 0, 249, 997, 998, 256, - 999, 0, 956, 839, 841, 840, 906, 907, 908, 909, - 910, 911, 912, 842, 843, 837, 1004, 641, 1012, 1013, - 0, 281, 340, 288, 280, 612, 0, 0, 0, 0, - 0, 0, 628, 0, 0, 238, 0, 0, 0, 0, - 0, 0, 0, 0, 793, 0, 807, 0, 0, 0, - 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 790, 791, - 0, 0, 0, 0, 951, 0, 792, 0, 0, 800, - 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, - 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, - 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, - 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, - 1054, 1055, 802, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 313, 0, 423, 273, 0, 477, 0, - 319, 334, 0, 0, 0, 0, 0, 0, 0, 950, - 0, 0, 661, 0, 0, 948, 0, 0, 0, 0, - 384, 0, 349, 205, 233, 0, 0, 434, 485, 497, - 0, 0, 0, 0, 1001, 0, 495, 448, 636, 243, - 300, 482, 455, 493, 463, 303, 0, 0, 494, 391, - 617, 473, 633, 662, 663, 279, 428, 647, 551, 655, - 680, 234, 276, 442, 535, 639, 519, 417, 613, 614, - 348, 518, 311, 209, 388, 668, 232, 503, 390, 253, - 241, 619, 644, 315, 267, 305, 480, 675, 221, 546, - 630, 250, 507, 0, 0, 683, 258, 529, 642, 631, - 223, 626, 528, 413, 345, 346, 222, 0, 481, 284, - 309, 0, 0, 274, 437, 1002, 1003, 272, 684, 847, - 654, 228, 0, 653, 430, 616, 627, 414, 402, 227, - 625, 412, 401, 353, 855, 856, 296, 324, 932, 931, - 930, 323, 325, 928, 929, 927, 215, 640, 658, 0, - 216, 0, 524, 643, 685, 475, 220, 244, 245, 248, - 0, 295, 299, 307, 310, 320, 321, 331, 386, 441, - 469, 465, 474, 0, 610, 634, 648, 660, 666, 667, - 669, 670, 671, 672, 673, 676, 674, 429, 329, 520, - 352, 392, 0, 0, 447, 496, 251, 638, 521, 240, - 604, 418, 427, 259, 261, 260, 235, 512, 609, 246, - 266, 938, 960, 949, 813, 814, 939, 940, 964, 941, - 816, 817, 961, 962, 810, 811, 815, 963, 965, 686, - 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, - 697, 698, 699, 700, 701, 702, 703, 681, 537, 543, - 538, 539, 540, 541, 542, 0, 544, 952, 799, 798, - 0, 805, 806, 0, 835, 836, 838, 844, 845, 846, - 857, 904, 905, 913, 915, 916, 914, 917, 918, 919, - 922, 923, 924, 925, 920, 921, 926, 818, 822, 819, - 820, 821, 833, 823, 824, 825, 826, 827, 828, 829, - 830, 831, 832, 834, 975, 976, 977, 978, 979, 980, - 850, 854, 853, 851, 852, 848, 849, 876, 875, 877, - 878, 879, 880, 881, 882, 884, 883, 885, 886, 887, - 888, 889, 890, 858, 859, 862, 863, 861, 860, 864, - 873, 874, 865, 866, 867, 868, 869, 870, 872, 871, - 891, 892, 893, 894, 895, 897, 896, 900, 901, 899, - 898, 903, 902, 797, 204, 229, 387, 0, 478, 304, - 682, 650, 508, 645, 214, 231, 966, 278, 967, 0, - 0, 971, 0, 0, 0, 973, 972, 0, 974, 936, - 935, 0, 0, 968, 969, 0, 970, 0, 0, 206, - 208, 217, 230, 242, 247, 254, 277, 292, 294, 301, - 314, 327, 328, 337, 338, 341, 347, 399, 406, 407, - 408, 409, 431, 432, 433, 436, 439, 440, 443, 445, - 446, 449, 454, 458, 459, 460, 462, 464, 466, 479, - 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, - 515, 516, 517, 525, 526, 531, 532, 533, 534, 545, - 618, 620, 637, 657, 664, 504, 404, 452, 476, 611, - 0, 0, 981, 982, 983, 984, 985, 986, 987, 988, - 316, 632, 665, 629, 677, 659, 461, 397, 0, 0, - 400, 297, 322, 339, 0, 649, 527, 236, 490, 306, - 265, 1056, 0, 219, 257, 239, 275, 290, 293, 343, - 411, 421, 451, 457, 312, 287, 255, 483, 252, 509, - 548, 549, 550, 552, 415, 282, 456, 416, 0, 395, - 606, 607, 335, 0, 0, 0, 557, 0, 809, 0, + 0, 0, 395, 606, 607, 335, 557, 0, 810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, - 0, 0, 796, 0, 0, 0, 286, 801, 0, 0, + 0, 0, 797, 0, 0, 0, 286, 802, 0, 0, 0, 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, 511, 268, 396, 393, 615, 298, 289, 285, - 264, 336, 405, 450, 547, 444, 808, 389, 0, 0, + 264, 336, 405, 450, 547, 444, 809, 389, 0, 651, 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, - 803, 804, 0, 0, 0, 0, 0, 0, 0, 0, + 804, 805, 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, 344, 210, 435, 523, 302, 0, 101, 0, - 0, 1057, 536, 991, 1131, 957, 995, 1058, 1009, 1010, - 1011, 996, 0, 249, 997, 998, 256, 999, 0, 956, - 839, 841, 840, 906, 907, 908, 909, 910, 911, 912, - 842, 843, 837, 1004, 641, 1012, 1013, 0, 281, 340, + 0, 1058, 536, 992, 781, 958, 996, 1059, 1010, 1011, + 1012, 997, 0, 249, 998, 999, 256, 1000, 0, 957, + 840, 842, 841, 907, 908, 909, 910, 911, 912, 913, + 843, 844, 838, 1005, 641, 1013, 1014, 0, 281, 340, 288, 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, - 0, 793, 0, 807, 0, 0, 0, 0, 291, 0, + 777, 794, 0, 808, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 790, 791, 0, 0, 0, - 0, 951, 0, 792, 0, 0, 800, 1014, 1015, 1016, + 0, 0, 416, 0, 0, 0, 791, 792, 1111, 0, + 0, 0, 952, 0, 793, 0, 0, 801, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, - 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 2185, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, - 0, 0, 0, 0, 0, 0, 950, 0, 0, 661, - 0, 0, 948, 0, 0, 0, 0, 384, 0, 349, - 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, - 0, 1001, 0, 495, 448, 636, 243, 300, 482, 455, - 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, - 662, 663, 279, 428, 647, 551, 655, 680, 234, 276, - 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, - 209, 388, 668, 232, 503, 390, 253, 241, 619, 644, - 315, 267, 305, 480, 675, 221, 546, 630, 250, 507, - 0, 0, 683, 258, 529, 642, 631, 223, 626, 528, - 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, - 274, 437, 1002, 1003, 272, 684, 847, 654, 228, 0, - 653, 430, 616, 627, 414, 402, 227, 625, 412, 401, - 353, 855, 856, 296, 324, 932, 931, 930, 323, 325, - 928, 929, 927, 215, 640, 658, 0, 216, 0, 524, - 643, 685, 475, 220, 244, 245, 248, 0, 295, 299, - 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, - 0, 610, 634, 648, 660, 666, 667, 669, 670, 671, - 672, 673, 676, 674, 429, 329, 520, 352, 392, 0, - 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, - 259, 261, 260, 235, 512, 609, 246, 266, 938, 960, - 949, 813, 814, 939, 940, 964, 941, 816, 817, 961, - 962, 810, 811, 815, 963, 965, 686, 687, 688, 689, - 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, - 700, 701, 702, 703, 681, 537, 543, 538, 539, 540, - 541, 542, 0, 544, 952, 799, 798, 0, 805, 806, - 0, 835, 836, 838, 844, 845, 846, 857, 904, 905, - 913, 915, 916, 914, 917, 918, 919, 922, 923, 924, - 925, 920, 921, 926, 818, 822, 819, 820, 821, 833, - 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, - 834, 975, 976, 977, 978, 979, 980, 850, 854, 853, - 851, 852, 848, 849, 876, 875, 877, 878, 879, 880, - 881, 882, 884, 883, 885, 886, 887, 888, 889, 890, - 858, 859, 862, 863, 861, 860, 864, 873, 874, 865, - 866, 867, 868, 869, 870, 872, 871, 891, 892, 893, - 894, 895, 897, 896, 900, 901, 899, 898, 903, 902, - 797, 204, 229, 387, 0, 478, 304, 682, 650, 508, - 645, 214, 231, 966, 278, 967, 0, 0, 971, 0, - 0, 0, 973, 972, 0, 974, 936, 935, 0, 0, - 968, 969, 0, 970, 0, 0, 206, 208, 217, 230, - 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, - 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, - 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, - 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, - 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, - 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, - 657, 664, 504, 404, 452, 476, 611, 0, 0, 981, - 982, 983, 984, 985, 986, 987, 988, 316, 632, 665, - 629, 677, 659, 461, 397, 0, 0, 400, 297, 322, - 339, 0, 649, 527, 236, 490, 306, 265, 1056, 0, - 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, - 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, - 552, 415, 282, 456, 416, 0, 395, 606, 607, 335, - 0, 0, 0, 557, 0, 809, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 438, 0, 0, 0, 796, - 0, 0, 0, 286, 801, 0, 0, 0, 385, 283, - 0, 0, 212, 530, 0, 453, 0, 211, 0, 511, - 268, 396, 393, 615, 298, 289, 285, 264, 336, 405, - 450, 547, 444, 808, 389, 0, 0, 522, 422, 0, - 0, 0, 0, 0, 0, 0, 0, 803, 804, 0, - 0, 0, 0, 0, 0, 0, 0, 342, 262, 344, - 210, 435, 523, 302, 0, 101, 0, 0, 1057, 536, - 991, 1131, 957, 995, 1058, 1009, 1010, 1011, 996, 0, - 249, 997, 998, 256, 999, 0, 956, 839, 841, 840, - 906, 907, 908, 909, 910, 911, 912, 842, 843, 837, - 1004, 641, 1012, 1013, 0, 281, 340, 288, 280, 612, - 0, 0, 0, 0, 0, 0, 628, 0, 0, 238, - 0, 0, 0, 0, 0, 0, 0, 0, 793, 0, - 807, 0, 0, 0, 0, 291, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 790, 791, 0, 0, 0, 0, 951, 0, - 792, 0, 0, 800, 1014, 1015, 1016, 1017, 1018, 1019, - 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, - 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, - 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, - 1050, 1051, 1052, 1053, 1054, 1055, 2183, 0, 0, 0, + 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, + 803, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 313, 0, 423, 273, 0, 477, 0, 319, 334, + 0, 0, 0, 0, 0, 0, 0, 951, 0, 0, + 662, 0, 0, 949, 0, 0, 0, 0, 384, 0, + 349, 205, 233, 0, 0, 434, 485, 497, 0, 0, + 0, 0, 1002, 0, 495, 448, 636, 243, 300, 482, + 455, 493, 463, 303, 0, 0, 494, 391, 617, 473, + 633, 663, 664, 279, 428, 647, 551, 656, 681, 234, + 276, 442, 535, 639, 519, 417, 613, 614, 348, 518, + 311, 209, 388, 669, 232, 503, 390, 253, 241, 619, + 644, 315, 267, 305, 480, 0, 676, 221, 546, 630, + 250, 507, 0, 0, 684, 258, 529, 642, 631, 223, + 626, 528, 413, 345, 346, 222, 0, 481, 284, 309, + 0, 0, 274, 437, 1003, 1004, 272, 685, 848, 655, + 228, 0, 654, 430, 616, 627, 414, 402, 227, 625, + 412, 401, 353, 856, 857, 296, 324, 933, 932, 931, + 323, 325, 929, 930, 928, 215, 640, 659, 0, 216, + 0, 524, 643, 686, 475, 220, 244, 245, 248, 0, + 295, 299, 307, 310, 320, 321, 331, 386, 441, 469, + 465, 474, 0, 610, 634, 648, 661, 667, 668, 670, + 671, 672, 673, 674, 677, 675, 429, 329, 520, 352, + 392, 0, 0, 447, 496, 251, 638, 521, 240, 604, + 418, 427, 259, 261, 260, 235, 512, 609, 246, 266, + 939, 961, 950, 814, 815, 940, 941, 965, 942, 817, + 818, 962, 963, 811, 812, 816, 964, 966, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, + 699, 700, 701, 702, 703, 704, 682, 537, 543, 538, + 539, 540, 541, 542, 0, 544, 953, 800, 799, 0, + 806, 807, 0, 836, 837, 839, 845, 846, 847, 858, + 905, 906, 914, 916, 917, 915, 918, 919, 920, 923, + 924, 925, 926, 921, 922, 927, 819, 823, 820, 821, + 822, 834, 824, 825, 826, 827, 828, 829, 830, 831, + 832, 833, 835, 976, 977, 978, 979, 980, 981, 851, + 855, 854, 852, 853, 849, 850, 877, 876, 878, 879, + 880, 881, 882, 883, 885, 884, 886, 887, 888, 889, + 890, 891, 859, 860, 863, 864, 862, 861, 865, 874, + 875, 866, 867, 868, 869, 870, 871, 873, 872, 892, + 893, 894, 895, 896, 898, 897, 901, 902, 900, 899, + 904, 903, 798, 204, 229, 387, 0, 478, 304, 683, + 650, 508, 645, 214, 231, 967, 278, 968, 0, 0, + 972, 0, 0, 0, 974, 973, 0, 975, 937, 936, + 0, 0, 969, 970, 0, 971, 0, 0, 206, 208, + 217, 230, 242, 247, 254, 277, 292, 294, 301, 314, + 327, 328, 337, 338, 341, 347, 399, 406, 407, 408, + 409, 431, 432, 433, 436, 439, 440, 443, 445, 446, + 449, 454, 458, 459, 460, 462, 464, 466, 479, 484, + 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, + 516, 517, 525, 526, 531, 532, 533, 534, 545, 618, + 620, 637, 658, 665, 504, 404, 452, 476, 611, 0, + 0, 982, 983, 984, 985, 986, 987, 988, 989, 316, + 632, 666, 629, 678, 660, 461, 397, 0, 0, 400, + 297, 322, 339, 0, 649, 527, 236, 490, 306, 265, + 1057, 0, 219, 257, 239, 275, 290, 293, 343, 411, + 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, + 549, 550, 552, 415, 282, 456, 0, 0, 395, 606, + 607, 335, 557, 0, 810, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 438, 0, 0, 0, 797, 0, + 0, 0, 286, 802, 0, 0, 0, 385, 283, 0, + 0, 212, 530, 0, 453, 0, 211, 0, 511, 268, + 396, 393, 615, 298, 289, 285, 264, 336, 405, 450, + 547, 444, 809, 389, 0, 651, 522, 422, 0, 0, + 0, 0, 0, 0, 0, 0, 804, 805, 0, 0, + 0, 0, 0, 0, 0, 0, 342, 262, 344, 210, + 435, 523, 302, 0, 101, 0, 0, 1058, 536, 992, + 781, 958, 996, 1059, 1010, 1011, 1012, 997, 0, 249, + 998, 999, 256, 1000, 0, 957, 840, 842, 841, 907, + 908, 909, 910, 911, 912, 913, 843, 844, 838, 1005, + 641, 1013, 1014, 0, 281, 340, 288, 280, 612, 0, + 0, 0, 0, 0, 0, 628, 0, 0, 238, 0, + 0, 0, 0, 0, 0, 0, 777, 794, 0, 808, + 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, + 0, 0, 791, 792, 0, 0, 0, 0, 952, 0, + 793, 0, 0, 801, 1015, 1016, 1017, 1018, 1019, 1020, + 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, + 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, + 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, + 1051, 1052, 1053, 1054, 1055, 1056, 803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, 0, 0, - 0, 0, 0, 950, 0, 0, 661, 0, 0, 948, + 0, 0, 0, 951, 0, 0, 662, 0, 0, 949, 0, 0, 0, 0, 384, 0, 349, 205, 233, 0, - 0, 434, 485, 497, 0, 0, 0, 0, 1001, 0, + 0, 434, 485, 497, 0, 0, 0, 0, 1002, 0, 495, 448, 636, 243, 300, 482, 455, 493, 463, 303, - 0, 0, 494, 391, 617, 473, 633, 662, 663, 279, - 428, 647, 551, 655, 680, 234, 276, 442, 535, 639, - 519, 417, 613, 614, 348, 518, 311, 209, 388, 668, + 0, 0, 494, 391, 617, 473, 633, 663, 664, 279, + 428, 647, 551, 656, 681, 234, 276, 442, 535, 639, + 519, 417, 613, 614, 348, 518, 311, 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, 315, 267, 305, - 480, 675, 221, 546, 630, 250, 507, 0, 0, 683, - 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, - 222, 0, 481, 284, 309, 0, 0, 274, 437, 1002, - 1003, 272, 684, 847, 654, 228, 0, 653, 430, 616, - 627, 414, 402, 227, 625, 412, 401, 353, 855, 856, - 296, 324, 932, 931, 930, 323, 325, 928, 929, 927, - 215, 640, 658, 0, 216, 0, 524, 643, 685, 475, - 220, 244, 245, 248, 0, 295, 299, 307, 310, 320, - 321, 331, 386, 441, 469, 465, 474, 0, 610, 634, - 648, 660, 666, 667, 669, 670, 671, 672, 673, 676, - 674, 429, 329, 520, 352, 392, 0, 0, 447, 496, - 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, - 235, 512, 609, 246, 266, 938, 960, 949, 813, 814, - 939, 940, 964, 941, 816, 817, 961, 962, 810, 811, - 815, 963, 965, 686, 687, 688, 689, 690, 691, 692, + 480, 0, 676, 221, 546, 630, 250, 507, 0, 0, + 684, 258, 529, 642, 631, 223, 626, 528, 413, 345, + 346, 222, 0, 481, 284, 309, 0, 0, 274, 437, + 1003, 1004, 272, 685, 848, 655, 228, 0, 654, 430, + 616, 627, 414, 402, 227, 625, 412, 401, 353, 856, + 857, 296, 324, 933, 932, 931, 323, 325, 929, 930, + 928, 215, 640, 659, 0, 216, 0, 524, 643, 686, + 475, 220, 244, 245, 248, 0, 295, 299, 307, 310, + 320, 321, 331, 386, 441, 469, 465, 474, 0, 610, + 634, 648, 661, 667, 668, 670, 671, 672, 673, 674, + 677, 675, 429, 329, 520, 352, 392, 0, 0, 447, + 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, + 260, 235, 512, 609, 246, 266, 939, 961, 950, 814, + 815, 940, 941, 965, 942, 817, 818, 962, 963, 811, + 812, 816, 964, 966, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, - 703, 681, 537, 543, 538, 539, 540, 541, 542, 0, - 544, 952, 799, 798, 0, 805, 806, 0, 835, 836, - 838, 844, 845, 846, 857, 904, 905, 913, 915, 916, - 914, 917, 918, 919, 922, 923, 924, 925, 920, 921, - 926, 818, 822, 819, 820, 821, 833, 823, 824, 825, - 826, 827, 828, 829, 830, 831, 832, 834, 975, 976, - 977, 978, 979, 980, 850, 854, 853, 851, 852, 848, - 849, 876, 875, 877, 878, 879, 880, 881, 882, 884, - 883, 885, 886, 887, 888, 889, 890, 858, 859, 862, - 863, 861, 860, 864, 873, 874, 865, 866, 867, 868, - 869, 870, 872, 871, 891, 892, 893, 894, 895, 897, - 896, 900, 901, 899, 898, 903, 902, 797, 204, 229, - 387, 0, 478, 304, 682, 650, 508, 645, 214, 231, - 966, 278, 967, 0, 0, 971, 0, 0, 0, 973, - 972, 0, 974, 936, 935, 0, 0, 968, 969, 0, - 970, 0, 0, 206, 208, 217, 230, 242, 247, 254, - 277, 292, 294, 301, 314, 327, 328, 337, 338, 341, - 347, 399, 406, 407, 408, 409, 431, 432, 433, 436, - 439, 440, 443, 445, 446, 449, 454, 458, 459, 460, - 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, - 505, 506, 513, 514, 515, 516, 517, 525, 526, 531, - 532, 533, 534, 545, 618, 620, 637, 657, 664, 504, - 404, 452, 476, 611, 0, 0, 981, 982, 983, 984, - 985, 986, 987, 988, 316, 632, 665, 629, 677, 659, - 461, 397, 0, 0, 400, 297, 322, 339, 0, 649, - 527, 236, 490, 306, 265, 1056, 0, 219, 257, 239, - 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, - 255, 483, 252, 509, 548, 549, 550, 552, 415, 282, - 456, 416, 0, 395, 606, 607, 335, 0, 0, 0, - 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, - 286, 0, 0, 0, 0, 385, 283, 0, 0, 212, - 530, 0, 453, 0, 211, 0, 511, 268, 396, 393, - 615, 298, 289, 285, 264, 336, 405, 450, 547, 444, - 0, 389, 0, 0, 522, 422, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 342, 262, 344, 210, 435, 523, - 302, 0, 0, 0, 0, 0, 536, 756, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, - 256, 0, 0, 0, 370, 379, 378, 358, 359, 361, - 363, 369, 376, 382, 355, 364, 0, 0, 641, 0, - 0, 0, 281, 340, 288, 280, 612, 0, 0, 0, - 0, 0, 0, 628, 0, 0, 238, 0, 1174, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 313, 0, 423, 273, 0, 477, - 0, 319, 334, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1173, 661, 0, 0, 0, 0, 0, 1170, - 1171, 384, 1139, 349, 205, 233, 1164, 1168, 434, 485, - 497, 0, 0, 0, 0, 269, 0, 495, 448, 636, - 243, 300, 482, 455, 493, 463, 303, 0, 0, 494, - 391, 617, 473, 633, 662, 663, 279, 428, 647, 551, - 655, 680, 234, 276, 442, 535, 639, 519, 417, 613, - 614, 348, 518, 311, 209, 388, 668, 232, 503, 390, - 253, 241, 619, 644, 315, 267, 305, 480, 675, 221, - 546, 630, 250, 507, 0, 0, 683, 258, 529, 642, + 703, 704, 682, 537, 543, 538, 539, 540, 541, 542, + 0, 544, 953, 800, 799, 0, 806, 807, 0, 836, + 837, 839, 845, 846, 847, 858, 905, 906, 914, 916, + 917, 915, 918, 919, 920, 923, 924, 925, 926, 921, + 922, 927, 819, 823, 820, 821, 822, 834, 824, 825, + 826, 827, 828, 829, 830, 831, 832, 833, 835, 976, + 977, 978, 979, 980, 981, 851, 855, 854, 852, 853, + 849, 850, 877, 876, 878, 879, 880, 881, 882, 883, + 885, 884, 886, 887, 888, 889, 890, 891, 859, 860, + 863, 864, 862, 861, 865, 874, 875, 866, 867, 868, + 869, 870, 871, 873, 872, 892, 893, 894, 895, 896, + 898, 897, 901, 902, 900, 899, 904, 903, 798, 204, + 229, 387, 0, 478, 304, 683, 650, 508, 645, 214, + 231, 967, 278, 968, 0, 0, 972, 0, 0, 0, + 974, 973, 0, 975, 937, 936, 0, 0, 969, 970, + 0, 971, 0, 0, 206, 208, 217, 230, 242, 247, + 254, 277, 292, 294, 301, 314, 327, 328, 337, 338, + 341, 347, 399, 406, 407, 408, 409, 431, 432, 433, + 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, + 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, + 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, + 531, 532, 533, 534, 545, 618, 620, 637, 658, 665, + 504, 404, 452, 476, 611, 0, 0, 982, 983, 984, + 985, 986, 987, 988, 989, 316, 632, 666, 629, 678, + 660, 461, 397, 0, 0, 400, 297, 322, 339, 0, + 649, 527, 236, 490, 306, 265, 1057, 0, 219, 257, + 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, + 287, 255, 483, 252, 509, 548, 549, 550, 552, 415, + 282, 456, 0, 0, 395, 606, 607, 335, 557, 0, + 810, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 438, 0, 0, 0, 797, 0, 0, 0, 286, 802, + 0, 0, 0, 385, 283, 0, 0, 212, 530, 0, + 453, 0, 211, 0, 511, 268, 396, 393, 615, 298, + 289, 285, 264, 336, 405, 450, 547, 444, 809, 389, + 0, 651, 522, 422, 0, 0, 0, 0, 0, 0, + 0, 0, 804, 805, 0, 0, 0, 0, 0, 0, + 0, 0, 342, 262, 344, 210, 435, 523, 302, 0, + 101, 0, 0, 1058, 536, 992, 781, 958, 996, 1059, + 1010, 1011, 1012, 997, 0, 249, 998, 999, 256, 1000, + 0, 957, 840, 842, 841, 907, 908, 909, 910, 911, + 912, 913, 843, 844, 838, 1005, 641, 1013, 1014, 0, + 281, 340, 288, 280, 612, 0, 0, 0, 0, 0, + 0, 628, 0, 0, 238, 0, 0, 0, 0, 0, + 0, 0, 777, 794, 0, 808, 0, 0, 0, 0, + 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 416, 0, 0, 0, 791, 792, + 0, 0, 0, 0, 952, 0, 793, 0, 0, 801, + 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, + 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, + 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, + 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, + 1055, 1056, 3260, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 313, 0, 423, 273, 0, 477, 0, + 319, 334, 0, 0, 0, 0, 0, 0, 0, 951, + 0, 0, 662, 0, 0, 949, 0, 0, 0, 0, + 384, 0, 349, 205, 233, 0, 0, 434, 485, 497, + 0, 0, 0, 0, 1002, 0, 495, 448, 636, 243, + 300, 482, 455, 493, 463, 303, 0, 0, 494, 391, + 617, 473, 633, 663, 664, 279, 428, 647, 551, 656, + 681, 234, 276, 442, 535, 639, 519, 417, 613, 614, + 348, 518, 311, 209, 388, 669, 232, 503, 390, 253, + 241, 619, 644, 315, 267, 305, 480, 0, 676, 221, + 546, 630, 250, 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, 0, 481, - 284, 309, 0, 0, 274, 437, 621, 622, 272, 684, - 237, 654, 228, 0, 653, 430, 616, 627, 414, 402, - 227, 625, 412, 401, 353, 374, 375, 296, 324, 470, - 394, 471, 323, 325, 425, 424, 426, 215, 640, 658, - 0, 216, 0, 524, 643, 685, 475, 220, 244, 245, + 284, 309, 0, 0, 274, 437, 1003, 1004, 272, 685, + 848, 655, 228, 0, 654, 430, 616, 627, 414, 402, + 227, 625, 412, 401, 353, 856, 857, 296, 324, 933, + 932, 931, 323, 325, 929, 930, 928, 215, 640, 659, + 0, 216, 0, 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, 307, 310, 320, 321, 331, 386, - 441, 469, 465, 474, 0, 610, 634, 648, 660, 666, - 667, 669, 670, 671, 672, 673, 676, 674, 429, 329, + 441, 469, 465, 474, 0, 610, 634, 648, 661, 667, + 668, 670, 671, 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, 235, 512, 609, - 246, 266, 207, 0, 0, 0, 0, 270, 271, 0, - 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, - 696, 697, 698, 699, 700, 701, 702, 703, 681, 537, - 543, 538, 539, 540, 541, 542, 0, 544, 0, 0, - 0, 0, 0, 419, 0, 623, 624, 704, 403, 510, - 635, 354, 368, 371, 360, 380, 0, 381, 356, 357, - 362, 365, 366, 367, 372, 373, 377, 383, 263, 218, - 410, 420, 608, 330, 224, 225, 226, 553, 554, 555, - 556, 651, 652, 656, 213, 486, 487, 488, 489, 308, - 646, 326, 492, 491, 350, 351, 398, 472, 569, 571, - 582, 586, 588, 590, 596, 599, 570, 572, 583, 587, - 589, 591, 597, 600, 559, 561, 563, 565, 578, 577, - 574, 602, 603, 580, 585, 564, 576, 581, 594, 601, - 598, 558, 562, 566, 575, 593, 592, 573, 584, 595, - 579, 567, 560, 568, 0, 204, 229, 387, 0, 478, - 304, 682, 650, 508, 645, 214, 231, 0, 278, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 246, 266, 939, 961, 950, 814, 815, 940, 941, 965, + 942, 817, 818, 962, 963, 811, 812, 816, 964, 966, + 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, + 697, 698, 699, 700, 701, 702, 703, 704, 682, 537, + 543, 538, 539, 540, 541, 542, 0, 544, 953, 800, + 799, 0, 806, 807, 0, 836, 837, 839, 845, 846, + 847, 858, 905, 906, 914, 916, 917, 915, 918, 919, + 920, 923, 924, 925, 926, 921, 922, 927, 819, 823, + 820, 821, 822, 834, 824, 825, 826, 827, 828, 829, + 830, 831, 832, 833, 835, 976, 977, 978, 979, 980, + 981, 851, 855, 854, 852, 853, 849, 850, 877, 876, + 878, 879, 880, 881, 882, 883, 885, 884, 886, 887, + 888, 889, 890, 891, 859, 860, 863, 864, 862, 861, + 865, 874, 875, 866, 867, 868, 869, 870, 871, 873, + 872, 892, 893, 894, 895, 896, 898, 897, 901, 902, + 900, 899, 904, 903, 798, 204, 229, 387, 0, 478, + 304, 683, 650, 508, 645, 214, 231, 967, 278, 968, + 0, 0, 972, 0, 0, 0, 974, 973, 0, 975, + 937, 936, 0, 0, 969, 970, 0, 971, 0, 0, 206, 208, 217, 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, 531, 532, 533, 534, - 545, 618, 620, 637, 657, 664, 504, 404, 452, 476, - 611, 0, 0, 317, 318, 467, 468, 332, 333, 678, - 679, 316, 632, 665, 629, 677, 659, 461, 397, 0, + 545, 618, 620, 637, 658, 665, 504, 404, 452, 476, + 611, 0, 0, 982, 983, 984, 985, 986, 987, 988, + 989, 316, 632, 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, 339, 0, 649, 527, 236, 490, - 306, 265, 0, 0, 219, 257, 239, 275, 290, 293, + 306, 265, 1057, 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, - 509, 548, 549, 550, 552, 415, 282, 456, 416, 0, - 395, 606, 607, 335, 0, 0, 91, 557, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, - 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, - 0, 0, 385, 283, 0, 0, 212, 530, 0, 453, - 0, 211, 0, 511, 268, 396, 393, 615, 298, 289, - 285, 264, 336, 405, 450, 547, 444, 103, 389, 0, - 0, 522, 422, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 342, 262, 344, 210, 435, 523, 302, 0, 101, - 0, 0, 0, 536, 202, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 249, 0, 0, 256, 0, 0, - 0, 370, 379, 378, 358, 359, 361, 363, 369, 376, - 382, 355, 364, 0, 0, 641, 0, 0, 0, 281, - 340, 288, 280, 612, 0, 0, 0, 0, 0, 0, - 628, 0, 0, 238, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 313, 0, 423, 273, 0, 477, 0, 319, 334, + 509, 548, 549, 550, 552, 415, 282, 456, 0, 0, + 395, 606, 607, 335, 557, 0, 810, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, + 797, 0, 0, 0, 286, 802, 0, 0, 0, 385, + 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, + 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, + 405, 450, 547, 444, 809, 389, 0, 651, 522, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 804, 805, + 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, + 344, 210, 435, 523, 302, 0, 101, 0, 0, 1058, + 536, 992, 781, 958, 996, 1059, 1010, 1011, 1012, 997, + 0, 249, 998, 999, 256, 1000, 0, 957, 840, 842, + 841, 907, 908, 909, 910, 911, 912, 913, 843, 844, + 838, 1005, 641, 1013, 1014, 0, 281, 340, 288, 280, + 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, + 238, 0, 0, 0, 0, 0, 0, 0, 777, 794, + 0, 808, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 661, 0, 0, 0, 0, 0, 0, 0, 384, 0, - 349, 205, 233, 0, 0, 434, 485, 497, 0, 0, - 0, 0, 269, 0, 495, 448, 636, 243, 300, 482, - 455, 493, 463, 303, 0, 0, 494, 391, 617, 473, - 633, 662, 663, 279, 428, 647, 551, 655, 680, 234, - 276, 442, 535, 639, 519, 417, 613, 614, 348, 518, - 311, 209, 388, 668, 232, 503, 390, 253, 241, 619, - 644, 315, 267, 305, 480, 675, 221, 546, 630, 250, - 507, 0, 0, 683, 258, 529, 642, 631, 223, 626, - 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, - 0, 274, 437, 621, 622, 272, 684, 237, 654, 228, - 0, 653, 430, 616, 627, 414, 402, 227, 625, 412, - 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, - 325, 425, 424, 426, 215, 640, 658, 0, 216, 0, - 524, 643, 685, 475, 220, 244, 245, 248, 0, 295, - 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, - 474, 0, 610, 634, 648, 660, 666, 667, 669, 670, - 671, 672, 673, 676, 674, 429, 329, 520, 352, 392, - 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, - 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, - 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 686, 687, 688, - 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, - 699, 700, 701, 702, 703, 681, 537, 543, 538, 539, - 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, - 419, 0, 623, 624, 704, 403, 510, 635, 354, 368, - 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, - 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, - 330, 224, 225, 226, 553, 554, 555, 556, 651, 652, - 656, 213, 486, 487, 488, 489, 308, 646, 326, 492, - 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, - 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, - 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, - 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, - 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, - 568, 0, 204, 229, 387, 100, 478, 304, 682, 650, - 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, - 0, 0, 2502, 0, 0, 2501, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, - 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, - 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, - 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, - 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, - 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, - 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, - 637, 657, 664, 504, 404, 452, 476, 611, 0, 0, - 317, 318, 467, 468, 332, 333, 678, 679, 316, 632, - 665, 629, 677, 659, 461, 397, 0, 0, 400, 297, - 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, - 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, - 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, - 550, 552, 415, 282, 456, 416, 0, 395, 606, 607, - 335, 0, 0, 0, 557, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, - 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, - 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, - 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, - 405, 450, 547, 444, 0, 389, 0, 0, 522, 422, + 416, 0, 0, 0, 791, 792, 0, 0, 0, 0, + 952, 0, 793, 0, 0, 801, 1015, 1016, 1017, 1018, + 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, + 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, + 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, + 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 3256, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, + 0, 0, 0, 0, 0, 951, 0, 0, 662, 0, + 0, 949, 0, 0, 0, 0, 384, 0, 349, 205, + 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, + 1002, 0, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 0, 0, 494, 391, 617, 473, 633, 663, + 664, 279, 428, 647, 551, 656, 681, 234, 276, 442, + 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, + 388, 669, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 0, 676, 221, 546, 630, 250, 507, + 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, + 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, + 274, 437, 1003, 1004, 272, 685, 848, 655, 228, 0, + 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 353, 856, 857, 296, 324, 933, 932, 931, 323, 325, + 929, 930, 928, 215, 640, 659, 0, 216, 0, 524, + 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, + 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, + 0, 610, 634, 648, 661, 667, 668, 670, 671, 672, + 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, + 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, + 259, 261, 260, 235, 512, 609, 246, 266, 939, 961, + 950, 814, 815, 940, 941, 965, 942, 817, 818, 962, + 963, 811, 812, 816, 964, 966, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 682, 537, 543, 538, 539, 540, + 541, 542, 0, 544, 953, 800, 799, 0, 806, 807, + 0, 836, 837, 839, 845, 846, 847, 858, 905, 906, + 914, 916, 917, 915, 918, 919, 920, 923, 924, 925, + 926, 921, 922, 927, 819, 823, 820, 821, 822, 834, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, + 835, 976, 977, 978, 979, 980, 981, 851, 855, 854, + 852, 853, 849, 850, 877, 876, 878, 879, 880, 881, + 882, 883, 885, 884, 886, 887, 888, 889, 890, 891, + 859, 860, 863, 864, 862, 861, 865, 874, 875, 866, + 867, 868, 869, 870, 871, 873, 872, 892, 893, 894, + 895, 896, 898, 897, 901, 902, 900, 899, 904, 903, + 798, 204, 229, 387, 0, 478, 304, 683, 650, 508, + 645, 214, 231, 967, 278, 968, 0, 0, 972, 0, + 0, 0, 974, 973, 0, 975, 937, 936, 0, 0, + 969, 970, 0, 971, 0, 0, 206, 208, 217, 230, + 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, + 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, + 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, + 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, + 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, + 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, + 658, 665, 504, 404, 452, 476, 611, 0, 0, 982, + 983, 984, 985, 986, 987, 988, 989, 316, 632, 666, + 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, + 339, 0, 649, 527, 236, 490, 306, 265, 1057, 0, + 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, + 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, + 552, 415, 282, 456, 0, 0, 395, 606, 607, 335, + 557, 0, 810, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 438, 0, 0, 0, 797, 0, 0, 0, + 286, 802, 0, 0, 0, 385, 283, 0, 0, 212, + 530, 0, 453, 0, 211, 0, 511, 268, 396, 393, + 615, 298, 289, 285, 264, 336, 405, 450, 547, 444, + 809, 389, 0, 651, 522, 422, 0, 0, 0, 0, + 0, 0, 0, 0, 804, 805, 0, 0, 0, 0, + 0, 0, 0, 0, 342, 262, 344, 210, 435, 523, + 302, 0, 101, 0, 0, 1058, 536, 992, 1132, 958, + 996, 1059, 1010, 1011, 1012, 997, 0, 249, 998, 999, + 256, 1000, 0, 957, 840, 842, 841, 907, 908, 909, + 910, 911, 912, 913, 843, 844, 838, 1005, 641, 1013, + 1014, 0, 281, 340, 288, 280, 612, 0, 0, 0, + 0, 0, 0, 628, 0, 0, 238, 0, 0, 0, + 0, 0, 0, 0, 0, 794, 0, 808, 0, 0, + 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, + 791, 792, 0, 0, 0, 0, 952, 0, 793, 0, + 0, 801, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, + 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, + 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, + 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, + 1053, 1054, 1055, 1056, 803, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 313, 0, 423, 273, 0, + 477, 0, 319, 334, 0, 0, 0, 0, 0, 0, + 0, 951, 0, 0, 662, 0, 0, 949, 0, 0, + 0, 0, 384, 0, 349, 205, 233, 0, 0, 434, + 485, 497, 0, 0, 0, 0, 1002, 0, 495, 448, + 636, 243, 300, 482, 455, 493, 463, 303, 0, 0, + 494, 391, 617, 473, 633, 663, 664, 279, 428, 647, + 551, 656, 681, 234, 276, 442, 535, 639, 519, 417, + 613, 614, 348, 518, 311, 209, 388, 669, 232, 503, + 390, 253, 241, 619, 644, 315, 267, 305, 480, 0, + 676, 221, 546, 630, 250, 507, 0, 0, 684, 258, + 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, + 0, 481, 284, 309, 0, 0, 274, 437, 1003, 1004, + 272, 685, 848, 655, 228, 0, 654, 430, 616, 627, + 414, 402, 227, 625, 412, 401, 353, 856, 857, 296, + 324, 933, 932, 931, 323, 325, 929, 930, 928, 215, + 640, 659, 0, 216, 0, 524, 643, 686, 475, 220, + 244, 245, 248, 0, 295, 299, 307, 310, 320, 321, + 331, 386, 441, 469, 465, 474, 0, 610, 634, 648, + 661, 667, 668, 670, 671, 672, 673, 674, 677, 675, + 429, 329, 520, 352, 392, 0, 0, 447, 496, 251, + 638, 521, 240, 604, 418, 427, 259, 261, 260, 235, + 512, 609, 246, 266, 939, 961, 950, 814, 815, 940, + 941, 965, 942, 817, 818, 962, 963, 811, 812, 816, + 964, 966, 687, 688, 689, 690, 691, 692, 693, 694, + 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 682, 537, 543, 538, 539, 540, 541, 542, 0, 544, + 953, 800, 799, 0, 806, 807, 0, 836, 837, 839, + 845, 846, 847, 858, 905, 906, 914, 916, 917, 915, + 918, 919, 920, 923, 924, 925, 926, 921, 922, 927, + 819, 823, 820, 821, 822, 834, 824, 825, 826, 827, + 828, 829, 830, 831, 832, 833, 835, 976, 977, 978, + 979, 980, 981, 851, 855, 854, 852, 853, 849, 850, + 877, 876, 878, 879, 880, 881, 882, 883, 885, 884, + 886, 887, 888, 889, 890, 891, 859, 860, 863, 864, + 862, 861, 865, 874, 875, 866, 867, 868, 869, 870, + 871, 873, 872, 892, 893, 894, 895, 896, 898, 897, + 901, 902, 900, 899, 904, 903, 798, 204, 229, 387, + 0, 478, 304, 683, 650, 508, 645, 214, 231, 967, + 278, 968, 0, 0, 972, 0, 0, 0, 974, 973, + 0, 975, 937, 936, 0, 0, 969, 970, 0, 971, + 0, 0, 206, 208, 217, 230, 242, 247, 254, 277, + 292, 294, 301, 314, 327, 328, 337, 338, 341, 347, + 399, 406, 407, 408, 409, 431, 432, 433, 436, 439, + 440, 443, 445, 446, 449, 454, 458, 459, 460, 462, + 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, + 506, 513, 514, 515, 516, 517, 525, 526, 531, 532, + 533, 534, 545, 618, 620, 637, 658, 665, 504, 404, + 452, 476, 611, 0, 0, 982, 983, 984, 985, 986, + 987, 988, 989, 316, 632, 666, 629, 678, 660, 461, + 397, 0, 0, 400, 297, 322, 339, 0, 649, 527, + 236, 490, 306, 265, 1057, 0, 219, 257, 239, 275, + 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, + 483, 252, 509, 548, 549, 550, 552, 415, 282, 456, + 0, 0, 395, 606, 607, 335, 557, 0, 810, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, + 0, 0, 797, 0, 0, 0, 286, 802, 0, 0, + 0, 385, 283, 0, 0, 212, 530, 0, 453, 0, + 211, 0, 511, 268, 396, 393, 615, 298, 289, 285, + 264, 336, 405, 450, 547, 444, 809, 389, 0, 651, + 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, + 804, 805, 0, 0, 0, 0, 0, 0, 0, 0, + 342, 262, 344, 210, 435, 523, 302, 0, 101, 0, + 0, 1058, 536, 992, 1132, 958, 996, 1059, 1010, 1011, + 1012, 997, 0, 249, 998, 999, 256, 1000, 0, 957, + 840, 842, 841, 907, 908, 909, 910, 911, 912, 913, + 843, 844, 838, 1005, 641, 1013, 1014, 0, 281, 340, + 288, 280, 612, 0, 0, 0, 0, 0, 0, 628, + 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, + 0, 794, 0, 808, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, - 344, 210, 435, 523, 302, 0, 0, 0, 0, 0, - 536, 756, 0, 0, 0, 0, 4390, 0, 0, 0, - 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, - 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, - 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, - 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, - 238, 0, 0, 0, 0, 0, 0, 0, 4388, 0, - 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, + 0, 0, 416, 0, 0, 0, 791, 792, 0, 0, + 0, 0, 952, 0, 793, 0, 0, 801, 1015, 1016, + 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, + 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, + 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, + 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, + 2187, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 313, 0, 423, 273, 0, 477, 0, 319, 334, + 0, 0, 0, 0, 0, 0, 0, 951, 0, 0, + 662, 0, 0, 949, 0, 0, 0, 0, 384, 0, + 349, 205, 233, 0, 0, 434, 485, 497, 0, 0, + 0, 0, 1002, 0, 495, 448, 636, 243, 300, 482, + 455, 493, 463, 303, 0, 0, 494, 391, 617, 473, + 633, 663, 664, 279, 428, 647, 551, 656, 681, 234, + 276, 442, 535, 639, 519, 417, 613, 614, 348, 518, + 311, 209, 388, 669, 232, 503, 390, 253, 241, 619, + 644, 315, 267, 305, 480, 0, 676, 221, 546, 630, + 250, 507, 0, 0, 684, 258, 529, 642, 631, 223, + 626, 528, 413, 345, 346, 222, 0, 481, 284, 309, + 0, 0, 274, 437, 1003, 1004, 272, 685, 848, 655, + 228, 0, 654, 430, 616, 627, 414, 402, 227, 625, + 412, 401, 353, 856, 857, 296, 324, 933, 932, 931, + 323, 325, 929, 930, 928, 215, 640, 659, 0, 216, + 0, 524, 643, 686, 475, 220, 244, 245, 248, 0, + 295, 299, 307, 310, 320, 321, 331, 386, 441, 469, + 465, 474, 0, 610, 634, 648, 661, 667, 668, 670, + 671, 672, 673, 674, 677, 675, 429, 329, 520, 352, + 392, 0, 0, 447, 496, 251, 638, 521, 240, 604, + 418, 427, 259, 261, 260, 235, 512, 609, 246, 266, + 939, 961, 950, 814, 815, 940, 941, 965, 942, 817, + 818, 962, 963, 811, 812, 816, 964, 966, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, + 699, 700, 701, 702, 703, 704, 682, 537, 543, 538, + 539, 540, 541, 542, 0, 544, 953, 800, 799, 0, + 806, 807, 0, 836, 837, 839, 845, 846, 847, 858, + 905, 906, 914, 916, 917, 915, 918, 919, 920, 923, + 924, 925, 926, 921, 922, 927, 819, 823, 820, 821, + 822, 834, 824, 825, 826, 827, 828, 829, 830, 831, + 832, 833, 835, 976, 977, 978, 979, 980, 981, 851, + 855, 854, 852, 853, 849, 850, 877, 876, 878, 879, + 880, 881, 882, 883, 885, 884, 886, 887, 888, 889, + 890, 891, 859, 860, 863, 864, 862, 861, 865, 874, + 875, 866, 867, 868, 869, 870, 871, 873, 872, 892, + 893, 894, 895, 896, 898, 897, 901, 902, 900, 899, + 904, 903, 798, 204, 229, 387, 0, 478, 304, 683, + 650, 508, 645, 214, 231, 967, 278, 968, 0, 0, + 972, 0, 0, 0, 974, 973, 0, 975, 937, 936, + 0, 0, 969, 970, 0, 971, 0, 0, 206, 208, + 217, 230, 242, 247, 254, 277, 292, 294, 301, 314, + 327, 328, 337, 338, 341, 347, 399, 406, 407, 408, + 409, 431, 432, 433, 436, 439, 440, 443, 445, 446, + 449, 454, 458, 459, 460, 462, 464, 466, 479, 484, + 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, + 516, 517, 525, 526, 531, 532, 533, 534, 545, 618, + 620, 637, 658, 665, 504, 404, 452, 476, 611, 0, + 0, 982, 983, 984, 985, 986, 987, 988, 989, 316, + 632, 666, 629, 678, 660, 461, 397, 0, 0, 400, + 297, 322, 339, 0, 649, 527, 236, 490, 306, 265, + 1057, 0, 219, 257, 239, 275, 290, 293, 343, 411, + 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, + 549, 550, 552, 415, 282, 456, 0, 0, 395, 606, + 607, 335, 557, 0, 810, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 438, 0, 0, 0, 797, 0, + 0, 0, 286, 802, 0, 0, 0, 385, 283, 0, + 0, 212, 530, 0, 453, 0, 211, 0, 511, 268, + 396, 393, 615, 298, 289, 285, 264, 336, 405, 450, + 547, 444, 809, 389, 0, 651, 522, 422, 0, 0, + 0, 0, 0, 0, 0, 0, 804, 805, 0, 0, + 0, 0, 0, 0, 0, 0, 342, 262, 344, 210, + 435, 523, 302, 0, 101, 0, 0, 1058, 536, 992, + 1132, 958, 996, 1059, 1010, 1011, 1012, 997, 0, 249, + 998, 999, 256, 1000, 0, 957, 840, 842, 841, 907, + 908, 909, 910, 911, 912, 913, 843, 844, 838, 1005, + 641, 1013, 1014, 0, 281, 340, 288, 280, 612, 0, + 0, 0, 0, 0, 0, 628, 0, 0, 238, 0, + 0, 0, 0, 0, 0, 0, 0, 794, 0, 808, + 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, + 0, 0, 791, 792, 0, 0, 0, 0, 952, 0, + 793, 0, 0, 801, 1015, 1016, 1017, 1018, 1019, 1020, + 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, + 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, + 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, + 1051, 1052, 1053, 1054, 1055, 1056, 2185, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 313, 0, 423, + 273, 0, 477, 0, 319, 334, 0, 0, 0, 0, + 0, 0, 0, 951, 0, 0, 662, 0, 0, 949, + 0, 0, 0, 0, 384, 0, 349, 205, 233, 0, + 0, 434, 485, 497, 0, 0, 0, 0, 1002, 0, + 495, 448, 636, 243, 300, 482, 455, 493, 463, 303, + 0, 0, 494, 391, 617, 473, 633, 663, 664, 279, + 428, 647, 551, 656, 681, 234, 276, 442, 535, 639, + 519, 417, 613, 614, 348, 518, 311, 209, 388, 669, + 232, 503, 390, 253, 241, 619, 644, 315, 267, 305, + 480, 0, 676, 221, 546, 630, 250, 507, 0, 0, + 684, 258, 529, 642, 631, 223, 626, 528, 413, 345, + 346, 222, 0, 481, 284, 309, 0, 0, 274, 437, + 1003, 1004, 272, 685, 848, 655, 228, 0, 654, 430, + 616, 627, 414, 402, 227, 625, 412, 401, 353, 856, + 857, 296, 324, 933, 932, 931, 323, 325, 929, 930, + 928, 215, 640, 659, 0, 216, 0, 524, 643, 686, + 475, 220, 244, 245, 248, 0, 295, 299, 307, 310, + 320, 321, 331, 386, 441, 469, 465, 474, 0, 610, + 634, 648, 661, 667, 668, 670, 671, 672, 673, 674, + 677, 675, 429, 329, 520, 352, 392, 0, 0, 447, + 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, + 260, 235, 512, 609, 246, 266, 939, 961, 950, 814, + 815, 940, 941, 965, 942, 817, 818, 962, 963, 811, + 812, 816, 964, 966, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 704, 682, 537, 543, 538, 539, 540, 541, 542, + 0, 544, 953, 800, 799, 0, 806, 807, 0, 836, + 837, 839, 845, 846, 847, 858, 905, 906, 914, 916, + 917, 915, 918, 919, 920, 923, 924, 925, 926, 921, + 922, 927, 819, 823, 820, 821, 822, 834, 824, 825, + 826, 827, 828, 829, 830, 831, 832, 833, 835, 976, + 977, 978, 979, 980, 981, 851, 855, 854, 852, 853, + 849, 850, 877, 876, 878, 879, 880, 881, 882, 883, + 885, 884, 886, 887, 888, 889, 890, 891, 859, 860, + 863, 864, 862, 861, 865, 874, 875, 866, 867, 868, + 869, 870, 871, 873, 872, 892, 893, 894, 895, 896, + 898, 897, 901, 902, 900, 899, 904, 903, 798, 204, + 229, 387, 0, 478, 304, 683, 650, 508, 645, 214, + 231, 967, 278, 968, 0, 0, 972, 0, 0, 0, + 974, 973, 0, 975, 937, 936, 0, 0, 969, 970, + 0, 971, 0, 0, 206, 208, 217, 230, 242, 247, + 254, 277, 292, 294, 301, 314, 327, 328, 337, 338, + 341, 347, 399, 406, 407, 408, 409, 431, 432, 433, + 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, + 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, + 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, + 531, 532, 533, 534, 545, 618, 620, 637, 658, 665, + 504, 404, 452, 476, 611, 0, 0, 982, 983, 984, + 985, 986, 987, 988, 989, 316, 632, 666, 629, 678, + 660, 461, 397, 0, 0, 400, 297, 322, 339, 0, + 649, 527, 236, 490, 306, 265, 1057, 0, 219, 257, + 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, + 287, 255, 483, 252, 509, 548, 549, 550, 552, 415, + 282, 456, 557, 0, 395, 606, 607, 335, 0, 0, + 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, + 0, 0, 286, 0, 0, 0, 0, 385, 283, 0, + 0, 212, 530, 0, 453, 0, 211, 0, 511, 268, + 396, 393, 615, 298, 289, 285, 264, 336, 405, 450, + 547, 444, 0, 389, 0, 651, 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 342, 262, 344, 210, + 435, 523, 302, 0, 0, 0, 0, 0, 536, 757, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, + 0, 0, 256, 0, 0, 0, 370, 379, 378, 358, + 359, 361, 363, 369, 376, 382, 355, 364, 0, 0, + 641, 0, 0, 0, 281, 340, 288, 280, 612, 0, + 0, 0, 0, 0, 0, 628, 0, 0, 238, 0, + 1175, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, - 423, 273, 0, 477, 0, 319, 334, 0, 0, 0, - 4389, 4257, 4387, 0, 0, 0, 0, 661, 0, 0, - 0, 0, 0, 0, 0, 384, 0, 349, 205, 233, - 0, 0, 434, 485, 497, 0, 0, 0, 0, 269, - 0, 495, 448, 636, 243, 300, 482, 455, 493, 463, - 303, 0, 0, 494, 391, 617, 473, 633, 662, 663, - 279, 428, 647, 551, 655, 680, 234, 276, 442, 535, - 639, 519, 417, 613, 614, 348, 518, 311, 209, 388, - 668, 232, 503, 390, 253, 241, 619, 644, 315, 267, - 305, 480, 675, 221, 546, 630, 250, 507, 0, 0, - 683, 258, 529, 642, 631, 223, 626, 528, 413, 345, + 0, 0, 0, 0, 0, 0, 0, 313, 0, 423, + 273, 0, 477, 0, 319, 334, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1174, 662, 0, 0, 0, + 0, 0, 1171, 1172, 384, 1140, 349, 205, 233, 1165, + 1169, 434, 485, 497, 0, 0, 0, 0, 269, 0, + 495, 448, 636, 243, 300, 482, 455, 493, 463, 303, + 0, 0, 494, 391, 617, 473, 633, 663, 664, 279, + 428, 647, 551, 656, 681, 234, 276, 442, 535, 639, + 519, 417, 613, 614, 348, 518, 311, 209, 388, 669, + 232, 503, 390, 253, 241, 619, 644, 315, 267, 305, + 480, 0, 676, 221, 546, 630, 250, 507, 0, 0, + 684, 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, 274, 437, - 621, 622, 272, 684, 237, 654, 228, 0, 653, 430, + 621, 622, 272, 685, 237, 655, 228, 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, 425, 424, - 426, 215, 640, 658, 0, 216, 0, 524, 643, 685, + 426, 215, 640, 659, 0, 216, 0, 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, 0, 610, - 634, 648, 660, 666, 667, 669, 670, 671, 672, 673, - 676, 674, 429, 329, 520, 352, 392, 0, 0, 447, + 634, 648, 661, 667, 668, 670, 671, 672, 673, 674, + 677, 675, 429, 329, 520, 352, 392, 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 686, 687, 688, 689, 690, 691, - 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, - 702, 703, 681, 537, 543, 538, 539, 540, 541, 542, + 0, 0, 0, 0, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 704, 682, 537, 543, 538, 539, 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, 0, 623, - 624, 704, 403, 510, 635, 354, 368, 371, 360, 380, + 624, 705, 403, 510, 635, 354, 368, 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, 224, 225, - 226, 553, 554, 555, 556, 651, 652, 656, 213, 486, + 226, 553, 554, 555, 556, 652, 653, 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, 0, 204, - 229, 387, 0, 478, 304, 682, 650, 508, 645, 214, + 229, 387, 0, 478, 304, 683, 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, 242, 247, @@ -4981,464 +4571,383 @@ var yyAct = [...]int{ 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, - 531, 532, 533, 534, 545, 618, 620, 637, 657, 664, + 531, 532, 533, 534, 545, 618, 620, 637, 658, 665, 504, 404, 452, 476, 611, 0, 0, 317, 318, 467, - 468, 332, 333, 678, 679, 316, 632, 665, 629, 677, - 659, 461, 397, 0, 0, 400, 297, 322, 339, 0, + 468, 332, 333, 679, 680, 316, 632, 666, 629, 678, + 660, 461, 397, 0, 0, 400, 297, 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, 552, 415, - 282, 456, 416, 0, 395, 606, 607, 335, 0, 0, - 91, 557, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, - 0, 286, 0, 0, 0, 0, 385, 283, 0, 0, - 212, 530, 0, 453, 0, 211, 0, 511, 268, 396, - 393, 615, 298, 289, 285, 264, 336, 405, 450, 547, - 444, 103, 389, 0, 0, 522, 422, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 342, 262, 344, 210, 435, - 523, 302, 0, 101, 0, 1804, 0, 536, 756, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, - 0, 256, 0, 0, 0, 370, 379, 378, 358, 359, - 361, 363, 369, 376, 382, 355, 364, 0, 0, 641, - 0, 0, 0, 281, 340, 288, 280, 612, 0, 0, - 0, 0, 0, 0, 628, 0, 0, 238, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 313, 0, 423, 273, 0, - 477, 0, 319, 334, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 661, 0, 0, 0, 0, 0, - 0, 0, 384, 0, 349, 205, 233, 0, 0, 434, - 485, 497, 0, 0, 0, 0, 269, 0, 495, 448, - 636, 243, 300, 482, 455, 493, 463, 303, 0, 0, - 494, 391, 617, 473, 633, 662, 663, 279, 428, 647, - 551, 655, 680, 234, 276, 442, 535, 639, 519, 417, - 613, 614, 348, 518, 311, 209, 388, 668, 232, 503, - 390, 253, 241, 619, 644, 315, 267, 305, 480, 675, - 221, 546, 630, 250, 507, 0, 0, 683, 258, 529, - 642, 631, 223, 626, 528, 413, 345, 346, 222, 0, - 481, 284, 309, 0, 0, 274, 437, 621, 622, 272, - 684, 237, 654, 228, 0, 653, 430, 616, 627, 414, - 402, 227, 625, 412, 401, 353, 374, 375, 296, 324, - 470, 394, 471, 323, 325, 425, 424, 426, 215, 640, - 658, 0, 216, 0, 524, 643, 685, 475, 220, 244, - 245, 248, 0, 295, 299, 307, 310, 320, 321, 331, - 386, 441, 469, 465, 474, 0, 610, 634, 648, 660, - 666, 667, 669, 670, 671, 672, 673, 676, 674, 429, - 329, 520, 352, 392, 0, 0, 447, 496, 251, 638, - 521, 240, 604, 418, 427, 259, 261, 260, 235, 512, - 609, 246, 266, 207, 0, 0, 0, 0, 270, 271, - 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 686, 687, 688, 689, 690, 691, 692, 693, 694, - 695, 696, 697, 698, 699, 700, 701, 702, 703, 681, - 537, 543, 538, 539, 540, 541, 542, 0, 544, 0, - 0, 0, 0, 0, 419, 0, 623, 624, 704, 403, - 510, 635, 354, 368, 371, 360, 380, 0, 381, 356, - 357, 362, 365, 366, 367, 372, 373, 377, 383, 263, - 218, 410, 420, 608, 330, 224, 225, 226, 553, 554, - 555, 556, 651, 652, 656, 213, 486, 487, 488, 489, - 308, 646, 326, 492, 491, 350, 351, 398, 472, 569, - 571, 582, 586, 588, 590, 596, 599, 570, 572, 583, - 587, 589, 591, 597, 600, 559, 561, 563, 565, 578, - 577, 574, 602, 603, 580, 585, 564, 576, 581, 594, - 601, 598, 558, 562, 566, 575, 593, 592, 573, 584, - 595, 579, 567, 560, 568, 0, 204, 229, 387, 100, - 478, 304, 682, 650, 508, 645, 214, 231, 0, 278, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 206, 208, 217, 230, 242, 247, 254, 277, 292, - 294, 301, 314, 327, 328, 337, 338, 341, 347, 399, - 406, 407, 408, 409, 431, 432, 433, 436, 439, 440, - 443, 445, 446, 449, 454, 458, 459, 460, 462, 464, - 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, - 513, 514, 515, 516, 517, 525, 526, 531, 532, 533, - 534, 545, 618, 620, 637, 657, 664, 504, 404, 452, - 476, 611, 0, 0, 317, 318, 467, 468, 332, 333, - 678, 679, 316, 632, 665, 629, 677, 659, 461, 397, - 0, 0, 400, 297, 322, 339, 0, 649, 527, 236, - 490, 306, 265, 0, 0, 219, 257, 239, 275, 290, - 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, - 252, 509, 548, 549, 550, 552, 415, 282, 456, 1844, - 0, 395, 606, 607, 335, 0, 0, 0, 557, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 438, 0, 0, 1846, 0, 0, 0, 0, 286, 0, - 0, 0, 0, 385, 283, 0, 0, 212, 530, 0, - 453, 0, 211, 0, 511, 268, 396, 393, 615, 298, - 289, 285, 264, 336, 405, 450, 547, 444, 0, 389, - 0, 0, 522, 422, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 342, 262, 344, 210, 435, 523, 302, 0, - 0, 0, 0, 1848, 536, 756, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 249, 0, 0, 256, 0, - 0, 0, 370, 379, 378, 358, 359, 361, 363, 369, - 376, 382, 355, 364, 0, 0, 641, 0, 0, 0, - 281, 340, 288, 280, 612, 0, 0, 0, 0, 0, - 0, 628, 0, 0, 238, 0, 0, 0, 1529, 0, - 1530, 1531, 0, 0, 0, 0, 0, 0, 0, 0, - 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 282, 456, 91, 557, 395, 606, 607, 335, 0, 0, + 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, + 0, 0, 0, 286, 0, 0, 0, 0, 385, 283, + 0, 0, 212, 530, 0, 453, 0, 211, 0, 511, + 268, 396, 393, 615, 298, 289, 285, 264, 336, 405, + 450, 547, 444, 103, 389, 0, 651, 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 313, 0, 423, 273, 0, 477, 0, 319, - 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 661, 0, 0, 0, 0, 0, 0, 0, 384, - 0, 349, 205, 233, 0, 0, 434, 485, 497, 0, - 0, 0, 0, 269, 0, 495, 448, 636, 243, 300, - 482, 455, 493, 463, 303, 0, 0, 494, 391, 617, - 473, 633, 662, 663, 279, 428, 647, 551, 655, 680, - 234, 276, 442, 535, 639, 519, 417, 613, 614, 348, - 518, 311, 209, 388, 668, 232, 503, 390, 253, 241, - 619, 644, 315, 267, 305, 480, 675, 221, 546, 630, - 250, 507, 0, 0, 683, 258, 529, 642, 631, 223, - 626, 528, 413, 345, 346, 222, 0, 481, 284, 309, - 0, 0, 274, 437, 621, 622, 272, 684, 237, 654, - 228, 0, 653, 430, 616, 627, 414, 402, 227, 625, - 412, 401, 353, 374, 375, 296, 324, 470, 394, 471, - 323, 325, 425, 424, 426, 215, 640, 658, 0, 216, - 0, 524, 643, 685, 475, 220, 244, 245, 248, 0, - 295, 299, 307, 310, 320, 321, 331, 386, 441, 469, - 465, 474, 0, 610, 634, 648, 660, 666, 667, 669, - 670, 671, 672, 673, 676, 674, 429, 329, 520, 352, - 392, 0, 0, 447, 496, 251, 638, 521, 240, 604, - 418, 427, 259, 261, 260, 235, 512, 609, 246, 266, - 207, 0, 0, 0, 0, 270, 271, 0, 605, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 686, 687, - 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, - 698, 699, 700, 701, 702, 703, 681, 537, 543, 538, - 539, 540, 541, 542, 0, 544, 0, 0, 0, 0, - 0, 419, 0, 623, 624, 704, 403, 510, 635, 354, - 368, 371, 360, 380, 0, 381, 356, 357, 362, 365, - 366, 367, 372, 373, 377, 383, 263, 218, 410, 420, - 608, 330, 224, 225, 226, 553, 554, 555, 556, 651, - 652, 656, 213, 486, 487, 488, 489, 308, 646, 326, - 492, 491, 350, 351, 398, 472, 569, 571, 582, 586, - 588, 590, 596, 599, 570, 572, 583, 587, 589, 591, - 597, 600, 559, 561, 563, 565, 578, 577, 574, 602, - 603, 580, 585, 564, 576, 581, 594, 601, 598, 558, - 562, 566, 575, 593, 592, 573, 584, 595, 579, 567, - 560, 568, 0, 204, 229, 387, 0, 478, 304, 682, - 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 206, 208, - 217, 230, 242, 247, 254, 277, 292, 294, 301, 314, - 327, 328, 337, 338, 341, 347, 399, 406, 407, 408, - 409, 431, 432, 433, 436, 439, 440, 443, 445, 446, - 449, 454, 458, 459, 460, 462, 464, 466, 479, 484, - 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, - 516, 517, 525, 526, 531, 532, 533, 534, 545, 618, - 620, 637, 657, 664, 504, 404, 452, 476, 611, 0, - 0, 317, 318, 467, 468, 332, 333, 678, 679, 316, - 632, 665, 629, 677, 659, 461, 397, 0, 0, 400, - 297, 322, 339, 0, 649, 527, 236, 490, 306, 265, - 0, 0, 219, 257, 239, 275, 290, 293, 343, 411, - 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, - 549, 550, 552, 415, 282, 456, 416, 0, 395, 606, - 607, 335, 0, 0, 0, 557, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, - 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, - 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, - 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, - 336, 405, 450, 547, 444, 0, 389, 0, 0, 522, - 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, - 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, - 0, 536, 756, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, - 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, - 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, - 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, - 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 342, 262, 344, + 210, 435, 523, 302, 0, 101, 0, 0, 0, 536, + 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 249, 0, 0, 256, 0, 0, 0, 370, 379, 378, + 358, 359, 361, 363, 369, 376, 382, 355, 364, 0, + 0, 641, 0, 0, 0, 281, 340, 288, 280, 612, + 0, 0, 0, 0, 0, 0, 628, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, - 0, 423, 273, 0, 477, 0, 319, 334, 4251, 4252, - 4253, 0, 0, 0, 0, 0, 0, 0, 661, 0, - 0, 0, 0, 0, 0, 0, 384, 0, 349, 205, - 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, - 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, - 463, 303, 0, 0, 494, 391, 617, 473, 633, 662, - 663, 279, 428, 647, 551, 655, 680, 234, 276, 442, - 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, - 388, 668, 232, 503, 390, 253, 241, 619, 644, 315, - 267, 305, 480, 675, 221, 546, 630, 250, 507, 0, - 0, 683, 258, 529, 642, 631, 223, 626, 528, 413, + 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, + 423, 273, 0, 477, 0, 319, 334, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, + 0, 0, 0, 0, 0, 384, 0, 349, 205, 233, + 0, 0, 434, 485, 497, 0, 0, 0, 0, 269, + 0, 495, 448, 636, 243, 300, 482, 455, 493, 463, + 303, 0, 0, 494, 391, 617, 473, 633, 663, 664, + 279, 428, 647, 551, 656, 681, 234, 276, 442, 535, + 639, 519, 417, 613, 614, 348, 518, 311, 209, 388, + 669, 232, 503, 390, 253, 241, 619, 644, 315, 267, + 305, 480, 0, 676, 221, 546, 630, 250, 507, 0, + 0, 684, 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, 274, - 437, 621, 622, 272, 684, 237, 654, 228, 0, 653, + 437, 621, 622, 272, 685, 237, 655, 228, 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, 425, - 424, 426, 215, 640, 658, 0, 216, 0, 524, 643, - 685, 475, 220, 244, 245, 248, 0, 295, 299, 307, + 424, 426, 215, 640, 659, 0, 216, 0, 524, 643, + 686, 475, 220, 244, 245, 248, 0, 295, 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, 0, - 610, 634, 648, 660, 666, 667, 669, 670, 671, 672, - 673, 676, 674, 429, 329, 520, 352, 392, 0, 0, + 610, 634, 648, 661, 667, 668, 670, 671, 672, 673, + 674, 677, 675, 429, 329, 520, 352, 392, 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 686, 687, 688, 689, 690, - 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, - 701, 702, 703, 681, 537, 543, 538, 539, 540, 541, + 0, 0, 0, 0, 0, 687, 688, 689, 690, 691, + 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 704, 682, 537, 543, 538, 539, 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, 0, - 623, 624, 704, 403, 510, 635, 354, 368, 371, 360, + 623, 624, 705, 403, 510, 635, 354, 368, 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, 224, - 225, 226, 553, 554, 555, 556, 651, 652, 656, 213, + 225, 226, 553, 554, 555, 556, 652, 653, 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, 0, - 204, 229, 387, 0, 478, 304, 682, 650, 508, 645, + 204, 229, 387, 100, 478, 304, 683, 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2504, 0, 0, 2503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, - 526, 531, 532, 533, 534, 545, 618, 620, 637, 657, - 664, 504, 404, 452, 476, 611, 0, 0, 317, 318, - 467, 468, 332, 333, 678, 679, 316, 632, 665, 629, - 677, 659, 461, 397, 0, 0, 400, 297, 322, 339, + 526, 531, 532, 533, 534, 545, 618, 620, 637, 658, + 665, 504, 404, 452, 476, 611, 0, 0, 317, 318, + 467, 468, 332, 333, 679, 680, 316, 632, 666, 629, + 678, 660, 461, 397, 0, 0, 400, 297, 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, 552, - 415, 282, 456, 416, 0, 395, 606, 607, 335, 0, - 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, - 0, 0, 286, 0, 0, 0, 0, 385, 283, 0, - 0, 212, 530, 0, 453, 0, 211, 0, 511, 268, - 396, 393, 615, 298, 289, 285, 264, 336, 405, 450, - 547, 444, 0, 389, 0, 0, 522, 422, 0, 0, + 415, 282, 456, 557, 0, 395, 606, 607, 335, 0, + 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, + 0, 0, 0, 286, 0, 0, 0, 0, 385, 283, + 0, 0, 212, 530, 0, 453, 0, 211, 0, 511, + 268, 396, 393, 615, 298, 289, 285, 264, 336, 405, + 450, 547, 444, 0, 389, 0, 651, 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 342, 262, 344, 210, - 435, 523, 302, 0, 101, 0, 0, 0, 536, 202, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, - 0, 0, 256, 0, 0, 0, 370, 379, 378, 358, - 359, 361, 363, 369, 376, 382, 355, 364, 0, 0, - 641, 0, 0, 0, 281, 340, 288, 280, 612, 0, - 0, 0, 0, 0, 0, 628, 0, 0, 238, 0, + 0, 0, 0, 0, 0, 0, 0, 342, 262, 344, + 210, 435, 523, 302, 0, 0, 0, 0, 0, 536, + 757, 0, 0, 0, 0, 4399, 0, 0, 0, 0, + 249, 0, 0, 256, 0, 0, 0, 370, 379, 378, + 358, 359, 361, 363, 369, 376, 382, 355, 364, 0, + 0, 641, 0, 0, 0, 281, 340, 288, 280, 612, + 0, 0, 0, 0, 0, 0, 628, 0, 0, 238, + 0, 0, 0, 0, 0, 0, 0, 4397, 0, 0, + 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, + 423, 273, 0, 477, 0, 319, 334, 0, 0, 0, + 4398, 4266, 4396, 0, 0, 0, 0, 662, 0, 0, + 0, 0, 0, 0, 0, 384, 0, 349, 205, 233, + 0, 0, 434, 485, 497, 0, 0, 0, 0, 269, + 0, 495, 448, 636, 243, 300, 482, 455, 493, 463, + 303, 0, 0, 494, 391, 617, 473, 633, 663, 664, + 279, 428, 647, 551, 656, 681, 234, 276, 442, 535, + 639, 519, 417, 613, 614, 348, 518, 311, 209, 388, + 669, 232, 503, 390, 253, 241, 619, 644, 315, 267, + 305, 480, 0, 676, 221, 546, 630, 250, 507, 0, + 0, 684, 258, 529, 642, 631, 223, 626, 528, 413, + 345, 346, 222, 0, 481, 284, 309, 0, 0, 274, + 437, 621, 622, 272, 685, 237, 655, 228, 0, 654, + 430, 616, 627, 414, 402, 227, 625, 412, 401, 353, + 374, 375, 296, 324, 470, 394, 471, 323, 325, 425, + 424, 426, 215, 640, 659, 0, 216, 0, 524, 643, + 686, 475, 220, 244, 245, 248, 0, 295, 299, 307, + 310, 320, 321, 331, 386, 441, 469, 465, 474, 0, + 610, 634, 648, 661, 667, 668, 670, 671, 672, 673, + 674, 677, 675, 429, 329, 520, 352, 392, 0, 0, + 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, + 261, 260, 235, 512, 609, 246, 266, 207, 0, 0, + 0, 0, 270, 271, 0, 605, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 687, 688, 689, 690, 691, + 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 704, 682, 537, 543, 538, 539, 540, 541, + 542, 0, 544, 0, 0, 0, 0, 0, 419, 0, + 623, 624, 705, 403, 510, 635, 354, 368, 371, 360, + 380, 0, 381, 356, 357, 362, 365, 366, 367, 372, + 373, 377, 383, 263, 218, 410, 420, 608, 330, 224, + 225, 226, 553, 554, 555, 556, 652, 653, 657, 213, + 486, 487, 488, 489, 308, 646, 326, 492, 491, 350, + 351, 398, 472, 569, 571, 582, 586, 588, 590, 596, + 599, 570, 572, 583, 587, 589, 591, 597, 600, 559, + 561, 563, 565, 578, 577, 574, 602, 603, 580, 585, + 564, 576, 581, 594, 601, 598, 558, 562, 566, 575, + 593, 592, 573, 584, 595, 579, 567, 560, 568, 0, + 204, 229, 387, 0, 478, 304, 683, 650, 508, 645, + 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 206, 208, 217, 230, 242, + 247, 254, 277, 292, 294, 301, 314, 327, 328, 337, + 338, 341, 347, 399, 406, 407, 408, 409, 431, 432, + 433, 436, 439, 440, 443, 445, 446, 449, 454, 458, + 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, + 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, + 526, 531, 532, 533, 534, 545, 618, 620, 637, 658, + 665, 504, 404, 452, 476, 611, 0, 0, 317, 318, + 467, 468, 332, 333, 679, 680, 316, 632, 666, 629, + 678, 660, 461, 397, 0, 0, 400, 297, 322, 339, + 0, 649, 527, 236, 490, 306, 265, 0, 0, 219, + 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, + 312, 287, 255, 483, 252, 509, 548, 549, 550, 552, + 415, 282, 456, 91, 557, 395, 606, 607, 335, 0, + 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, + 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, + 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, + 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, + 405, 450, 547, 444, 103, 389, 0, 651, 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 313, 0, 423, 273, - 0, 477, 0, 319, 334, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, - 0, 0, 0, 384, 0, 349, 205, 233, 0, 0, - 434, 485, 497, 0, 0, 0, 0, 269, 0, 495, - 448, 636, 243, 300, 482, 455, 493, 463, 303, 0, - 0, 494, 391, 617, 473, 633, 662, 663, 279, 428, - 647, 551, 655, 680, 234, 276, 442, 535, 639, 519, - 417, 613, 614, 348, 518, 311, 209, 388, 668, 232, - 503, 390, 253, 241, 619, 644, 315, 267, 305, 480, - 675, 221, 546, 630, 250, 507, 0, 0, 683, 258, - 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, - 0, 481, 284, 309, 0, 0, 274, 437, 621, 622, - 272, 684, 237, 654, 228, 0, 653, 430, 616, 627, - 414, 402, 227, 625, 412, 401, 353, 374, 375, 296, - 324, 470, 394, 471, 323, 325, 425, 424, 426, 215, - 640, 658, 0, 216, 0, 524, 643, 685, 475, 220, - 244, 245, 248, 0, 295, 299, 307, 310, 320, 321, - 331, 386, 441, 469, 465, 474, 0, 610, 634, 648, - 660, 666, 667, 669, 670, 671, 672, 673, 676, 674, - 429, 329, 520, 352, 392, 0, 0, 447, 496, 251, - 638, 521, 240, 604, 418, 427, 259, 261, 260, 235, - 512, 609, 246, 266, 207, 0, 0, 0, 0, 270, - 271, 0, 605, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 686, 687, 688, 689, 690, 691, 692, 693, - 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, - 681, 537, 543, 538, 539, 540, 541, 542, 0, 544, - 0, 0, 0, 0, 0, 419, 0, 623, 624, 704, - 403, 510, 635, 354, 368, 371, 360, 380, 0, 381, - 356, 357, 362, 365, 366, 367, 372, 373, 377, 383, - 263, 218, 410, 420, 608, 330, 224, 225, 226, 553, - 554, 555, 556, 651, 652, 656, 213, 486, 487, 488, - 489, 308, 646, 326, 492, 491, 350, 351, 398, 472, - 569, 571, 582, 586, 588, 590, 596, 599, 570, 572, - 583, 587, 589, 591, 597, 600, 559, 561, 563, 565, - 578, 577, 574, 602, 603, 580, 585, 564, 576, 581, - 594, 601, 598, 558, 562, 566, 575, 593, 592, 573, - 584, 595, 579, 567, 560, 568, 0, 204, 229, 387, - 0, 478, 304, 682, 650, 508, 645, 214, 231, 0, - 278, 0, 0, 0, 0, 0, 0, 2502, 0, 0, - 2501, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 206, 208, 217, 230, 242, 247, 254, 277, - 292, 294, 301, 314, 327, 328, 337, 338, 341, 347, - 399, 406, 407, 408, 409, 431, 432, 433, 436, 439, - 440, 443, 445, 446, 449, 454, 458, 459, 460, 462, - 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, - 506, 513, 514, 515, 516, 517, 525, 526, 531, 532, - 533, 534, 545, 618, 620, 637, 657, 664, 504, 404, - 452, 476, 611, 0, 0, 317, 318, 467, 468, 332, - 333, 678, 679, 316, 632, 665, 629, 677, 659, 461, - 397, 0, 0, 400, 297, 322, 339, 0, 649, 527, - 236, 490, 306, 265, 0, 0, 219, 257, 239, 275, - 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, - 483, 252, 509, 548, 549, 550, 552, 415, 282, 456, - 416, 0, 395, 606, 607, 335, 0, 0, 0, 557, + 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, + 344, 210, 435, 523, 302, 0, 101, 0, 1805, 0, + 536, 757, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, + 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, + 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, + 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, + 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 438, 0, 0, 2434, 0, 0, 0, 0, 286, - 0, 0, 0, 0, 385, 283, 0, 0, 212, 530, - 0, 453, 0, 211, 0, 511, 268, 396, 393, 615, - 298, 289, 285, 264, 336, 405, 450, 547, 444, 0, - 389, 0, 0, 522, 422, 0, 0, 0, 0, 0, + 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 342, 262, 344, 210, 435, 523, 302, - 0, 0, 0, 0, 2023, 536, 202, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 249, 0, 0, 256, - 0, 0, 0, 370, 379, 378, 358, 359, 361, 363, - 369, 376, 382, 355, 364, 0, 0, 641, 0, 0, - 0, 281, 340, 288, 280, 612, 0, 0, 0, 0, - 0, 0, 628, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, + 0, 0, 0, 0, 0, 0, 384, 0, 349, 205, + 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, + 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 0, 0, 494, 391, 617, 473, 633, 663, + 664, 279, 428, 647, 551, 656, 681, 234, 276, 442, + 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, + 388, 669, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 0, 676, 221, 546, 630, 250, 507, + 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, + 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, + 274, 437, 621, 622, 272, 685, 237, 655, 228, 0, + 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, + 425, 424, 426, 215, 640, 659, 0, 216, 0, 524, + 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, + 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, + 0, 610, 634, 648, 661, 667, 668, 670, 671, 672, + 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, + 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, + 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, + 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 682, 537, 543, 538, 539, 540, + 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, + 0, 623, 624, 705, 403, 510, 635, 354, 368, 371, + 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, + 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, + 224, 225, 226, 553, 554, 555, 556, 652, 653, 657, + 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, + 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, + 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, + 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, + 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, + 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, + 0, 204, 229, 387, 100, 478, 304, 683, 650, 508, + 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, + 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, + 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, + 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, + 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, + 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, + 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, + 658, 665, 504, 404, 452, 476, 611, 0, 0, 317, + 318, 467, 468, 332, 333, 679, 680, 316, 632, 666, + 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, + 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, + 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, + 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, + 552, 415, 282, 456, 557, 0, 395, 606, 607, 335, + 0, 0, 0, 0, 0, 0, 438, 0, 0, 1847, + 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, + 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, + 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, + 405, 450, 547, 444, 0, 389, 0, 651, 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, + 344, 210, 435, 523, 302, 0, 0, 0, 0, 1849, + 536, 757, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, + 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, + 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, + 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, + 238, 0, 0, 0, 1530, 0, 1531, 1532, 0, 0, + 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1845, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 313, 0, 423, 273, 0, 477, 0, - 319, 334, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 661, 0, 0, 0, 0, 0, 0, 0, - 384, 0, 349, 205, 233, 0, 0, 434, 485, 497, - 0, 0, 0, 0, 269, 0, 495, 448, 636, 243, - 300, 482, 455, 493, 463, 303, 0, 2432, 494, 391, - 617, 473, 633, 662, 663, 279, 428, 647, 551, 655, - 680, 234, 276, 442, 535, 639, 519, 417, 613, 614, - 348, 518, 311, 209, 388, 668, 232, 503, 390, 253, - 241, 619, 644, 315, 267, 305, 480, 675, 221, 546, - 630, 250, 507, 0, 0, 683, 258, 529, 642, 631, - 223, 626, 528, 413, 345, 346, 222, 0, 481, 284, - 309, 0, 0, 274, 437, 621, 622, 272, 684, 237, - 654, 228, 0, 653, 430, 616, 627, 414, 402, 227, - 625, 412, 401, 353, 374, 375, 296, 324, 470, 394, - 471, 323, 325, 425, 424, 426, 215, 640, 658, 0, - 216, 0, 524, 643, 685, 475, 220, 244, 245, 248, - 0, 295, 299, 307, 310, 320, 321, 331, 386, 441, - 469, 465, 474, 0, 610, 634, 648, 660, 666, 667, - 669, 670, 671, 672, 673, 676, 674, 429, 329, 520, - 352, 392, 0, 0, 447, 496, 251, 638, 521, 240, - 604, 418, 427, 259, 261, 260, 235, 512, 609, 246, - 266, 207, 0, 0, 0, 0, 270, 271, 0, 605, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 686, - 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, - 697, 698, 699, 700, 701, 702, 703, 681, 537, 543, - 538, 539, 540, 541, 542, 0, 544, 0, 0, 0, - 0, 0, 419, 0, 623, 624, 704, 403, 510, 635, - 354, 368, 371, 360, 380, 0, 381, 356, 357, 362, - 365, 366, 367, 372, 373, 377, 383, 263, 218, 410, - 420, 608, 330, 224, 225, 226, 553, 554, 555, 556, - 651, 652, 656, 213, 486, 487, 488, 489, 308, 646, - 326, 492, 491, 350, 351, 398, 472, 569, 571, 582, - 586, 588, 590, 596, 599, 570, 572, 583, 587, 589, - 591, 597, 600, 559, 561, 563, 565, 578, 577, 574, - 602, 603, 580, 585, 564, 576, 581, 594, 601, 598, - 558, 562, 566, 575, 593, 592, 573, 584, 595, 579, - 567, 560, 568, 0, 204, 229, 387, 0, 478, 304, - 682, 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, - 208, 217, 230, 242, 247, 254, 277, 292, 294, 301, - 314, 327, 328, 337, 338, 341, 347, 399, 406, 407, - 408, 409, 431, 432, 433, 436, 439, 440, 443, 445, - 446, 449, 454, 458, 459, 460, 462, 464, 466, 479, - 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, - 515, 516, 517, 525, 526, 531, 532, 533, 534, 545, - 618, 620, 637, 657, 664, 504, 404, 452, 476, 611, - 0, 0, 317, 318, 467, 468, 332, 333, 678, 679, - 316, 632, 665, 629, 677, 659, 461, 397, 0, 0, - 400, 297, 322, 339, 0, 649, 527, 236, 490, 306, - 265, 0, 0, 219, 257, 239, 275, 290, 293, 343, - 411, 421, 451, 457, 312, 287, 255, 483, 252, 509, - 548, 549, 550, 552, 415, 282, 456, 416, 0, 395, - 606, 607, 335, 0, 0, 0, 557, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, - 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, - 0, 385, 283, 0, 0, 212, 530, 0, 453, 0, - 211, 0, 511, 268, 396, 393, 615, 298, 289, 285, - 264, 336, 405, 450, 547, 444, 0, 389, 0, 0, - 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 342, 262, 344, 210, 435, 523, 302, 0, 0, 0, - 0, 0, 536, 756, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 249, 0, 0, 256, 0, 0, 0, - 370, 379, 378, 358, 359, 361, 363, 369, 376, 382, - 355, 364, 0, 0, 641, 0, 0, 0, 281, 340, - 288, 280, 612, 0, 0, 0, 0, 0, 0, 628, - 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, - 0, 0, 0, 0, 0, 0, 0, 1133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, + 0, 0, 0, 0, 0, 0, 384, 0, 349, 205, + 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, + 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 0, 0, 494, 391, 617, 473, 633, 663, + 664, 279, 428, 647, 551, 656, 681, 234, 276, 442, + 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, + 388, 669, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 0, 676, 221, 546, 630, 250, 507, + 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, + 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, + 274, 437, 621, 622, 272, 685, 237, 655, 228, 0, + 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, + 425, 424, 426, 215, 640, 659, 0, 216, 0, 524, + 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, + 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, + 0, 610, 634, 648, 661, 667, 668, 670, 671, 672, + 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, + 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, + 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, + 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 682, 537, 543, 538, 539, 540, + 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, + 0, 623, 624, 705, 403, 510, 635, 354, 368, 371, + 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, + 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, + 224, 225, 226, 553, 554, 555, 556, 652, 653, 657, + 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, + 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, + 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, + 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, + 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, + 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, + 0, 204, 229, 387, 0, 478, 304, 683, 650, 508, + 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, + 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, + 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, + 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, + 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, + 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, + 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, + 658, 665, 504, 404, 452, 476, 611, 0, 0, 317, + 318, 467, 468, 332, 333, 679, 680, 316, 632, 666, + 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, + 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, + 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, + 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, + 552, 415, 282, 456, 557, 0, 395, 606, 607, 335, + 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, + 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, + 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, + 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, + 405, 450, 547, 444, 0, 389, 0, 651, 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, + 344, 210, 435, 523, 302, 0, 0, 0, 0, 0, + 536, 757, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, + 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, + 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, + 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, + 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, - 0, 0, 0, 0, 0, 0, 0, 384, 1139, 349, - 205, 233, 1137, 0, 434, 485, 497, 0, 0, 0, - 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, - 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, - 662, 663, 279, 428, 647, 551, 655, 680, 234, 276, - 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, - 209, 388, 668, 232, 503, 390, 253, 241, 619, 644, - 315, 267, 305, 480, 675, 221, 546, 630, 250, 507, - 0, 0, 683, 258, 529, 642, 631, 223, 626, 528, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 423, 273, 0, 477, 0, 319, 334, 4260, 4261, + 4262, 0, 0, 0, 0, 0, 0, 0, 662, 0, + 0, 0, 0, 0, 0, 0, 384, 0, 349, 205, + 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, + 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 0, 0, 494, 391, 617, 473, 633, 663, + 664, 279, 428, 647, 551, 656, 681, 234, 276, 442, + 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, + 388, 669, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 0, 676, 221, 546, 630, 250, 507, + 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, - 274, 437, 621, 622, 272, 684, 237, 654, 228, 0, - 653, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 274, 437, 621, 622, 272, 685, 237, 655, 228, 0, + 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, - 425, 424, 426, 215, 640, 658, 0, 216, 0, 524, - 643, 685, 475, 220, 244, 245, 248, 0, 295, 299, + 425, 424, 426, 215, 640, 659, 0, 216, 0, 524, + 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, - 0, 610, 634, 648, 660, 666, 667, 669, 670, 671, - 672, 673, 676, 674, 429, 329, 520, 352, 392, 0, + 0, 610, 634, 648, 661, 667, 668, 670, 671, 672, + 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 686, 687, 688, 689, - 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, - 700, 701, 702, 703, 681, 537, 543, 538, 539, 540, + 0, 0, 0, 0, 0, 0, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 682, 537, 543, 538, 539, 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, - 0, 623, 624, 704, 403, 510, 635, 354, 368, 371, + 0, 623, 624, 705, 403, 510, 635, 354, 368, 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, - 224, 225, 226, 553, 554, 555, 556, 651, 652, 656, + 224, 225, 226, 553, 554, 555, 556, 652, 653, 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, - 0, 204, 229, 387, 0, 478, 304, 682, 650, 508, + 0, 204, 229, 387, 0, 478, 304, 683, 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, @@ -5448,256 +4957,330 @@ var yyAct = [...]int{ 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, - 657, 664, 504, 404, 452, 476, 611, 0, 0, 317, - 318, 467, 468, 332, 333, 678, 679, 316, 632, 665, - 629, 677, 659, 461, 397, 0, 0, 400, 297, 322, + 658, 665, 504, 404, 452, 476, 611, 0, 0, 317, + 318, 467, 468, 332, 333, 679, 680, 316, 632, 666, + 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, - 552, 415, 282, 456, 416, 0, 395, 606, 607, 335, - 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 438, 0, 0, 2434, 0, - 0, 0, 0, 286, 0, 0, 0, 0, 385, 283, - 0, 0, 212, 530, 0, 453, 0, 211, 0, 511, - 268, 396, 393, 615, 298, 289, 285, 264, 336, 405, - 450, 547, 444, 0, 389, 0, 0, 522, 422, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 342, 262, 344, - 210, 435, 523, 302, 0, 0, 0, 0, 2023, 536, - 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 249, 0, 0, 256, 0, 0, 0, 370, 379, 378, - 358, 359, 361, 363, 369, 376, 382, 355, 364, 0, - 0, 641, 0, 0, 0, 281, 340, 288, 280, 612, - 0, 0, 0, 0, 0, 0, 628, 0, 0, 238, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 552, 415, 282, 456, 557, 0, 395, 606, 607, 335, + 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, + 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, + 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, + 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, + 405, 450, 547, 444, 0, 389, 0, 651, 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, + 344, 210, 435, 523, 302, 0, 101, 0, 0, 0, + 536, 202, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, + 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, + 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, + 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, + 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 313, 0, 423, - 273, 0, 477, 0, 319, 334, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, - 0, 0, 0, 0, 384, 0, 349, 205, 233, 0, - 0, 434, 485, 497, 0, 0, 0, 0, 269, 0, - 495, 448, 636, 243, 300, 482, 455, 493, 463, 303, - 0, 0, 494, 391, 617, 473, 633, 662, 663, 279, - 428, 647, 551, 655, 680, 234, 276, 442, 535, 639, - 519, 417, 613, 614, 348, 518, 311, 209, 388, 668, - 232, 503, 390, 253, 241, 619, 644, 315, 267, 305, - 480, 675, 221, 546, 630, 250, 507, 0, 0, 683, - 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, - 222, 0, 481, 284, 309, 0, 0, 274, 437, 621, - 622, 272, 684, 237, 654, 228, 0, 653, 430, 616, - 627, 414, 402, 227, 625, 412, 401, 353, 374, 375, - 296, 324, 470, 394, 471, 323, 325, 425, 424, 426, - 215, 640, 658, 0, 216, 0, 524, 643, 685, 475, - 220, 244, 245, 248, 0, 295, 299, 307, 310, 320, - 321, 331, 386, 441, 469, 465, 474, 0, 610, 634, - 648, 660, 666, 667, 669, 670, 671, 672, 673, 676, - 674, 429, 329, 520, 352, 392, 0, 0, 447, 496, - 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, - 235, 512, 609, 246, 266, 207, 0, 0, 0, 0, - 270, 271, 0, 605, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 686, 687, 688, 689, 690, 691, 692, - 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, - 703, 681, 537, 543, 538, 539, 540, 541, 542, 0, - 544, 0, 0, 0, 0, 0, 419, 0, 623, 624, - 704, 403, 510, 635, 354, 368, 371, 360, 380, 0, - 381, 356, 357, 362, 365, 366, 367, 372, 373, 377, - 383, 263, 218, 410, 420, 608, 330, 224, 225, 226, - 553, 554, 555, 556, 651, 652, 656, 213, 486, 487, - 488, 489, 308, 646, 326, 492, 491, 350, 351, 398, - 472, 569, 571, 582, 586, 588, 590, 596, 599, 570, - 572, 583, 587, 589, 591, 597, 600, 559, 561, 563, - 565, 578, 577, 574, 602, 603, 580, 585, 564, 576, - 581, 594, 601, 598, 558, 562, 566, 575, 593, 592, - 573, 584, 595, 579, 567, 560, 568, 0, 204, 229, - 387, 0, 478, 304, 682, 650, 508, 645, 214, 231, - 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 206, 208, 217, 230, 242, 247, 254, - 277, 292, 294, 301, 314, 327, 328, 337, 338, 341, - 347, 399, 406, 407, 408, 409, 431, 432, 433, 436, - 439, 440, 443, 445, 446, 449, 454, 458, 459, 460, - 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, - 505, 506, 513, 514, 515, 516, 517, 525, 526, 531, - 532, 533, 534, 545, 618, 620, 637, 657, 664, 504, - 404, 452, 476, 611, 0, 0, 317, 318, 467, 468, - 332, 333, 678, 679, 316, 632, 665, 629, 677, 659, - 461, 397, 0, 0, 400, 297, 322, 339, 0, 649, - 527, 236, 490, 306, 265, 0, 0, 219, 257, 239, - 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, - 255, 483, 252, 509, 548, 549, 550, 552, 415, 282, - 456, 416, 0, 395, 606, 607, 335, 0, 0, 0, - 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, - 286, 0, 0, 0, 0, 385, 283, 0, 0, 212, - 530, 0, 453, 0, 211, 0, 511, 268, 396, 393, - 615, 298, 289, 285, 264, 336, 405, 450, 547, 444, - 0, 389, 0, 0, 522, 422, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, + 0, 0, 0, 0, 0, 0, 384, 0, 349, 205, + 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, + 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 0, 0, 494, 391, 617, 473, 633, 663, + 664, 279, 428, 647, 551, 656, 681, 234, 276, 442, + 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, + 388, 669, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 0, 676, 221, 546, 630, 250, 507, + 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, + 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, + 274, 437, 621, 622, 272, 685, 237, 655, 228, 0, + 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, + 425, 424, 426, 215, 640, 659, 0, 216, 0, 524, + 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, + 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, + 0, 610, 634, 648, 661, 667, 668, 670, 671, 672, + 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, + 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, + 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, + 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 682, 537, 543, 538, 539, 540, + 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, + 0, 623, 624, 705, 403, 510, 635, 354, 368, 371, + 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, + 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, + 224, 225, 226, 553, 554, 555, 556, 652, 653, 657, + 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, + 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, + 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, + 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, + 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, + 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, + 0, 204, 229, 387, 0, 478, 304, 683, 650, 508, + 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, + 0, 2504, 0, 0, 2503, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, + 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, + 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, + 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, + 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, + 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, + 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, + 658, 665, 504, 404, 452, 476, 611, 0, 0, 317, + 318, 467, 468, 332, 333, 679, 680, 316, 632, 666, + 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, + 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, + 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, + 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, + 552, 415, 282, 456, 557, 0, 395, 606, 607, 335, + 0, 0, 0, 0, 0, 0, 438, 0, 0, 2436, + 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, + 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, + 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, + 405, 450, 547, 444, 0, 389, 0, 651, 522, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, + 344, 210, 435, 523, 302, 0, 0, 0, 0, 2024, + 536, 202, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, + 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, + 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, + 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, + 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 342, 262, 344, 210, 435, 523, - 302, 0, 0, 0, 1804, 0, 536, 756, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, - 256, 0, 0, 0, 370, 379, 378, 358, 359, 361, - 363, 369, 376, 382, 355, 364, 0, 0, 641, 0, - 0, 0, 281, 340, 288, 280, 612, 0, 0, 0, - 0, 0, 0, 628, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, + 0, 0, 0, 0, 0, 0, 384, 0, 349, 205, + 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, + 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 0, 2434, 494, 391, 617, 473, 633, 663, + 664, 279, 428, 647, 551, 656, 681, 234, 276, 442, + 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, + 388, 669, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 0, 676, 221, 546, 630, 250, 507, + 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, + 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, + 274, 437, 621, 622, 272, 685, 237, 655, 228, 0, + 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, + 425, 424, 426, 215, 640, 659, 0, 216, 0, 524, + 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, + 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, + 0, 610, 634, 648, 661, 667, 668, 670, 671, 672, + 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, + 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, + 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, + 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 682, 537, 543, 538, 539, 540, + 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, + 0, 623, 624, 705, 403, 510, 635, 354, 368, 371, + 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, + 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, + 224, 225, 226, 553, 554, 555, 556, 652, 653, 657, + 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, + 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, + 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, + 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, + 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, + 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, + 0, 204, 229, 387, 0, 478, 304, 683, 650, 508, + 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, + 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, + 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, + 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, + 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, + 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, + 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, + 658, 665, 504, 404, 452, 476, 611, 0, 0, 317, + 318, 467, 468, 332, 333, 679, 680, 316, 632, 666, + 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, + 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, + 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, + 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, + 552, 415, 282, 456, 557, 0, 395, 606, 607, 335, + 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, + 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, + 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, + 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, + 405, 450, 547, 444, 0, 389, 0, 651, 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, + 344, 210, 435, 523, 302, 0, 0, 0, 0, 0, + 536, 757, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, + 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, + 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, + 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, + 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, + 0, 0, 0, 0, 0, 1134, 0, 0, 0, 0, + 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 313, 0, 423, 273, 0, 477, - 0, 319, 334, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 661, 0, 0, 0, 3817, 0, 0, - 0, 384, 0, 349, 205, 233, 0, 0, 434, 485, - 497, 0, 0, 0, 0, 269, 0, 495, 448, 636, - 243, 300, 482, 455, 493, 463, 303, 0, 0, 494, - 391, 617, 473, 633, 662, 663, 279, 428, 647, 551, - 655, 680, 234, 276, 442, 535, 639, 519, 417, 613, - 614, 348, 518, 311, 209, 388, 668, 232, 503, 390, - 253, 241, 619, 644, 315, 267, 305, 480, 675, 221, - 546, 630, 250, 507, 0, 0, 683, 258, 529, 642, - 631, 223, 626, 528, 413, 345, 346, 222, 0, 481, - 284, 309, 0, 0, 274, 437, 621, 622, 272, 684, - 237, 654, 228, 0, 653, 430, 616, 627, 414, 402, - 227, 625, 412, 401, 353, 374, 375, 296, 324, 470, - 394, 471, 323, 325, 425, 424, 426, 215, 640, 658, - 0, 216, 0, 524, 643, 685, 475, 220, 244, 245, - 248, 0, 295, 299, 307, 310, 320, 321, 331, 386, - 441, 469, 465, 474, 0, 610, 634, 648, 660, 666, - 667, 669, 670, 671, 672, 673, 676, 674, 429, 329, - 520, 352, 392, 0, 0, 447, 496, 251, 638, 521, - 240, 604, 418, 427, 259, 261, 260, 235, 512, 609, - 246, 266, 207, 0, 0, 0, 0, 270, 271, 0, - 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, - 696, 697, 698, 699, 700, 701, 702, 703, 681, 537, - 543, 538, 539, 540, 541, 542, 0, 544, 0, 0, - 0, 0, 0, 419, 0, 623, 624, 704, 403, 510, - 635, 354, 368, 371, 360, 380, 0, 381, 356, 357, - 362, 365, 366, 367, 372, 373, 377, 383, 263, 218, - 410, 420, 608, 330, 224, 225, 226, 553, 554, 555, - 556, 651, 652, 656, 213, 486, 487, 488, 489, 308, - 646, 326, 492, 491, 350, 351, 398, 472, 569, 571, - 582, 586, 588, 590, 596, 599, 570, 572, 583, 587, - 589, 591, 597, 600, 559, 561, 563, 565, 578, 577, - 574, 602, 603, 580, 585, 564, 576, 581, 594, 601, - 598, 558, 562, 566, 575, 593, 592, 573, 584, 595, - 579, 567, 560, 568, 0, 204, 229, 387, 0, 478, - 304, 682, 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 206, 208, 217, 230, 242, 247, 254, 277, 292, 294, - 301, 314, 327, 328, 337, 338, 341, 347, 399, 406, - 407, 408, 409, 431, 432, 433, 436, 439, 440, 443, - 445, 446, 449, 454, 458, 459, 460, 462, 464, 466, - 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, - 514, 515, 516, 517, 525, 526, 531, 532, 533, 534, - 545, 618, 620, 637, 657, 664, 504, 404, 452, 476, - 611, 0, 0, 317, 318, 467, 468, 332, 333, 678, - 679, 316, 632, 665, 629, 677, 659, 461, 397, 0, - 0, 400, 297, 322, 339, 0, 649, 527, 236, 490, - 306, 265, 0, 0, 219, 257, 239, 275, 290, 293, - 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, - 509, 548, 549, 550, 552, 415, 282, 456, 416, 0, - 395, 606, 607, 335, 0, 0, 0, 557, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, - 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, - 0, 0, 385, 283, 0, 0, 212, 530, 0, 453, - 0, 211, 0, 511, 268, 396, 393, 615, 298, 289, - 285, 264, 336, 405, 450, 547, 444, 0, 389, 0, - 0, 522, 422, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 342, 262, 344, 210, 435, 523, 302, 0, 0, - 0, 0, 2194, 536, 756, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 249, 0, 0, 256, 0, 0, - 0, 370, 379, 378, 358, 359, 361, 363, 369, 376, - 382, 355, 364, 0, 0, 641, 0, 0, 0, 281, - 340, 288, 280, 612, 0, 0, 0, 0, 0, 0, - 628, 0, 0, 238, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, + 0, 0, 0, 0, 0, 0, 384, 1140, 349, 205, + 233, 1138, 0, 434, 485, 497, 0, 0, 0, 0, + 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 0, 0, 494, 391, 617, 473, 633, 663, + 664, 279, 428, 647, 551, 656, 681, 234, 276, 442, + 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, + 388, 669, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 0, 676, 221, 546, 630, 250, 507, + 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, + 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, + 274, 437, 621, 622, 272, 685, 237, 655, 228, 0, + 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, + 425, 424, 426, 215, 640, 659, 0, 216, 0, 524, + 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, + 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, + 0, 610, 634, 648, 661, 667, 668, 670, 671, 672, + 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, + 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, + 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, + 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 682, 537, 543, 538, 539, 540, + 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, + 0, 623, 624, 705, 403, 510, 635, 354, 368, 371, + 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, + 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, + 224, 225, 226, 553, 554, 555, 556, 652, 653, 657, + 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, + 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, + 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, + 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, + 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, + 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, + 0, 204, 229, 387, 0, 478, 304, 683, 650, 508, + 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, + 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, + 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, + 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, + 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, + 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, + 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, + 658, 665, 504, 404, 452, 476, 611, 0, 0, 317, + 318, 467, 468, 332, 333, 679, 680, 316, 632, 666, + 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, + 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, + 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, + 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, + 552, 415, 282, 456, 557, 0, 395, 606, 607, 335, + 0, 0, 0, 0, 0, 0, 438, 0, 0, 2436, + 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, + 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, + 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, + 405, 450, 547, 444, 0, 389, 0, 651, 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2195, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, + 344, 210, 435, 523, 302, 0, 0, 0, 0, 2024, + 536, 202, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, + 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, + 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, + 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, + 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 661, 0, 0, 0, 0, 0, 0, 0, 384, 0, - 349, 205, 233, 0, 0, 434, 485, 497, 0, 0, - 0, 0, 269, 0, 495, 448, 636, 243, 300, 482, - 455, 493, 463, 303, 0, 0, 494, 391, 617, 473, - 633, 662, 663, 279, 428, 647, 551, 655, 680, 234, - 276, 442, 535, 639, 519, 417, 613, 614, 348, 518, - 311, 209, 388, 668, 232, 503, 390, 253, 241, 619, - 644, 315, 267, 305, 480, 675, 221, 546, 630, 250, - 507, 0, 0, 683, 258, 529, 642, 631, 223, 626, - 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, - 0, 274, 437, 621, 622, 272, 684, 237, 654, 228, - 0, 653, 430, 616, 627, 414, 402, 227, 625, 412, - 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, - 325, 425, 424, 426, 215, 640, 658, 0, 216, 0, - 524, 643, 685, 475, 220, 244, 245, 248, 0, 295, - 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, - 474, 0, 610, 634, 648, 660, 666, 667, 669, 670, - 671, 672, 673, 676, 674, 429, 329, 520, 352, 392, - 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, - 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, - 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 686, 687, 688, - 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, - 699, 700, 701, 702, 703, 681, 537, 543, 538, 539, - 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, - 419, 0, 623, 624, 704, 403, 510, 635, 354, 368, - 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, - 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, - 330, 224, 225, 226, 553, 554, 555, 556, 651, 652, - 656, 213, 486, 487, 488, 489, 308, 646, 326, 492, - 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, - 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, - 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, - 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, - 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, - 568, 0, 204, 229, 387, 0, 478, 304, 682, 650, - 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, + 0, 0, 0, 0, 0, 0, 384, 0, 349, 205, + 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, + 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 0, 0, 494, 391, 617, 473, 633, 663, + 664, 279, 428, 647, 551, 656, 681, 234, 276, 442, + 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, + 388, 669, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 0, 676, 221, 546, 630, 250, 507, + 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, + 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, + 274, 437, 621, 622, 272, 685, 237, 655, 228, 0, + 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, + 425, 424, 426, 215, 640, 659, 0, 216, 0, 524, + 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, + 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, + 0, 610, 634, 648, 661, 667, 668, 670, 671, 672, + 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, + 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, + 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, + 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 682, 537, 543, 538, 539, 540, + 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, + 0, 623, 624, 705, 403, 510, 635, 354, 368, 371, + 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, + 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, + 224, 225, 226, 553, 554, 555, 556, 652, 653, 657, + 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, + 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, + 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, + 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, + 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, + 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, + 0, 204, 229, 387, 0, 478, 304, 683, 650, 508, + 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, - 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, - 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, - 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, - 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, - 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, - 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, - 637, 657, 664, 504, 404, 452, 476, 611, 0, 0, - 317, 318, 467, 468, 332, 333, 678, 679, 316, 632, - 665, 629, 677, 659, 461, 397, 0, 0, 400, 297, - 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, - 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, - 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, - 550, 552, 415, 282, 456, 416, 0, 395, 606, 607, - 335, 0, 0, 0, 557, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, + 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, + 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, + 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, + 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, + 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, + 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, + 658, 665, 504, 404, 452, 476, 611, 0, 0, 317, + 318, 467, 468, 332, 333, 679, 680, 316, 632, 666, + 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, + 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, + 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, + 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, + 552, 415, 282, 456, 557, 0, 395, 606, 607, 335, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, - 405, 450, 547, 444, 0, 389, 0, 0, 522, 422, + 405, 450, 547, 444, 0, 389, 0, 651, 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, - 344, 210, 435, 523, 302, 0, 0, 0, 0, 2968, - 536, 756, 0, 0, 0, 0, 0, 0, 0, 0, + 344, 210, 435, 523, 302, 0, 0, 0, 1805, 0, + 536, 757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, @@ -5705,240 +5288,7 @@ var yyAct = [...]int{ 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2969, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, - 423, 273, 0, 477, 0, 319, 334, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, - 0, 0, 0, 0, 0, 384, 0, 349, 205, 233, - 0, 0, 434, 485, 497, 0, 0, 0, 0, 269, - 0, 495, 448, 636, 243, 300, 482, 455, 493, 463, - 303, 0, 0, 494, 391, 617, 473, 633, 662, 663, - 279, 428, 647, 551, 655, 680, 234, 276, 442, 535, - 639, 519, 417, 613, 614, 348, 518, 311, 209, 388, - 668, 232, 503, 390, 253, 241, 619, 644, 315, 267, - 305, 480, 675, 221, 546, 630, 250, 507, 0, 0, - 683, 258, 529, 642, 631, 223, 626, 528, 413, 345, - 346, 222, 0, 481, 284, 309, 0, 0, 274, 437, - 621, 622, 272, 684, 237, 654, 228, 0, 653, 430, - 616, 627, 414, 402, 227, 625, 412, 401, 353, 374, - 375, 296, 324, 470, 394, 471, 323, 325, 425, 424, - 426, 215, 640, 658, 0, 216, 0, 524, 643, 685, - 475, 220, 244, 245, 248, 0, 295, 299, 307, 310, - 320, 321, 331, 386, 441, 469, 465, 474, 0, 610, - 634, 648, 660, 666, 667, 669, 670, 671, 672, 673, - 676, 674, 429, 329, 520, 352, 392, 0, 0, 447, - 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, - 260, 235, 512, 609, 246, 266, 207, 0, 0, 0, - 0, 270, 271, 0, 605, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 686, 687, 688, 689, 690, 691, - 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, - 702, 703, 681, 537, 543, 538, 539, 540, 541, 542, - 0, 544, 0, 0, 0, 0, 0, 419, 0, 623, - 624, 704, 403, 510, 635, 354, 368, 371, 360, 380, - 0, 381, 356, 357, 362, 365, 366, 367, 372, 373, - 377, 383, 263, 218, 410, 420, 608, 330, 224, 225, - 226, 553, 554, 555, 556, 651, 652, 656, 213, 486, - 487, 488, 489, 308, 646, 326, 492, 491, 350, 351, - 398, 472, 569, 571, 582, 586, 588, 590, 596, 599, - 570, 572, 583, 587, 589, 591, 597, 600, 559, 561, - 563, 565, 578, 577, 574, 602, 603, 580, 585, 564, - 576, 581, 594, 601, 598, 558, 562, 566, 575, 593, - 592, 573, 584, 595, 579, 567, 560, 568, 0, 204, - 229, 387, 0, 478, 304, 682, 650, 508, 645, 214, - 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 206, 208, 217, 230, 242, 247, - 254, 277, 292, 294, 301, 314, 327, 328, 337, 338, - 341, 347, 399, 406, 407, 408, 409, 431, 432, 433, - 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, - 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, - 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, - 531, 532, 533, 534, 545, 618, 620, 637, 657, 664, - 504, 404, 452, 476, 611, 0, 0, 317, 318, 467, - 468, 332, 333, 678, 679, 316, 632, 665, 629, 677, - 659, 461, 397, 0, 0, 400, 297, 322, 339, 0, - 649, 527, 236, 490, 306, 265, 0, 0, 219, 257, - 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, - 287, 255, 483, 252, 509, 548, 549, 550, 552, 415, - 282, 456, 416, 0, 395, 606, 607, 335, 0, 0, - 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, - 0, 286, 0, 0, 0, 0, 385, 283, 0, 0, - 212, 530, 0, 453, 0, 211, 0, 511, 268, 396, - 393, 615, 298, 289, 285, 264, 336, 405, 450, 547, - 444, 0, 389, 0, 0, 522, 422, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 342, 262, 344, 210, 435, - 523, 302, 0, 0, 0, 0, 0, 536, 756, 0, - 0, 0, 0, 2935, 0, 0, 0, 0, 249, 0, - 0, 256, 2936, 0, 0, 370, 379, 378, 358, 359, - 361, 363, 369, 376, 382, 355, 364, 0, 0, 641, - 0, 0, 0, 281, 340, 288, 280, 612, 0, 0, - 0, 0, 0, 0, 628, 0, 0, 238, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 313, 0, 423, 273, 0, - 477, 0, 319, 334, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 661, 0, 0, 0, 0, 0, - 0, 0, 384, 0, 349, 205, 233, 0, 0, 434, - 485, 497, 0, 0, 0, 0, 269, 0, 495, 448, - 636, 243, 300, 482, 455, 493, 463, 303, 0, 0, - 494, 391, 617, 473, 633, 662, 663, 279, 428, 647, - 551, 655, 680, 234, 276, 442, 535, 639, 519, 417, - 613, 614, 348, 518, 311, 209, 388, 668, 232, 503, - 390, 253, 241, 619, 644, 315, 267, 305, 480, 675, - 221, 546, 630, 250, 507, 0, 0, 683, 258, 529, - 642, 631, 223, 626, 528, 413, 345, 346, 222, 0, - 481, 284, 309, 0, 0, 274, 437, 621, 622, 272, - 684, 237, 654, 228, 0, 653, 430, 616, 627, 414, - 402, 227, 625, 412, 401, 353, 374, 375, 296, 324, - 470, 394, 471, 323, 325, 425, 424, 426, 215, 640, - 658, 0, 216, 0, 524, 643, 685, 475, 220, 244, - 245, 248, 0, 295, 299, 307, 310, 320, 321, 331, - 386, 441, 469, 465, 474, 0, 610, 634, 648, 660, - 666, 667, 669, 670, 671, 672, 673, 676, 674, 429, - 329, 520, 352, 392, 0, 0, 447, 496, 251, 638, - 521, 240, 604, 418, 427, 259, 261, 260, 235, 512, - 609, 246, 266, 207, 0, 0, 0, 0, 270, 271, - 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 686, 687, 688, 689, 690, 691, 692, 693, 694, - 695, 696, 697, 698, 699, 700, 701, 702, 703, 681, - 537, 543, 538, 539, 540, 541, 542, 0, 544, 0, - 0, 0, 0, 0, 419, 0, 623, 624, 704, 403, - 510, 635, 354, 368, 371, 360, 380, 0, 381, 356, - 357, 362, 365, 366, 367, 372, 373, 377, 383, 263, - 218, 410, 420, 608, 330, 224, 225, 226, 553, 554, - 555, 556, 651, 652, 656, 213, 486, 487, 488, 489, - 308, 646, 326, 492, 491, 350, 351, 398, 472, 569, - 571, 582, 586, 588, 590, 596, 599, 570, 572, 583, - 587, 589, 591, 597, 600, 559, 561, 563, 565, 578, - 577, 574, 602, 603, 580, 585, 564, 576, 581, 594, - 601, 598, 558, 562, 566, 575, 593, 592, 573, 584, - 595, 579, 567, 560, 568, 0, 204, 229, 387, 0, - 478, 304, 682, 650, 508, 645, 214, 231, 0, 278, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 206, 208, 217, 230, 242, 247, 254, 277, 292, - 294, 301, 314, 327, 328, 337, 338, 341, 347, 399, - 406, 407, 408, 409, 431, 432, 433, 436, 439, 440, - 443, 445, 446, 449, 454, 458, 459, 460, 462, 464, - 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, - 513, 514, 515, 516, 517, 525, 526, 531, 532, 533, - 534, 545, 618, 620, 637, 657, 664, 504, 404, 452, - 476, 611, 0, 0, 317, 318, 467, 468, 332, 333, - 678, 679, 316, 632, 665, 629, 677, 659, 461, 397, - 0, 0, 400, 297, 322, 339, 0, 649, 527, 236, - 490, 306, 265, 0, 0, 219, 257, 239, 275, 290, - 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, - 252, 509, 548, 549, 550, 552, 415, 282, 456, 416, - 0, 395, 606, 607, 335, 0, 0, 0, 557, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 438, 0, 0, 0, 0, 0, 0, 0, 286, 1867, - 0, 0, 0, 385, 283, 0, 0, 212, 530, 0, - 453, 0, 211, 0, 511, 268, 396, 393, 615, 298, - 289, 285, 264, 336, 405, 450, 547, 444, 0, 389, - 0, 0, 522, 422, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 342, 262, 344, 210, 435, 523, 302, 0, - 0, 0, 0, 1866, 536, 756, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 249, 0, 0, 256, 0, - 0, 0, 370, 379, 378, 358, 359, 361, 363, 369, - 376, 382, 355, 364, 0, 0, 641, 0, 0, 0, - 281, 340, 288, 280, 612, 0, 0, 0, 0, 0, - 0, 628, 0, 0, 238, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 313, 0, 423, 273, 0, 477, 0, 319, - 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 661, 0, 0, 0, 0, 0, 0, 0, 384, - 0, 349, 205, 233, 0, 0, 434, 485, 497, 0, - 0, 0, 0, 269, 0, 495, 448, 636, 243, 300, - 482, 455, 493, 463, 303, 0, 0, 494, 391, 617, - 473, 633, 662, 663, 279, 428, 647, 551, 655, 680, - 234, 276, 442, 535, 639, 519, 417, 613, 614, 348, - 518, 311, 209, 388, 668, 232, 503, 390, 253, 241, - 619, 644, 315, 267, 305, 480, 675, 221, 546, 630, - 250, 507, 0, 0, 683, 258, 529, 642, 631, 223, - 626, 528, 413, 345, 346, 222, 0, 481, 284, 309, - 0, 0, 274, 437, 621, 622, 272, 684, 237, 654, - 228, 0, 653, 430, 616, 627, 414, 402, 227, 625, - 412, 401, 353, 374, 375, 296, 324, 470, 394, 471, - 323, 325, 425, 424, 426, 215, 640, 658, 0, 216, - 0, 524, 643, 685, 475, 220, 244, 245, 248, 0, - 295, 299, 307, 310, 320, 321, 331, 386, 441, 469, - 465, 474, 0, 610, 634, 648, 660, 666, 667, 669, - 670, 671, 672, 673, 676, 674, 429, 329, 520, 352, - 392, 0, 0, 447, 496, 251, 638, 521, 240, 604, - 418, 427, 259, 261, 260, 235, 512, 609, 246, 266, - 207, 0, 0, 0, 0, 270, 271, 0, 605, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 686, 687, - 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, - 698, 699, 700, 701, 702, 703, 681, 537, 543, 538, - 539, 540, 541, 542, 0, 544, 0, 0, 0, 0, - 0, 419, 0, 623, 624, 704, 403, 510, 635, 354, - 368, 371, 360, 380, 0, 381, 356, 357, 362, 365, - 366, 367, 372, 373, 377, 383, 263, 218, 410, 420, - 608, 330, 224, 225, 226, 553, 554, 555, 556, 651, - 652, 656, 213, 486, 487, 488, 489, 308, 646, 326, - 492, 491, 350, 351, 398, 472, 569, 571, 582, 586, - 588, 590, 596, 599, 570, 572, 583, 587, 589, 591, - 597, 600, 559, 561, 563, 565, 578, 577, 574, 602, - 603, 580, 585, 564, 576, 581, 594, 601, 598, 558, - 562, 566, 575, 593, 592, 573, 584, 595, 579, 567, - 560, 568, 0, 204, 229, 387, 0, 478, 304, 682, - 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 206, 208, - 217, 230, 242, 247, 254, 277, 292, 294, 301, 314, - 327, 328, 337, 338, 341, 347, 399, 406, 407, 408, - 409, 431, 432, 433, 436, 439, 440, 443, 445, 446, - 449, 454, 458, 459, 460, 462, 464, 466, 479, 484, - 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, - 516, 517, 525, 526, 531, 532, 533, 534, 545, 618, - 620, 637, 657, 664, 504, 404, 452, 476, 611, 0, - 0, 317, 318, 467, 468, 332, 333, 678, 679, 316, - 632, 665, 629, 677, 659, 461, 397, 0, 0, 400, - 297, 322, 339, 0, 649, 527, 236, 490, 306, 265, - 0, 0, 219, 257, 239, 275, 290, 293, 343, 411, - 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, - 549, 550, 552, 415, 282, 456, 416, 0, 395, 606, - 607, 335, 0, 0, 0, 557, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, - 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, - 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, - 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, - 336, 405, 450, 547, 444, 0, 389, 0, 0, 522, - 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, - 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, - 0, 536, 758, 759, 760, 0, 0, 0, 0, 0, - 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, - 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, - 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, - 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, - 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5946,276 +5296,120 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, - 0, 0, 0, 0, 0, 0, 384, 0, 349, 205, + 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, + 0, 0, 3826, 0, 0, 0, 384, 0, 349, 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, - 463, 303, 0, 0, 494, 391, 617, 473, 633, 662, - 663, 279, 428, 647, 551, 655, 680, 234, 276, 442, + 463, 303, 0, 0, 494, 391, 617, 473, 633, 663, + 664, 279, 428, 647, 551, 656, 681, 234, 276, 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, - 388, 668, 232, 503, 390, 253, 241, 619, 644, 315, - 267, 305, 480, 675, 221, 546, 630, 250, 507, 0, - 0, 683, 258, 529, 642, 631, 223, 626, 528, 413, - 345, 346, 222, 0, 481, 284, 309, 0, 0, 274, - 437, 621, 622, 272, 684, 237, 654, 228, 0, 653, - 430, 616, 627, 414, 402, 227, 625, 412, 401, 353, - 374, 375, 296, 324, 470, 394, 471, 323, 325, 425, - 424, 426, 215, 640, 658, 0, 216, 0, 524, 643, - 685, 475, 220, 244, 245, 248, 0, 295, 299, 307, - 310, 320, 321, 331, 386, 441, 469, 465, 474, 0, - 610, 634, 648, 660, 666, 667, 669, 670, 671, 672, - 673, 676, 674, 429, 329, 520, 352, 392, 0, 0, - 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, - 261, 260, 235, 512, 609, 246, 266, 207, 0, 0, - 0, 0, 270, 271, 0, 605, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 686, 687, 688, 689, 690, + 388, 669, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 0, 676, 221, 546, 630, 250, 507, + 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, + 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, + 274, 437, 621, 622, 272, 685, 237, 655, 228, 0, + 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, + 425, 424, 426, 215, 640, 659, 0, 216, 0, 524, + 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, + 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, + 0, 610, 634, 648, 661, 667, 668, 670, 671, 672, + 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, + 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, + 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, + 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, - 701, 702, 703, 681, 537, 543, 538, 539, 540, 541, - 542, 0, 544, 0, 0, 0, 0, 0, 419, 0, - 623, 624, 704, 403, 510, 635, 354, 368, 371, 360, - 380, 0, 381, 356, 357, 362, 365, 366, 367, 372, - 373, 377, 383, 263, 218, 410, 420, 608, 330, 224, - 225, 226, 553, 554, 555, 556, 651, 652, 656, 213, - 486, 487, 488, 489, 308, 646, 326, 492, 491, 350, - 351, 398, 472, 569, 571, 582, 586, 588, 590, 596, - 599, 570, 572, 583, 587, 589, 591, 597, 600, 559, - 561, 563, 565, 578, 577, 574, 602, 603, 580, 585, - 564, 576, 581, 594, 601, 598, 558, 562, 566, 575, - 593, 592, 573, 584, 595, 579, 567, 560, 568, 0, - 204, 229, 387, 0, 478, 304, 682, 650, 508, 645, - 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 206, 208, 217, 230, 242, - 247, 254, 277, 292, 294, 301, 314, 327, 328, 337, - 338, 341, 347, 399, 406, 407, 408, 409, 431, 432, - 433, 436, 439, 440, 443, 445, 446, 449, 454, 458, - 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, - 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, - 526, 531, 532, 533, 534, 545, 618, 620, 637, 657, - 664, 504, 404, 452, 476, 611, 0, 0, 317, 318, - 467, 468, 332, 333, 678, 679, 316, 632, 665, 629, - 677, 659, 461, 397, 0, 0, 400, 297, 322, 339, - 0, 649, 527, 236, 490, 306, 265, 0, 0, 219, - 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, - 312, 287, 255, 483, 252, 509, 548, 549, 550, 552, - 415, 282, 456, 416, 0, 395, 606, 607, 335, 0, - 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, - 0, 0, 286, 0, 0, 0, 0, 385, 283, 0, - 0, 212, 530, 0, 453, 0, 211, 0, 511, 268, - 396, 393, 615, 298, 289, 285, 264, 336, 405, 450, - 547, 444, 0, 389, 0, 0, 522, 422, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 342, 262, 344, 210, - 435, 523, 302, 0, 0, 0, 0, 0, 536, 756, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, - 0, 0, 256, 0, 0, 0, 370, 379, 378, 358, - 359, 361, 363, 369, 376, 382, 355, 364, 0, 0, - 641, 0, 0, 0, 281, 340, 288, 280, 612, 0, - 0, 0, 0, 0, 0, 628, 0, 0, 238, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 313, 0, 423, 273, - 0, 477, 0, 319, 334, 0, 0, 0, 0, 4257, - 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, - 0, 0, 0, 384, 0, 349, 205, 233, 0, 0, - 434, 485, 497, 0, 0, 0, 0, 269, 0, 495, - 448, 636, 243, 300, 482, 455, 493, 463, 303, 0, - 0, 494, 391, 617, 473, 633, 662, 663, 279, 428, - 647, 551, 655, 680, 234, 276, 442, 535, 639, 519, - 417, 613, 614, 348, 518, 311, 209, 388, 668, 232, - 503, 390, 253, 241, 619, 644, 315, 267, 305, 480, - 675, 221, 546, 630, 250, 507, 0, 0, 683, 258, - 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, - 0, 481, 284, 309, 0, 0, 274, 437, 621, 622, - 272, 684, 237, 654, 228, 0, 653, 430, 616, 627, - 414, 402, 227, 625, 412, 401, 353, 374, 375, 296, - 324, 470, 394, 471, 323, 325, 425, 424, 426, 215, - 640, 658, 0, 216, 0, 524, 643, 685, 475, 220, - 244, 245, 248, 0, 295, 299, 307, 310, 320, 321, - 331, 386, 441, 469, 465, 474, 0, 610, 634, 648, - 660, 666, 667, 669, 670, 671, 672, 673, 676, 674, - 429, 329, 520, 352, 392, 0, 0, 447, 496, 251, - 638, 521, 240, 604, 418, 427, 259, 261, 260, 235, - 512, 609, 246, 266, 207, 0, 0, 0, 0, 270, - 271, 0, 605, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 686, 687, 688, 689, 690, 691, 692, 693, - 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, - 681, 537, 543, 538, 539, 540, 541, 542, 0, 544, - 0, 0, 0, 0, 0, 419, 0, 623, 624, 704, - 403, 510, 635, 354, 368, 371, 360, 380, 0, 381, - 356, 357, 362, 365, 366, 367, 372, 373, 377, 383, - 263, 218, 410, 420, 608, 330, 224, 225, 226, 553, - 554, 555, 556, 651, 652, 656, 213, 486, 487, 488, - 489, 308, 646, 326, 492, 491, 350, 351, 398, 472, - 569, 571, 582, 586, 588, 590, 596, 599, 570, 572, - 583, 587, 589, 591, 597, 600, 559, 561, 563, 565, - 578, 577, 574, 602, 603, 580, 585, 564, 576, 581, - 594, 601, 598, 558, 562, 566, 575, 593, 592, 573, - 584, 595, 579, 567, 560, 568, 0, 204, 229, 387, - 0, 478, 304, 682, 650, 508, 645, 214, 231, 0, - 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 206, 208, 217, 230, 242, 247, 254, 277, - 292, 294, 301, 314, 327, 328, 337, 338, 341, 347, - 399, 406, 407, 408, 409, 431, 432, 433, 436, 439, - 440, 443, 445, 446, 449, 454, 458, 459, 460, 462, - 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, - 506, 513, 514, 515, 516, 517, 525, 526, 531, 532, - 533, 534, 545, 618, 620, 637, 657, 664, 504, 404, - 452, 476, 611, 0, 0, 317, 318, 467, 468, 332, - 333, 678, 679, 316, 632, 665, 629, 677, 659, 461, - 397, 0, 0, 400, 297, 322, 339, 0, 649, 527, - 236, 490, 306, 265, 0, 0, 219, 257, 239, 275, - 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, - 483, 252, 509, 548, 549, 550, 552, 415, 282, 456, - 416, 0, 395, 606, 607, 335, 0, 0, 0, 557, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 438, 0, 0, 0, 0, 0, 0, 0, 286, - 0, 0, 0, 0, 385, 283, 0, 0, 212, 530, - 0, 453, 0, 211, 0, 511, 268, 396, 393, 615, - 298, 289, 285, 264, 336, 405, 450, 547, 444, 0, - 389, 0, 0, 522, 422, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 342, 262, 344, 210, 435, 523, 302, - 0, 0, 0, 0, 0, 536, 756, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 249, 0, 0, 256, - 0, 0, 0, 370, 379, 378, 358, 359, 361, 363, - 369, 376, 382, 355, 364, 0, 0, 641, 0, 0, - 0, 281, 340, 288, 280, 612, 0, 0, 0, 0, - 0, 0, 628, 0, 0, 238, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 313, 0, 423, 273, 0, 477, 0, - 319, 334, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 661, 0, 0, 0, 4173, 0, 0, 0, - 384, 0, 349, 205, 233, 0, 0, 434, 485, 497, - 0, 0, 0, 0, 269, 0, 495, 448, 636, 243, - 300, 482, 455, 493, 463, 303, 0, 0, 494, 391, - 617, 473, 633, 662, 663, 279, 428, 647, 551, 655, - 680, 234, 276, 442, 535, 639, 519, 417, 613, 614, - 348, 518, 311, 209, 388, 668, 232, 503, 390, 253, - 241, 619, 644, 315, 267, 305, 480, 675, 221, 546, - 630, 250, 507, 0, 0, 683, 258, 529, 642, 631, - 223, 626, 528, 413, 345, 346, 222, 0, 481, 284, - 309, 0, 0, 274, 437, 621, 622, 272, 684, 237, - 654, 228, 0, 653, 430, 616, 627, 414, 402, 227, - 625, 412, 401, 353, 374, 375, 296, 324, 470, 394, - 471, 323, 325, 425, 424, 426, 215, 640, 658, 0, - 216, 0, 524, 643, 685, 475, 220, 244, 245, 248, - 0, 295, 299, 307, 310, 320, 321, 331, 386, 441, - 469, 465, 474, 0, 610, 634, 648, 660, 666, 667, - 669, 670, 671, 672, 673, 676, 674, 429, 329, 520, - 352, 392, 0, 0, 447, 496, 251, 638, 521, 240, - 604, 418, 427, 259, 261, 260, 235, 512, 609, 246, - 266, 207, 0, 0, 0, 0, 270, 271, 0, 605, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 686, - 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, - 697, 698, 699, 700, 701, 702, 703, 681, 537, 543, - 538, 539, 540, 541, 542, 0, 544, 0, 0, 0, - 0, 0, 419, 0, 623, 624, 704, 403, 510, 635, - 354, 368, 371, 360, 380, 0, 381, 356, 357, 362, - 365, 366, 367, 372, 373, 377, 383, 263, 218, 410, - 420, 608, 330, 224, 225, 226, 553, 554, 555, 556, - 651, 652, 656, 213, 486, 487, 488, 489, 308, 646, - 326, 492, 491, 350, 351, 398, 472, 569, 571, 582, - 586, 588, 590, 596, 599, 570, 572, 583, 587, 589, - 591, 597, 600, 559, 561, 563, 565, 578, 577, 574, - 602, 603, 580, 585, 564, 576, 581, 594, 601, 598, - 558, 562, 566, 575, 593, 592, 573, 584, 595, 579, - 567, 560, 568, 0, 204, 229, 387, 0, 478, 304, - 682, 650, 508, 645, 214, 231, 0, 278, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, - 208, 217, 230, 242, 247, 254, 277, 292, 294, 301, - 314, 327, 328, 337, 338, 341, 347, 399, 406, 407, - 408, 409, 431, 432, 433, 436, 439, 440, 443, 445, - 446, 449, 454, 458, 459, 460, 462, 464, 466, 479, - 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, - 515, 516, 517, 525, 526, 531, 532, 533, 534, 545, - 618, 620, 637, 657, 664, 504, 404, 452, 476, 611, - 0, 0, 317, 318, 467, 468, 332, 333, 678, 679, - 316, 632, 665, 629, 677, 659, 461, 397, 0, 0, - 400, 297, 322, 339, 0, 649, 527, 236, 490, 306, - 265, 0, 0, 219, 257, 239, 275, 290, 293, 343, - 411, 421, 451, 457, 312, 287, 255, 483, 252, 509, - 548, 549, 550, 552, 415, 282, 456, 416, 0, 395, - 606, 607, 335, 0, 0, 0, 557, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, - 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, - 0, 385, 283, 0, 0, 212, 530, 0, 453, 0, - 211, 0, 511, 268, 396, 393, 615, 298, 289, 285, - 264, 336, 405, 450, 547, 444, 0, 389, 0, 0, - 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 342, 262, 344, 210, 435, 523, 302, 0, 0, 0, - 0, 2023, 536, 202, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 249, 0, 0, 256, 0, 0, 0, - 370, 379, 378, 358, 359, 361, 363, 369, 376, 382, - 355, 364, 0, 0, 641, 0, 0, 0, 281, 340, - 288, 280, 612, 0, 0, 0, 0, 0, 0, 628, - 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 701, 702, 703, 704, 682, 537, 543, 538, 539, 540, + 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, + 0, 623, 624, 705, 403, 510, 635, 354, 368, 371, + 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, + 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, + 224, 225, 226, 553, 554, 555, 556, 652, 653, 657, + 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, + 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, + 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, + 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, + 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, + 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, + 0, 204, 229, 387, 0, 478, 304, 683, 650, 508, + 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, + 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, + 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, + 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, + 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, + 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, + 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, + 658, 665, 504, 404, 452, 476, 611, 0, 0, 317, + 318, 467, 468, 332, 333, 679, 680, 316, 632, 666, + 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, + 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, + 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, + 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, + 552, 415, 282, 456, 557, 0, 395, 606, 607, 335, + 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, + 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, + 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, + 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, + 405, 450, 547, 444, 0, 389, 0, 651, 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, + 344, 210, 435, 523, 302, 0, 0, 0, 0, 2196, + 536, 757, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, + 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, + 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, + 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, + 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, - 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, - 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, - 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, - 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, - 662, 663, 279, 428, 647, 551, 655, 680, 234, 276, - 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, - 209, 388, 668, 232, 503, 390, 253, 241, 619, 644, - 315, 267, 305, 480, 675, 221, 546, 630, 250, 507, - 0, 0, 683, 258, 529, 642, 631, 223, 626, 528, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, + 0, 0, 0, 0, 0, 0, 384, 0, 349, 205, + 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, + 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 0, 0, 494, 391, 617, 473, 633, 663, + 664, 279, 428, 647, 551, 656, 681, 234, 276, 442, + 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, + 388, 669, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 0, 676, 221, 546, 630, 250, 507, + 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, - 274, 437, 621, 622, 272, 684, 237, 654, 228, 0, - 653, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 274, 437, 621, 622, 272, 685, 237, 655, 228, 0, + 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, - 425, 424, 426, 215, 640, 658, 0, 216, 0, 524, - 643, 685, 475, 220, 244, 245, 248, 0, 295, 299, + 425, 424, 426, 215, 640, 659, 0, 216, 0, 524, + 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, - 0, 610, 634, 648, 660, 666, 667, 669, 670, 671, - 672, 673, 676, 674, 429, 329, 520, 352, 392, 0, + 0, 610, 634, 648, 661, 667, 668, 670, 671, 672, + 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 686, 687, 688, 689, - 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, - 700, 701, 702, 703, 681, 537, 543, 538, 539, 540, + 0, 0, 0, 0, 0, 0, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 682, 537, 543, 538, 539, 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, - 0, 623, 624, 704, 403, 510, 635, 354, 368, 371, + 0, 623, 624, 705, 403, 510, 635, 354, 368, 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, - 224, 225, 226, 553, 554, 555, 556, 651, 652, 656, + 224, 225, 226, 553, 554, 555, 556, 652, 653, 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, - 0, 204, 229, 387, 0, 478, 304, 682, 650, 508, + 0, 204, 229, 387, 0, 478, 304, 683, 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, @@ -6225,256 +5419,330 @@ var yyAct = [...]int{ 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, - 657, 664, 504, 404, 452, 476, 611, 0, 0, 317, - 318, 467, 468, 332, 333, 678, 679, 316, 632, 665, - 629, 677, 659, 461, 397, 0, 0, 400, 297, 322, + 658, 665, 504, 404, 452, 476, 611, 0, 0, 317, + 318, 467, 468, 332, 333, 679, 680, 316, 632, 666, + 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, - 552, 415, 282, 456, 416, 0, 395, 606, 607, 335, - 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, - 0, 0, 0, 286, 0, 0, 0, 0, 385, 283, - 0, 0, 212, 530, 0, 453, 0, 211, 0, 511, - 268, 396, 393, 615, 298, 289, 285, 264, 336, 405, - 450, 547, 444, 0, 389, 0, 0, 522, 422, 0, + 552, 415, 282, 456, 557, 0, 395, 606, 607, 335, + 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, + 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, + 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, + 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, + 405, 450, 547, 444, 0, 389, 0, 651, 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 342, 262, 344, - 210, 435, 523, 302, 0, 0, 0, 0, 0, 536, - 756, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 249, 0, 0, 256, 0, 0, 0, 370, 379, 378, - 358, 359, 361, 363, 369, 376, 382, 355, 364, 0, - 0, 641, 0, 0, 0, 281, 340, 288, 280, 612, - 0, 0, 0, 0, 0, 0, 628, 0, 0, 238, + 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, + 344, 210, 435, 523, 302, 0, 0, 0, 0, 2972, + 536, 757, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, + 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, + 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, + 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, + 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, + 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2973, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, + 0, 0, 0, 0, 0, 0, 384, 0, 349, 205, + 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, + 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 0, 0, 494, 391, 617, 473, 633, 663, + 664, 279, 428, 647, 551, 656, 681, 234, 276, 442, + 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, + 388, 669, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 0, 676, 221, 546, 630, 250, 507, + 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, + 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, + 274, 437, 621, 622, 272, 685, 237, 655, 228, 0, + 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, + 425, 424, 426, 215, 640, 659, 0, 216, 0, 524, + 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, + 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, + 0, 610, 634, 648, 661, 667, 668, 670, 671, 672, + 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, + 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, + 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, + 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 682, 537, 543, 538, 539, 540, + 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, + 0, 623, 624, 705, 403, 510, 635, 354, 368, 371, + 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, + 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, + 224, 225, 226, 553, 554, 555, 556, 652, 653, 657, + 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, + 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, + 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, + 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, + 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, + 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, + 0, 204, 229, 387, 0, 478, 304, 683, 650, 508, + 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, + 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, + 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, + 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, + 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, + 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, + 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, + 658, 665, 504, 404, 452, 476, 611, 0, 0, 317, + 318, 467, 468, 332, 333, 679, 680, 316, 632, 666, + 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, + 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, + 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, + 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, + 552, 415, 282, 456, 557, 0, 395, 606, 607, 335, + 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, + 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, + 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, + 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, + 405, 450, 547, 444, 0, 389, 0, 651, 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, + 344, 210, 435, 523, 302, 0, 0, 0, 0, 0, + 536, 757, 0, 0, 0, 0, 2939, 0, 0, 0, + 0, 249, 0, 0, 256, 2940, 0, 0, 370, 379, + 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, + 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, + 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, + 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 313, 0, 423, - 273, 0, 477, 0, 319, 334, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, - 3817, 0, 0, 0, 384, 0, 349, 205, 233, 0, - 0, 434, 485, 497, 0, 0, 0, 0, 269, 0, - 495, 448, 636, 243, 300, 482, 455, 493, 463, 303, - 0, 0, 494, 391, 617, 473, 633, 662, 663, 279, - 428, 647, 551, 655, 680, 234, 276, 442, 535, 639, - 519, 417, 613, 614, 348, 518, 311, 209, 388, 668, - 232, 503, 390, 253, 241, 619, 644, 315, 267, 305, - 480, 675, 221, 546, 630, 250, 507, 0, 0, 683, - 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, - 222, 0, 481, 284, 309, 0, 0, 274, 437, 621, - 622, 272, 684, 237, 654, 228, 0, 653, 430, 616, - 627, 414, 402, 227, 625, 412, 401, 353, 374, 375, - 296, 324, 470, 394, 471, 323, 325, 425, 424, 426, - 215, 640, 658, 0, 216, 0, 524, 643, 685, 475, - 220, 244, 245, 248, 0, 295, 299, 307, 310, 320, - 321, 331, 386, 441, 469, 465, 474, 0, 610, 634, - 648, 660, 666, 667, 669, 670, 671, 672, 673, 676, - 674, 429, 329, 520, 352, 392, 0, 0, 447, 496, - 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, - 235, 512, 609, 246, 266, 207, 0, 0, 0, 0, - 270, 271, 0, 605, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 686, 687, 688, 689, 690, 691, 692, - 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, - 703, 681, 537, 543, 538, 539, 540, 541, 542, 0, - 544, 0, 0, 0, 0, 0, 419, 0, 623, 624, - 704, 403, 510, 635, 354, 368, 371, 360, 380, 0, - 381, 356, 357, 362, 365, 366, 367, 372, 373, 377, - 383, 263, 218, 410, 420, 608, 330, 224, 225, 226, - 553, 554, 555, 556, 651, 652, 656, 213, 486, 487, - 488, 489, 308, 646, 326, 492, 491, 350, 351, 398, - 472, 569, 571, 582, 586, 588, 590, 596, 599, 570, - 572, 583, 587, 589, 591, 597, 600, 559, 561, 563, - 565, 578, 577, 574, 602, 603, 580, 585, 564, 576, - 581, 594, 601, 598, 558, 562, 566, 575, 593, 592, - 573, 584, 595, 579, 567, 560, 568, 0, 204, 229, - 387, 0, 478, 304, 682, 650, 508, 645, 214, 231, - 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, + 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 206, 208, 217, 230, 242, 247, 254, - 277, 292, 294, 301, 314, 327, 328, 337, 338, 341, - 347, 399, 406, 407, 408, 409, 431, 432, 433, 436, - 439, 440, 443, 445, 446, 449, 454, 458, 459, 460, - 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, - 505, 506, 513, 514, 515, 516, 517, 525, 526, 531, - 532, 533, 534, 545, 618, 620, 637, 657, 664, 504, - 404, 452, 476, 611, 0, 0, 317, 318, 467, 468, - 332, 333, 678, 679, 316, 632, 665, 629, 677, 659, - 461, 397, 0, 0, 400, 297, 322, 339, 0, 649, - 527, 236, 490, 306, 265, 0, 0, 219, 257, 239, - 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, - 255, 483, 252, 509, 548, 549, 550, 552, 415, 282, - 456, 416, 0, 395, 606, 607, 335, 0, 0, 0, - 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, - 286, 0, 0, 0, 0, 385, 283, 0, 0, 212, - 530, 0, 453, 0, 211, 0, 511, 268, 396, 393, - 615, 298, 289, 285, 264, 336, 405, 450, 547, 444, - 0, 389, 0, 0, 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 342, 262, 344, 210, 435, 523, - 302, 0, 101, 0, 0, 0, 536, 756, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, - 256, 0, 0, 0, 370, 379, 378, 358, 359, 361, - 363, 369, 376, 382, 355, 364, 0, 0, 641, 0, - 0, 0, 281, 340, 288, 280, 612, 0, 0, 0, - 0, 0, 0, 628, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, + 0, 0, 0, 0, 0, 0, 384, 0, 349, 205, + 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, + 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 0, 0, 494, 391, 617, 473, 633, 663, + 664, 279, 428, 647, 551, 656, 681, 234, 276, 442, + 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, + 388, 669, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 0, 676, 221, 546, 630, 250, 507, + 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, + 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, + 274, 437, 621, 622, 272, 685, 237, 655, 228, 0, + 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, + 425, 424, 426, 215, 640, 659, 0, 216, 0, 524, + 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, + 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, + 0, 610, 634, 648, 661, 667, 668, 670, 671, 672, + 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, + 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, + 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, + 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 682, 537, 543, 538, 539, 540, + 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, + 0, 623, 624, 705, 403, 510, 635, 354, 368, 371, + 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, + 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, + 224, 225, 226, 553, 554, 555, 556, 652, 653, 657, + 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, + 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, + 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, + 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, + 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, + 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, + 0, 204, 229, 387, 0, 478, 304, 683, 650, 508, + 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, + 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, + 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, + 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, + 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, + 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, + 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, + 658, 665, 504, 404, 452, 476, 611, 0, 0, 317, + 318, 467, 468, 332, 333, 679, 680, 316, 632, 666, + 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, + 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, + 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, + 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, + 552, 415, 282, 456, 557, 0, 395, 606, 607, 335, + 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, + 0, 0, 0, 0, 286, 1868, 0, 0, 0, 385, + 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, + 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, + 405, 450, 547, 444, 0, 389, 0, 651, 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, + 344, 210, 435, 523, 302, 0, 0, 0, 0, 1867, + 536, 757, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, + 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, + 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, + 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, + 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 313, 0, 423, 273, 0, 477, - 0, 319, 334, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, - 0, 384, 0, 349, 205, 233, 0, 0, 434, 485, - 497, 0, 0, 0, 0, 269, 0, 495, 448, 636, - 243, 300, 482, 455, 493, 463, 303, 0, 0, 494, - 391, 617, 473, 633, 662, 663, 279, 428, 647, 551, - 655, 680, 234, 276, 442, 535, 639, 519, 417, 613, - 614, 348, 518, 311, 209, 388, 668, 232, 503, 390, - 253, 241, 619, 644, 315, 267, 305, 480, 675, 221, - 546, 630, 250, 507, 0, 0, 683, 258, 529, 642, - 631, 223, 626, 528, 413, 345, 346, 222, 0, 481, - 284, 309, 0, 0, 274, 437, 621, 622, 272, 684, - 237, 654, 228, 0, 653, 430, 616, 627, 414, 402, - 227, 625, 412, 401, 353, 374, 375, 296, 324, 470, - 394, 471, 323, 325, 425, 424, 426, 215, 640, 658, - 0, 216, 0, 524, 643, 685, 475, 220, 244, 245, - 248, 0, 295, 299, 307, 310, 320, 321, 331, 386, - 441, 469, 465, 474, 0, 610, 634, 648, 660, 666, - 667, 669, 670, 671, 672, 673, 676, 674, 429, 329, - 520, 352, 392, 0, 0, 447, 496, 251, 638, 521, - 240, 604, 418, 427, 259, 261, 260, 235, 512, 609, - 246, 266, 207, 0, 0, 0, 0, 270, 271, 0, - 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, - 696, 697, 698, 699, 700, 701, 702, 703, 681, 537, - 543, 538, 539, 540, 541, 542, 0, 544, 0, 0, - 0, 0, 0, 419, 0, 623, 624, 704, 403, 510, - 635, 354, 368, 371, 360, 380, 0, 381, 356, 357, - 362, 365, 366, 367, 372, 373, 377, 383, 263, 218, - 410, 420, 608, 330, 224, 225, 226, 553, 554, 555, - 556, 651, 652, 656, 213, 486, 487, 488, 489, 308, - 646, 326, 492, 491, 350, 351, 398, 472, 569, 571, - 582, 586, 588, 590, 596, 599, 570, 572, 583, 587, - 589, 591, 597, 600, 559, 561, 563, 565, 578, 577, - 574, 602, 603, 580, 585, 564, 576, 581, 594, 601, - 598, 558, 562, 566, 575, 593, 592, 573, 584, 595, - 579, 567, 560, 568, 0, 204, 229, 387, 0, 478, - 304, 682, 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 206, 208, 217, 230, 242, 247, 254, 277, 292, 294, - 301, 314, 327, 328, 337, 338, 341, 347, 399, 406, - 407, 408, 409, 431, 432, 433, 436, 439, 440, 443, - 445, 446, 449, 454, 458, 459, 460, 462, 464, 466, - 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, - 514, 515, 516, 517, 525, 526, 531, 532, 533, 534, - 545, 618, 620, 637, 657, 664, 504, 404, 452, 476, - 611, 0, 0, 317, 318, 467, 468, 332, 333, 678, - 679, 316, 632, 665, 629, 677, 659, 461, 397, 0, - 0, 400, 297, 322, 339, 0, 649, 527, 236, 490, - 306, 265, 0, 0, 219, 257, 239, 275, 290, 293, - 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, - 509, 548, 549, 550, 552, 415, 282, 456, 416, 0, - 395, 606, 607, 335, 0, 0, 0, 557, 0, 0, - 0, 0, 2503, 0, 0, 0, 0, 0, 0, 438, - 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, - 0, 0, 385, 283, 0, 0, 212, 530, 0, 453, - 0, 211, 0, 511, 268, 396, 393, 615, 298, 289, - 285, 264, 336, 405, 450, 547, 444, 0, 389, 0, - 0, 522, 422, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 342, 262, 344, 210, 435, 523, 302, 0, 0, - 0, 0, 0, 536, 202, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 249, 0, 0, 256, 0, 0, - 0, 370, 379, 378, 358, 359, 361, 363, 369, 376, - 382, 355, 364, 0, 0, 641, 0, 0, 0, 281, - 340, 288, 280, 612, 0, 0, 0, 0, 0, 0, - 628, 0, 0, 238, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, + 0, 0, 0, 0, 0, 0, 384, 0, 349, 205, + 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, + 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 0, 0, 494, 391, 617, 473, 633, 663, + 664, 279, 428, 647, 551, 656, 681, 234, 276, 442, + 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, + 388, 669, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 0, 676, 221, 546, 630, 250, 507, + 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, + 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, + 274, 437, 621, 622, 272, 685, 237, 655, 228, 0, + 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, + 425, 424, 426, 215, 640, 659, 0, 216, 0, 524, + 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, + 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, + 0, 610, 634, 648, 661, 667, 668, 670, 671, 672, + 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, + 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, + 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, + 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 682, 537, 543, 538, 539, 540, + 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, + 0, 623, 624, 705, 403, 510, 635, 354, 368, 371, + 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, + 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, + 224, 225, 226, 553, 554, 555, 556, 652, 653, 657, + 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, + 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, + 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, + 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, + 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, + 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, + 0, 204, 229, 387, 0, 478, 304, 683, 650, 508, + 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, + 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, + 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, + 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, + 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, + 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, + 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, + 658, 665, 504, 404, 452, 476, 611, 0, 0, 317, + 318, 467, 468, 332, 333, 679, 680, 316, 632, 666, + 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, + 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, + 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, + 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, + 552, 415, 282, 456, 557, 0, 395, 606, 607, 335, + 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, + 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, + 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, + 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, + 405, 450, 547, 444, 0, 389, 0, 651, 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, + 344, 210, 435, 523, 302, 0, 0, 0, 0, 0, + 536, 759, 760, 761, 0, 0, 0, 0, 0, 0, + 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, + 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, + 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, + 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, + 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 661, 0, 0, 0, 0, 0, 0, 0, 384, 0, - 349, 205, 233, 0, 0, 434, 485, 497, 0, 0, - 0, 0, 269, 0, 495, 448, 636, 243, 300, 482, - 455, 493, 463, 303, 0, 0, 494, 391, 617, 473, - 633, 662, 663, 279, 428, 647, 551, 655, 680, 234, - 276, 442, 535, 639, 519, 417, 613, 614, 348, 518, - 311, 209, 388, 668, 232, 503, 390, 253, 241, 619, - 644, 315, 267, 305, 480, 675, 221, 546, 630, 250, - 507, 0, 0, 683, 258, 529, 642, 631, 223, 626, - 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, - 0, 274, 437, 621, 622, 272, 684, 237, 654, 228, - 0, 653, 430, 616, 627, 414, 402, 227, 625, 412, - 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, - 325, 425, 424, 426, 215, 640, 658, 0, 216, 0, - 524, 643, 685, 475, 220, 244, 245, 248, 0, 295, - 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, - 474, 0, 610, 634, 648, 660, 666, 667, 669, 670, - 671, 672, 673, 676, 674, 429, 329, 520, 352, 392, - 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, - 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, - 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 686, 687, 688, - 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, - 699, 700, 701, 702, 703, 681, 537, 543, 538, 539, - 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, - 419, 0, 623, 624, 704, 403, 510, 635, 354, 368, - 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, - 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, - 330, 224, 225, 226, 553, 554, 555, 556, 651, 652, - 656, 213, 486, 487, 488, 489, 308, 646, 326, 492, - 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, - 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, - 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, - 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, - 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, - 568, 0, 204, 229, 387, 0, 478, 304, 682, 650, - 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, + 0, 0, 0, 0, 0, 0, 384, 0, 349, 205, + 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, + 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 0, 0, 494, 391, 617, 473, 633, 663, + 664, 279, 428, 647, 551, 656, 681, 234, 276, 442, + 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, + 388, 669, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 0, 676, 221, 546, 630, 250, 507, + 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, + 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, + 274, 437, 621, 622, 272, 685, 237, 655, 228, 0, + 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, + 425, 424, 426, 215, 640, 659, 0, 216, 0, 524, + 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, + 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, + 0, 610, 634, 648, 661, 667, 668, 670, 671, 672, + 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, + 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, + 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, + 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 682, 537, 543, 538, 539, 540, + 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, + 0, 623, 624, 705, 403, 510, 635, 354, 368, 371, + 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, + 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, + 224, 225, 226, 553, 554, 555, 556, 652, 653, 657, + 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, + 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, + 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, + 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, + 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, + 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, + 0, 204, 229, 387, 0, 478, 304, 683, 650, 508, + 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, - 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, - 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, - 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, - 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, - 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, - 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, - 637, 657, 664, 504, 404, 452, 476, 611, 0, 0, - 317, 318, 467, 468, 332, 333, 678, 679, 316, 632, - 665, 629, 677, 659, 461, 397, 0, 0, 400, 297, - 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, - 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, - 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, - 550, 552, 415, 282, 456, 416, 0, 395, 606, 607, - 335, 0, 0, 0, 557, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, + 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, + 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, + 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, + 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, + 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, + 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, + 658, 665, 504, 404, 452, 476, 611, 0, 0, 317, + 318, 467, 468, 332, 333, 679, 680, 316, 632, 666, + 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, + 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, + 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, + 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, + 552, 415, 282, 456, 557, 0, 395, 606, 607, 335, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, - 405, 450, 547, 444, 0, 389, 0, 0, 522, 422, + 405, 450, 547, 444, 0, 389, 0, 651, 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, - 344, 210, 435, 523, 302, 0, 0, 0, 0, 1848, - 536, 756, 0, 0, 0, 0, 0, 0, 0, 0, + 344, 210, 435, 523, 302, 0, 0, 0, 0, 0, + 536, 757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, @@ -6482,232 +5750,769 @@ var yyAct = [...]int{ 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, + 0, 0, 4266, 0, 0, 0, 0, 0, 662, 0, + 0, 0, 0, 0, 0, 0, 384, 0, 349, 205, + 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, + 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 0, 0, 494, 391, 617, 473, 633, 663, + 664, 279, 428, 647, 551, 656, 681, 234, 276, 442, + 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, + 388, 669, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 0, 676, 221, 546, 630, 250, 507, + 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, + 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, + 274, 437, 621, 622, 272, 685, 237, 655, 228, 0, + 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, + 425, 424, 426, 215, 640, 659, 0, 216, 0, 524, + 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, + 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, + 0, 610, 634, 648, 661, 667, 668, 670, 671, 672, + 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, + 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, + 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, + 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 682, 537, 543, 538, 539, 540, + 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, + 0, 623, 624, 705, 403, 510, 635, 354, 368, 371, + 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, + 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, + 224, 225, 226, 553, 554, 555, 556, 652, 653, 657, + 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, + 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, + 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, + 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, + 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, + 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, + 0, 204, 229, 387, 0, 478, 304, 683, 650, 508, + 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, + 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, + 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, + 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, + 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, + 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, + 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, + 658, 665, 504, 404, 452, 476, 611, 0, 0, 317, + 318, 467, 468, 332, 333, 679, 680, 316, 632, 666, + 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, + 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, + 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, + 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, + 552, 415, 282, 456, 557, 0, 395, 606, 607, 335, + 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, + 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, + 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, + 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, + 405, 450, 547, 444, 0, 389, 0, 651, 522, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, + 344, 210, 435, 523, 302, 0, 0, 0, 0, 0, + 536, 757, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, + 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, + 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, + 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, + 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, + 0, 0, 4182, 0, 0, 0, 384, 0, 349, 205, + 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, + 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 0, 0, 494, 391, 617, 473, 633, 663, + 664, 279, 428, 647, 551, 656, 681, 234, 276, 442, + 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, + 388, 669, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 0, 676, 221, 546, 630, 250, 507, + 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, + 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, + 274, 437, 621, 622, 272, 685, 237, 655, 228, 0, + 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, + 425, 424, 426, 215, 640, 659, 0, 216, 0, 524, + 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, + 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, + 0, 610, 634, 648, 661, 667, 668, 670, 671, 672, + 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, + 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, + 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, + 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 682, 537, 543, 538, 539, 540, + 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, + 0, 623, 624, 705, 403, 510, 635, 354, 368, 371, + 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, + 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, + 224, 225, 226, 553, 554, 555, 556, 652, 653, 657, + 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, + 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, + 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, + 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, + 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, + 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, + 0, 204, 229, 387, 0, 478, 304, 683, 650, 508, + 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, + 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, + 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, + 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, + 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, + 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, + 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, + 658, 665, 504, 404, 452, 476, 611, 0, 0, 317, + 318, 467, 468, 332, 333, 679, 680, 316, 632, 666, + 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, + 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, + 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, + 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, + 552, 415, 282, 456, 557, 0, 395, 606, 607, 335, + 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, + 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, + 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, + 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, + 405, 450, 547, 444, 0, 389, 0, 651, 522, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, + 344, 210, 435, 523, 302, 0, 0, 0, 0, 2024, + 536, 202, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, + 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, + 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, + 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, + 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, + 0, 0, 0, 0, 0, 0, 384, 0, 349, 205, + 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, + 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 0, 0, 494, 391, 617, 473, 633, 663, + 664, 279, 428, 647, 551, 656, 681, 234, 276, 442, + 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, + 388, 669, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 0, 676, 221, 546, 630, 250, 507, + 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, + 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, + 274, 437, 621, 622, 272, 685, 237, 655, 228, 0, + 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, + 425, 424, 426, 215, 640, 659, 0, 216, 0, 524, + 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, + 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, + 0, 610, 634, 648, 661, 667, 668, 670, 671, 672, + 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, + 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, + 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, + 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 682, 537, 543, 538, 539, 540, + 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, + 0, 623, 624, 705, 403, 510, 635, 354, 368, 371, + 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, + 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, + 224, 225, 226, 553, 554, 555, 556, 652, 653, 657, + 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, + 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, + 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, + 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, + 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, + 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, + 0, 204, 229, 387, 0, 478, 304, 683, 650, 508, + 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, + 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, + 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, + 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, + 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, + 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, + 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, + 658, 665, 504, 404, 452, 476, 611, 0, 0, 317, + 318, 467, 468, 332, 333, 679, 680, 316, 632, 666, + 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, + 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, + 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, + 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, + 552, 415, 282, 456, 557, 0, 395, 606, 607, 335, + 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, + 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, + 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, + 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, + 405, 450, 547, 444, 0, 389, 0, 651, 522, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, + 344, 210, 435, 523, 302, 0, 0, 0, 0, 0, + 536, 757, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, + 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, + 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, + 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, + 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, + 0, 0, 3826, 0, 0, 0, 384, 0, 349, 205, + 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, + 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 0, 0, 494, 391, 617, 473, 633, 663, + 664, 279, 428, 647, 551, 656, 681, 234, 276, 442, + 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, + 388, 669, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 0, 676, 221, 546, 630, 250, 507, + 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, + 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, + 274, 437, 621, 622, 272, 685, 237, 655, 228, 0, + 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, + 425, 424, 426, 215, 640, 659, 0, 216, 0, 524, + 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, + 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, + 0, 610, 634, 648, 661, 667, 668, 670, 671, 672, + 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, + 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, + 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, + 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 682, 537, 543, 538, 539, 540, + 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, + 0, 623, 624, 705, 403, 510, 635, 354, 368, 371, + 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, + 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, + 224, 225, 226, 553, 554, 555, 556, 652, 653, 657, + 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, + 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, + 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, + 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, + 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, + 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, + 0, 204, 229, 387, 0, 478, 304, 683, 650, 508, + 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, + 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, + 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, + 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, + 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, + 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, + 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, + 658, 665, 504, 404, 452, 476, 611, 0, 0, 317, + 318, 467, 468, 332, 333, 679, 680, 316, 632, 666, + 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, + 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, + 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, + 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, + 552, 415, 282, 456, 557, 0, 395, 606, 607, 335, + 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, + 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, + 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, + 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, + 405, 450, 547, 444, 0, 389, 0, 651, 522, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, + 344, 210, 435, 523, 302, 0, 101, 0, 0, 0, + 536, 757, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, + 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, + 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, + 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, + 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, + 0, 0, 0, 0, 0, 0, 384, 0, 349, 205, + 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, + 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 0, 0, 494, 391, 617, 473, 633, 663, + 664, 279, 428, 647, 551, 656, 681, 234, 276, 442, + 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, + 388, 669, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 0, 676, 221, 546, 630, 250, 507, + 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, + 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, + 274, 437, 621, 622, 272, 685, 237, 655, 228, 0, + 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, + 425, 424, 426, 215, 640, 659, 0, 216, 0, 524, + 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, + 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, + 0, 610, 634, 648, 661, 667, 668, 670, 671, 672, + 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, + 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, + 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, + 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 682, 537, 543, 538, 539, 540, + 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, + 0, 623, 624, 705, 403, 510, 635, 354, 368, 371, + 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, + 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, + 224, 225, 226, 553, 554, 555, 556, 652, 653, 657, + 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, + 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, + 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, + 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, + 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, + 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, + 0, 204, 229, 387, 0, 478, 304, 683, 650, 508, + 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, + 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, + 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, + 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, + 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, + 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, + 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, + 658, 665, 504, 404, 452, 476, 611, 0, 0, 317, + 318, 467, 468, 332, 333, 679, 680, 316, 632, 666, + 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, + 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, + 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, + 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, + 552, 415, 282, 456, 0, 557, 395, 606, 607, 335, + 2505, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, + 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 0, 389, 0, 651, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, + 0, 536, 202, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, - 423, 273, 0, 477, 0, 319, 334, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, - 0, 0, 0, 0, 0, 384, 0, 349, 205, 233, - 0, 0, 434, 485, 497, 0, 0, 0, 0, 269, - 0, 495, 448, 636, 243, 300, 482, 455, 493, 463, - 303, 0, 0, 494, 391, 617, 473, 633, 662, 663, - 279, 428, 647, 551, 655, 680, 234, 276, 442, 535, - 639, 519, 417, 613, 614, 348, 518, 311, 209, 388, - 668, 232, 503, 390, 253, 241, 619, 644, 315, 267, - 305, 480, 675, 221, 546, 630, 250, 507, 0, 0, - 683, 258, 529, 642, 631, 223, 626, 528, 413, 345, - 346, 222, 0, 481, 284, 309, 0, 0, 274, 437, - 621, 622, 272, 684, 237, 654, 228, 0, 653, 430, - 616, 627, 414, 402, 227, 625, 412, 401, 353, 374, - 375, 296, 324, 470, 394, 471, 323, 325, 425, 424, - 426, 215, 640, 658, 0, 216, 0, 524, 643, 685, - 475, 220, 244, 245, 248, 0, 295, 299, 307, 310, - 320, 321, 331, 386, 441, 469, 465, 474, 0, 610, - 634, 648, 660, 666, 667, 669, 670, 671, 672, 673, - 676, 674, 429, 329, 520, 352, 392, 0, 0, 447, - 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, - 260, 235, 512, 609, 246, 266, 207, 0, 0, 0, - 0, 270, 271, 0, 605, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 686, 687, 688, 689, 690, 691, - 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, - 702, 703, 681, 537, 543, 538, 539, 540, 541, 542, - 0, 544, 0, 0, 0, 0, 0, 419, 0, 623, - 624, 704, 403, 510, 635, 354, 368, 371, 360, 380, - 0, 381, 356, 357, 362, 365, 366, 367, 372, 373, - 377, 383, 263, 218, 410, 420, 608, 330, 224, 225, - 226, 553, 554, 555, 556, 651, 652, 656, 213, 486, - 487, 488, 489, 308, 646, 326, 492, 491, 350, 351, - 398, 472, 569, 571, 582, 586, 588, 590, 596, 599, - 570, 572, 583, 587, 589, 591, 597, 600, 559, 561, - 563, 565, 578, 577, 574, 602, 603, 580, 585, 564, - 576, 581, 594, 601, 598, 558, 562, 566, 575, 593, - 592, 573, 584, 595, 579, 567, 560, 568, 0, 204, - 229, 387, 0, 478, 304, 682, 650, 508, 645, 214, - 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 206, 208, 217, 230, 242, 247, - 254, 277, 292, 294, 301, 314, 327, 328, 337, 338, - 341, 347, 399, 406, 407, 408, 409, 431, 432, 433, - 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, - 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, - 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, - 531, 532, 533, 534, 545, 618, 620, 637, 657, 664, - 504, 404, 452, 476, 611, 0, 0, 317, 318, 467, - 468, 332, 333, 678, 679, 316, 632, 665, 629, 677, - 659, 461, 397, 0, 0, 400, 297, 322, 339, 0, - 649, 527, 236, 490, 306, 265, 0, 0, 219, 257, - 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, - 287, 255, 483, 252, 509, 548, 549, 550, 552, 415, - 282, 456, 416, 0, 395, 606, 607, 335, 0, 0, - 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, - 0, 286, 0, 0, 0, 0, 385, 283, 0, 0, - 212, 530, 0, 453, 0, 211, 0, 511, 268, 396, - 393, 615, 298, 289, 285, 264, 336, 405, 450, 547, - 444, 0, 389, 0, 0, 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 342, 262, 344, 210, 435, - 523, 302, 0, 0, 0, 0, 0, 536, 202, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, - 0, 256, 0, 0, 0, 370, 379, 378, 358, 359, - 361, 363, 369, 376, 382, 355, 364, 0, 0, 641, - 0, 0, 0, 281, 340, 288, 280, 612, 0, 0, - 0, 0, 0, 0, 628, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, + 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 663, 664, 279, 428, 647, 551, 656, 681, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 0, 676, 221, 546, 630, 250, + 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 685, 237, 655, 228, + 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 659, 0, 216, 0, + 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 661, 667, 668, 670, 671, + 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 682, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 705, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 652, 653, + 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 0, 478, 304, 683, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 658, 665, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 679, 680, 316, 632, + 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 557, 0, 395, 606, 607, + 335, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, + 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 0, 389, 0, 651, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, + 1849, 536, 757, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 313, 0, 423, 273, 0, - 477, 0, 319, 334, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 661, 0, 0, 0, 0, 0, - 0, 0, 384, 0, 349, 205, 233, 0, 0, 434, - 485, 497, 0, 0, 0, 0, 269, 0, 495, 448, - 636, 243, 300, 482, 455, 493, 463, 303, 0, 0, - 494, 391, 617, 473, 633, 662, 663, 279, 428, 647, - 551, 655, 680, 234, 276, 442, 535, 639, 519, 417, - 613, 614, 348, 518, 311, 209, 388, 668, 232, 503, - 390, 253, 241, 619, 644, 315, 267, 305, 480, 675, - 221, 546, 630, 250, 507, 0, 0, 683, 258, 529, - 642, 631, 223, 626, 528, 413, 345, 346, 222, 0, - 481, 284, 309, 0, 0, 274, 437, 621, 622, 272, - 684, 237, 654, 228, 0, 653, 430, 616, 627, 414, - 402, 227, 625, 412, 401, 353, 374, 375, 296, 324, - 470, 394, 471, 323, 325, 425, 424, 426, 215, 640, - 658, 0, 216, 0, 524, 643, 685, 475, 220, 244, - 245, 248, 0, 295, 299, 307, 310, 320, 321, 331, - 386, 441, 469, 465, 474, 0, 610, 634, 648, 660, - 666, 667, 669, 670, 671, 672, 673, 676, 674, 429, - 329, 520, 352, 392, 0, 0, 447, 496, 251, 638, - 521, 240, 604, 418, 427, 259, 261, 260, 235, 512, - 609, 246, 266, 207, 0, 0, 0, 0, 270, 271, - 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 686, 687, 688, 689, 690, 691, 692, 693, 694, - 695, 696, 697, 698, 699, 700, 701, 702, 703, 681, - 537, 543, 538, 539, 540, 541, 542, 0, 544, 0, - 0, 0, 0, 0, 419, 0, 623, 624, 704, 403, - 510, 635, 354, 368, 371, 360, 380, 0, 381, 356, - 357, 362, 365, 366, 367, 372, 373, 377, 383, 263, - 218, 410, 420, 608, 330, 224, 225, 226, 553, 554, - 555, 556, 651, 652, 656, 213, 486, 487, 488, 489, - 308, 646, 326, 492, 491, 350, 351, 398, 472, 569, - 571, 582, 586, 588, 590, 596, 599, 570, 572, 583, - 587, 589, 591, 597, 600, 559, 561, 563, 565, 578, - 577, 574, 602, 603, 580, 585, 564, 576, 581, 594, - 601, 598, 558, 562, 566, 575, 593, 592, 573, 584, - 595, 579, 567, 560, 568, 0, 204, 229, 387, 2141, - 478, 304, 682, 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, + 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 663, 664, 279, 428, 647, 551, 656, 681, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 0, 676, 221, 546, 630, 250, + 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 685, 237, 655, 228, + 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 659, 0, 216, 0, + 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 661, 667, 668, 670, 671, + 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 682, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 705, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 652, 653, + 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 0, 478, 304, 683, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 206, 208, 217, 230, 242, 247, 254, 277, 292, - 294, 301, 314, 327, 328, 337, 338, 341, 347, 399, - 406, 407, 408, 409, 431, 432, 433, 436, 439, 440, - 443, 445, 446, 449, 454, 458, 459, 460, 462, 464, - 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, - 513, 514, 515, 516, 517, 525, 526, 531, 532, 533, - 534, 545, 618, 620, 637, 657, 664, 504, 404, 452, - 476, 611, 0, 0, 317, 318, 467, 468, 332, 333, - 678, 679, 316, 632, 665, 629, 677, 659, 461, 397, - 0, 0, 400, 297, 322, 339, 0, 649, 527, 236, - 490, 306, 265, 0, 0, 219, 257, 239, 275, 290, - 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, - 252, 509, 548, 549, 550, 552, 415, 282, 456, 416, - 0, 395, 606, 607, 335, 0, 0, 0, 557, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 658, 665, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 679, 680, 316, 632, + 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 557, 0, 395, 606, 607, + 335, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, + 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 0, 389, 0, 651, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, + 0, 536, 202, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 438, 0, 0, 0, 0, 0, 0, 0, 286, 0, - 0, 0, 0, 385, 283, 0, 0, 212, 530, 0, - 453, 0, 211, 0, 511, 268, 396, 393, 615, 298, - 289, 285, 264, 336, 405, 450, 547, 444, 0, 389, - 0, 0, 522, 422, 0, 0, 0, 0, 0, 0, + 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 342, 262, 344, 210, 435, 523, 302, 0, - 0, 0, 0, 2132, 536, 756, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 249, 0, 0, 256, 0, - 0, 0, 370, 379, 378, 358, 359, 361, 363, 369, - 376, 382, 355, 364, 0, 0, 641, 0, 0, 0, - 281, 340, 288, 280, 612, 0, 0, 0, 0, 0, - 0, 628, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, + 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 663, 664, 279, 428, 647, 551, 656, 681, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 0, 676, 221, 546, 630, 250, + 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 685, 237, 655, 228, + 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 659, 0, 216, 0, + 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 661, 667, 668, 670, 671, + 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 682, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 705, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 652, 653, + 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 2143, 478, 304, 683, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 658, 665, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 679, 680, 316, 632, + 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 557, 0, 395, 606, 607, + 335, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, + 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 0, 389, 0, 651, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, + 2134, 536, 757, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, + 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 663, 664, 279, 428, 647, 551, 656, 681, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 0, 676, 221, 546, 630, 250, + 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 685, 237, 655, 228, + 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 659, 0, 216, 0, + 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 661, 667, 668, 670, 671, + 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 682, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 705, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 652, 653, + 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 0, 478, 304, 683, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 658, 665, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 679, 680, 316, 632, + 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 557, 0, 395, 606, 607, + 335, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, + 385, 283, 0, 1991, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 0, 389, 0, 651, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, + 0, 536, 757, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, + 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 663, 664, 279, 428, 647, 551, 656, 681, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 0, 676, 221, 546, 630, 250, + 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 685, 237, 655, 228, + 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 659, 0, 216, 0, + 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 661, 667, 668, 670, 671, + 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 682, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 705, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 652, 653, + 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 0, 478, 304, 683, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 313, 0, 423, 273, 0, 477, 0, 319, - 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 661, 0, 0, 0, 0, 0, 0, 0, 384, - 0, 349, 205, 233, 0, 0, 434, 485, 497, 0, - 0, 0, 0, 269, 0, 495, 448, 636, 243, 300, - 482, 455, 493, 463, 303, 0, 0, 494, 391, 617, - 473, 633, 662, 663, 279, 428, 647, 551, 655, 680, - 234, 276, 442, 535, 639, 519, 417, 613, 614, 348, - 518, 311, 209, 388, 668, 232, 503, 390, 253, 241, - 619, 644, 315, 267, 305, 480, 675, 221, 546, 630, - 250, 507, 0, 0, 683, 258, 529, 642, 631, 223, - 626, 528, 413, 345, 346, 222, 0, 481, 284, 309, - 0, 0, 274, 437, 621, 622, 272, 684, 237, 654, - 228, 0, 653, 430, 616, 627, 414, 402, 227, 625, - 412, 401, 353, 374, 375, 296, 324, 470, 394, 471, - 323, 325, 425, 424, 426, 215, 640, 658, 0, 216, - 0, 524, 643, 685, 475, 220, 244, 245, 248, 0, - 295, 299, 307, 310, 320, 321, 331, 386, 441, 469, - 465, 474, 0, 610, 634, 648, 660, 666, 667, 669, - 670, 671, 672, 673, 676, 674, 429, 329, 520, 352, - 392, 0, 0, 447, 496, 251, 638, 521, 240, 604, - 418, 427, 259, 261, 260, 235, 512, 609, 246, 266, - 207, 0, 0, 0, 0, 270, 271, 0, 605, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 686, 687, - 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, - 698, 699, 700, 701, 702, 703, 681, 537, 543, 538, - 539, 540, 541, 542, 0, 544, 0, 0, 0, 0, - 0, 419, 0, 623, 624, 704, 403, 510, 635, 354, - 368, 371, 360, 380, 0, 381, 356, 357, 362, 365, - 366, 367, 372, 373, 377, 383, 263, 218, 410, 420, - 608, 330, 224, 225, 226, 553, 554, 555, 556, 651, - 652, 656, 213, 486, 487, 488, 489, 308, 646, 326, - 492, 491, 350, 351, 398, 472, 569, 571, 582, 586, - 588, 590, 596, 599, 570, 572, 583, 587, 589, 591, - 597, 600, 559, 561, 563, 565, 578, 577, 574, 602, - 603, 580, 585, 564, 576, 581, 594, 601, 598, 558, - 562, 566, 575, 593, 592, 573, 584, 595, 579, 567, - 560, 568, 0, 204, 229, 387, 0, 478, 304, 682, - 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 206, 208, - 217, 230, 242, 247, 254, 277, 292, 294, 301, 314, - 327, 328, 337, 338, 341, 347, 399, 406, 407, 408, - 409, 431, 432, 433, 436, 439, 440, 443, 445, 446, - 449, 454, 458, 459, 460, 462, 464, 466, 479, 484, - 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, - 516, 517, 525, 526, 531, 532, 533, 534, 545, 618, - 620, 637, 657, 664, 504, 404, 452, 476, 611, 0, - 0, 317, 318, 467, 468, 332, 333, 678, 679, 316, - 632, 665, 629, 677, 659, 461, 397, 0, 0, 400, - 297, 322, 339, 0, 649, 527, 236, 490, 306, 265, - 0, 0, 219, 257, 239, 275, 290, 293, 343, 411, - 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, - 549, 550, 552, 415, 282, 456, 416, 0, 395, 606, - 607, 335, 0, 0, 0, 557, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 658, 665, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 679, 680, 316, 632, + 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 557, 0, 395, 606, 607, + 335, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, - 385, 283, 0, 1990, 212, 530, 0, 453, 0, 211, + 385, 283, 0, 1989, 212, 530, 0, 453, 0, 211, 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, - 336, 405, 450, 547, 444, 0, 389, 0, 0, 522, + 336, 405, 450, 547, 444, 0, 389, 0, 651, 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, - 0, 536, 756, 0, 0, 0, 0, 0, 0, 0, + 0, 536, 757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, @@ -6715,240 +6520,315 @@ var yyAct = [...]int{ 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, - 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, - 0, 0, 0, 0, 0, 0, 384, 0, 349, 205, - 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, - 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, - 463, 303, 0, 0, 494, 391, 617, 473, 633, 662, - 663, 279, 428, 647, 551, 655, 680, 234, 276, 442, - 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, - 388, 668, 232, 503, 390, 253, 241, 619, 644, 315, - 267, 305, 480, 675, 221, 546, 630, 250, 507, 0, - 0, 683, 258, 529, 642, 631, 223, 626, 528, 413, - 345, 346, 222, 0, 481, 284, 309, 0, 0, 274, - 437, 621, 622, 272, 684, 237, 654, 228, 0, 653, - 430, 616, 627, 414, 402, 227, 625, 412, 401, 353, - 374, 375, 296, 324, 470, 394, 471, 323, 325, 425, - 424, 426, 215, 640, 658, 0, 216, 0, 524, 643, - 685, 475, 220, 244, 245, 248, 0, 295, 299, 307, - 310, 320, 321, 331, 386, 441, 469, 465, 474, 0, - 610, 634, 648, 660, 666, 667, 669, 670, 671, 672, - 673, 676, 674, 429, 329, 520, 352, 392, 0, 0, - 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, - 261, 260, 235, 512, 609, 246, 266, 207, 0, 0, - 0, 0, 270, 271, 0, 605, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 686, 687, 688, 689, 690, - 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, - 701, 702, 703, 681, 537, 543, 538, 539, 540, 541, - 542, 0, 544, 0, 0, 0, 0, 0, 419, 0, - 623, 624, 704, 403, 510, 635, 354, 368, 371, 360, - 380, 0, 381, 356, 357, 362, 365, 366, 367, 372, - 373, 377, 383, 263, 218, 410, 420, 608, 330, 224, - 225, 226, 553, 554, 555, 556, 651, 652, 656, 213, - 486, 487, 488, 489, 308, 646, 326, 492, 491, 350, - 351, 398, 472, 569, 571, 582, 586, 588, 590, 596, - 599, 570, 572, 583, 587, 589, 591, 597, 600, 559, - 561, 563, 565, 578, 577, 574, 602, 603, 580, 585, - 564, 576, 581, 594, 601, 598, 558, 562, 566, 575, - 593, 592, 573, 584, 595, 579, 567, 560, 568, 0, - 204, 229, 387, 0, 478, 304, 682, 650, 508, 645, - 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, + 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 663, 664, 279, 428, 647, 551, 656, 681, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 0, 676, 221, 546, 630, 250, + 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 685, 237, 655, 228, + 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 659, 0, 216, 0, + 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 661, 667, 668, 670, 671, + 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 682, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 705, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 652, 653, + 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 0, 478, 304, 683, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 206, 208, 217, 230, 242, - 247, 254, 277, 292, 294, 301, 314, 327, 328, 337, - 338, 341, 347, 399, 406, 407, 408, 409, 431, 432, - 433, 436, 439, 440, 443, 445, 446, 449, 454, 458, - 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, - 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, - 526, 531, 532, 533, 534, 545, 618, 620, 637, 657, - 664, 504, 404, 452, 476, 611, 0, 0, 317, 318, - 467, 468, 332, 333, 678, 679, 316, 632, 665, 629, - 677, 659, 461, 397, 0, 0, 400, 297, 322, 339, - 0, 649, 527, 236, 490, 306, 265, 0, 0, 219, - 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, - 312, 287, 255, 483, 252, 509, 548, 549, 550, 552, - 415, 282, 456, 416, 0, 395, 606, 607, 335, 0, - 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, - 0, 0, 286, 0, 0, 0, 0, 385, 283, 0, - 1988, 212, 530, 0, 453, 0, 211, 0, 511, 268, - 396, 393, 615, 298, 289, 285, 264, 336, 405, 450, - 547, 444, 0, 389, 0, 0, 522, 422, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 658, 665, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 679, 680, 316, 632, + 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 557, 0, 395, 606, 607, + 335, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, + 385, 283, 0, 1987, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 0, 389, 0, 651, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, + 0, 536, 757, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 342, 262, 344, 210, - 435, 523, 302, 0, 0, 0, 0, 0, 536, 756, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, - 0, 0, 256, 0, 0, 0, 370, 379, 378, 358, - 359, 361, 363, 369, 376, 382, 355, 364, 0, 0, - 641, 0, 0, 0, 281, 340, 288, 280, 612, 0, - 0, 0, 0, 0, 0, 628, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, + 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 663, 664, 279, 428, 647, 551, 656, 681, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 0, 676, 221, 546, 630, 250, + 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 685, 237, 655, 228, + 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 659, 0, 216, 0, + 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 661, 667, 668, 670, 671, + 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 682, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 705, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 652, 653, + 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 0, 478, 304, 683, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 658, 665, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 679, 680, 316, 632, + 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 557, 0, 395, 606, 607, + 335, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, + 385, 283, 0, 1985, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 0, 389, 0, 651, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, + 0, 536, 757, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 313, 0, 423, 273, - 0, 477, 0, 319, 334, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, - 0, 0, 0, 384, 0, 349, 205, 233, 0, 0, - 434, 485, 497, 0, 0, 0, 0, 269, 0, 495, - 448, 636, 243, 300, 482, 455, 493, 463, 303, 0, - 0, 494, 391, 617, 473, 633, 662, 663, 279, 428, - 647, 551, 655, 680, 234, 276, 442, 535, 639, 519, - 417, 613, 614, 348, 518, 311, 209, 388, 668, 232, - 503, 390, 253, 241, 619, 644, 315, 267, 305, 480, - 675, 221, 546, 630, 250, 507, 0, 0, 683, 258, - 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, - 0, 481, 284, 309, 0, 0, 274, 437, 621, 622, - 272, 684, 237, 654, 228, 0, 653, 430, 616, 627, - 414, 402, 227, 625, 412, 401, 353, 374, 375, 296, - 324, 470, 394, 471, 323, 325, 425, 424, 426, 215, - 640, 658, 0, 216, 0, 524, 643, 685, 475, 220, - 244, 245, 248, 0, 295, 299, 307, 310, 320, 321, - 331, 386, 441, 469, 465, 474, 0, 610, 634, 648, - 660, 666, 667, 669, 670, 671, 672, 673, 676, 674, - 429, 329, 520, 352, 392, 0, 0, 447, 496, 251, - 638, 521, 240, 604, 418, 427, 259, 261, 260, 235, - 512, 609, 246, 266, 207, 0, 0, 0, 0, 270, - 271, 0, 605, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 686, 687, 688, 689, 690, 691, 692, 693, - 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, - 681, 537, 543, 538, 539, 540, 541, 542, 0, 544, - 0, 0, 0, 0, 0, 419, 0, 623, 624, 704, - 403, 510, 635, 354, 368, 371, 360, 380, 0, 381, - 356, 357, 362, 365, 366, 367, 372, 373, 377, 383, - 263, 218, 410, 420, 608, 330, 224, 225, 226, 553, - 554, 555, 556, 651, 652, 656, 213, 486, 487, 488, - 489, 308, 646, 326, 492, 491, 350, 351, 398, 472, - 569, 571, 582, 586, 588, 590, 596, 599, 570, 572, - 583, 587, 589, 591, 597, 600, 559, 561, 563, 565, - 578, 577, 574, 602, 603, 580, 585, 564, 576, 581, - 594, 601, 598, 558, 562, 566, 575, 593, 592, 573, - 584, 595, 579, 567, 560, 568, 0, 204, 229, 387, - 0, 478, 304, 682, 650, 508, 645, 214, 231, 0, - 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 206, 208, 217, 230, 242, 247, 254, 277, - 292, 294, 301, 314, 327, 328, 337, 338, 341, 347, - 399, 406, 407, 408, 409, 431, 432, 433, 436, 439, - 440, 443, 445, 446, 449, 454, 458, 459, 460, 462, - 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, - 506, 513, 514, 515, 516, 517, 525, 526, 531, 532, - 533, 534, 545, 618, 620, 637, 657, 664, 504, 404, - 452, 476, 611, 0, 0, 317, 318, 467, 468, 332, - 333, 678, 679, 316, 632, 665, 629, 677, 659, 461, - 397, 0, 0, 400, 297, 322, 339, 0, 649, 527, - 236, 490, 306, 265, 0, 0, 219, 257, 239, 275, - 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, - 483, 252, 509, 548, 549, 550, 552, 415, 282, 456, - 416, 0, 395, 606, 607, 335, 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 438, 0, 0, 0, 0, 0, 0, 0, 286, - 0, 0, 0, 0, 385, 283, 0, 1986, 212, 530, - 0, 453, 0, 211, 0, 511, 268, 396, 393, 615, - 298, 289, 285, 264, 336, 405, 450, 547, 444, 0, - 389, 0, 0, 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 342, 262, 344, 210, 435, 523, 302, - 0, 0, 0, 0, 0, 536, 756, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 249, 0, 0, 256, - 0, 0, 0, 370, 379, 378, 358, 359, 361, 363, - 369, 376, 382, 355, 364, 0, 0, 641, 0, 0, - 0, 281, 340, 288, 280, 612, 0, 0, 0, 0, - 0, 0, 628, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, + 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 663, 664, 279, 428, 647, 551, 656, 681, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 0, 676, 221, 546, 630, 250, + 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 685, 237, 655, 228, + 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 659, 0, 216, 0, + 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 661, 667, 668, 670, 671, + 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 682, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 705, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 652, 653, + 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 0, 478, 304, 683, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 658, 665, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 679, 680, 316, 632, + 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 557, 0, 395, 606, 607, + 335, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, + 385, 283, 0, 1983, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 0, 389, 0, 651, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, + 0, 536, 757, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 313, 0, 423, 273, 0, 477, 0, - 319, 334, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 661, 0, 0, 0, 0, 0, 0, 0, - 384, 0, 349, 205, 233, 0, 0, 434, 485, 497, - 0, 0, 0, 0, 269, 0, 495, 448, 636, 243, - 300, 482, 455, 493, 463, 303, 0, 0, 494, 391, - 617, 473, 633, 662, 663, 279, 428, 647, 551, 655, - 680, 234, 276, 442, 535, 639, 519, 417, 613, 614, - 348, 518, 311, 209, 388, 668, 232, 503, 390, 253, - 241, 619, 644, 315, 267, 305, 480, 675, 221, 546, - 630, 250, 507, 0, 0, 683, 258, 529, 642, 631, - 223, 626, 528, 413, 345, 346, 222, 0, 481, 284, - 309, 0, 0, 274, 437, 621, 622, 272, 684, 237, - 654, 228, 0, 653, 430, 616, 627, 414, 402, 227, - 625, 412, 401, 353, 374, 375, 296, 324, 470, 394, - 471, 323, 325, 425, 424, 426, 215, 640, 658, 0, - 216, 0, 524, 643, 685, 475, 220, 244, 245, 248, - 0, 295, 299, 307, 310, 320, 321, 331, 386, 441, - 469, 465, 474, 0, 610, 634, 648, 660, 666, 667, - 669, 670, 671, 672, 673, 676, 674, 429, 329, 520, - 352, 392, 0, 0, 447, 496, 251, 638, 521, 240, - 604, 418, 427, 259, 261, 260, 235, 512, 609, 246, - 266, 207, 0, 0, 0, 0, 270, 271, 0, 605, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 686, - 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, - 697, 698, 699, 700, 701, 702, 703, 681, 537, 543, - 538, 539, 540, 541, 542, 0, 544, 0, 0, 0, - 0, 0, 419, 0, 623, 624, 704, 403, 510, 635, - 354, 368, 371, 360, 380, 0, 381, 356, 357, 362, - 365, 366, 367, 372, 373, 377, 383, 263, 218, 410, - 420, 608, 330, 224, 225, 226, 553, 554, 555, 556, - 651, 652, 656, 213, 486, 487, 488, 489, 308, 646, - 326, 492, 491, 350, 351, 398, 472, 569, 571, 582, - 586, 588, 590, 596, 599, 570, 572, 583, 587, 589, - 591, 597, 600, 559, 561, 563, 565, 578, 577, 574, - 602, 603, 580, 585, 564, 576, 581, 594, 601, 598, - 558, 562, 566, 575, 593, 592, 573, 584, 595, 579, - 567, 560, 568, 0, 204, 229, 387, 0, 478, 304, - 682, 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, - 208, 217, 230, 242, 247, 254, 277, 292, 294, 301, - 314, 327, 328, 337, 338, 341, 347, 399, 406, 407, - 408, 409, 431, 432, 433, 436, 439, 440, 443, 445, - 446, 449, 454, 458, 459, 460, 462, 464, 466, 479, - 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, - 515, 516, 517, 525, 526, 531, 532, 533, 534, 545, - 618, 620, 637, 657, 664, 504, 404, 452, 476, 611, - 0, 0, 317, 318, 467, 468, 332, 333, 678, 679, - 316, 632, 665, 629, 677, 659, 461, 397, 0, 0, - 400, 297, 322, 339, 0, 649, 527, 236, 490, 306, - 265, 0, 0, 219, 257, 239, 275, 290, 293, 343, - 411, 421, 451, 457, 312, 287, 255, 483, 252, 509, - 548, 549, 550, 552, 415, 282, 456, 416, 0, 395, - 606, 607, 335, 0, 0, 0, 557, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, - 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, - 0, 385, 283, 0, 1984, 212, 530, 0, 453, 0, - 211, 0, 511, 268, 396, 393, 615, 298, 289, 285, - 264, 336, 405, 450, 547, 444, 0, 389, 0, 0, - 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 342, 262, 344, 210, 435, 523, 302, 0, 0, 0, - 0, 0, 536, 756, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 249, 0, 0, 256, 0, 0, 0, - 370, 379, 378, 358, 359, 361, 363, 369, 376, 382, - 355, 364, 0, 0, 641, 0, 0, 0, 281, 340, - 288, 280, 612, 0, 0, 0, 0, 0, 0, 628, - 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, + 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 663, 664, 279, 428, 647, 551, 656, 681, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 0, 676, 221, 546, 630, 250, + 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 685, 237, 655, 228, + 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 659, 0, 216, 0, + 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 661, 667, 668, 670, 671, + 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 682, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 705, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 652, 653, + 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 0, 478, 304, 683, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 658, 665, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 679, 680, 316, 632, + 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 557, 0, 395, 606, 607, + 335, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, + 385, 283, 0, 1979, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 0, 389, 0, 651, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, + 0, 536, 757, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6956,276 +6836,274 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, - 662, 663, 279, 428, 647, 551, 655, 680, 234, 276, + 663, 664, 279, 428, 647, 551, 656, 681, 234, 276, 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, - 209, 388, 668, 232, 503, 390, 253, 241, 619, 644, - 315, 267, 305, 480, 675, 221, 546, 630, 250, 507, - 0, 0, 683, 258, 529, 642, 631, 223, 626, 528, - 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, - 274, 437, 621, 622, 272, 684, 237, 654, 228, 0, - 653, 430, 616, 627, 414, 402, 227, 625, 412, 401, - 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, - 425, 424, 426, 215, 640, 658, 0, 216, 0, 524, - 643, 685, 475, 220, 244, 245, 248, 0, 295, 299, - 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, - 0, 610, 634, 648, 660, 666, 667, 669, 670, 671, - 672, 673, 676, 674, 429, 329, 520, 352, 392, 0, - 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, - 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, - 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 686, 687, 688, 689, + 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 0, 676, 221, 546, 630, 250, + 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 685, 237, 655, 228, + 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 659, 0, 216, 0, + 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 661, 667, 668, 670, 671, + 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, - 700, 701, 702, 703, 681, 537, 543, 538, 539, 540, - 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, - 0, 623, 624, 704, 403, 510, 635, 354, 368, 371, - 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, - 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, - 224, 225, 226, 553, 554, 555, 556, 651, 652, 656, - 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, - 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, - 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, - 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, - 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, - 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, - 0, 204, 229, 387, 0, 478, 304, 682, 650, 508, - 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, - 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, - 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, - 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, - 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, - 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, - 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, - 657, 664, 504, 404, 452, 476, 611, 0, 0, 317, - 318, 467, 468, 332, 333, 678, 679, 316, 632, 665, - 629, 677, 659, 461, 397, 0, 0, 400, 297, 322, - 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, - 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, - 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, - 552, 415, 282, 456, 416, 0, 395, 606, 607, 335, - 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, - 0, 0, 0, 286, 0, 0, 0, 0, 385, 283, - 0, 1982, 212, 530, 0, 453, 0, 211, 0, 511, - 268, 396, 393, 615, 298, 289, 285, 264, 336, 405, - 450, 547, 444, 0, 389, 0, 0, 522, 422, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 342, 262, 344, - 210, 435, 523, 302, 0, 0, 0, 0, 0, 536, - 756, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 249, 0, 0, 256, 0, 0, 0, 370, 379, 378, - 358, 359, 361, 363, 369, 376, 382, 355, 364, 0, - 0, 641, 0, 0, 0, 281, 340, 288, 280, 612, - 0, 0, 0, 0, 0, 0, 628, 0, 0, 238, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 700, 701, 702, 703, 704, 682, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 705, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 652, 653, + 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 0, 478, 304, 683, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 658, 665, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 679, 680, 316, 632, + 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 557, 0, 395, 606, 607, + 335, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, + 385, 283, 0, 1977, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 0, 389, 0, 651, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, + 0, 536, 757, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 313, 0, 423, - 273, 0, 477, 0, 319, 334, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, - 0, 0, 0, 0, 384, 0, 349, 205, 233, 0, - 0, 434, 485, 497, 0, 0, 0, 0, 269, 0, - 495, 448, 636, 243, 300, 482, 455, 493, 463, 303, - 0, 0, 494, 391, 617, 473, 633, 662, 663, 279, - 428, 647, 551, 655, 680, 234, 276, 442, 535, 639, - 519, 417, 613, 614, 348, 518, 311, 209, 388, 668, - 232, 503, 390, 253, 241, 619, 644, 315, 267, 305, - 480, 675, 221, 546, 630, 250, 507, 0, 0, 683, - 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, - 222, 0, 481, 284, 309, 0, 0, 274, 437, 621, - 622, 272, 684, 237, 654, 228, 0, 653, 430, 616, - 627, 414, 402, 227, 625, 412, 401, 353, 374, 375, - 296, 324, 470, 394, 471, 323, 325, 425, 424, 426, - 215, 640, 658, 0, 216, 0, 524, 643, 685, 475, - 220, 244, 245, 248, 0, 295, 299, 307, 310, 320, - 321, 331, 386, 441, 469, 465, 474, 0, 610, 634, - 648, 660, 666, 667, 669, 670, 671, 672, 673, 676, - 674, 429, 329, 520, 352, 392, 0, 0, 447, 496, - 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, - 235, 512, 609, 246, 266, 207, 0, 0, 0, 0, - 270, 271, 0, 605, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 686, 687, 688, 689, 690, 691, 692, - 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, - 703, 681, 537, 543, 538, 539, 540, 541, 542, 0, - 544, 0, 0, 0, 0, 0, 419, 0, 623, 624, - 704, 403, 510, 635, 354, 368, 371, 360, 380, 0, - 381, 356, 357, 362, 365, 366, 367, 372, 373, 377, - 383, 263, 218, 410, 420, 608, 330, 224, 225, 226, - 553, 554, 555, 556, 651, 652, 656, 213, 486, 487, - 488, 489, 308, 646, 326, 492, 491, 350, 351, 398, - 472, 569, 571, 582, 586, 588, 590, 596, 599, 570, - 572, 583, 587, 589, 591, 597, 600, 559, 561, 563, - 565, 578, 577, 574, 602, 603, 580, 585, 564, 576, - 581, 594, 601, 598, 558, 562, 566, 575, 593, 592, - 573, 584, 595, 579, 567, 560, 568, 0, 204, 229, - 387, 0, 478, 304, 682, 650, 508, 645, 214, 231, - 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 206, 208, 217, 230, 242, 247, 254, - 277, 292, 294, 301, 314, 327, 328, 337, 338, 341, - 347, 399, 406, 407, 408, 409, 431, 432, 433, 436, - 439, 440, 443, 445, 446, 449, 454, 458, 459, 460, - 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, - 505, 506, 513, 514, 515, 516, 517, 525, 526, 531, - 532, 533, 534, 545, 618, 620, 637, 657, 664, 504, - 404, 452, 476, 611, 0, 0, 317, 318, 467, 468, - 332, 333, 678, 679, 316, 632, 665, 629, 677, 659, - 461, 397, 0, 0, 400, 297, 322, 339, 0, 649, - 527, 236, 490, 306, 265, 0, 0, 219, 257, 239, - 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, - 255, 483, 252, 509, 548, 549, 550, 552, 415, 282, - 456, 416, 0, 395, 606, 607, 335, 0, 0, 0, - 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, - 286, 0, 0, 0, 0, 385, 283, 0, 1978, 212, - 530, 0, 453, 0, 211, 0, 511, 268, 396, 393, - 615, 298, 289, 285, 264, 336, 405, 450, 547, 444, - 0, 389, 0, 0, 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 342, 262, 344, 210, 435, 523, - 302, 0, 0, 0, 0, 0, 536, 756, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, - 256, 0, 0, 0, 370, 379, 378, 358, 359, 361, - 363, 369, 376, 382, 355, 364, 0, 0, 641, 0, - 0, 0, 281, 340, 288, 280, 612, 0, 0, 0, - 0, 0, 0, 628, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, + 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 663, 664, 279, 428, 647, 551, 656, 681, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 0, 676, 221, 546, 630, 250, + 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 685, 237, 655, 228, + 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 659, 0, 216, 0, + 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 661, 667, 668, 670, 671, + 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 682, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 705, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 652, 653, + 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 0, 478, 304, 683, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 658, 665, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 679, 680, 316, 632, + 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 557, 0, 395, 606, 607, + 335, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, + 385, 283, 0, 1975, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 0, 389, 0, 651, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, + 0, 536, 757, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 313, 0, 423, 273, 0, 477, - 0, 319, 334, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, - 0, 384, 0, 349, 205, 233, 0, 0, 434, 485, - 497, 0, 0, 0, 0, 269, 0, 495, 448, 636, - 243, 300, 482, 455, 493, 463, 303, 0, 0, 494, - 391, 617, 473, 633, 662, 663, 279, 428, 647, 551, - 655, 680, 234, 276, 442, 535, 639, 519, 417, 613, - 614, 348, 518, 311, 209, 388, 668, 232, 503, 390, - 253, 241, 619, 644, 315, 267, 305, 480, 675, 221, - 546, 630, 250, 507, 0, 0, 683, 258, 529, 642, - 631, 223, 626, 528, 413, 345, 346, 222, 0, 481, - 284, 309, 0, 0, 274, 437, 621, 622, 272, 684, - 237, 654, 228, 0, 653, 430, 616, 627, 414, 402, - 227, 625, 412, 401, 353, 374, 375, 296, 324, 470, - 394, 471, 323, 325, 425, 424, 426, 215, 640, 658, - 0, 216, 0, 524, 643, 685, 475, 220, 244, 245, - 248, 0, 295, 299, 307, 310, 320, 321, 331, 386, - 441, 469, 465, 474, 0, 610, 634, 648, 660, 666, - 667, 669, 670, 671, 672, 673, 676, 674, 429, 329, - 520, 352, 392, 0, 0, 447, 496, 251, 638, 521, - 240, 604, 418, 427, 259, 261, 260, 235, 512, 609, - 246, 266, 207, 0, 0, 0, 0, 270, 271, 0, - 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, - 696, 697, 698, 699, 700, 701, 702, 703, 681, 537, - 543, 538, 539, 540, 541, 542, 0, 544, 0, 0, - 0, 0, 0, 419, 0, 623, 624, 704, 403, 510, - 635, 354, 368, 371, 360, 380, 0, 381, 356, 357, - 362, 365, 366, 367, 372, 373, 377, 383, 263, 218, - 410, 420, 608, 330, 224, 225, 226, 553, 554, 555, - 556, 651, 652, 656, 213, 486, 487, 488, 489, 308, - 646, 326, 492, 491, 350, 351, 398, 472, 569, 571, - 582, 586, 588, 590, 596, 599, 570, 572, 583, 587, - 589, 591, 597, 600, 559, 561, 563, 565, 578, 577, - 574, 602, 603, 580, 585, 564, 576, 581, 594, 601, - 598, 558, 562, 566, 575, 593, 592, 573, 584, 595, - 579, 567, 560, 568, 0, 204, 229, 387, 0, 478, - 304, 682, 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 206, 208, 217, 230, 242, 247, 254, 277, 292, 294, - 301, 314, 327, 328, 337, 338, 341, 347, 399, 406, - 407, 408, 409, 431, 432, 433, 436, 439, 440, 443, - 445, 446, 449, 454, 458, 459, 460, 462, 464, 466, - 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, - 514, 515, 516, 517, 525, 526, 531, 532, 533, 534, - 545, 618, 620, 637, 657, 664, 504, 404, 452, 476, - 611, 0, 0, 317, 318, 467, 468, 332, 333, 678, - 679, 316, 632, 665, 629, 677, 659, 461, 397, 0, - 0, 400, 297, 322, 339, 0, 649, 527, 236, 490, - 306, 265, 0, 0, 219, 257, 239, 275, 290, 293, - 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, - 509, 548, 549, 550, 552, 415, 282, 456, 416, 0, - 395, 606, 607, 335, 0, 0, 0, 557, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, - 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, - 0, 0, 385, 283, 0, 1976, 212, 530, 0, 453, - 0, 211, 0, 511, 268, 396, 393, 615, 298, 289, - 285, 264, 336, 405, 450, 547, 444, 0, 389, 0, - 0, 522, 422, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 342, 262, 344, 210, 435, 523, 302, 0, 0, - 0, 0, 0, 536, 756, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 249, 0, 0, 256, 0, 0, - 0, 370, 379, 378, 358, 359, 361, 363, 369, 376, - 382, 355, 364, 0, 0, 641, 0, 0, 0, 281, - 340, 288, 280, 612, 0, 0, 0, 0, 0, 0, - 628, 0, 0, 238, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, + 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 663, 664, 279, 428, 647, 551, 656, 681, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 0, 676, 221, 546, 630, 250, + 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 685, 237, 655, 228, + 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 659, 0, 216, 0, + 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 661, 667, 668, 670, 671, + 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 682, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 705, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 652, 653, + 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 0, 478, 304, 683, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 658, 665, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 679, 680, 316, 632, + 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 557, 0, 395, 606, 607, + 335, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, + 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 0, 389, 0, 651, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 1950, 0, 0, + 0, 536, 757, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 661, 0, 0, 0, 0, 0, 0, 0, 384, 0, - 349, 205, 233, 0, 0, 434, 485, 497, 0, 0, - 0, 0, 269, 0, 495, 448, 636, 243, 300, 482, - 455, 493, 463, 303, 0, 0, 494, 391, 617, 473, - 633, 662, 663, 279, 428, 647, 551, 655, 680, 234, - 276, 442, 535, 639, 519, 417, 613, 614, 348, 518, - 311, 209, 388, 668, 232, 503, 390, 253, 241, 619, - 644, 315, 267, 305, 480, 675, 221, 546, 630, 250, - 507, 0, 0, 683, 258, 529, 642, 631, 223, 626, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, + 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 663, 664, 279, 428, 647, 551, 656, 681, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 0, 676, 221, 546, 630, 250, + 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, - 0, 274, 437, 621, 622, 272, 684, 237, 654, 228, - 0, 653, 430, 616, 627, 414, 402, 227, 625, 412, + 0, 274, 437, 621, 622, 272, 685, 237, 655, 228, + 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, - 325, 425, 424, 426, 215, 640, 658, 0, 216, 0, - 524, 643, 685, 475, 220, 244, 245, 248, 0, 295, + 325, 425, 424, 426, 215, 640, 659, 0, 216, 0, + 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, - 474, 0, 610, 634, 648, 660, 666, 667, 669, 670, - 671, 672, 673, 676, 674, 429, 329, 520, 352, 392, + 474, 0, 610, 634, 648, 661, 667, 668, 670, 671, + 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 686, 687, 688, - 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, - 699, 700, 701, 702, 703, 681, 537, 543, 538, 539, + 0, 0, 0, 0, 0, 0, 0, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 682, 537, 543, 538, 539, 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, - 419, 0, 623, 624, 704, 403, 510, 635, 354, 368, + 419, 0, 623, 624, 705, 403, 510, 635, 354, 368, 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, - 330, 224, 225, 226, 553, 554, 555, 556, 651, 652, - 656, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 330, 224, 225, 226, 553, 554, 555, 556, 652, 653, + 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, - 568, 0, 204, 229, 387, 0, 478, 304, 682, 650, + 568, 0, 204, 229, 387, 0, 478, 304, 683, 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, @@ -7235,256 +7113,99 @@ var yyAct = [...]int{ 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, - 637, 657, 664, 504, 404, 452, 476, 611, 0, 0, - 317, 318, 467, 468, 332, 333, 678, 679, 316, 632, - 665, 629, 677, 659, 461, 397, 0, 0, 400, 297, + 637, 658, 665, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 679, 680, 316, 632, + 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, - 550, 552, 415, 282, 456, 416, 0, 395, 606, 607, - 335, 0, 0, 0, 557, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, - 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, - 283, 0, 1974, 212, 530, 0, 453, 0, 211, 0, - 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, - 405, 450, 547, 444, 0, 389, 0, 0, 522, 422, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, - 344, 210, 435, 523, 302, 0, 0, 0, 0, 0, - 536, 756, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, - 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, - 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, - 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, - 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, - 423, 273, 0, 477, 0, 319, 334, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, - 0, 0, 0, 0, 0, 384, 0, 349, 205, 233, - 0, 0, 434, 485, 497, 0, 0, 0, 0, 269, - 0, 495, 448, 636, 243, 300, 482, 455, 493, 463, - 303, 0, 0, 494, 391, 617, 473, 633, 662, 663, - 279, 428, 647, 551, 655, 680, 234, 276, 442, 535, - 639, 519, 417, 613, 614, 348, 518, 311, 209, 388, - 668, 232, 503, 390, 253, 241, 619, 644, 315, 267, - 305, 480, 675, 221, 546, 630, 250, 507, 0, 0, - 683, 258, 529, 642, 631, 223, 626, 528, 413, 345, - 346, 222, 0, 481, 284, 309, 0, 0, 274, 437, - 621, 622, 272, 684, 237, 654, 228, 0, 653, 430, - 616, 627, 414, 402, 227, 625, 412, 401, 353, 374, - 375, 296, 324, 470, 394, 471, 323, 325, 425, 424, - 426, 215, 640, 658, 0, 216, 0, 524, 643, 685, - 475, 220, 244, 245, 248, 0, 295, 299, 307, 310, - 320, 321, 331, 386, 441, 469, 465, 474, 0, 610, - 634, 648, 660, 666, 667, 669, 670, 671, 672, 673, - 676, 674, 429, 329, 520, 352, 392, 0, 0, 447, - 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, - 260, 235, 512, 609, 246, 266, 207, 0, 0, 0, - 0, 270, 271, 0, 605, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 686, 687, 688, 689, 690, 691, - 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, - 702, 703, 681, 537, 543, 538, 539, 540, 541, 542, - 0, 544, 0, 0, 0, 0, 0, 419, 0, 623, - 624, 704, 403, 510, 635, 354, 368, 371, 360, 380, - 0, 381, 356, 357, 362, 365, 366, 367, 372, 373, - 377, 383, 263, 218, 410, 420, 608, 330, 224, 225, - 226, 553, 554, 555, 556, 651, 652, 656, 213, 486, - 487, 488, 489, 308, 646, 326, 492, 491, 350, 351, - 398, 472, 569, 571, 582, 586, 588, 590, 596, 599, - 570, 572, 583, 587, 589, 591, 597, 600, 559, 561, - 563, 565, 578, 577, 574, 602, 603, 580, 585, 564, - 576, 581, 594, 601, 598, 558, 562, 566, 575, 593, - 592, 573, 584, 595, 579, 567, 560, 568, 0, 204, - 229, 387, 0, 478, 304, 682, 650, 508, 645, 214, - 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 206, 208, 217, 230, 242, 247, - 254, 277, 292, 294, 301, 314, 327, 328, 337, 338, - 341, 347, 399, 406, 407, 408, 409, 431, 432, 433, - 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, - 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, - 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, - 531, 532, 533, 534, 545, 618, 620, 637, 657, 664, - 504, 404, 452, 476, 611, 0, 0, 317, 318, 467, - 468, 332, 333, 678, 679, 316, 632, 665, 629, 677, - 659, 461, 397, 0, 0, 400, 297, 322, 339, 0, - 649, 527, 236, 490, 306, 265, 0, 0, 219, 257, - 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, - 287, 255, 483, 252, 509, 548, 549, 550, 552, 415, - 282, 456, 416, 0, 395, 606, 607, 335, 0, 0, - 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, - 0, 286, 0, 0, 0, 0, 385, 283, 0, 0, - 212, 530, 0, 453, 0, 211, 0, 511, 268, 396, - 393, 615, 298, 289, 285, 264, 336, 405, 450, 547, - 444, 0, 389, 0, 0, 522, 422, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 342, 262, 344, 210, 435, - 523, 302, 0, 1949, 0, 0, 0, 536, 756, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, - 0, 256, 0, 0, 0, 370, 379, 378, 358, 359, - 361, 363, 369, 376, 382, 355, 364, 0, 0, 641, - 0, 0, 0, 281, 340, 288, 280, 612, 0, 0, - 0, 0, 0, 0, 628, 0, 0, 238, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 313, 0, 423, 273, 0, - 477, 0, 319, 334, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 661, 0, 0, 0, 0, 0, - 0, 0, 384, 0, 349, 205, 233, 0, 0, 434, - 485, 497, 0, 0, 0, 0, 269, 0, 495, 448, - 636, 243, 300, 482, 455, 493, 463, 303, 0, 0, - 494, 391, 617, 473, 633, 662, 663, 279, 428, 647, - 551, 655, 680, 234, 276, 442, 535, 639, 519, 417, - 613, 614, 348, 518, 311, 209, 388, 668, 232, 503, - 390, 253, 241, 619, 644, 315, 267, 305, 480, 675, - 221, 546, 630, 250, 507, 0, 0, 683, 258, 529, - 642, 631, 223, 626, 528, 413, 345, 346, 222, 0, - 481, 284, 309, 0, 0, 274, 437, 621, 622, 272, - 684, 237, 654, 228, 0, 653, 430, 616, 627, 414, - 402, 227, 625, 412, 401, 353, 374, 375, 296, 324, - 470, 394, 471, 323, 325, 425, 424, 426, 215, 640, - 658, 0, 216, 0, 524, 643, 685, 475, 220, 244, - 245, 248, 0, 295, 299, 307, 310, 320, 321, 331, - 386, 441, 469, 465, 474, 0, 610, 634, 648, 660, - 666, 667, 669, 670, 671, 672, 673, 676, 674, 429, - 329, 520, 352, 392, 0, 0, 447, 496, 251, 638, - 521, 240, 604, 418, 427, 259, 261, 260, 235, 512, - 609, 246, 266, 207, 0, 0, 0, 0, 270, 271, - 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 686, 687, 688, 689, 690, 691, 692, 693, 694, - 695, 696, 697, 698, 699, 700, 701, 702, 703, 681, - 537, 543, 538, 539, 540, 541, 542, 0, 544, 0, - 0, 0, 0, 0, 419, 0, 623, 624, 704, 403, - 510, 635, 354, 368, 371, 360, 380, 0, 381, 356, - 357, 362, 365, 366, 367, 372, 373, 377, 383, 263, - 218, 410, 420, 608, 330, 224, 225, 226, 553, 554, - 555, 556, 651, 652, 656, 213, 486, 487, 488, 489, - 308, 646, 326, 492, 491, 350, 351, 398, 472, 569, - 571, 582, 586, 588, 590, 596, 599, 570, 572, 583, - 587, 589, 591, 597, 600, 559, 561, 563, 565, 578, - 577, 574, 602, 603, 580, 585, 564, 576, 581, 594, - 601, 598, 558, 562, 566, 575, 593, 592, 573, 584, - 595, 579, 567, 560, 568, 0, 204, 229, 387, 0, - 478, 304, 682, 650, 508, 645, 214, 231, 0, 278, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 206, 208, 217, 230, 242, 247, 254, 277, 292, - 294, 301, 314, 327, 328, 337, 338, 341, 347, 399, - 406, 407, 408, 409, 431, 432, 433, 436, 439, 440, - 443, 445, 446, 449, 454, 458, 459, 460, 462, 464, - 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, - 513, 514, 515, 516, 517, 525, 526, 531, 532, 533, - 534, 545, 618, 620, 637, 657, 664, 504, 404, 452, - 476, 611, 0, 0, 317, 318, 467, 468, 332, 333, - 678, 679, 316, 632, 665, 629, 677, 659, 461, 397, - 0, 0, 400, 297, 322, 339, 0, 649, 527, 236, - 490, 306, 265, 0, 0, 219, 257, 239, 275, 290, - 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, - 252, 509, 548, 549, 550, 552, 415, 282, 456, 416, - 0, 395, 606, 607, 335, 0, 0, 0, 557, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 438, 0, 0, 0, 0, 0, 0, 1852, 286, 0, - 0, 0, 0, 385, 283, 0, 0, 212, 530, 0, - 453, 0, 211, 0, 511, 268, 396, 393, 615, 298, - 289, 285, 264, 336, 405, 450, 547, 444, 0, 389, - 0, 0, 522, 422, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 342, 262, 344, 210, 435, 523, 302, 0, - 0, 0, 0, 0, 536, 202, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 249, 0, 0, 256, 0, - 0, 0, 370, 379, 378, 358, 359, 361, 363, 369, - 376, 382, 355, 364, 0, 0, 641, 0, 0, 0, - 281, 340, 288, 280, 612, 0, 0, 0, 0, 0, - 0, 628, 0, 0, 238, 0, 0, 0, 0, 0, + 550, 552, 415, 282, 456, 557, 0, 395, 606, 607, + 335, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 1853, 286, 0, 0, 0, 0, + 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 0, 389, 0, 651, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, + 0, 536, 202, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, + 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 663, 664, 279, 428, 647, 551, 656, 681, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 0, 676, 221, 546, 630, 250, + 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 685, 237, 655, 228, + 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 659, 0, 216, 0, + 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 661, 667, 668, 670, 671, + 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 682, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 705, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 652, 653, + 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 0, 478, 304, 683, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 313, 0, 423, 273, 0, 477, 0, 319, - 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 661, 0, 0, 0, 0, 0, 0, 0, 384, - 0, 349, 205, 233, 0, 0, 434, 485, 497, 0, - 0, 0, 0, 269, 0, 495, 448, 636, 243, 300, - 482, 455, 493, 463, 303, 0, 0, 494, 391, 617, - 473, 633, 662, 663, 279, 428, 647, 551, 655, 680, - 234, 276, 442, 535, 639, 519, 417, 613, 614, 348, - 518, 311, 209, 388, 668, 232, 503, 390, 253, 241, - 619, 644, 315, 267, 305, 480, 675, 221, 546, 630, - 250, 507, 0, 0, 683, 258, 529, 642, 631, 223, - 626, 528, 413, 345, 346, 222, 0, 481, 284, 309, - 0, 0, 274, 437, 621, 622, 272, 684, 237, 654, - 228, 0, 653, 430, 616, 627, 414, 402, 227, 625, - 412, 401, 353, 374, 375, 296, 324, 470, 394, 471, - 323, 325, 425, 424, 426, 215, 640, 658, 0, 216, - 0, 524, 643, 685, 475, 220, 244, 245, 248, 0, - 295, 299, 307, 310, 320, 321, 331, 386, 441, 469, - 465, 474, 0, 610, 634, 648, 660, 666, 667, 669, - 670, 671, 672, 673, 676, 674, 429, 329, 520, 352, - 392, 0, 0, 447, 496, 251, 638, 521, 240, 604, - 418, 427, 259, 261, 260, 235, 512, 609, 246, 266, - 207, 0, 0, 0, 0, 270, 271, 0, 605, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 686, 687, - 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, - 698, 699, 700, 701, 702, 703, 681, 537, 543, 538, - 539, 540, 541, 542, 0, 544, 0, 0, 0, 0, - 0, 419, 0, 623, 624, 704, 403, 510, 635, 354, - 368, 371, 360, 380, 0, 381, 356, 357, 362, 365, - 366, 367, 372, 373, 377, 383, 263, 218, 410, 420, - 608, 330, 224, 225, 226, 553, 554, 555, 556, 651, - 652, 656, 213, 486, 487, 488, 489, 308, 646, 326, - 492, 491, 350, 351, 398, 472, 569, 571, 582, 586, - 588, 590, 596, 599, 570, 572, 583, 587, 589, 591, - 597, 600, 559, 561, 563, 565, 578, 577, 574, 602, - 603, 580, 585, 564, 576, 581, 594, 601, 598, 558, - 562, 566, 575, 593, 592, 573, 584, 595, 579, 567, - 560, 568, 0, 204, 229, 387, 0, 478, 304, 682, - 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 206, 208, - 217, 230, 242, 247, 254, 277, 292, 294, 301, 314, - 327, 328, 337, 338, 341, 347, 399, 406, 407, 408, - 409, 431, 432, 433, 436, 439, 440, 443, 445, 446, - 449, 454, 458, 459, 460, 462, 464, 466, 479, 484, - 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, - 516, 517, 525, 526, 531, 532, 533, 534, 545, 618, - 620, 637, 657, 664, 504, 404, 452, 476, 611, 0, - 0, 317, 318, 467, 468, 332, 333, 678, 679, 316, - 632, 665, 629, 677, 659, 461, 397, 0, 0, 400, - 297, 322, 339, 0, 649, 527, 236, 490, 306, 265, - 0, 0, 219, 257, 239, 275, 290, 293, 343, 411, - 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, - 549, 550, 552, 415, 282, 456, 416, 0, 395, 606, - 607, 335, 0, 0, 0, 557, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 658, 665, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 679, 680, 316, 632, + 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 557, 0, 395, 606, 607, + 335, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, - 336, 405, 450, 547, 444, 0, 389, 0, 0, 522, + 336, 405, 450, 547, 444, 0, 389, 0, 651, 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, 344, 210, 435, 523, 302, 0, 101, 0, 0, - 0, 536, 991, 0, 0, 0, 0, 0, 0, 0, + 0, 536, 992, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, @@ -7492,240 +7213,161 @@ var yyAct = [...]int{ 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, - 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, - 0, 0, 0, 0, 0, 0, 384, 0, 349, 205, - 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, - 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, - 463, 303, 0, 0, 494, 391, 617, 473, 633, 662, - 663, 279, 428, 647, 551, 655, 680, 234, 276, 442, - 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, - 388, 668, 232, 503, 390, 253, 241, 619, 644, 315, - 267, 305, 480, 675, 221, 546, 630, 250, 507, 0, - 0, 683, 258, 529, 642, 631, 223, 626, 528, 413, - 345, 346, 222, 0, 481, 284, 309, 0, 0, 274, - 437, 621, 622, 272, 684, 237, 654, 228, 0, 653, - 430, 616, 627, 414, 402, 227, 625, 412, 401, 353, - 374, 375, 296, 324, 470, 394, 471, 323, 325, 425, - 424, 426, 215, 640, 658, 0, 216, 0, 524, 643, - 685, 475, 220, 244, 245, 248, 0, 295, 299, 307, - 310, 320, 321, 331, 386, 441, 469, 465, 474, 0, - 610, 634, 648, 660, 666, 667, 669, 670, 671, 672, - 673, 676, 674, 429, 329, 520, 352, 392, 0, 0, - 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, - 261, 260, 235, 512, 609, 246, 266, 207, 0, 0, - 0, 0, 270, 271, 0, 605, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 686, 687, 688, 689, 690, - 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, - 701, 702, 703, 681, 537, 543, 538, 539, 540, 541, - 542, 0, 544, 0, 0, 0, 0, 0, 419, 0, - 623, 624, 704, 403, 510, 635, 354, 368, 371, 360, - 380, 0, 381, 356, 357, 362, 365, 366, 367, 372, - 373, 377, 383, 263, 218, 410, 420, 608, 330, 224, - 225, 226, 553, 554, 555, 556, 651, 652, 656, 213, - 486, 487, 488, 489, 308, 646, 326, 492, 491, 350, - 351, 398, 472, 569, 571, 582, 586, 588, 590, 596, - 599, 570, 572, 583, 587, 589, 591, 597, 600, 559, - 561, 563, 565, 578, 577, 574, 602, 603, 580, 585, - 564, 576, 581, 594, 601, 598, 558, 562, 566, 575, - 593, 592, 573, 584, 595, 579, 567, 560, 568, 0, - 204, 229, 387, 0, 478, 304, 682, 650, 508, 645, - 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 206, 208, 217, 230, 242, - 247, 254, 277, 292, 294, 301, 314, 327, 328, 337, - 338, 341, 347, 399, 406, 407, 408, 409, 431, 432, - 433, 436, 439, 440, 443, 445, 446, 449, 454, 458, - 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, - 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, - 526, 531, 532, 533, 534, 545, 618, 620, 637, 657, - 664, 504, 404, 452, 476, 611, 0, 0, 317, 318, - 467, 468, 332, 333, 678, 679, 316, 632, 665, 629, - 677, 659, 461, 397, 0, 0, 400, 297, 322, 339, - 0, 649, 527, 236, 490, 306, 265, 0, 0, 219, - 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, - 312, 287, 255, 483, 252, 509, 548, 549, 550, 552, - 415, 282, 456, 416, 0, 395, 606, 607, 335, 0, - 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, - 0, 0, 286, 0, 0, 0, 0, 385, 283, 0, - 0, 212, 530, 0, 453, 0, 211, 0, 511, 268, - 396, 393, 615, 298, 289, 285, 264, 336, 405, 450, - 547, 444, 0, 389, 0, 0, 522, 422, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 342, 262, 344, 210, - 435, 523, 302, 0, 0, 0, 0, 0, 536, 202, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, - 0, 0, 256, 0, 0, 0, 370, 379, 378, 358, - 359, 361, 363, 369, 376, 382, 355, 364, 0, 0, - 641, 0, 0, 0, 281, 340, 288, 280, 612, 0, - 0, 0, 0, 0, 0, 628, 0, 0, 238, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1506, 0, 313, 0, 423, 273, - 0, 477, 0, 319, 334, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, - 0, 0, 0, 384, 0, 349, 205, 233, 0, 0, - 434, 485, 497, 0, 0, 0, 0, 269, 0, 495, - 448, 636, 243, 300, 482, 455, 493, 463, 303, 0, - 0, 494, 391, 617, 473, 633, 662, 663, 279, 428, - 647, 551, 655, 680, 234, 276, 442, 535, 639, 519, - 417, 613, 614, 348, 518, 311, 209, 388, 668, 232, - 503, 390, 253, 241, 619, 644, 315, 267, 305, 480, - 675, 221, 546, 630, 250, 507, 0, 0, 683, 258, - 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, - 0, 481, 284, 309, 0, 0, 274, 437, 621, 622, - 272, 684, 237, 654, 228, 0, 653, 430, 616, 627, - 414, 402, 227, 625, 412, 401, 353, 374, 375, 296, - 324, 470, 394, 471, 323, 325, 425, 424, 426, 215, - 640, 658, 0, 216, 0, 524, 643, 685, 475, 220, - 244, 245, 248, 0, 295, 299, 307, 310, 320, 321, - 331, 386, 441, 469, 465, 474, 0, 610, 634, 648, - 660, 666, 667, 669, 670, 671, 672, 673, 676, 674, - 429, 329, 520, 352, 392, 0, 0, 447, 496, 251, - 638, 521, 240, 604, 418, 427, 259, 261, 260, 235, - 512, 609, 246, 266, 207, 0, 0, 0, 0, 270, - 271, 0, 605, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 686, 687, 688, 689, 690, 691, 692, 693, - 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, - 681, 537, 543, 538, 539, 540, 541, 542, 0, 544, - 0, 0, 0, 0, 0, 419, 0, 623, 624, 704, - 403, 510, 635, 354, 368, 371, 360, 380, 0, 381, - 356, 357, 362, 365, 366, 367, 372, 373, 377, 383, - 263, 218, 410, 420, 608, 330, 224, 225, 226, 553, - 554, 555, 556, 651, 652, 656, 213, 486, 487, 488, - 489, 308, 646, 326, 492, 491, 350, 351, 398, 472, - 569, 571, 582, 586, 588, 590, 596, 599, 570, 572, - 583, 587, 589, 591, 597, 600, 559, 561, 563, 565, - 578, 577, 574, 602, 603, 580, 585, 564, 576, 581, - 594, 601, 598, 558, 562, 566, 575, 593, 592, 573, - 584, 595, 579, 567, 560, 568, 0, 204, 229, 387, - 0, 478, 304, 682, 650, 508, 645, 214, 231, 0, - 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 206, 208, 217, 230, 242, 247, 254, 277, - 292, 294, 301, 314, 327, 328, 337, 338, 341, 347, - 399, 406, 407, 408, 409, 431, 432, 433, 436, 439, - 440, 443, 445, 446, 449, 454, 458, 459, 460, 462, - 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, - 506, 513, 514, 515, 516, 517, 525, 526, 531, 532, - 533, 534, 545, 618, 620, 637, 657, 664, 504, 404, - 452, 476, 611, 0, 0, 317, 318, 467, 468, 332, - 333, 678, 679, 1505, 632, 665, 629, 677, 659, 461, - 397, 0, 0, 400, 297, 322, 339, 0, 649, 527, - 236, 490, 306, 265, 0, 0, 219, 257, 239, 275, - 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, - 483, 252, 509, 548, 549, 550, 552, 415, 282, 456, - 416, 0, 395, 606, 607, 335, 0, 0, 0, 557, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 438, 0, 0, 0, 0, 0, 0, 0, 286, - 0, 0, 0, 0, 385, 283, 0, 0, 212, 530, - 0, 453, 0, 211, 0, 511, 268, 396, 393, 615, - 298, 289, 285, 264, 336, 405, 450, 547, 444, 0, - 389, 0, 0, 522, 422, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 342, 262, 344, 210, 435, 523, 302, - 0, 0, 0, 0, 0, 536, 202, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 249, 0, 0, 256, - 0, 0, 0, 370, 379, 378, 358, 359, 361, 363, - 369, 376, 382, 355, 364, 0, 0, 641, 0, 0, - 0, 281, 340, 288, 280, 612, 0, 0, 0, 0, - 0, 0, 628, 0, 0, 238, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, + 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 663, 664, 279, 428, 647, 551, 656, 681, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 0, 676, 221, 546, 630, 250, + 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 685, 237, 655, 228, + 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 659, 0, 216, 0, + 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 661, 667, 668, 670, 671, + 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 682, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 705, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 652, 653, + 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 0, 478, 304, 683, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 658, 665, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 679, 680, 316, 632, + 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 557, 0, 395, 606, 607, + 335, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, + 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 0, 389, 0, 651, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, + 0, 536, 202, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 313, 0, 423, 273, 0, 477, 0, - 319, 334, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 661, 0, 0, 0, 0, 0, 0, 0, - 384, 0, 349, 205, 233, 0, 0, 434, 485, 497, - 0, 0, 0, 0, 269, 0, 495, 448, 636, 243, - 300, 482, 455, 493, 463, 303, 0, 0, 494, 391, - 617, 473, 633, 662, 663, 279, 428, 647, 551, 655, - 680, 234, 276, 442, 535, 639, 519, 417, 613, 614, - 348, 518, 311, 209, 388, 668, 232, 503, 390, 253, - 241, 619, 644, 315, 267, 305, 480, 675, 221, 546, - 630, 250, 507, 0, 0, 683, 258, 529, 642, 631, - 223, 626, 528, 413, 345, 346, 222, 0, 481, 284, - 309, 0, 0, 274, 437, 621, 622, 272, 684, 237, - 654, 228, 0, 653, 430, 616, 627, 414, 402, 227, - 625, 412, 401, 353, 374, 375, 296, 324, 470, 394, - 471, 323, 325, 425, 424, 426, 215, 640, 658, 0, - 216, 0, 524, 643, 685, 475, 220, 244, 245, 248, - 0, 295, 299, 307, 310, 320, 321, 331, 386, 441, - 469, 465, 474, 0, 610, 634, 648, 660, 666, 667, - 669, 670, 671, 672, 673, 676, 674, 429, 329, 520, - 352, 392, 0, 0, 447, 496, 251, 638, 521, 240, - 604, 418, 427, 259, 261, 260, 235, 512, 609, 246, - 266, 207, 0, 0, 0, 0, 270, 271, 0, 605, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 686, - 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, - 697, 698, 699, 700, 701, 702, 703, 681, 537, 543, - 538, 539, 540, 541, 542, 0, 544, 0, 0, 0, - 0, 0, 419, 0, 623, 624, 704, 403, 510, 635, - 354, 368, 371, 360, 380, 0, 381, 356, 357, 362, - 365, 366, 367, 372, 373, 377, 383, 263, 218, 410, - 420, 608, 330, 224, 225, 226, 553, 554, 555, 556, - 651, 652, 656, 213, 486, 487, 488, 489, 308, 646, - 326, 492, 491, 350, 351, 398, 472, 569, 571, 582, - 586, 588, 590, 596, 599, 570, 572, 583, 587, 589, - 591, 597, 600, 559, 561, 563, 565, 578, 577, 574, - 602, 603, 580, 585, 564, 576, 581, 594, 601, 598, - 558, 562, 566, 575, 593, 592, 573, 584, 595, 579, - 567, 560, 568, 0, 204, 229, 387, 0, 478, 304, - 682, 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1084, 0, 0, 0, 206, - 208, 217, 230, 242, 247, 254, 277, 292, 294, 301, - 314, 327, 328, 337, 338, 341, 347, 399, 406, 407, - 408, 409, 431, 432, 433, 436, 439, 440, 443, 445, - 446, 449, 454, 458, 459, 460, 462, 464, 466, 479, - 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, - 515, 516, 517, 525, 526, 531, 532, 533, 534, 545, - 618, 620, 637, 657, 664, 504, 404, 452, 476, 611, - 0, 0, 317, 318, 467, 468, 332, 333, 678, 679, - 316, 632, 665, 629, 677, 659, 461, 397, 0, 0, - 400, 297, 322, 339, 0, 649, 527, 236, 490, 306, - 265, 0, 0, 219, 257, 239, 275, 290, 293, 343, - 411, 421, 451, 457, 312, 287, 255, 483, 252, 509, - 548, 549, 550, 552, 415, 282, 456, 416, 0, 395, - 606, 607, 335, 0, 0, 0, 557, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, - 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, - 0, 385, 283, 0, 0, 212, 530, 0, 453, 0, - 211, 0, 511, 268, 396, 393, 615, 298, 289, 285, - 264, 336, 405, 450, 547, 444, 0, 389, 0, 0, - 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 342, 262, 344, 210, 435, 523, 302, 0, 0, 0, - 0, 0, 536, 202, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 249, 0, 0, 256, 0, 0, 0, - 370, 379, 378, 358, 359, 361, 363, 369, 376, 382, - 355, 364, 0, 0, 641, 0, 0, 0, 281, 340, - 288, 280, 612, 0, 0, 0, 0, 0, 0, 628, - 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1507, 0, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, + 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 663, 664, 279, 428, 647, 551, 656, 681, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 0, 676, 221, 546, 630, 250, + 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 685, 237, 655, 228, + 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 659, 0, 216, 0, + 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 661, 667, 668, 670, 671, + 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 682, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 705, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 652, 653, + 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 0, 478, 304, 683, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 658, 665, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 679, 680, 1506, 632, + 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 557, 0, 395, 606, 607, + 335, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, + 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 0, 389, 0, 651, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, + 0, 536, 202, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7733,276 +7375,351 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, - 0, 0, 0, 0, 0, 0, 0, 707, 0, 661, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, - 662, 663, 279, 428, 647, 551, 655, 680, 234, 276, + 663, 664, 279, 428, 647, 551, 656, 681, 234, 276, 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, - 209, 388, 668, 232, 503, 390, 253, 241, 619, 644, - 315, 267, 305, 480, 675, 221, 546, 630, 250, 507, - 0, 0, 683, 258, 529, 642, 631, 223, 626, 528, - 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, - 274, 437, 621, 622, 272, 684, 237, 654, 228, 0, - 653, 430, 616, 627, 414, 402, 227, 625, 412, 401, - 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, - 425, 424, 426, 215, 640, 658, 0, 216, 0, 524, - 643, 685, 475, 220, 244, 245, 248, 0, 295, 299, - 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, - 0, 610, 634, 648, 660, 666, 667, 669, 670, 671, - 672, 673, 676, 674, 429, 329, 520, 352, 392, 0, - 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, - 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, - 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 686, 687, 688, 689, + 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 0, 676, 221, 546, 630, 250, + 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 685, 237, 655, 228, + 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 659, 0, 216, 0, + 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 661, 667, 668, 670, 671, + 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, - 700, 701, 702, 703, 681, 537, 543, 538, 539, 540, - 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, - 0, 623, 624, 704, 403, 510, 635, 354, 368, 371, - 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, - 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, - 224, 225, 226, 553, 554, 555, 556, 651, 652, 656, - 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, - 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, - 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, - 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, - 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, - 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, - 0, 204, 229, 387, 0, 478, 304, 682, 650, 508, - 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, + 700, 701, 702, 703, 704, 682, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 705, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 652, 653, + 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 0, 478, 304, 683, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, - 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, - 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, - 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, - 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, - 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, - 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, - 657, 664, 504, 404, 452, 476, 611, 0, 0, 317, - 318, 467, 468, 332, 333, 678, 679, 316, 632, 665, - 629, 677, 659, 461, 397, 0, 0, 400, 297, 322, - 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, - 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, - 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, - 552, 415, 282, 456, 416, 0, 395, 606, 607, 335, - 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, - 0, 0, 0, 286, 0, 0, 0, 0, 385, 283, - 0, 0, 212, 530, 0, 453, 0, 211, 0, 511, - 268, 396, 393, 615, 298, 289, 285, 264, 336, 405, - 450, 547, 444, 0, 389, 0, 0, 522, 422, 0, + 0, 0, 0, 1085, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 658, 665, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 679, 680, 316, 632, + 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 557, 0, 395, 606, 607, + 335, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, + 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 0, 389, 0, 651, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, + 0, 536, 202, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 342, 262, 344, - 210, 435, 523, 302, 0, 0, 0, 0, 0, 536, - 756, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 249, 0, 0, 256, 0, 0, 0, 370, 379, 378, - 358, 359, 361, 363, 369, 376, 382, 355, 364, 0, - 0, 641, 0, 0, 0, 281, 340, 288, 280, 612, - 0, 0, 0, 0, 0, 0, 628, 0, 0, 238, + 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 708, 0, 662, + 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 663, 664, 279, 428, 647, 551, 656, 681, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 0, 676, 221, 546, 630, 250, + 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 685, 237, 655, 228, + 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 659, 0, 216, 0, + 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 661, 667, 668, 670, 671, + 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 682, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 705, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 652, 653, + 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 0, 478, 304, 683, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 658, 665, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 679, 680, 316, 632, + 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 557, 0, 395, 606, 607, + 335, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, + 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 0, 389, 0, 651, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, + 0, 536, 757, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 313, 0, 423, - 273, 0, 477, 0, 319, 334, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, - 0, 0, 0, 0, 384, 0, 349, 205, 233, 0, - 0, 434, 485, 497, 0, 0, 0, 0, 269, 0, - 495, 448, 636, 243, 300, 482, 455, 493, 463, 303, - 0, 0, 494, 391, 617, 473, 633, 662, 663, 279, - 428, 647, 551, 655, 680, 234, 276, 442, 535, 639, - 519, 417, 613, 614, 348, 518, 311, 209, 388, 668, - 232, 503, 390, 253, 241, 619, 644, 315, 267, 305, - 480, 675, 221, 546, 630, 250, 507, 0, 0, 683, - 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, - 222, 0, 481, 284, 309, 0, 0, 274, 437, 621, - 622, 272, 684, 237, 654, 228, 0, 653, 430, 616, - 627, 414, 402, 227, 625, 412, 401, 353, 374, 375, - 296, 324, 470, 394, 471, 323, 325, 425, 424, 426, - 215, 640, 658, 0, 216, 0, 524, 643, 685, 475, - 220, 244, 245, 248, 0, 295, 299, 307, 310, 320, - 321, 331, 386, 441, 469, 465, 474, 0, 610, 634, - 648, 660, 666, 667, 669, 670, 671, 672, 673, 676, - 674, 429, 329, 520, 352, 392, 0, 0, 447, 496, - 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, - 235, 512, 609, 246, 266, 207, 0, 0, 0, 0, - 270, 271, 0, 605, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 686, 687, 688, 689, 690, 691, 692, - 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, - 703, 681, 537, 543, 538, 539, 540, 541, 542, 0, - 544, 0, 0, 0, 0, 0, 419, 0, 623, 624, - 704, 403, 510, 635, 354, 368, 371, 360, 380, 0, - 381, 356, 357, 362, 365, 366, 367, 372, 373, 377, - 383, 263, 218, 410, 420, 608, 330, 224, 225, 226, - 553, 554, 555, 556, 651, 652, 656, 213, 486, 487, - 488, 489, 308, 646, 326, 492, 491, 350, 351, 398, - 472, 569, 571, 582, 586, 588, 590, 596, 599, 570, - 572, 583, 587, 589, 591, 597, 600, 559, 561, 563, - 565, 578, 577, 574, 602, 603, 580, 585, 564, 576, - 581, 594, 601, 598, 558, 562, 566, 575, 593, 592, - 573, 584, 595, 579, 567, 560, 568, 0, 204, 229, - 387, 0, 478, 304, 682, 650, 508, 645, 214, 231, - 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 206, 208, 217, 230, 242, 247, 254, - 277, 292, 294, 301, 314, 327, 328, 337, 338, 341, - 347, 399, 406, 407, 408, 409, 4264, 432, 433, 436, - 439, 440, 443, 445, 446, 449, 454, 458, 459, 460, - 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, - 505, 506, 513, 514, 515, 516, 517, 525, 526, 531, - 532, 533, 534, 545, 618, 620, 637, 657, 664, 504, - 404, 452, 476, 611, 0, 0, 317, 318, 467, 468, - 332, 333, 678, 679, 316, 632, 665, 629, 677, 659, - 461, 397, 0, 0, 400, 297, 322, 339, 0, 649, - 527, 236, 490, 306, 265, 0, 0, 219, 257, 239, - 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, - 255, 483, 252, 509, 548, 549, 550, 552, 415, 282, - 456, 416, 0, 395, 606, 607, 335, 0, 0, 0, - 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, - 286, 0, 0, 0, 0, 385, 283, 0, 0, 212, - 530, 0, 453, 0, 211, 0, 511, 268, 396, 393, - 615, 298, 289, 285, 264, 336, 405, 450, 547, 444, - 0, 389, 0, 0, 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 342, 262, 344, 210, 435, 523, - 302, 0, 0, 0, 0, 0, 536, 756, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, - 256, 0, 0, 0, 370, 379, 378, 358, 359, 361, - 363, 369, 376, 382, 355, 364, 0, 0, 641, 0, - 0, 0, 281, 340, 288, 280, 612, 0, 0, 0, - 0, 0, 0, 628, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, + 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 663, 664, 279, 428, 647, 551, 656, 681, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 0, 676, 221, 546, 630, 250, + 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 685, 237, 655, 228, + 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 659, 0, 216, 0, + 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 661, 667, 668, 670, 671, + 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 682, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 705, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 652, 653, + 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 0, 478, 304, 683, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 4273, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 658, 665, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 679, 680, 316, 632, + 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 557, 0, 395, 606, 607, + 335, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, + 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 0, 389, 0, 651, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, + 0, 536, 757, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 313, 0, 423, 273, 0, 477, - 0, 319, 334, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, - 0, 384, 0, 349, 205, 233, 0, 0, 434, 485, - 497, 0, 0, 0, 0, 269, 0, 495, 448, 636, - 243, 300, 482, 455, 493, 463, 303, 0, 0, 494, - 391, 617, 473, 633, 662, 663, 279, 428, 647, 551, - 655, 680, 234, 276, 442, 535, 639, 519, 417, 613, - 614, 348, 518, 311, 209, 388, 668, 232, 503, 390, - 253, 241, 619, 644, 315, 267, 305, 480, 675, 221, - 546, 630, 250, 507, 0, 0, 683, 258, 529, 642, - 631, 223, 626, 528, 413, 345, 346, 222, 0, 481, - 284, 309, 0, 0, 274, 437, 621, 622, 272, 684, - 237, 654, 228, 0, 653, 430, 616, 627, 414, 402, - 227, 625, 412, 401, 353, 374, 375, 296, 324, 470, - 394, 471, 323, 325, 425, 424, 426, 215, 640, 658, - 0, 216, 0, 524, 643, 685, 475, 220, 244, 245, - 248, 0, 295, 299, 307, 310, 320, 321, 331, 386, - 441, 469, 465, 474, 0, 610, 634, 648, 660, 666, - 667, 669, 670, 671, 672, 673, 676, 674, 429, 329, - 520, 352, 392, 0, 0, 447, 496, 251, 638, 521, - 240, 604, 418, 427, 259, 261, 260, 235, 512, 609, - 246, 266, 207, 0, 0, 0, 0, 270, 271, 0, - 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, - 696, 697, 698, 699, 700, 701, 702, 703, 681, 537, - 543, 538, 539, 540, 541, 542, 0, 544, 0, 0, - 0, 0, 0, 419, 0, 623, 624, 704, 403, 510, - 635, 354, 368, 371, 360, 380, 0, 381, 356, 357, - 362, 365, 366, 367, 372, 373, 377, 383, 263, 218, - 410, 420, 608, 330, 224, 225, 226, 553, 554, 555, - 556, 651, 652, 656, 213, 486, 487, 488, 489, 308, - 646, 326, 492, 491, 350, 351, 398, 472, 569, 571, - 582, 586, 588, 590, 596, 599, 570, 572, 583, 587, - 589, 591, 597, 600, 559, 561, 563, 565, 578, 577, - 574, 602, 603, 580, 585, 564, 576, 581, 594, 601, - 598, 558, 562, 566, 575, 593, 592, 573, 584, 595, - 579, 567, 560, 568, 0, 204, 229, 387, 0, 478, - 304, 682, 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 206, 208, 217, 230, 242, 247, 254, 277, 292, 294, - 301, 314, 327, 328, 337, 338, 341, 347, 399, 406, - 407, 408, 409, 431, 432, 433, 436, 439, 440, 443, - 445, 446, 449, 454, 458, 459, 460, 462, 464, 466, - 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, - 514, 515, 516, 517, 525, 526, 531, 532, 533, 534, - 545, 618, 620, 637, 657, 664, 504, 404, 452, 476, - 611, 0, 0, 317, 318, 467, 468, 332, 333, 678, - 679, 316, 632, 665, 629, 677, 659, 461, 397, 0, - 0, 400, 297, 322, 339, 0, 649, 527, 236, 490, - 306, 265, 0, 0, 219, 257, 239, 275, 290, 293, - 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, - 509, 548, 549, 550, 552, 415, 282, 456, 416, 0, - 395, 606, 607, 335, 0, 0, 0, 557, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, - 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, - 0, 0, 385, 283, 0, 0, 212, 530, 0, 453, - 0, 211, 0, 511, 268, 396, 393, 615, 298, 289, - 285, 264, 336, 405, 450, 547, 444, 0, 389, 0, - 0, 522, 422, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 342, 262, 344, 210, 435, 523, 302, 0, 0, - 0, 0, 0, 536, 991, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 249, 0, 0, 256, 0, 0, - 0, 370, 379, 378, 358, 359, 361, 363, 369, 376, - 382, 355, 364, 0, 0, 641, 0, 0, 0, 281, - 340, 288, 280, 612, 0, 0, 0, 0, 0, 0, - 628, 0, 0, 238, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, + 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 663, 664, 279, 428, 647, 551, 656, 681, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 0, 676, 221, 546, 630, 250, + 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 685, 237, 655, 228, + 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 659, 0, 216, 0, + 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 661, 667, 668, 670, 671, + 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 682, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 705, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 652, 653, + 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 0, 478, 304, 683, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 658, 665, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 679, 680, 316, 632, + 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 557, 0, 395, 606, 607, + 335, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, + 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 0, 389, 0, 651, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, + 0, 536, 992, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 661, 0, 0, 0, 0, 0, 0, 0, 384, 0, - 349, 205, 233, 0, 0, 434, 485, 497, 0, 0, - 0, 0, 269, 0, 495, 448, 636, 243, 300, 482, - 455, 493, 463, 303, 0, 0, 494, 391, 617, 473, - 633, 662, 663, 279, 428, 647, 551, 655, 680, 234, - 276, 442, 535, 639, 519, 417, 613, 614, 348, 518, - 311, 209, 388, 668, 232, 503, 390, 253, 241, 619, - 644, 315, 267, 305, 480, 675, 221, 546, 630, 250, - 507, 0, 0, 683, 258, 529, 642, 631, 223, 626, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, + 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 663, 664, 279, 428, 647, 551, 656, 681, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 0, 676, 221, 546, 630, 250, + 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, - 0, 274, 437, 621, 622, 272, 684, 237, 654, 228, - 0, 653, 430, 616, 627, 414, 402, 227, 625, 412, + 0, 274, 437, 621, 622, 272, 685, 237, 655, 228, + 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, - 325, 425, 424, 426, 215, 640, 658, 0, 216, 0, - 524, 643, 685, 475, 220, 244, 245, 248, 0, 295, + 325, 425, 424, 426, 215, 640, 659, 0, 216, 0, + 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, - 474, 0, 610, 634, 648, 660, 666, 667, 669, 670, - 671, 672, 673, 676, 674, 429, 329, 520, 352, 392, + 474, 0, 610, 634, 648, 661, 667, 668, 670, 671, + 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 686, 687, 688, - 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, - 699, 700, 701, 702, 703, 681, 537, 543, 538, 539, + 0, 0, 0, 0, 0, 0, 0, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 682, 537, 543, 538, 539, 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, - 419, 0, 623, 624, 704, 403, 510, 635, 354, 368, + 419, 0, 623, 624, 705, 403, 510, 635, 354, 368, 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, - 330, 224, 225, 226, 553, 554, 555, 556, 651, 652, - 656, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 330, 224, 225, 226, 553, 554, 555, 556, 652, 653, + 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, - 568, 0, 204, 229, 387, 0, 478, 304, 682, 650, + 568, 0, 204, 229, 387, 0, 478, 304, 683, 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, @@ -8012,120 +7729,115 @@ var yyAct = [...]int{ 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, - 637, 657, 664, 504, 404, 452, 476, 611, 0, 0, - 317, 318, 467, 468, 332, 333, 678, 679, 316, 632, - 665, 629, 677, 659, 461, 397, 0, 0, 400, 297, + 637, 658, 665, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 679, 680, 316, 632, + 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, - 550, 552, 415, 282, 456, 416, 0, 395, 606, 607, - 335, 0, 0, 0, 557, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, - 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, - 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, - 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, - 405, 450, 547, 444, 0, 389, 0, 0, 522, 422, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, - 344, 210, 435, 523, 302, 0, 0, 0, 0, 0, - 536, 202, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, - 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, - 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, - 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, - 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, + 550, 552, 415, 282, 456, 557, 0, 395, 606, 607, + 335, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, + 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 0, 389, 0, 651, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, + 0, 536, 202, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, - 423, 273, 0, 477, 0, 319, 334, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, - 0, 0, 0, 0, 0, 384, 0, 349, 205, 233, - 0, 0, 434, 485, 497, 0, 0, 0, 0, 269, - 0, 495, 448, 636, 243, 300, 482, 455, 493, 463, - 303, 0, 0, 494, 391, 617, 473, 633, 662, 663, - 279, 428, 647, 551, 655, 680, 234, 276, 442, 535, - 639, 519, 417, 613, 614, 348, 518, 311, 209, 388, - 668, 232, 503, 390, 253, 241, 619, 644, 315, 267, - 305, 480, 675, 221, 546, 630, 250, 507, 0, 0, - 683, 258, 529, 642, 631, 223, 626, 528, 413, 345, - 346, 222, 0, 481, 284, 309, 0, 0, 274, 437, - 621, 622, 272, 684, 237, 654, 228, 0, 653, 430, - 616, 627, 414, 402, 227, 625, 412, 401, 353, 374, - 375, 296, 324, 470, 394, 471, 323, 325, 425, 424, - 426, 215, 640, 658, 0, 216, 0, 524, 643, 685, - 475, 220, 244, 245, 248, 0, 295, 299, 307, 310, - 320, 321, 331, 386, 441, 469, 465, 474, 0, 610, - 634, 648, 660, 666, 667, 669, 670, 671, 672, 673, - 676, 674, 429, 329, 520, 352, 392, 0, 0, 447, - 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, - 260, 235, 512, 609, 246, 266, 207, 0, 0, 0, - 0, 270, 271, 0, 605, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 686, 687, 688, 689, 690, 691, - 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, - 702, 703, 681, 537, 543, 538, 539, 540, 541, 542, - 0, 544, 0, 0, 0, 0, 0, 419, 0, 623, - 624, 704, 403, 510, 635, 354, 368, 371, 360, 380, - 0, 381, 356, 357, 362, 365, 366, 367, 372, 373, - 377, 383, 263, 218, 410, 420, 608, 330, 224, 225, - 226, 553, 554, 555, 556, 651, 652, 656, 213, 486, - 487, 488, 489, 308, 646, 326, 492, 491, 350, 351, - 398, 472, 569, 571, 582, 586, 588, 590, 596, 599, - 570, 572, 583, 587, 589, 591, 597, 600, 559, 561, - 563, 565, 578, 577, 574, 602, 603, 580, 585, 564, - 576, 581, 594, 601, 598, 558, 562, 566, 575, 593, - 592, 573, 584, 595, 579, 567, 560, 568, 0, 204, - 229, 387, 0, 478, 304, 682, 650, 508, 645, 214, - 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, + 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 663, 664, 279, 428, 647, 551, 656, 681, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 669, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 0, 676, 221, 546, 630, 250, + 507, 0, 0, 684, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 685, 237, 655, 228, + 0, 654, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 659, 0, 216, 0, + 524, 643, 686, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 661, 667, 668, 670, 671, + 672, 673, 674, 677, 675, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 682, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 705, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 652, 653, + 657, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 0, 478, 304, 683, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 206, 208, 217, 230, 242, 247, - 254, 277, 292, 294, 301, 314, 327, 328, 337, 338, - 341, 347, 399, 406, 407, 408, 409, 431, 432, 433, - 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, - 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, - 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, - 531, 532, 533, 534, 545, 618, 620, 637, 657, 664, - 504, 404, 452, 476, 611, 0, 0, 317, 318, 467, - 468, 332, 333, 678, 679, 316, 632, 665, 629, 677, - 659, 461, 397, 0, 0, 400, 297, 322, 339, 0, - 649, 527, 236, 490, 306, 265, 0, 0, 219, 257, - 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, - 287, 255, 483, 252, 509, 548, 549, 550, 552, 415, - 282, 456, 0, 0, 395, 606, 607, 335, + 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 658, 665, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 679, 680, 316, 632, + 666, 629, 678, 660, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 0, 0, 395, 606, 607, + 335, } var yyPact = [...]int{ - -1000, -1000, -559, -1000, 7661, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 2557, 2573, -1000, -1000, -1000, - -1000, 2702, -1000, 1089, -1000, 2209, 2136, 2511, 4468, -1000, - 62201, 817, -1000, 59093, -426, 964, 288, 41222, -1000, 235, - -1000, 217, 60647, 231, -1000, -1000, -1000, -1000, -426, 24905, - 2423, 52, 50, 62201, -1000, -1000, -1000, -1000, -344, 2660, - 2068, -1000, 473, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 58316, -1000, -1000, -1000, 1208, -1000, 2515, 2494, 2371, 1005, - 1545, -1000, 2596, 2068, -1000, 24905, 2649, 2473, 24128, 24128, - 501, -1000, -1000, 321, -1000, -1000, 35783, 62201, 45107, 2574, - 60647, -1000, 2511, -1000, -1000, -1000, 194, -1000, 359, 2102, - -1000, 2098, -1000, 1262, 945, 441, 861, 855, 440, 439, - 438, 437, 436, 434, 433, 431, 447, -1000, 1045, 1045, - -218, -231, 1452, 502, 486, 486, 1164, 534, 2481, 2480, - -1000, -1000, 1045, 1045, 1045, 415, 1045, 1045, 1045, 1045, - 344, 337, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, - 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 908, - 2511, 315, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -563, -1000, 9268, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 2874, 2938, -1000, -1000, -1000, + -1000, 2976, -1000, 1110, -1000, 2383, 2342, 2751, 5592, -1000, + 59313, 808, -1000, 56233, -417, 943, 1004, 38522, -1000, 276, + -1000, 253, 57773, 268, -1000, -1000, -1000, -1000, -417, 22320, + 2618, 46, 45, 59313, -1000, -1000, -1000, -1000, -377, 2943, + 2214, -1000, 601, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 55463, -1000, -1000, -1000, 1264, -1000, 2757, 2726, 2607, 983, + 1632, -1000, 2864, 2214, -1000, 22320, 2934, 2755, 21544, 21544, + 515, -1000, -1000, 289, -1000, -1000, 33132, 59313, 42372, 2809, + 57773, -1000, 2751, -1000, -1000, -1000, 206, -1000, 446, 2310, + -1000, 2309, -1000, 1213, 1061, 464, 889, 885, 463, 461, + 460, 459, 457, 456, 455, 453, 472, -1000, 1037, 1037, + -216, -223, 4020, 514, 511, 511, 1254, 535, 2706, 2648, + -1000, -1000, 1037, 1037, 1037, 581, 1037, 1037, 1037, 1037, + 417, 415, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, + 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 905, + 2751, 402, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -8170,73 +7882,73 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 62201, 311, 62201, -1000, 917, - 816, -1000, -1000, -437, 1171, 1171, 128, 1171, 1171, 1171, - 1171, 233, 993, 43, -1000, 226, 312, 164, 323, 1187, - 178, -1000, -1000, 314, 1187, 1923, -1000, 1013, 318, 229, - -1000, 1171, 1171, -1000, 17111, 225, 17111, 17111, 316, 207, - -1000, 2504, -1000, -1000, -1000, -1000, -1000, 1460, -1000, -1000, - -1000, -1000, -16, 529, -1000, -1000, -1000, -1000, 60647, 57539, - 320, -1000, -1000, 276, 1983, 1576, 24905, 1328, 997, -1000, - -1000, 1433, 966, -1000, -1000, -1000, -1000, -1000, 880, -1000, - 27236, 27236, 27236, 27236, -1000, -1000, 1909, 56762, 1909, 1909, - 27236, 1909, 27236, 1909, 1909, 1909, 1909, 24905, 1909, 1909, - 1909, 1909, -1000, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, -1000, -1000, -1000, -1000, 1909, 914, 1909, 1909, - 1909, 1909, 1909, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 1909, 1909, 1909, 1909, 1909, 1909, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, -1000, - -1000, -1000, 1794, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 1440, 1657, 1607, 1591, -1000, 21797, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 1909, -1000, -1000, -1000, - 62201, -1000, 1909, 267, 60647, 60647, 416, 1444, -1000, -1000, - 2596, 2068, -1000, 2660, 2652, 473, -1000, 3979, 1717, 1730, - 1675, 2068, 971, 2077, 62201, -1000, 2136, 191, -1000, -1000, - -1000, -354, -357, 2322, 1528, 1914, 2097, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 2773, 24905, -1000, -1000, 2694, - -1000, 32675, 912, 2690, 55985, -1000, 501, 501, 2094, 649, - 14, -1000, -1000, -1000, -1000, 1062, 40445, -1000, -1000, -1000, - -1000, -1000, 1933, 62201, -1000, -1000, 4545, 60647, -1000, 2206, - -1000, 1931, -1000, 2161, 24905, 473, 1919, -1000, -1000, -1000, - -1000, 1045, 1045, 1045, -1000, 420, 2647, 4468, 5927, -1000, - -1000, -1000, 55208, 2202, 60647, -1000, 2198, -1000, 1135, 906, - 913, 913, 60647, -1000, -1000, 61424, 60647, 1132, 1130, 60647, - 60647, 60647, 60647, -1000, 54431, -1000, 53654, 52877, 1442, 60647, - 52100, 51323, 50546, 49769, 48992, -1000, 2390, -1000, 2207, -1000, - -1000, -1000, 61424, 60647, 60647, 61424, 60647, 61424, 62201, 60647, - -1000, -1000, 413, -1000, -1000, 1441, 1439, 1435, 1045, 1045, - 1434, 1911, 1908, 1907, 1045, 1045, 1431, 1903, 43553, 1896, - 310, 1427, 1425, 1424, 1419, 1891, 245, 1886, 1417, 1415, - 1423, 60647, 2196, 62201, -1000, 299, 1030, 1007, -1000, -1000, - -1000, 1057, 2511, 2420, 2093, 528, 814, 60647, 499, 499, - 499, 60647, -1000, -1000, 17894, 62201, 308, -1000, 1881, 24905, - -1000, 1213, 1187, 1187, -1000, -1000, -1000, -1000, -1000, -1000, - 1171, 62201, 1213, -1000, -1000, -1000, 1187, 1171, 62201, 1171, - 1171, 1171, 1171, 1187, 1187, 1187, 1171, 62201, 62201, 62201, - 62201, 62201, 62201, 62201, 62201, 62201, 17111, 1013, 1171, -439, - -1000, 1880, -1000, -1000, -1000, 2292, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 59313, 816, 59313, -1000, + 896, 807, -1000, -1000, -425, 1152, 1152, 64, 1152, 1152, + 1152, 1152, 281, 1058, 34, -1000, 176, 396, 167, 398, + 1163, 844, -1000, -1000, 399, 1163, 2065, -1000, 973, 394, + 173, -1000, 1152, 1152, -1000, 14553, 214, 14553, 14553, 380, + 241, -1000, 2738, -1000, -1000, -1000, -1000, -1000, 1508, -1000, + -1000, -1000, -1000, -28, 529, -1000, -1000, -1000, -1000, 57773, + 54693, 339, -1000, -1000, 296, 2117, 1001, 22320, 1676, 977, + -1000, -1000, 1888, 948, -1000, -1000, -1000, -1000, -1000, 862, + -1000, 24648, 24648, 24648, 24648, -1000, -1000, 2315, 53923, 2315, + 2315, 24648, 2315, 24648, 2315, 2315, 2315, 2315, 22320, 2315, + 2315, 2315, 2315, -1000, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, -1000, -1000, -1000, -1000, 2315, 895, 2315, + 2315, 2315, 2315, 2315, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 2315, 2315, 2315, 2315, 2315, 2315, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + -1000, -1000, -1000, 1858, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 1940, 1701, 1699, 1692, -1000, 19216, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2315, -1000, -1000, + -1000, 59313, -1000, 2315, 303, 57773, 57773, 468, 1501, -1000, + -1000, 2864, 2214, -1000, 2943, 2906, 601, -1000, 5024, 2806, + 1713, 1582, 2214, 944, 2176, 59313, -1000, 2342, 190, -1000, + -1000, -1000, -328, -338, 2533, 1658, 2021, 2289, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 2082, 22320, -1000, -1000, + 2973, -1000, 30052, 894, 2972, 53153, -1000, 515, 515, 2288, + 656, 23, -1000, -1000, -1000, -1000, 1064, 37752, -1000, -1000, + -1000, -1000, -1000, 2079, 59313, -1000, -1000, 6592, 57773, -1000, + 2379, -1000, 2076, -1000, 2351, 22320, 601, 2059, -1000, -1000, + -1000, -1000, 1037, 1037, 1037, -1000, 471, 2928, 5592, 6986, + -1000, -1000, -1000, 52383, 2378, 57773, -1000, 2377, -1000, 1206, + 887, 902, 902, 57773, -1000, -1000, 58543, 57773, 1194, 1192, + 57773, 57773, 57773, 57773, -1000, 51613, -1000, 50843, 50073, 1496, + 57773, 49303, 48533, 47763, 46993, 46223, -1000, 2550, -1000, 2476, + -1000, -1000, -1000, 58543, 57773, 57773, 58543, 57773, 58543, 59313, + 57773, -1000, -1000, 344, -1000, -1000, 1495, 1494, 1492, 1037, + 1037, 1489, 2010, 2001, 1995, 1037, 1037, 1482, 1993, 40832, + 1959, 379, 1480, 1462, 1460, 1491, 1957, 202, 1955, 1478, + 1477, 1457, 57773, 2373, 59313, -1000, 384, 1078, 1018, -1000, + -1000, -1000, 1063, 2751, 2615, 2209, 528, 804, 57773, 522, + 522, 522, 57773, -1000, -1000, 15331, 59313, 219, -1000, 1942, + 22320, -1000, 1182, 1163, 1163, -1000, -1000, -1000, -1000, -1000, + -1000, 1152, 59313, 1182, -1000, -1000, -1000, 1163, 1152, 59313, + 1152, 1152, 1152, 1152, 1163, 1163, 1163, 1152, 59313, 59313, + 59313, 59313, 59313, 59313, 59313, 59313, 59313, 14553, 973, 1152, + -426, -1000, 1926, -1000, -1000, -1000, 2506, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -8248,355 +7960,360 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 17111, 17111, - -1000, -1000, 2599, 2597, -1000, -1000, -1000, 2092, -1000, 215, - 9, 222, -1000, 48215, 519, 1056, -1000, 519, -1000, -1000, - -1000, -1000, -1000, 2091, 47438, -1000, -443, -449, -450, -451, - -1000, -1000, -1000, -452, -455, -1000, -1000, -1000, 24905, 24905, - 24905, 24905, -268, -1000, 1346, 27236, 2451, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 24905, 1342, 1137, 27236, 27236, 27236, - 27236, 27236, 27236, 27236, 28790, 28013, 27236, 27236, 27236, 27236, - 27236, 27236, -1000, -1000, 38114, 8368, 8368, 966, 966, 966, - 966, -1000, -183, 2087, 61424, -1000, -1000, -1000, 905, 24905, - 24905, 966, -1000, 1445, 1450, 21797, 24905, 24905, 24905, 24905, - 1090, 1576, 61424, 24905, -1000, 1675, -1000, -1000, -1000, -1000, - 1355, -1000, -1000, 1150, 2460, 2460, 2460, 2460, 24905, 24905, - 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 2460, 24905, - 278, 278, 910, 24905, 24905, 24905, 24905, 24905, 24905, 24905, - 24905, 20243, 24905, 24905, 27236, 24905, 24905, 24905, 1675, 24905, - 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, - 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, - 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, - 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, - 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, - 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, - 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, - 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 1675, 24905, - 1354, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 19460, 24905, - 24905, 24905, 24905, 24905, -1000, -1000, -1000, -1000, -1000, -1000, - 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 1675, 24905, - 24905, 24905, 24905, 24905, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 1754, 1748, 1639, 1909, 24905, -1000, - 2083, -1000, -159, 35006, 24905, 1877, 2687, 2220, 60647, -1000, - -1000, -1000, -1000, 2596, -1000, 2596, 1754, 3758, 2329, 24128, - -1000, -1000, 3758, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 1945, -1000, 313, 811, - 2204, 299, 60647, 808, 794, 793, 491, -1000, -71, 1055, - 62201, 2077, 2571, -1000, 2072, -1000, -1000, 1909, -1000, -303, - -1000, -307, 2318, 1864, 959, -1000, 1455, 24905, 24905, 2063, - -1000, 2130, 62201, -1000, -268, -1000, 46661, -1000, -1000, 16328, - 62201, 366, 62201, -1000, 34229, 45884, 227, -1000, 14, 2030, - -1000, 22, 7, 21020, 958, -1000, -1000, -1000, 1452, 29567, - 1979, 958, 142, -1000, -1000, -1000, 2161, -1000, 2161, 2161, - 2161, 2161, 2161, 959, 959, 959, 2161, -1000, -1000, -1000, - -1000, 2189, 2161, 2187, -1000, 2161, 2161, 2161, 2161, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 2184, 2184, 2184, 2182, - 2182, 2163, 2163, 481, -1000, 24905, 477, 45107, 2529, 1421, - 2768, -192, -1000, 60647, 1525, 1505, 1499, -1000, -551, 2062, - -1000, -1000, 2644, -1000, -1000, 894, 1170, 1163, 1098, 60647, - 273, 357, -1000, 478, -1000, 45107, 60647, 1128, 913, 60647, - -1000, 60647, -1000, -1000, -1000, -1000, -1000, 60647, -1000, -1000, - 2061, -1000, 2066, 1226, 1158, 1223, 1153, 2061, -1000, -1000, - -188, 2061, -1000, 2061, -1000, 2061, -1000, 2061, -1000, 2061, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1065, - 375, -351, 60647, 273, 526, -1000, 523, 38114, -1000, -1000, - -1000, 38114, 38114, -1000, -1000, -1000, -1000, 1854, 1824, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -508, 62201, - -1000, 283, 347, 399, 378, 62201, 795, 2476, 2472, 2471, - 2467, 2464, 2455, 2444, 300, 334, 62201, 62201, 499, 2262, - 62201, 2539, 62201, 62201, -1000, -1000, -1000, -1000, -1000, 1822, - 1811, -1000, 1576, 62201, -1000, -1000, 1171, 1171, -1000, -1000, - 62201, 1171, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 1171, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 62201, -1000, -1000, -1000, - -1000, 1802, -1000, 62201, -16, 210, -1000, -1000, 60647, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -64, -1000, - 340, 19, 448, -1000, -1000, -1000, -1000, -1000, 2593, -1000, - 1576, 1105, 1101, -1000, 1909, -1000, -1000, 1334, -1000, -1000, - -1000, -1000, -1000, 1909, 1909, 1909, -1000, -1000, -1000, -1000, - -1000, 1342, 27236, 27236, 27236, 1497, 852, 1884, 1475, 1199, - 1232, 1232, 1258, 27236, 1258, 27236, 975, 975, 975, 975, - 975, -1000, -1000, -1000, -1000, -1000, -1000, 1794, -1000, 1780, - -1000, 1909, 61424, 1834, 19460, 2219, 2316, 1675, 998, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 3667, - 1675, 1983, 1675, 1712, 3661, 1084, -1000, 24905, 1675, 3655, - -1000, -1000, 1675, 1675, 24905, -1000, -1000, 24905, 24905, 24905, - 24905, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, - 2768, 24905, 2768, 2054, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 2050, 2686, 1844, 2768, 2768, 2768, 2768, 3650, - 2768, 2768, 24905, 2414, -1000, -1000, -1000, 1667, 3600, 1652, - 3594, 2768, 2768, -1000, 2768, 3588, 3576, 1675, 2884, 2859, - 2768, 2768, 2768, 2768, 2768, 2853, 2790, 2768, 2768, 2783, - 2768, 3571, 2768, 2763, 2759, 2753, 2737, 2717, 2711, 2692, - 2688, 2673, 2656, 2648, 2620, 2606, 2594, 2587, 2572, 2558, - 2554, 2768, 2768, 2768, 3566, 2768, 3489, 2768, 3477, 2768, - 2768, 3473, 2544, 2533, 1675, 2031, -1000, 3469, 2768, 3457, - 3446, 3428, 2491, 3421, 3411, 3407, 2768, 2768, 2768, 2453, - 3403, 3395, 3382, 3378, 3374, 3370, 3366, 3357, 3353, 2768, - 1639, 1639, 1639, 1639, 1639, 3349, -271, 2768, 1675, -1000, - -1000, -1000, -1000, 3341, 2425, 3299, 3287, 3283, 3241, 1675, - 1909, 900, -1000, -1000, 1639, 1675, 1675, 1639, 1639, 3194, - 3127, 3120, 3112, 3108, 3099, 2768, 2768, -1000, 2768, 3038, - 3034, 2419, 2401, 1675, -1000, 1639, 62201, -1000, -427, -1000, - -1, 1020, 1909, -1000, 43553, 1675, -1000, 8112, -1000, 1338, - -1000, -1000, -1000, -1000, -1000, 39668, 1863, -1000, -1000, -1000, - 491, 786, 275, 491, 299, 283, 2181, 60647, 60647, 60647, - 62201, 1093, -1000, 513, -1000, 1909, -474, 23351, -1000, -1000, - -1000, 959, 117, 38891, 952, 952, 157, -1000, 1576, 1576, - 24905, -1000, -1000, -1000, -1000, -1000, -1000, 899, 2666, 380, - 1909, -1000, 2051, 3161, -1000, -1000, -1000, 2568, 30344, -1000, - -1000, 1909, 1909, 62201, 1897, 1787, -1000, 898, -1000, 1468, - 2030, 14, 1, -1000, -1000, -1000, -1000, 1576, -1000, 1466, - 398, 1378, -1000, 471, -1000, -1000, -1000, -1000, 2434, 139, - -1000, -1000, -1000, 854, 959, -1000, -1000, 959, -1000, -1000, - -1000, -1000, 1768, -1000, 1768, -1000, -1000, -1000, -1000, -1000, - 1418, -1000, -1000, -1000, -1000, 1416, -1000, -1000, 1407, -1000, - -1000, 3028, 2269, 477, -1000, -1000, 1045, 1749, -1000, -1000, - 2437, 1045, 1045, 60647, -1000, -1000, 1954, 2529, -1000, -5, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -544, 162, 614, - -1000, -1000, -1000, 4562, 60647, 1817, -1000, 270, -1000, 1928, - -1000, 60647, -1000, 1792, 2177, 60647, 60647, -1000, -1000, -1000, - 60647, 1909, -1000, -1000, -1000, -1000, 530, 2510, 325, -1000, - -1000, -290, -1000, -1000, 273, 270, 61424, 60647, 958, -1000, - -1000, -1000, -1000, -1000, -504, 1790, 783, 62201, 62201, 62201, - 62201, 62201, 62201, 866, -1000, -1000, 32, -1000, -1000, 234, - -1000, -1000, 1725, -1000, -1000, -1000, -1000, 234, -1000, -1000, - -1000, -1000, -1000, 324, 505, -1000, 62201, 62201, 981, -1000, - -1000, -1000, -1000, -1000, -1000, 1187, -1000, -1000, 1187, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 14553, + 14553, -1000, -1000, 2857, 2840, -1000, -1000, -1000, 2196, -1000, + 256, 24, 266, -1000, 45453, 608, 1055, -1000, 608, -1000, + -1000, -1000, -1000, -1000, 2180, 44683, -1000, -428, -440, -450, + -454, -1000, -1000, -1000, -456, -459, -1000, -1000, -1000, 22320, + 22320, 22320, 22320, -279, 970, 1441, 24648, 2673, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 22320, 1299, 1277, 24648, 24648, + 24648, 24648, 24648, 24648, 24648, 26200, 25424, 24648, 24648, 24648, + 24648, 24648, 24648, -1000, -1000, 35442, 10344, 10344, 948, 948, + 948, 948, -1000, -190, 2179, 58543, -1000, -1000, -1000, 880, + 22320, 22320, 948, -1000, 1519, 1651, 19216, 22320, 22320, 22320, + 22320, 1111, 1001, 58543, 22320, -1000, 1582, -1000, -1000, -1000, + -1000, 1322, -1000, -1000, 1138, 2658, 2658, 2658, 2658, 22320, + 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, 2658, + 22320, 1029, 1029, 974, 22320, 22320, 22320, 22320, 22320, 22320, + 22320, 22320, 17663, 22320, 22320, 24648, 22320, 22320, 22320, 1582, + 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, + 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, + 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, + 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, + 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, + 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, + 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, + 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, 1582, + 22320, 1525, 22320, 22320, 22320, 22320, 22320, 22320, 22320, 16887, + 22320, 22320, 22320, 22320, 22320, -1000, -1000, -1000, -1000, -1000, + -1000, 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, 1582, + 22320, 22320, 22320, 22320, 22320, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 1684, 1712, 1688, 2315, 22320, + -1000, 2178, -1000, -146, 32362, 22320, 1922, 2970, 2431, 57773, + -1000, -1000, -1000, -1000, 2864, -1000, 2864, 1684, 5014, 2546, + 21544, -1000, -1000, 5014, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1952, -1000, 393, + 802, 2389, 384, 57773, 798, 796, 795, 521, -1000, -76, + 1049, 59313, 2176, 2805, -1000, 2174, -1000, -1000, 2315, -1000, + -314, -1000, -315, 2527, 1907, 936, -1000, 1513, 22320, 22320, + 2173, -1000, 1243, 59313, -1000, -279, -1000, 43913, -1000, -1000, + 13775, 59313, 450, 59313, -1000, 31592, 43143, 215, -1000, 23, + 2150, -1000, 16, 17, 18439, 945, -1000, -1000, -1000, 4020, + 26970, 2113, 945, 193, -1000, -1000, -1000, 2351, -1000, 2351, + 2351, 2351, 2351, 2351, 936, 936, 936, 2351, -1000, -1000, + -1000, -1000, 2368, 2351, 2367, -1000, 2351, 2351, 2351, 2351, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 2492, 62201, 18, -471, -1000, -467, 24905, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 1486, 810, 1884, 27236, 27236, - 1450, 1450, 27236, -1000, -1000, -1000, 1063, 1063, 38114, -1000, - 27236, 24905, -1000, -1000, 24905, 24905, 24905, 1073, -1000, 24905, - 1592, -1000, 24905, -1000, -271, 1639, 2768, 2768, 2768, 2768, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - 2021, -1000, 24905, 24905, 24905, 1675, 360, -1000, -1000, -1000, - -271, 24905, -1000, -1000, 2683, -1000, 24905, -1000, 38114, 24905, - 24905, 24905, -1000, -1000, -1000, 24905, 24905, -1000, -1000, 24905, - -1000, 24905, -1000, -1000, -1000, -1000, -1000, -1000, 24905, -1000, - 24905, -1000, -1000, -1000, 24905, -1000, 24905, -1000, -1000, 24905, - -1000, 24905, -1000, 24905, -1000, 24905, -1000, 24905, -1000, 24905, - -1000, 24905, -1000, 24905, -1000, 24905, -1000, 24905, -1000, 24905, - -1000, 24905, -1000, 24905, -1000, 24905, -1000, 24905, -1000, 24905, - -1000, 24905, -1000, 24905, -1000, -1000, -1000, 24905, -1000, 24905, - -1000, 24905, -1000, -1000, 24905, -1000, 24905, -1000, 24905, -1000, - 24905, 24905, -1000, 24905, 24905, 24905, -1000, 24905, 24905, 24905, - 24905, -1000, -1000, -1000, -1000, 24905, 24905, 24905, 24905, 24905, - 24905, 24905, 24905, 24905, 24905, -1000, -1000, -1000, -1000, -1000, - -1000, 24905, -1000, 45107, 58, -271, 1354, 58, 1354, 26459, - 907, 881, 25682, -1000, 24905, 18677, -1000, -1000, -1000, -1000, - -1000, 24905, 24905, 24905, 24905, 24905, 24905, -1000, -1000, -1000, - 24905, 24905, -1000, 24905, -1000, 24905, -1000, -1000, -1000, -1000, - -1000, 1020, -1000, 848, 846, 913, 60647, -1000, -1000, -1000, - -1000, 2029, -1000, 2600, -1000, 2357, 2348, 2680, 2666, 24128, - -1000, 34229, 62201, 62201, 296, 62201, 283, 766, 2259, -1000, - 2181, 2181, 2181, -1000, 2526, -1000, 2176, 1457, -1000, -1000, - -1000, -1000, -1000, -416, -1000, 2409, 2344, 952, 952, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 15545, 2596, 24905, 2258, - 61424, 1909, -1000, 31898, 60647, 61424, 34229, 34229, 34229, 34229, - 34229, -1000, 2289, 2286, -1000, 2313, 2296, 2411, 62201, -1000, - 1754, 1774, -1000, 24905, 36560, 1962, 34229, -1000, -1000, 34229, - 62201, 14762, -1000, -1000, 15, -2, -1000, -1000, -1000, -1000, - 1452, -1000, -1000, 1076, 2566, 2429, -1000, -1000, -1000, -1000, - -1000, -1000, 1767, -1000, 1761, 2024, 1756, 1723, 375, -1000, - 2183, 2489, 1045, 1045, -1000, 1402, -1000, 1445, 1718, 1685, - -1000, -1000, -1000, 479, -1000, -1000, -549, 1382, 2171, 2156, - 24905, 2170, 2643, 2005, 60647, -1000, -1000, 61424, -1000, 306, - -1000, 477, 60647, -1000, -1000, -1000, 357, 62201, -1000, 8895, - -1000, -1000, -1000, 270, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 62201, 2113, -1000, -1000, -1000, -1000, -1000, 244, 243, - 1683, 241, 1681, -1000, 241, -1000, 62201, 957, 2269, 62201, - -1000, -1000, -1000, 1171, 1171, -1000, -1000, 2487, -1000, 1445, - 2768, 27236, 27236, -1000, 966, -1000, -1000, 495, -250, 2161, - 2161, -1000, 2161, 2163, -1000, 2161, 200, 2161, 196, 2161, - -1000, -1000, 1675, 1675, -1000, 1639, 2387, 1906, 3018, -1000, - 1576, 24905, 2993, -1000, -1000, -271, -271, -271, -271, -271, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2366, 2366, 2366, + 2364, 2364, 2352, 2352, 506, -1000, 22320, 500, 42372, 2788, + 1453, 1597, -197, -1000, 57773, 1592, 1576, 1570, -1000, -543, + 2171, -1000, -1000, 2927, -1000, -1000, 1351, 1233, 1229, 978, + 57773, 315, 443, -1000, 497, -1000, 42372, 57773, 1177, 902, + 57773, -1000, 57773, -1000, -1000, -1000, -1000, -1000, 57773, -1000, + -1000, 2166, -1000, 2177, 1273, 1226, 1265, 1223, 2166, -1000, + -1000, -196, 2166, -1000, 2166, -1000, 2166, -1000, 2166, -1000, + 2166, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 1071, 285, -342, 57773, 315, 527, -1000, 526, 35442, -1000, + -1000, -1000, 35442, 35442, -1000, -1000, -1000, -1000, 1905, 1898, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -78, 2937, 2811, 2768, -1000, 2158, 2150, -1000, 2768, 24905, - 2768, 1675, 2378, 2768, 2768, 2768, 2768, 2768, 2768, 2768, - 2768, 2768, 2768, 2768, 2768, 2354, 2312, 2307, 2303, 2299, - 2288, 2284, 2272, 2266, 2260, 2199, 2193, 2178, 2172, 2166, - 2125, 2768, 2768, 2104, 2768, 2099, 2095, -1000, 1576, 1639, - 2806, 1639, 2768, 2768, 2798, 387, 2768, 1716, 1716, 1716, - 1716, 1716, 1639, 1639, 1639, 1639, 2768, 60647, -1000, -271, - -1000, -1000, -326, -330, -1000, 1675, -271, 2019, 27236, 2768, - 27236, 27236, 27236, 2768, 1675, -1000, 2084, 2052, 2744, 2022, - 2768, 2627, 2768, 2768, 2768, 2016, -1000, 2577, 1909, 2577, - 1909, 2577, 1707, 1338, 62201, -1000, -1000, -1000, -1000, 2666, - 2653, -1000, 2015, 1909, -1000, -1000, -1000, -1000, -1000, 542, - 62201, 62201, 2257, 2256, 2251, -1000, 1920, -1000, -1000, 117, - 672, -1000, 2373, 2344, -1000, 2642, 2376, 2641, -1000, -1000, - -1000, -1000, -1000, 1576, -1000, 2513, 1989, -1000, 1047, 1964, - -1000, -1000, 23351, 1714, 2347, 885, 1707, 2013, 3161, 2223, - 2250, 3075, -1000, -1000, -1000, -1000, 2285, -1000, 2145, -1000, - -1000, 2136, -1000, 2525, 366, 34229, 2004, 2004, -1000, 877, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1201, 8895, 2714, - -1000, 1662, -1000, 1459, 236, 1380, -1000, -1000, 1045, 1045, - -1000, 1126, 1123, -1000, 62201, 2143, -1000, 959, 1659, 959, - 1370, -1000, -1000, 1368, -1000, -1000, -1000, -1000, 2151, 2278, - -1000, -1000, -1000, -1000, 289, 2141, 2635, -1000, 24905, 2138, - 1046, 2931, 60647, 60647, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 489, 1045, -486, 332, 330, - 1045, 1045, 1045, -550, -1000, -1000, 1705, 1703, -1000, -216, - -1000, 24905, -1000, -1000, -1000, -1000, -1000, 1404, 1404, 1657, - 1607, 1591, -1000, 2136, -203, 60647, 60647, 60647, 60647, -1000, - -1000, -1000, 1249, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 966, 1675, 354, -205, 1675, - -1000, -1000, 959, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 24905, -1000, 24905, -1000, 24905, 1576, 24905, - -1000, -1000, -1000, -1000, -1000, 2596, 1589, 24905, 24905, -1000, - 1367, 1351, -271, 2768, -1000, -1000, -1000, 24905, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 24905, -1000, 24905, -1000, 24905, -1000, 24905, -1000, 24905, - -1000, 24905, -1000, 24905, -1000, 24905, -1000, 24905, -1000, 24905, - -1000, 24905, -1000, 24905, -1000, 24905, -1000, 24905, -1000, 24905, - -1000, 24905, -1000, -1000, 24905, -1000, -1000, -1000, 24905, -1000, - 24905, -1000, 24905, -1000, -1000, -1000, 24905, 329, 1063, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -534, + 59313, -1000, 356, 421, 407, 397, 59313, 404, 2693, 2691, + 2690, 304, 2669, 2665, 2656, 2652, 378, 414, 59313, 59313, + 522, 2481, 59313, 2775, 59313, 59313, -1000, -1000, -1000, -1000, + -1000, 1890, 1874, -1000, 1001, 59313, -1000, -1000, 1152, 1152, + -1000, -1000, 59313, 1152, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 1152, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 59313, -1000, + -1000, -1000, -1000, 1871, -1000, 59313, -28, 252, -1000, -1000, + 57773, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -60, -1000, 799, 6, 376, -1000, -1000, -1000, -1000, -1000, + 2838, -1000, 1001, 1092, 1043, 970, 2315, -1000, -1000, 1505, + -1000, -1000, -1000, -1000, -1000, 2315, 2315, 2315, -1000, -1000, + -1000, -1000, -1000, 1299, 24648, 24648, 24648, 1702, 838, 1637, + 1725, 1736, 1474, 1474, 1007, 24648, 1007, 24648, 952, 952, + 952, 952, 952, -1000, -1000, -1000, -1000, -1000, -1000, 1858, + -1000, 1853, -1000, 2315, 58543, 2032, 16887, 2752, 2037, 1582, + 962, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 1675, 358, -1000, -1000, -1000, 2669, -1000, 1675, 24905, 1450, - -1000, 1450, 1450, 1450, -1000, -1000, -1000, 24905, -1000, 24905, - 24905, -1000, 24905, -1000, 24905, -1000, -1000, -1000, -1000, 24905, - 1909, 2426, 44330, 1909, 44330, 1909, 36560, -1000, -1000, 2653, - 2654, 2633, 250, 62201, -1000, -1000, 62201, 62201, 62201, -1000, - 2358, 2349, 2349, 2373, -1000, 2625, 2619, -1000, 1551, 2613, - 1549, 1119, -1000, 61424, 24905, -1000, 1909, 43553, -1000, 527, - 60647, 1909, 60647, -1000, 2621, -1000, -1000, 24905, 2135, -1000, - 24905, -1000, -1000, -1000, -1000, 8368, 2666, 2004, -1000, -1000, - 986, -1000, 24905, -1000, 12151, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 1546, 1543, -1000, -1000, 2134, 24905, - -1000, -1000, -1000, 1793, 1764, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 357, -548, 2926, 60647, 1335, - -1000, 1696, 2005, 351, 1909, 1529, 1045, 1045, 1045, 1252, - 1243, 43553, 1694, -1000, 60647, 462, -1000, 357, -1000, -238, - -245, 2768, -1000, -1000, 2564, -1000, 18677, -1000, -1000, 2129, - 2175, -1000, -1000, -1000, -1000, 2305, -186, -212, -1000, -1000, - 2768, 2768, 2768, 2410, 1675, -1000, 2768, 2768, 1757, 1747, - -1000, -1000, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, - 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, - 2768, 2768, 1639, 1949, -1000, 329, 1675, 2247, -1000, -1000, - 8368, -1000, -1000, 2621, 2612, 58, -1000, -1000, 258, 58, - 1576, 1071, 1675, 1675, 1071, 1922, 2768, 1899, 1894, 2768, - 2768, 37337, -1000, 2611, 2610, 1689, -1000, -1000, 44330, 1689, - 44330, 1020, 2654, -278, 24905, 24905, 1675, 2014, -1000, 60647, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2404, 1348, -1000, - -1000, -1000, -1000, 1513, 1508, -1000, 1504, -1000, 2713, -1000, - 1576, -1000, 1909, 1909, -1000, 870, 1964, -1000, 2596, 1576, - 60647, 1576, 69, 2621, -1000, 2768, -1000, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, - 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, -1000, -1000, - 60647, 2874, -1000, -1000, 1691, 158, -1000, 1724, 2005, -1000, - -1000, 718, -1000, 24905, -1000, 43553, 1500, 1491, -1000, -1000, - -1000, -1000, -550, -1000, -1000, -1000, -1000, -1000, -1000, 473, - 1994, -1000, 1043, 60647, 62201, -1000, 2302, -1000, -1000, -1000, - -1000, 24905, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 4887, 1582, 2117, 1582, 1587, 4883, 1107, -1000, 22320, + 1582, 4806, -1000, -1000, 1582, 1582, 22320, -1000, -1000, 22320, + 22320, 22320, 22320, 1597, 1597, 1597, 1597, 1597, 1597, 1597, + 1597, 1597, 1597, 22320, 1597, 2161, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 24905, - -1000, 1675, 2244, -1000, -343, -1000, -509, 24905, -271, -1000, - -1000, -271, -1000, -1000, -1000, -1000, -1000, 24905, -1000, -1000, - 24905, -1000, 24905, -1000, -1000, 1689, -1000, -1000, -1000, 42776, - -1000, 1689, -1000, 1689, -1000, -278, -1000, 1987, -1000, 60647, - 1576, 335, 6496, 250, 4545, -1000, 1337, -1000, -1000, -1000, - -1000, -1000, 61424, 60647, 1964, 60647, -1000, -1000, 1674, 1675, - 1909, 2596, -1000, 1655, -1000, -1000, 2111, 2156, -1000, -1000, - -1000, 22574, -1000, -1000, -1000, -1000, -1000, 302, -192, 18677, - 13979, 1647, -1000, -193, 2768, 1639, -1000, -459, -1000, -1000, - -1000, -1000, 292, -1000, -1000, 1983, -1000, -1000, 1858, 1763, - 1746, -1000, -1000, -1000, -1000, -1000, -1000, -278, -1000, -1000, - 2562, -1000, -247, -1000, -567, -1000, -1000, 6496, 24905, 33452, - 41999, -1000, -1000, -1000, -1000, 1865, 1627, -1000, -1000, -1000, - 36560, 59870, -1000, -179, 322, 24905, 2109, 1675, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 864, -1000, - -1000, -1000, 2113, -209, -1000, -1000, -1000, 5249, -475, -320, - -325, 27236, -1000, 24905, -1000, 24905, -1000, 24905, -1000, 60647, - 1909, -1000, -1000, 1064, 6496, -1000, -567, 1565, 4494, 840, - 829, -1000, -1000, -1000, 2501, -1000, -1000, 2287, -1000, -1000, - -1000, 1498, -1000, 2942, -350, 2238, -1000, -97, -1000, -1000, - -1000, 1200, 1480, -1000, 1233, -1000, -1000, -1000, -1000, 2823, - 60647, -1000, 17894, -203, -213, 1096, -1000, -1000, -1000, -1000, - -1000, 1450, 1729, 1721, 2768, -1000, 60647, -1000, -1000, 6496, - 2493, 2560, 2556, -1000, 232, 232, 1462, -1000, -1000, 59870, - -338, 958, 8368, -1000, 2233, 2229, 2677, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -556, 1489, -1000, -1000, -1000, 5249, - -328, -1000, 24905, -1000, 24905, -1000, 1675, 6370, -1000, 8895, - 31121, 988, -1000, 1038, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 2153, 2967, 2068, 1597, 1597, 1597, + 1597, 4794, 1597, 1597, 22320, 1778, -1000, -1000, -1000, 1665, + 4775, 1537, 4748, 1597, 1597, -1000, 1597, 4744, 4740, 1582, + 3946, 3942, 1597, 1597, 1597, 1597, 1597, 3936, 3927, 1597, + 1597, 3683, 1597, 4730, 1597, 3675, 3494, 3449, 3439, 3262, + 3214, 3185, 3168, 3120, 3115, 3104, 3100, 3095, 3090, 3068, + 3054, 3001, 2983, 1597, 1597, 1597, 4719, 1597, 4708, 1597, + 4703, 1597, 1597, 4694, 2979, 2870, 1582, 2152, -1000, 4667, + 1597, 4663, 4658, 4638, 2828, 4621, 4582, 4577, 1597, 1597, + 1597, 2800, 4568, 4560, 4539, 4535, 4526, 4514, 4506, 4380, + 4370, 1597, 1688, 1688, 1688, 1688, 1688, 4360, -282, 1597, + 1582, -1000, -1000, -1000, -1000, 4312, 2780, 4308, 4265, 4261, + 4233, 1582, 2315, 879, -1000, -1000, 1688, 1582, 1582, 1688, + 1688, 4219, 4156, 4138, 3991, 3973, 3697, 1597, 1597, -1000, + 1597, 3404, 3148, 2739, 2650, 1582, -1000, 1688, 59313, -1000, + -421, -1000, -8, 968, 2315, -1000, 40832, 1582, -1000, 9697, + -1000, 1405, -1000, -1000, -1000, -1000, -1000, 36982, 2028, -1000, + -1000, -1000, 521, 790, 319, 521, 384, 356, 2430, 57773, + 57773, 57773, 59313, 1118, -1000, 518, -1000, 2315, -508, 20768, + -1000, -1000, -1000, 936, 68, 36212, 942, 942, 222, -1000, + 1001, 1001, 22320, -1000, -1000, -1000, -1000, -1000, -1000, 872, + 2910, 602, 2315, -1000, 2162, 2862, -1000, -1000, -1000, 2804, + 27741, -1000, -1000, 2315, 2315, 59313, 2095, 2026, -1000, 870, + -1000, 1522, 2150, 23, 14, -1000, -1000, -1000, -1000, 1001, + -1000, 1567, 451, 4798, -1000, 501, -1000, -1000, -1000, -1000, + 2633, 81, -1000, -1000, -1000, 877, 936, -1000, -1000, 936, + -1000, -1000, -1000, -1000, 1834, -1000, 1834, -1000, -1000, -1000, + -1000, -1000, 1450, -1000, -1000, -1000, -1000, 1439, -1000, -1000, + 1438, -1000, -1000, 2623, 2417, 500, -1000, -1000, 1037, 1830, + -1000, -1000, 2624, 1037, 1037, 57773, -1000, -1000, 1984, 2788, + -1000, 11, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -548, + 162, 400, -1000, -1000, -1000, 6169, 57773, 2014, -1000, 308, + -1000, 1889, -1000, 57773, -1000, 1983, 2361, 57773, 57773, -1000, + -1000, -1000, 57773, 2315, -1000, -1000, -1000, -1000, 801, 2747, + 305, -1000, -1000, -301, -1000, -1000, 315, 308, 58543, 57773, + 945, -1000, -1000, -1000, -1000, -1000, -537, 1970, 782, 59313, + 59313, 59313, 59313, 59313, 59313, 851, -1000, -1000, 20, -1000, + 292, -1000, 288, -1000, -1000, 1804, -1000, -1000, -1000, 2647, + -1000, 288, -1000, -1000, -1000, -1000, -1000, 408, 525, -1000, + 59313, 59313, 972, -1000, -1000, -1000, -1000, -1000, -1000, 1163, + -1000, -1000, 1163, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 2724, 59313, -3, -505, -1000, + -502, 22320, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1464, + 834, 1637, 24648, 24648, 1651, 1651, 24648, -1000, -1000, -1000, + 1195, 1195, 35442, -1000, 24648, 22320, -1000, -1000, 22320, 22320, + 22320, 1095, -1000, 22320, 2272, -1000, 22320, -1000, -282, 1688, + 1597, 1597, 1597, 1597, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, 2006, -1000, 22320, 22320, 22320, 1582, + 389, -1000, -1000, -1000, -282, 22320, -1000, -1000, 2959, -1000, + 22320, -1000, 35442, 22320, 22320, 22320, -1000, -1000, -1000, 22320, + 22320, -1000, -1000, 22320, -1000, 22320, -1000, -1000, -1000, -1000, + -1000, -1000, 22320, -1000, 22320, -1000, -1000, -1000, 22320, -1000, + 22320, -1000, -1000, 22320, -1000, 22320, -1000, 22320, -1000, 22320, + -1000, 22320, -1000, 22320, -1000, 22320, -1000, 22320, -1000, 22320, + -1000, 22320, -1000, 22320, -1000, 22320, -1000, 22320, -1000, 22320, + -1000, 22320, -1000, 22320, -1000, 22320, -1000, 22320, -1000, -1000, + -1000, 22320, -1000, 22320, -1000, 22320, -1000, -1000, 22320, -1000, + 22320, -1000, 22320, -1000, 22320, 22320, -1000, 22320, 22320, 22320, + -1000, 22320, 22320, 22320, 22320, -1000, -1000, -1000, -1000, 22320, + 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, 22320, -1000, + -1000, -1000, -1000, -1000, -1000, 22320, -1000, 42372, 72, -282, + 1525, 72, 1525, 23872, 890, 852, 23096, -1000, 22320, 16109, + -1000, -1000, -1000, -1000, -1000, 22320, 22320, 22320, 22320, 22320, + 22320, -1000, -1000, -1000, 22320, 22320, -1000, 22320, -1000, 22320, + -1000, -1000, -1000, -1000, -1000, 968, -1000, 919, 859, 902, + 57773, -1000, -1000, -1000, -1000, 2145, -1000, 2908, -1000, 2565, + 2557, 2945, 2910, 21544, -1000, 31592, 59313, 59313, 353, 59313, + 356, 768, 2473, -1000, 2430, 2430, 2430, -1000, 2770, -1000, + 2357, 1468, -1000, -1000, -1000, -1000, -1000, -413, -1000, 2604, + 2730, 942, 942, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 12997, 2864, 22320, 2467, 58543, 2315, -1000, 29282, -1000, -1000, + 57773, 58543, 31592, 31592, 31592, 31592, 31592, -1000, 2514, 2500, + -1000, 2508, 2498, 2662, 59313, -1000, 1684, 1939, -1000, 22320, + 33902, 2118, 31592, -1000, -1000, 31592, 59313, 12219, -1000, -1000, + -12, -13, -1000, -1000, -1000, -1000, 4020, -1000, -1000, 969, + 2803, 2611, -1000, -1000, -1000, -1000, -1000, -1000, 1917, -1000, + 1914, 2144, 1912, 1886, 285, -1000, 2385, 2719, 1037, 1037, + -1000, 1437, -1000, 1519, 1783, 1781, -1000, -1000, -1000, 503, + -1000, -1000, -555, 1416, 2355, 2341, 22320, 2353, 2925, 2135, + 57773, -1000, -1000, 58543, -1000, 230, -1000, 500, 57773, -1000, + -1000, -1000, 443, 59313, -1000, 10302, -1000, -1000, -1000, 308, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 59313, 2398, -1000, + -1000, -1000, -1000, -1000, 299, 298, 1779, -1000, 286, 1762, + -1000, -1000, 286, -1000, 59313, 959, 2417, 59313, -1000, -1000, + -1000, 1152, 1152, -1000, -1000, 2718, -1000, 1519, 1597, 24648, + 24648, -1000, 948, -1000, -1000, 467, -260, 2351, 2351, -1000, + 2351, 2352, -1000, 2351, 227, 2351, 224, 2351, -1000, -1000, + 1582, 1582, -1000, 1688, 2612, 1455, 2886, -1000, 1001, 22320, + 2876, -1000, -1000, -282, -282, -282, -282, -282, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -86, 2670, + 2645, 1597, -1000, 2350, 2348, -1000, 1597, 22320, 1597, 1582, + 2608, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, + 1597, 1597, 1597, 2580, 2570, 2566, 2545, 2539, 2534, 2517, + 2496, 2448, 2426, 2407, 2386, 2380, 2374, 2358, 2336, 1597, + 1597, 2311, 1597, 2110, 2099, -1000, 1001, 1688, 2616, 1688, + 1597, 1597, 2595, 291, 1597, 1867, 1867, 1867, 1867, 1867, + 1688, 1688, 1688, 1688, 1597, 57773, -1000, -282, -1000, -1000, + -325, -327, -1000, 1582, -282, 2143, 24648, 1597, 24648, 24648, + 24648, 1597, 1582, -1000, 2074, 2029, 2528, 2024, 1597, 2401, + 1597, 1597, 1597, 2009, -1000, 2814, 2315, 2814, 2315, 2814, + 1847, 1405, 59313, -1000, -1000, -1000, -1000, 2910, 2948, -1000, + 2137, 2315, -1000, -1000, -1000, -1000, -1000, 543, 59313, 59313, + 2466, 2462, 2458, -1000, 1868, -1000, -1000, 68, 619, -1000, + 2579, 2730, -1000, 2923, 2600, 2922, -1000, -1000, -1000, -1000, + -1000, 1001, -1000, 2753, 2126, -1000, 1047, 2102, -1000, -1000, + 20768, 1864, 2581, 869, 1847, 2175, 2862, 2395, 2455, 3210, + -1000, -1000, -1000, -1000, 2497, -1000, 2471, -1000, -1000, 2342, + -1000, 1799, 450, 31592, 2116, 2116, -1000, 867, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 1249, 10302, 2990, -1000, 1757, + -1000, 1542, 251, 1408, -1000, -1000, 1037, 1037, -1000, 1167, + 1153, -1000, 59313, 2345, -1000, 936, 1703, 936, 1385, -1000, + -1000, 1378, -1000, -1000, -1000, -1000, 2408, 2461, -1000, -1000, + -1000, -1000, 374, 2344, 2909, -1000, 22320, 2343, 1045, 2574, + 57773, 57773, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 836, 1037, -518, 411, 410, 1037, 1037, + 1037, -556, -1000, -1000, 1845, 1839, -1000, -225, -1000, 22320, + -1000, -1000, -1000, -1000, -1000, 1394, 1394, 1701, 1699, 1692, + -1000, 2342, -199, 57773, 57773, 57773, 57773, -1000, -1000, -1000, + 1398, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 948, 1582, 373, -205, 1582, -1000, -1000, + 936, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 22320, -1000, 22320, -1000, 22320, 1001, 22320, -1000, -1000, + -1000, -1000, -1000, 2864, 1675, 22320, 22320, -1000, 1332, 1327, + -282, 1597, -1000, -1000, -1000, 22320, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 22320, + -1000, 22320, -1000, 22320, -1000, 22320, -1000, 22320, -1000, 22320, + -1000, 22320, -1000, 22320, -1000, 22320, -1000, 22320, -1000, 22320, + -1000, 22320, -1000, 22320, -1000, 22320, -1000, 22320, -1000, 22320, + -1000, -1000, 22320, -1000, -1000, -1000, 22320, -1000, 22320, -1000, + 22320, -1000, -1000, -1000, 22320, 264, 1195, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1582, 449, + -1000, -1000, -1000, 2940, -1000, 1582, 22320, 1651, -1000, 1651, + 1651, 1651, -1000, -1000, -1000, 22320, -1000, 22320, 22320, -1000, + 22320, -1000, 22320, -1000, -1000, -1000, -1000, 22320, 2315, 2586, + 41602, 2315, 41602, 2315, 33902, -1000, -1000, 2948, 2878, 2900, + 235, 59313, -1000, -1000, 59313, 59313, 59313, -1000, 2575, 2587, + 2587, 2579, -1000, 2893, 2891, -1000, 1673, 2889, 1669, 1136, + -1000, 58543, 22320, -1000, 2315, 40832, -1000, 600, 57773, 2315, + -1000, 57773, -1000, 2871, -1000, -1000, 22320, 2340, -1000, 22320, + -1000, -1000, -1000, -1000, 10344, 2910, 2116, -1000, -1000, 958, + -1000, 22320, -1000, 9584, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 1660, 1657, -1000, -1000, 2335, 22320, -1000, + -1000, -1000, 1852, 1848, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 443, -550, 2089, 57773, 1319, -1000, + 1803, 2135, 426, 2315, 1648, 1037, 1037, 1037, 1304, 1301, + 40832, 1797, -1000, 57773, 487, -1000, 443, -1000, -230, -246, + 1597, -1000, -1000, 2793, -1000, 16109, -1000, -1000, 2334, 2400, + -1000, -1000, -1000, -1000, 2526, -194, -208, -1000, -1000, 1597, + 1597, 1597, 1633, 1582, -1000, 1597, 1597, 1714, 1683, -1000, + -1000, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, + 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, + 1597, 1688, 2004, -1000, 264, 1582, 2453, -1000, -1000, 10344, + -1000, -1000, 2871, 2888, 72, -1000, -1000, 314, 72, 1001, + 1062, 1582, 1582, 1062, 1930, 1597, 1903, 1851, 1597, 1597, + 34672, -1000, 2879, 2875, 1732, -1000, -1000, 41602, 1732, 41602, + 968, 2878, -289, 22320, 22320, 1582, 2136, -1000, 57773, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 2573, 1397, -1000, -1000, + -1000, -1000, 1643, 1611, -1000, 1604, -1000, 2989, -1000, 1001, + -1000, 2315, 2315, -1000, 855, 2102, -1000, 2864, 1001, 57773, + 1001, 71, 2871, -1000, 1597, -1000, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, + 2315, 2315, 2315, 2315, 2315, 2315, 2315, -1000, -1000, 57773, + 2064, -1000, -1000, 1755, 158, -1000, 1590, 2135, -1000, -1000, + 703, -1000, 22320, -1000, 40832, 1583, 1571, -1000, -1000, -1000, + -1000, -556, -1000, -1000, -1000, -1000, -1000, -1000, 601, 2132, + -1000, 1036, 57773, 59313, -1000, 2522, -1000, -1000, -1000, -1000, + 22320, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 2524, 69, -1000, 2710, -1000, 2703, 984, 984, -1000, 1224, - -556, -1000, -1000, -1000, 2768, 2768, -1000, 1079, 1077, -1000, - 24905, 24905, -1000, 5482, -1000, -1000, -1000, -1000, 843, -1000, - -1000, -1000, -1000, 6935, -352, -1000, -1000, -1000, -1000, -1000, - 475, 1318, -1000, -1000, -1000, -1000, -1000, 1031, 6496, -1000, - 1363, 2768, -1000, 31121, -1000, -1000, 8368, -1000, -1000, -1000, - 490, 6496, 6496, -1000, -1000, 251, -1000, 6496, 251, -1000, - -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 22320, -1000, + 1582, 2447, -1000, -374, -1000, -503, 22320, -282, -1000, -1000, + -282, -1000, -1000, -1000, -1000, -1000, 22320, -1000, -1000, 22320, + -1000, 22320, -1000, -1000, 1732, -1000, -1000, -1000, 40062, -1000, + 1732, -1000, 1732, -1000, -289, -1000, 2122, -1000, 57773, 1001, + 333, 8746, 235, 6592, -1000, 1316, -1000, -1000, -1000, -1000, + -1000, 58543, 57773, 2102, 57773, -1000, -1000, 1717, 1582, 2315, + 2864, -1000, 1711, -1000, -1000, 2331, 2341, -1000, -1000, -1000, + 19992, -1000, -1000, -1000, -1000, -1000, 321, -197, 16109, 11441, + 1707, -1000, -198, 1597, 1688, -1000, -464, -1000, -1000, -1000, + -1000, 302, -1000, -1000, 2117, -1000, -1000, 1842, 1619, 1581, + -1000, -1000, -1000, -1000, -1000, -1000, -289, -1000, -1000, 2792, + -1000, -249, -1000, -564, -1000, -1000, 8746, 22320, 30822, 39292, + -1000, -1000, -1000, -1000, 1577, 1682, -1000, -1000, -1000, 33902, + 57003, -1000, -187, 489, 22320, 2324, 1582, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 853, -1000, -1000, + -1000, 2398, -206, -1000, -1000, -1000, 345, -509, -271, -299, + 24648, -1000, 22320, -1000, 22320, -1000, 22320, -1000, 57773, 2315, + -1000, -1000, 1076, 8746, -1000, -564, 1255, 4633, 821, 812, + -1000, -1000, -1000, 2735, -1000, -1000, 2553, -1000, -1000, -1000, + 1608, -1000, 2486, -344, 2443, -1000, -77, -1000, -1000, -1000, + 1247, 1545, -1000, 1290, -1000, -1000, -1000, -1000, 1862, 57773, + -1000, 15331, -199, -210, 1122, -1000, -1000, -1000, -1000, -1000, + 1651, 1575, 1401, 1597, -1000, 57773, -1000, -1000, 8746, 2743, + 2813, 2808, -1000, 225, 225, 1530, -1000, -1000, 57003, -339, + 945, 10344, -1000, 2441, 2440, 2958, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -558, 1589, -1000, -1000, -1000, 345, -318, + -1000, 22320, -1000, 22320, -1000, 1582, 8280, -1000, 10302, 28511, + 981, -1000, 1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2764, + 71, -1000, 2960, -1000, 2987, 1109, 1109, -1000, 1275, -558, + -1000, -1000, -1000, 1597, 1597, -1000, 1065, 1101, -1000, 22320, + 22320, -1000, 4458, -1000, -1000, -1000, -1000, 837, -1000, -1000, + -1000, -1000, 7847, -346, -1000, -1000, -1000, -1000, -1000, 498, + 1358, -1000, -1000, -1000, -1000, -1000, 1074, 8746, -1000, 1228, + 1597, -1000, 28511, -1000, -1000, 10344, -1000, -1000, -1000, 517, + 8746, 8746, -1000, -1000, 254, -1000, 8746, 254, -1000, -1000, } var yyPgo = [...]int{ - 0, 3480, 3479, 41, 8, 60, 59, 3476, 2731, 3475, - 3472, 2758, 3471, 202, 3468, 3467, 3465, 3464, 3463, 3460, - 204, 203, 199, 3458, 3456, 3451, 3448, 3447, 3446, 3444, - 3441, 3433, 45, 107, 62, 117, 217, 226, 3430, 3429, - 42, 186, 216, 3428, 3423, 3422, 3421, 3417, 130, 213, - 99, 101, 214, 3416, 3414, 90, 3412, 3410, 3409, 3404, - 3402, 19, 18, 36, 33, 3398, 3390, 3388, 26, 3384, - 209, 205, 201, 1160, 3381, 208, 126, 52, 3377, 3372, - 3371, 3369, 12, 10, 3368, 11, 3367, 6, 3366, 3365, - 3363, 3358, 3356, 3355, 3354, 3351, 3343, 3342, 3331, 3330, - 3320, 3318, 3294, 3293, 3292, 297, 3286, 3285, 47, 3281, - 94, 3279, 3278, 3277, 3274, 3272, 20, 3270, 3266, 28, - 48, 75, 3262, 3260, 49, 3259, 3258, 3257, 3256, 3251, - 32, 3250, 39, 3248, 80, 3247, 3246, 136, 3244, 3241, - 3228, 57, 3226, 3224, 3218, 27, 193, 3217, 3214, 161, - 3213, 3212, 3211, 190, 221, 3209, 2351, 3207, 121, 3206, - 3205, 3203, 188, 187, 223, 3201, 115, 3197, 3196, 3192, - 3188, 145, 3186, 3185, 4599, 3182, 3179, 16, 21, 140, - 3178, 3177, 166, 14, 77, 3176, 9, 4, 3175, 3172, - 17, 88, 3167, 113, 3166, 3165, 116, 78, 3164, 108, - 111, 3163, 3162, 25, 15, 3159, 1, 3, 2, 81, - 3158, 3155, 124, 3147, 3145, 3144, 106, 3143, 3140, 4579, - 3138, 102, 146, 112, 92, 3137, 183, 72, 3136, 3132, - 3129, 3127, 3123, 3122, 63, 3120, 3119, 3117, 158, 191, - 118, 3115, 3110, 149, 366, 144, 64, 148, 3107, 173, - 3106, 147, 96, 3083, 194, 3076, 3071, 154, 156, 3068, - 3067, 71, 181, 206, 3059, 110, 141, 128, 143, 104, - 160, 3044, 3043, 3036, 73, 85, 3035, 3031, 3025, 3024, - 195, 3019, 3018, 83, 3017, 70, 3016, 192, 3005, 330, - 76, 3003, 189, 178, 3001, 86, 185, 2999, 2998, 2986, - 82, 133, 84, 69, 2985, 175, 182, 137, 179, 2983, - 2974, 66, 2972, 2969, 2965, 215, 320, 2963, 2960, 291, - 196, 163, 150, 100, 2958, 222, 2952, 2948, 2947, 29, - 5792, 8106, 211, 44, 184, 2944, 2933, 9925, 30, 46, - 43, 2932, 219, 2931, 142, 2927, 2922, 2917, 218, 224, - 120, 180, 74, 2904, 2901, 2896, 2891, 37, 2885, 2883, - 2882, 2881, 2877, 2875, 58, 56, 55, 89, 237, 79, - 24, 109, 177, 172, 87, 2874, 2871, 2868, 134, 103, - 2862, 174, 171, 138, 132, 2858, 198, 164, 127, 2854, - 65, 54, 2852, 2851, 2846, 2842, 105, 2838, 2837, 2835, - 2832, 169, 165, 131, 97, 2831, 98, 122, 170, 168, - 61, 2830, 50, 2806, 2805, 53, 212, 68, 2800, 2799, - 2796, 40, 2795, 31, 119, 125, 2793, 7762, 2790, 34, - 283, 167, 2786, 2779, 13, 23, 22, 2778, 2771, 2768, - 2766, 152, 2764, 2760, 2756, 2755, 38, 51, 35, 7, - 123, 159, 95, 2754, 2746, 162, 2737, 2735, 0, 1830, - 139, 2732, 227, + 0, 3611, 3609, 40, 11, 54, 52, 3607, 3018, 3606, + 3605, 3010, 3602, 193, 3600, 3599, 3598, 3597, 3596, 3595, + 191, 190, 189, 3592, 3587, 3580, 3573, 3571, 3567, 3564, + 3563, 3560, 71, 106, 105, 123, 227, 209, 3557, 3555, + 68, 179, 214, 3553, 3550, 3549, 3548, 3547, 131, 226, + 96, 99, 207, 3546, 3537, 84, 3536, 3526, 3525, 3522, + 3520, 3, 14, 39, 38, 3518, 3516, 3513, 25, 3511, + 203, 202, 200, 1134, 3505, 201, 128, 57, 3501, 3497, + 3495, 3493, 9, 4, 3491, 6, 3489, 10, 3487, 3485, + 3483, 3481, 3479, 3477, 3475, 3473, 3471, 3470, 3465, 3464, + 3462, 3460, 3458, 3457, 3453, 299, 3451, 3450, 37, 3447, + 87, 3446, 3445, 3441, 3438, 3437, 16, 3436, 3435, 23, + 51, 61, 3433, 3432, 59, 3431, 3430, 3429, 3424, 3423, + 31, 3422, 43, 3412, 55, 3411, 3410, 136, 3409, 3407, + 3404, 53, 3403, 3400, 3396, 41, 178, 3395, 3393, 159, + 3391, 3390, 3389, 185, 213, 3387, 2584, 3383, 111, 3381, + 3380, 3379, 184, 181, 218, 3377, 112, 3376, 3375, 3374, + 3373, 139, 3372, 3365, 668, 3364, 3362, 21, 15, 309, + 3361, 3360, 212, 19, 82, 3356, 24, 47, 3355, 3351, + 17, 83, 3349, 116, 3348, 3347, 119, 74, 3345, 126, + 115, 3344, 3341, 22, 13, 3338, 7, 1, 2, 66, + 3334, 3333, 122, 3331, 3330, 3329, 104, 3328, 3327, 5612, + 3325, 100, 144, 113, 72, 3324, 183, 65, 3321, 3314, + 3313, 3312, 3311, 3308, 64, 3305, 3304, 3301, 208, 1601, + 120, 3297, 3296, 150, 356, 146, 79, 142, 3289, 234, + 3283, 192, 88, 3276, 187, 3271, 3265, 160, 148, 3262, + 3260, 121, 180, 205, 3253, 109, 138, 130, 141, 107, + 176, 3251, 3248, 3241, 102, 70, 3239, 3237, 3234, 3224, + 186, 3221, 3217, 73, 3214, 97, 3212, 182, 3207, 140, + 63, 3205, 197, 174, 3204, 77, 177, 3198, 3197, 3194, + 62, 101, 69, 45, 3193, 171, 175, 135, 170, 3192, + 3189, 86, 3187, 3182, 3181, 75, 211, 337, 3180, 3176, + 296, 194, 153, 145, 95, 3175, 217, 3174, 3173, 3171, + 26, 4168, 5525, 204, 85, 173, 3170, 3167, 7377, 28, + 81, 36, 3166, 220, 3165, 149, 3162, 3160, 3159, 215, + 221, 117, 172, 67, 3158, 3154, 3152, 3148, 30, 3147, + 3141, 3139, 3136, 3132, 3130, 50, 48, 46, 92, 210, + 80, 27, 108, 169, 164, 76, 3129, 3126, 3124, 134, + 98, 3120, 167, 165, 151, 143, 3115, 195, 155, 133, + 3113, 78, 44, 3104, 3091, 3089, 3088, 118, 3085, 3084, + 3083, 3082, 168, 157, 132, 90, 3077, 94, 103, 162, + 158, 60, 3070, 58, 3069, 3068, 42, 206, 49, 3067, + 3065, 3062, 35, 3057, 29, 124, 127, 3053, 5258, 3052, + 32, 236, 166, 3050, 3049, 12, 18, 20, 3046, 3045, + 3043, 3042, 147, 3036, 3035, 3033, 3029, 34, 56, 33, + 8, 125, 152, 89, 3027, 3021, 163, 3014, 3012, 0, + 1375, 137, 3011, 222, } -//line sql.y:9281 +//line sql.y:9298 type yySymType struct { union any empty struct{} @@ -9381,7 +9098,7 @@ func (st *yySymType) withUnion() *With { } var yyR1 = [...]int{ - 0, 457, 7, 7, 11, 9, 9, 8, 8, 8, + 0, 458, 7, 7, 11, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, @@ -9391,56 +9108,56 @@ var yyR1 = [...]int{ 60, 60, 62, 62, 65, 65, 63, 64, 61, 61, 61, 61, 61, 170, 170, 273, 273, 273, 83, 81, 81, 84, 84, 85, 85, 86, 86, 89, 89, 88, - 88, 87, 295, 427, 293, 293, 31, 100, 40, 40, + 88, 87, 295, 428, 293, 293, 31, 100, 40, 40, 39, 39, 42, 42, 41, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 32, 32, 32, 32, 33, 33, 33, 33, 33, 38, 38, 18, 19, 37, 37, 37, 20, 20, 135, - 135, 21, 22, 22, 22, 22, 460, 460, 214, 214, + 135, 21, 22, 22, 22, 22, 461, 461, 214, 214, 212, 212, 213, 213, 300, 300, 23, 304, 304, 306, 306, 306, 306, 294, 294, 294, 24, 24, 305, 305, - 307, 307, 307, 310, 310, 310, 310, 351, 351, 351, - 25, 25, 25, 25, 25, 25, 155, 429, 429, 428, - 423, 423, 422, 422, 421, 426, 426, 425, 425, 424, + 307, 307, 307, 310, 310, 310, 310, 352, 352, 352, + 25, 25, 25, 25, 25, 25, 155, 430, 430, 429, + 424, 424, 423, 423, 422, 427, 427, 426, 426, 425, 45, 44, 46, 46, 46, 47, 56, 56, 56, 56, - 57, 58, 430, 430, 392, 74, 74, 73, 73, 73, + 57, 58, 431, 431, 393, 74, 74, 73, 73, 73, 73, 73, 73, 75, 75, 71, 71, 70, 70, 72, - 72, 394, 394, 380, 380, 393, 393, 393, 393, 393, - 393, 393, 379, 379, 167, 167, 271, 271, 271, 271, + 72, 395, 395, 381, 381, 394, 394, 394, 394, 394, + 394, 394, 380, 380, 167, 167, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, - 271, 271, 271, 445, 445, 445, 445, 444, 444, 272, + 271, 271, 271, 446, 446, 446, 446, 445, 445, 272, 272, 272, 272, 272, 272, 272, 272, 272, 178, 178, 190, 190, 190, 190, 190, 190, 176, 176, 177, 175, 175, 175, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 449, 449, - 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, - 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, - 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, - 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, + 183, 183, 183, 183, 183, 183, 183, 183, 450, 450, + 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, + 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, + 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, + 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 189, 189, 184, 184, 184, 186, 186, 185, 185, 185, - 187, 187, 446, 446, 446, 446, 357, 357, 357, 357, - 360, 360, 358, 358, 358, 358, 358, 358, 358, 358, - 358, 359, 359, 359, 359, 359, 359, 359, 361, 361, - 361, 361, 361, 362, 362, 362, 362, 362, 362, 362, - 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, - 363, 363, 363, 363, 363, 363, 363, 363, 378, 378, - 367, 367, 372, 372, 373, 373, 374, 374, 374, 375, - 375, 375, 376, 376, 369, 369, 369, 369, 369, 369, - 369, 369, 369, 371, 371, 370, 370, 370, 381, 406, - 406, 405, 405, 403, 403, 403, 403, 403, 403, 403, - 403, 390, 390, 400, 400, 400, 400, 400, 389, 389, - 385, 385, 385, 386, 386, 387, 387, 384, 384, 388, - 388, 402, 402, 401, 401, 382, 382, 383, 383, 408, - 447, 447, 447, 447, 447, 448, 448, 409, 437, 439, - 439, 439, 438, 438, 435, 436, 434, 434, 434, 434, - 434, 110, 110, 110, 323, 323, 324, 324, 398, 398, - 397, 397, 397, 399, 399, 396, 396, 396, 396, 396, - 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, - 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, - 396, 396, 396, 396, 396, 396, 318, 318, 318, 433, - 433, 433, 433, 433, 433, 432, 432, 432, 395, 395, - 395, 395, 431, 431, 76, 76, 252, 252, 450, 450, - 452, 452, 452, 53, 53, 53, 53, 53, 53, 52, + 187, 187, 447, 447, 447, 447, 358, 358, 358, 358, + 361, 361, 359, 359, 359, 359, 359, 359, 359, 359, + 359, 360, 360, 360, 360, 360, 360, 360, 362, 362, + 362, 362, 362, 363, 363, 363, 363, 363, 363, 363, + 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, + 364, 364, 364, 364, 364, 364, 364, 364, 379, 379, + 368, 368, 373, 373, 374, 374, 375, 375, 375, 376, + 376, 376, 377, 377, 370, 370, 370, 370, 370, 370, + 370, 370, 370, 372, 372, 371, 371, 371, 382, 407, + 407, 406, 406, 404, 404, 404, 404, 404, 404, 404, + 404, 391, 391, 401, 401, 401, 401, 401, 390, 390, + 386, 386, 386, 387, 387, 388, 388, 385, 385, 389, + 389, 403, 403, 402, 402, 383, 383, 384, 384, 409, + 448, 448, 448, 448, 448, 449, 449, 410, 438, 440, + 440, 440, 439, 439, 436, 437, 435, 435, 435, 435, + 435, 110, 110, 110, 324, 324, 325, 325, 399, 399, + 398, 398, 398, 400, 400, 397, 397, 397, 397, 397, + 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, + 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, + 397, 397, 397, 397, 397, 397, 319, 319, 319, 434, + 434, 434, 434, 434, 434, 433, 433, 433, 396, 396, + 396, 396, 432, 432, 76, 76, 252, 252, 451, 451, + 453, 453, 453, 53, 53, 53, 53, 53, 53, 52, 52, 52, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, @@ -9448,64 +9165,64 @@ var yyR1 = [...]int{ 49, 49, 49, 49, 49, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 137, - 137, 138, 138, 138, 138, 140, 140, 140, 411, 411, - 77, 77, 3, 3, 202, 204, 205, 205, 203, 203, - 203, 203, 203, 203, 79, 79, 78, 78, 207, 206, - 208, 208, 208, 1, 1, 2, 2, 4, 4, 416, - 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, - 416, 377, 377, 377, 410, 410, 412, 139, 139, 139, - 139, 139, 139, 139, 139, 139, 139, 143, 142, 142, - 141, 144, 144, 144, 144, 144, 144, 144, 144, 414, - 414, 414, 80, 80, 415, 364, 365, 366, 5, 6, - 391, 413, 151, 151, 27, 43, 43, 28, 28, 28, - 28, 28, 29, 29, 90, 93, 93, 91, 91, 91, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 137, 137, 138, 138, 138, 138, 140, 140, 140, + 412, 412, 77, 77, 3, 3, 202, 204, 205, 205, + 203, 203, 203, 203, 203, 203, 79, 79, 78, 78, + 207, 206, 208, 208, 208, 1, 1, 2, 2, 4, + 4, 417, 417, 417, 417, 417, 417, 417, 417, 417, + 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, + 417, 417, 417, 378, 378, 378, 411, 411, 413, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 143, + 142, 142, 141, 144, 144, 144, 144, 144, 144, 144, + 144, 415, 415, 415, 80, 80, 416, 365, 366, 367, + 5, 6, 392, 414, 151, 151, 27, 43, 43, 28, + 28, 28, 28, 28, 29, 29, 90, 93, 93, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 328, 328, 317, 317, 326, 326, 316, - 316, 342, 342, 342, 319, 319, 319, 320, 320, 443, - 443, 443, 313, 313, 92, 92, 92, 343, 343, 343, - 343, 95, 95, 453, 453, 454, 454, 455, 455, 455, - 96, 97, 97, 346, 346, 347, 347, 98, 99, 111, - 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, - 136, 136, 136, 13, 13, 13, 13, 107, 107, 107, - 12, 12, 14, 94, 94, 101, 440, 440, 441, 442, - 442, 442, 442, 102, 104, 30, 30, 30, 30, 30, - 30, 161, 161, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 156, 156, 156, 150, 150, - 461, 105, 106, 106, 154, 154, 154, 147, 147, 147, - 153, 153, 153, 15, 15, 16, 298, 298, 17, 17, - 160, 160, 159, 159, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 157, 157, 158, 158, 158, - 158, 335, 335, 335, 334, 334, 196, 196, 198, 197, - 197, 199, 199, 200, 200, 200, 200, 250, 250, 222, - 222, 290, 290, 291, 291, 289, 289, 297, 297, 292, - 292, 292, 292, 301, 301, 201, 201, 201, 201, 209, - 209, 210, 210, 211, 211, 345, 345, 340, 340, 340, - 339, 339, 215, 215, 215, 217, 216, 216, 216, 216, - 218, 218, 220, 220, 219, 219, 221, 226, 226, 225, - 225, 223, 223, 223, 223, 223, 223, 224, 224, 224, - 224, 227, 227, 174, 174, 174, 174, 174, 174, 174, - 174, 451, 451, 188, 188, 188, 188, 188, 188, 188, - 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, - 191, 280, 280, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, 182, 182, + 91, 91, 91, 91, 91, 329, 329, 318, 318, 327, + 327, 317, 317, 343, 343, 343, 320, 320, 320, 321, + 321, 444, 444, 444, 313, 313, 92, 92, 92, 344, + 344, 344, 344, 95, 95, 454, 454, 455, 455, 456, + 456, 456, 96, 97, 97, 347, 347, 348, 348, 98, + 99, 111, 111, 111, 111, 111, 112, 112, 112, 112, + 112, 112, 136, 136, 136, 13, 13, 13, 13, 107, + 107, 107, 12, 12, 14, 94, 94, 101, 441, 441, + 442, 443, 443, 443, 443, 102, 104, 30, 30, 30, + 30, 30, 30, 161, 161, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 156, 156, 156, + 150, 150, 462, 105, 106, 106, 154, 154, 154, 147, + 147, 147, 153, 153, 153, 15, 15, 16, 298, 298, + 17, 17, 160, 160, 159, 159, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 157, 157, 158, + 158, 158, 158, 336, 336, 336, 335, 335, 196, 196, + 198, 197, 197, 199, 199, 200, 200, 200, 200, 250, + 250, 222, 222, 290, 290, 291, 291, 289, 289, 297, + 297, 292, 292, 292, 292, 301, 301, 201, 201, 201, + 201, 209, 209, 210, 210, 211, 211, 346, 346, 341, + 341, 341, 340, 340, 215, 215, 215, 217, 216, 216, + 216, 216, 218, 218, 220, 220, 219, 219, 221, 226, + 226, 225, 225, 223, 223, 223, 223, 223, 223, 224, + 224, 224, 224, 227, 227, 174, 174, 174, 174, 174, + 174, 174, 174, 452, 452, 188, 188, 188, 188, 188, + 188, 188, 191, 191, 191, 191, 191, 191, 191, 191, + 191, 191, 191, 280, 280, 179, 179, 179, 179, 179, + 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, - 182, 182, 182, 255, 255, 254, 254, 113, 113, 113, - 114, 114, 115, 115, 115, 115, 115, 116, 116, 116, - 116, 116, 116, 116, 118, 118, 117, 117, 241, 241, - 332, 332, 119, 120, 120, 121, 121, 124, 124, 123, - 122, 122, 128, 128, 125, 125, 127, 127, 126, 129, - 129, 130, 131, 131, 314, 314, 228, 228, 237, 237, - 237, 237, 229, 229, 230, 230, 230, 230, 230, 230, - 238, 238, 238, 249, 239, 239, 235, 235, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 234, - 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 182, 182, 182, 182, 182, 255, 255, 254, 254, 113, + 113, 113, 114, 114, 115, 115, 115, 115, 115, 116, + 116, 116, 116, 116, 116, 116, 118, 118, 117, 117, + 241, 241, 333, 333, 119, 120, 120, 121, 121, 124, + 124, 123, 122, 122, 128, 128, 125, 125, 127, 127, + 126, 129, 129, 130, 131, 131, 314, 314, 228, 228, + 237, 237, 237, 237, 229, 229, 230, 230, 230, 230, + 230, 230, 238, 238, 238, 249, 239, 239, 235, 235, + 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, + 233, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, @@ -9524,59 +9241,38 @@ var yyR1 = [...]int{ 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, - 234, 234, 193, 193, 193, 193, 260, 260, 180, 180, + 234, 234, 234, 234, 193, 193, 193, 193, 260, 260, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 181, 181, 194, 194, 194, 194, 195, - 195, 195, 195, 195, 195, 195, 353, 353, 145, 145, + 180, 180, 180, 180, 180, 181, 181, 194, 194, 194, + 194, 195, 195, 195, 195, 195, 195, 195, 354, 354, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, - 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 462, 462, 368, 368, - 368, 236, 236, 236, 236, 236, 152, 152, 152, 152, - 152, 350, 350, 350, 354, 354, 354, 352, 352, 352, - 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 355, 355, 258, 258, 148, 148, 256, 256, - 257, 259, 259, 251, 251, 251, 251, 253, 253, 232, - 232, 232, 261, 261, 356, 356, 262, 262, 132, 133, - 133, 134, 134, 263, 263, 265, 264, 264, 266, 267, - 267, 267, 268, 268, 269, 269, 269, 55, 55, 55, - 55, 55, 50, 50, 50, 50, 51, 51, 51, 51, - 163, 163, 164, 164, 164, 166, 166, 165, 165, 108, - 108, 109, 109, 109, 420, 420, 419, 419, 417, 418, - 418, 418, 418, 171, 171, 172, 173, 173, 173, 168, - 168, 169, 169, 287, 287, 287, 287, 287, 287, 287, - 270, 270, 270, 270, 299, 299, 296, 296, 278, 278, - 278, 274, 274, 276, 276, 276, 277, 277, 277, 275, - 284, 284, 286, 286, 285, 285, 281, 281, 282, 282, - 283, 283, 283, 279, 279, 231, 231, 231, 231, 231, - 288, 288, 288, 288, 344, 344, 344, 302, 302, 242, - 242, 243, 243, 247, 247, 246, 246, 244, 245, 248, - 248, 192, 303, 303, 311, 308, 308, 309, 309, 336, - 336, 336, 312, 312, 325, 325, 321, 321, 322, 322, - 315, 315, 327, 327, 327, 103, 240, 240, 407, 407, - 404, 331, 331, 333, 333, 337, 337, 341, 341, 338, - 338, 10, 456, 456, 456, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 146, 146, 146, 146, 146, 146, 146, 146, 463, 463, + 369, 369, 369, 236, 236, 236, 236, 236, 152, 152, + 152, 152, 152, 351, 351, 351, 355, 355, 355, 353, + 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, + 353, 353, 353, 353, 356, 356, 258, 258, 148, 148, + 256, 256, 257, 259, 259, 251, 251, 251, 251, 253, + 253, 232, 232, 232, 261, 261, 357, 357, 262, 262, + 132, 133, 133, 134, 134, 263, 263, 265, 264, 264, + 266, 267, 267, 267, 268, 268, 269, 269, 269, 55, + 55, 55, 55, 55, 50, 50, 50, 50, 51, 51, + 51, 51, 163, 163, 164, 164, 164, 166, 166, 165, + 165, 108, 108, 109, 109, 109, 421, 421, 420, 420, + 418, 419, 419, 419, 419, 171, 171, 172, 173, 173, + 173, 168, 168, 169, 169, 287, 287, 287, 287, 287, + 287, 287, 270, 270, 270, 270, 299, 299, 296, 296, + 278, 278, 278, 274, 274, 276, 276, 276, 277, 277, + 277, 275, 284, 284, 286, 286, 285, 285, 281, 281, + 282, 282, 283, 283, 283, 279, 279, 231, 231, 231, + 231, 231, 315, 315, 288, 288, 288, 288, 345, 345, + 345, 302, 302, 242, 242, 243, 243, 247, 247, 246, + 246, 244, 245, 248, 248, 192, 303, 303, 311, 308, + 308, 309, 309, 337, 337, 337, 312, 312, 326, 326, + 322, 322, 323, 323, 316, 316, 328, 328, 328, 103, + 240, 240, 408, 408, 405, 332, 332, 334, 334, 338, + 338, 342, 342, 339, 339, 10, 457, 457, 457, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, @@ -9593,36 +9289,58 @@ var yyR1 = [...]int{ 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 458, 459, 348, 349, 349, 349, + 330, 330, 330, 330, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 459, 460, 349, 350, + 350, 350, } var yyR2 = [...]int{ @@ -9693,114 +9411,114 @@ var yyR2 = [...]int{ 3, 3, 3, 2, 2, 3, 4, 4, 2, 11, 3, 6, 8, 6, 6, 6, 13, 8, 6, 6, 10, 7, 5, 5, 5, 5, 7, 5, 5, 5, - 5, 5, 7, 7, 5, 5, 5, 5, 6, 0, - 6, 5, 6, 4, 5, 0, 8, 9, 0, 3, - 0, 1, 0, 3, 8, 4, 1, 3, 3, 6, - 7, 7, 8, 4, 0, 1, 0, 1, 3, 3, - 1, 1, 2, 1, 1, 0, 2, 0, 2, 5, - 3, 7, 4, 4, 4, 4, 3, 3, 3, 7, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 2, 0, 2, 2, 1, 3, 2, 0, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 3, 1, 3, - 3, 0, 2, 2, 2, 2, 2, 2, 2, 4, - 4, 3, 0, 1, 4, 3, 4, 4, 3, 3, - 3, 2, 1, 3, 3, 3, 5, 7, 7, 6, - 5, 5, 3, 2, 4, 5, 5, 3, 3, 7, - 3, 3, 3, 3, 4, 7, 5, 2, 4, 4, - 4, 4, 4, 5, 5, 4, 4, 4, 4, 4, - 4, 4, 4, 2, 2, 4, 4, 4, 4, 4, - 2, 3, 3, 3, 3, 3, 5, 2, 3, 3, - 2, 3, 4, 4, 4, 3, 4, 4, 5, 3, - 5, 3, 5, 0, 1, 0, 1, 0, 1, 1, - 1, 0, 2, 2, 0, 2, 2, 0, 2, 0, - 1, 1, 1, 1, 2, 1, 3, 1, 1, 1, - 1, 1, 3, 0, 1, 1, 3, 3, 2, 2, - 1, 1, 5, 0, 1, 0, 1, 2, 3, 0, - 3, 3, 3, 1, 0, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, - 4, 4, 4, 2, 2, 3, 1, 3, 2, 1, - 2, 1, 2, 2, 4, 3, 3, 6, 4, 7, - 6, 1, 3, 2, 2, 2, 2, 1, 1, 1, - 3, 2, 1, 1, 1, 0, 1, 1, 0, 3, - 0, 2, 0, 2, 1, 2, 2, 0, 1, 1, - 0, 1, 1, 5, 5, 4, 0, 2, 4, 4, - 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 1, 2, 3, - 5, 0, 1, 2, 1, 1, 0, 1, 2, 1, - 3, 1, 1, 1, 4, 3, 1, 1, 2, 3, - 7, 0, 3, 0, 1, 1, 3, 1, 3, 1, - 1, 3, 3, 1, 3, 4, 4, 4, 3, 2, - 4, 0, 1, 0, 2, 0, 1, 0, 1, 2, - 1, 1, 1, 2, 2, 1, 2, 3, 2, 3, - 2, 2, 2, 1, 1, 3, 3, 0, 1, 1, - 2, 6, 5, 6, 6, 5, 5, 0, 2, 3, - 3, 0, 2, 3, 3, 3, 2, 3, 1, 3, - 6, 1, 1, 3, 4, 3, 4, 4, 4, 1, - 3, 4, 5, 6, 3, 4, 5, 6, 3, 4, - 1, 1, 1, 3, 3, 3, 3, 3, 3, 5, - 5, 3, 3, 3, 3, 3, 3, 1, 1, 1, - 1, 1, 3, 1, 1, 1, 2, 2, 2, 2, - 1, 1, 2, 7, 7, 6, 6, 2, 2, 5, - 6, 3, 3, 1, 3, 1, 3, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 4, 2, 4, 0, 1, 2, 5, 0, 3, - 0, 1, 4, 4, 2, 1, 0, 0, 1, 1, - 2, 2, 1, 1, 2, 2, 0, 1, 1, 1, - 1, 5, 1, 3, 0, 3, 1, 1, 1, 2, - 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 3, 4, 6, 4, 4, - 8, 8, 6, 8, 6, 5, 4, 10, 2, 2, - 1, 2, 2, 2, 2, 2, 5, 6, 6, 6, - 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 8, 4, 8, 8, 6, 5, 4, 4, - 4, 5, 7, 4, 4, 7, 4, 4, 6, 6, - 6, 8, 6, 6, 4, 4, 3, 4, 6, 6, - 4, 4, 6, 4, 6, 4, 4, 4, 4, 4, - 4, 6, 4, 6, 4, 4, 4, 6, 4, 6, - 4, 4, 6, 4, 6, 4, 6, 8, 4, 6, - 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, + 6, 6, 5, 5, 7, 7, 5, 5, 5, 5, + 6, 0, 6, 5, 6, 4, 5, 0, 8, 9, + 0, 3, 0, 1, 0, 3, 8, 4, 1, 3, + 3, 6, 7, 7, 8, 4, 0, 1, 0, 1, + 3, 3, 1, 1, 2, 1, 1, 0, 2, 0, + 2, 5, 3, 7, 4, 4, 4, 4, 3, 3, + 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 2, 0, 2, 2, 1, 3, 2, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, + 1, 3, 3, 0, 2, 2, 2, 2, 2, 2, + 2, 4, 4, 3, 0, 1, 4, 3, 4, 4, + 3, 3, 3, 2, 1, 3, 3, 3, 5, 7, + 7, 6, 5, 5, 3, 2, 4, 5, 5, 3, + 3, 7, 3, 3, 3, 3, 4, 7, 5, 2, + 4, 4, 4, 4, 4, 5, 5, 4, 4, 4, + 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, + 4, 4, 2, 3, 3, 3, 3, 3, 5, 2, + 3, 3, 2, 3, 4, 4, 4, 3, 4, 4, + 5, 3, 5, 3, 5, 0, 1, 0, 1, 0, + 1, 1, 1, 0, 2, 2, 0, 2, 2, 0, + 2, 0, 1, 1, 1, 1, 2, 1, 3, 1, + 1, 1, 1, 1, 3, 0, 1, 1, 3, 3, + 2, 2, 1, 1, 5, 0, 1, 0, 1, 2, + 3, 0, 3, 3, 3, 1, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 1, 1, 4, 4, 4, 2, 2, 3, 1, 3, + 2, 1, 2, 1, 2, 2, 4, 3, 3, 6, + 4, 7, 6, 1, 3, 2, 2, 2, 2, 1, + 1, 1, 3, 2, 1, 1, 1, 0, 1, 1, + 0, 3, 0, 2, 0, 2, 1, 2, 2, 0, + 1, 1, 0, 1, 1, 5, 5, 4, 0, 2, + 4, 4, 0, 1, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, + 2, 3, 5, 0, 1, 2, 1, 1, 0, 1, + 2, 1, 3, 1, 1, 1, 4, 3, 1, 1, + 2, 3, 7, 0, 3, 0, 1, 1, 3, 1, + 3, 1, 1, 3, 3, 1, 3, 4, 4, 4, + 3, 2, 4, 0, 1, 0, 2, 0, 1, 0, + 1, 2, 1, 1, 1, 2, 2, 1, 2, 3, + 2, 3, 2, 2, 2, 1, 1, 3, 3, 0, + 1, 1, 2, 6, 5, 6, 6, 5, 5, 0, + 2, 3, 3, 0, 2, 3, 3, 3, 2, 3, + 1, 3, 6, 1, 1, 3, 4, 3, 4, 4, + 4, 1, 3, 4, 5, 6, 3, 4, 5, 6, + 3, 4, 1, 1, 1, 3, 3, 3, 3, 3, + 3, 5, 5, 3, 3, 3, 3, 3, 3, 1, + 1, 1, 1, 1, 3, 1, 1, 1, 2, 2, + 2, 2, 1, 1, 2, 7, 7, 6, 6, 2, + 2, 5, 6, 3, 3, 1, 3, 1, 3, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 4, 2, 4, 0, 1, 2, 5, + 0, 3, 0, 1, 4, 4, 2, 1, 0, 0, + 1, 1, 2, 2, 1, 1, 2, 2, 0, 1, + 1, 1, 1, 5, 1, 3, 0, 3, 1, 1, + 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 3, 4, 6, + 4, 4, 8, 8, 6, 8, 6, 5, 4, 10, + 2, 2, 1, 2, 2, 2, 2, 2, 5, 6, + 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 8, 4, 8, 8, 6, 5, + 4, 4, 4, 5, 7, 4, 4, 7, 4, 4, + 6, 6, 6, 8, 6, 6, 4, 4, 3, 4, + 6, 6, 4, 4, 6, 4, 6, 4, 4, 4, + 4, 4, 4, 6, 4, 6, 4, 4, 4, 6, + 4, 6, 4, 4, 6, 4, 6, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, - 4, 6, 8, 4, 4, 4, 6, 4, 6, 4, - 8, 6, 4, 4, 6, 4, 6, 8, 4, 6, - 8, 4, 4, 6, 8, 6, 4, 6, 6, 8, - 10, 7, 8, 8, 9, 4, 4, 4, 4, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, - 4, 4, 4, 4, 4, 6, 4, 6, 5, 9, - 6, 9, 8, 6, 8, 8, 8, 6, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 2, 6, 8, - 10, 12, 14, 6, 8, 8, 10, 12, 14, 6, - 8, 10, 12, 6, 8, 4, 4, 3, 4, 6, - 6, 4, 6, 4, 6, 8, 0, 2, 1, 1, + 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, + 6, 8, 4, 6, 8, 4, 4, 4, 6, 4, + 6, 4, 8, 6, 4, 4, 6, 4, 6, 8, + 4, 6, 8, 4, 4, 6, 8, 6, 4, 6, + 6, 8, 10, 7, 8, 8, 9, 4, 4, 4, + 4, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 4, 4, 4, 4, 4, 4, 6, 4, 6, + 5, 9, 6, 9, 8, 6, 8, 8, 8, 6, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, + 6, 8, 10, 12, 14, 6, 8, 8, 10, 12, + 14, 6, 8, 10, 12, 6, 8, 4, 4, 3, + 4, 6, 6, 4, 6, 4, 6, 8, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 2, 0, 2, - 3, 4, 4, 4, 4, 4, 0, 3, 4, 7, - 3, 1, 1, 1, 0, 5, 5, 2, 3, 1, - 2, 2, 1, 2, 1, 2, 2, 1, 2, 2, - 1, 1, 0, 1, 0, 1, 0, 2, 1, 2, - 4, 0, 2, 1, 1, 3, 5, 1, 1, 1, - 2, 2, 0, 4, 0, 2, 0, 2, 2, 1, - 3, 0, 1, 0, 1, 3, 1, 3, 2, 0, - 1, 1, 0, 1, 2, 4, 4, 0, 2, 2, - 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, - 0, 1, 3, 3, 3, 0, 3, 1, 1, 0, - 4, 0, 1, 1, 0, 1, 1, 3, 3, 0, - 1, 1, 1, 0, 1, 3, 1, 3, 2, 1, - 1, 0, 1, 2, 3, 4, 2, 3, 4, 4, - 9, 3, 5, 2, 3, 1, 1, 1, 0, 3, - 3, 0, 1, 0, 2, 2, 0, 2, 2, 2, - 0, 2, 1, 2, 3, 3, 0, 2, 1, 2, - 3, 4, 3, 0, 1, 3, 1, 6, 5, 4, - 1, 3, 3, 5, 0, 2, 5, 0, 5, 1, - 3, 1, 3, 1, 3, 1, 2, 3, 4, 1, - 1, 1, 1, 3, 3, 1, 2, 1, 1, 1, - 1, 1, 1, 1, 0, 1, 0, 2, 0, 3, - 0, 1, 0, 1, 1, 5, 0, 1, 0, 1, - 2, 1, 1, 1, 1, 1, 1, 0, 1, 1, - 1, 3, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, + 0, 2, 3, 4, 4, 4, 4, 4, 0, 3, + 4, 7, 3, 1, 1, 1, 0, 5, 5, 2, + 3, 1, 2, 2, 1, 2, 1, 2, 2, 1, + 2, 2, 1, 1, 0, 1, 0, 1, 0, 2, + 1, 2, 4, 0, 2, 1, 1, 3, 5, 1, + 1, 1, 2, 2, 0, 4, 0, 2, 0, 2, + 2, 1, 3, 0, 1, 0, 1, 3, 1, 3, + 2, 0, 1, 1, 0, 1, 2, 4, 4, 0, + 2, 2, 1, 1, 3, 3, 3, 3, 3, 3, + 3, 3, 0, 1, 3, 3, 3, 0, 3, 1, + 1, 0, 4, 0, 1, 1, 0, 1, 1, 3, + 3, 0, 1, 1, 1, 0, 1, 3, 1, 3, + 2, 1, 1, 0, 1, 2, 3, 4, 2, 3, + 4, 4, 9, 3, 5, 2, 3, 1, 1, 1, + 0, 3, 3, 0, 1, 0, 2, 2, 0, 2, + 2, 2, 0, 2, 1, 2, 3, 3, 0, 2, + 1, 2, 3, 4, 3, 0, 1, 3, 1, 6, + 5, 4, 1, 1, 1, 3, 3, 5, 0, 2, + 5, 0, 5, 1, 3, 1, 3, 1, 3, 1, + 2, 3, 4, 1, 1, 1, 1, 3, 3, 1, + 2, 1, 1, 1, 1, 1, 1, 1, 0, 1, + 0, 2, 0, 3, 0, 1, 0, 1, 1, 5, + 0, 1, 0, 1, 2, 1, 1, 1, 1, 1, + 1, 0, 1, 1, 1, 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -9867,917 +9585,918 @@ var yyR2 = [...]int{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 1, 1, } var yyChk = [...]int{ - -1000, -457, -7, -11, -105, -461, 787, -9, -8, -32, + -1000, -458, -7, -11, -105, -462, 788, -9, -8, -32, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, -90, -93, -91, -92, -95, -96, -97, -98, -99, -12, -14, -94, -30, -31, -100, -101, -102, -103, - -104, -15, -16, -17, -10, -35, -34, -33, 13, 14, - -135, -39, 35, -44, -45, -56, -46, -57, -47, 242, - -58, 244, 243, 292, 245, 409, 285, 83, 342, 343, - 345, 346, 347, 348, -136, 739, 290, 291, 247, 39, - 51, 36, 37, 40, 251, 298, 299, 250, 145, -36, - -40, 12, -458, 15, 511, 241, 287, 286, 31, -37, - 621, 95, -38, 63, -106, -11, -287, -270, 26, 36, - 32, -269, -265, -154, -270, 24, 22, 11, -105, -105, - -105, 16, 17, -105, -392, -394, 95, 174, 95, -290, - 95, -74, -73, -71, -70, -72, -75, 34, -53, -54, - -416, -52, -49, 246, 243, 302, 135, 136, 292, 293, - 294, 245, 275, 291, 295, 290, 311, -48, 90, 36, - 621, 624, -399, 242, 248, 249, 244, 512, 138, 137, - 84, -396, 404, 655, 757, -75, 759, 110, 113, 758, - 50, 265, 760, 761, 762, 662, 763, 274, 764, 765, - 766, 767, 773, 704, 774, 775, 776, 139, 11, -105, - -341, -337, 100, -330, 618, 277, 653, 465, 654, 327, - 90, 47, 42, 557, 628, 400, 404, 655, 542, 757, - 410, 342, 360, 354, 547, 548, 549, 383, 375, 619, - 656, 629, 330, 278, 315, 460, 751, 373, 149, 759, - 453, 334, 657, 293, 411, 412, 463, 658, 413, 110, - 345, 450, 772, 333, 659, 770, 113, 758, 350, 457, - 459, 458, 88, 541, 57, 754, 464, 338, 50, 288, - 470, 471, 371, 250, 367, 760, 316, 660, 631, 309, - 138, 135, 779, 39, 363, 56, 33, 769, 137, 55, - 761, 165, 661, 762, 662, 415, 390, 745, 54, 416, - 294, 663, 93, 299, 623, 339, 753, 417, 562, 364, - 418, 326, 768, 247, 664, 337, 734, 726, 727, 254, - 419, 420, 746, 395, 391, 396, 564, 665, 666, 442, - 546, 421, 730, 731, 255, 786, 58, 667, 668, 747, - 136, 669, 87, 763, 89, 358, 359, 670, 324, 276, - 567, 568, 444, 387, 524, 127, 531, 532, 120, 121, - 527, 122, 533, 123, 128, 534, 535, 536, 525, 124, - 117, 526, 537, 538, 388, 389, 125, 539, 119, 118, - 528, 530, 126, 540, 274, 38, 422, 620, 328, 64, - 332, 303, 445, 52, 393, 783, 51, 741, 569, 671, - 744, 386, 382, 521, 720, 59, 672, 673, 674, 675, - 543, 764, 385, 357, 381, 778, 4, 321, 455, 516, - 544, 765, 68, 249, 398, 397, 399, 456, 310, 441, - 378, 676, 677, 678, 281, 91, 679, 368, 25, 680, - 681, 423, 317, 682, 62, 683, 684, 448, 291, 685, - 60, 766, 721, 45, 686, 296, 780, 767, 687, 688, - 689, 740, 690, 298, 691, 425, 692, 728, 729, 424, - 392, 394, 570, 305, 426, 409, 722, 252, 622, 693, - 340, 362, 295, 771, 694, 282, 558, 559, 560, 561, - 752, 566, 565, 297, 302, 290, 449, 283, 695, 696, - 697, 698, 699, 331, 719, 700, 701, 346, 626, 773, - 522, 49, 461, 702, 703, 704, 705, 706, 325, 320, - 443, 452, 67, 92, 406, 707, 708, 750, 356, 351, - 43, 709, 710, 711, 712, 318, 99, 502, 504, 505, - 506, 507, 508, 503, 510, 713, 343, 61, 774, 775, - 776, 312, 777, 550, 551, 552, 553, 13, 604, 587, - 615, 588, 605, 589, 598, 590, 606, 614, 616, 571, - 579, 572, 580, 610, 593, 607, 599, 592, 591, 613, - 596, 600, 573, 581, 611, 597, 574, 582, 575, 583, - 576, 584, 609, 608, 601, 612, 577, 585, 603, 578, - 586, 602, 594, 595, 454, 473, 784, 785, 545, 462, - 428, 723, 139, 322, 323, 53, 379, 304, 714, 335, - 715, 369, 370, 518, 519, 384, 355, 380, 146, 737, - 344, 353, 735, 306, 429, 523, 292, 716, 451, 319, - 401, 131, 352, 407, 336, 627, 563, 311, 430, 749, - 625, 554, 555, 377, 374, 313, 556, 717, 402, 739, - 431, 266, 307, 308, 718, 736, 432, 433, 329, 434, - 435, 436, 437, 438, 440, 341, 439, 738, 732, 733, - 314, 501, 624, 349, 372, 408, 483, 484, 485, 486, + -104, -15, -16, -17, -10, -35, -34, -33, 12, 13, + -135, -39, 34, -44, -45, -56, -46, -57, -47, 242, + -58, 244, 243, 292, 245, 410, 285, 82, 343, 344, + 346, 347, 348, 349, -136, 740, 290, 291, 247, 38, + 50, 35, 36, 39, 251, 298, 299, 250, 144, -36, + -40, 11, -459, 14, 512, 241, 287, 286, 30, -37, + 622, 94, -38, 62, -106, -11, -287, -270, 25, 35, + 31, -269, -265, -154, -270, 23, 21, 10, -105, -105, + -105, 15, 16, -105, -393, -395, 94, 173, 94, -290, + 94, -74, -73, -71, -70, -72, -75, 33, -53, -54, + -417, -52, -49, 246, 243, 302, 134, 135, 292, 293, + 294, 245, 275, 291, 295, 290, 311, -48, 89, 35, + 622, 625, -400, 242, 248, 249, 244, 513, 137, 136, + 83, -397, 405, 656, 758, -75, 760, 109, 112, 759, + 49, 265, 761, 762, 763, 663, 764, 274, 765, 766, + 767, 768, 774, 705, 775, 776, 777, 138, 10, -105, + -342, -338, 99, -331, 619, 277, 654, 466, 655, 327, + 89, 46, 41, 558, 629, 401, 405, 656, 543, 758, + 411, 343, 361, 355, 548, 549, 550, 384, 376, 620, + 657, 630, 330, 278, 315, 461, 752, 374, 148, 760, + 454, 334, 658, 293, 412, 413, 464, 659, 414, 109, + 346, 451, 773, 333, 660, 771, 112, 759, 351, 458, + 460, 459, 87, 542, 56, 755, 465, 338, 49, 288, + 471, 472, 372, 250, 368, 761, 316, 661, 632, 309, + 137, 134, 780, 38, 364, 55, 32, 770, 136, 54, + 762, 164, 662, 763, 663, 416, 391, 746, 53, 417, + 294, 664, 92, 299, 624, 339, 754, 418, 563, 365, + 419, 326, 769, 247, 665, 337, 735, 727, 728, 254, + 420, 421, 747, 396, 392, 397, 565, 666, 667, 443, + 547, 422, 731, 732, 255, 787, 57, 668, 669, 748, + 135, 670, 86, 764, 88, 359, 360, 671, 324, 276, + 568, 569, 445, 388, 525, 126, 532, 533, 119, 120, + 528, 121, 534, 122, 127, 535, 536, 537, 526, 123, + 116, 527, 538, 539, 389, 390, 124, 540, 118, 117, + 529, 531, 125, 541, 274, 37, 423, 621, 328, 63, + 332, 303, 446, 51, 394, 784, 50, 742, 570, 672, + 745, 387, 383, 522, 721, 58, 673, 674, 675, 676, + 544, 765, 386, 358, 382, 779, 178, 321, 456, 517, + 545, 766, 67, 249, 399, 398, 400, 457, 310, 442, + 379, 677, 678, 679, 281, 90, 680, 369, 24, 681, + 682, 424, 317, 683, 61, 684, 685, 449, 291, 686, + 59, 767, 722, 44, 687, 296, 781, 768, 688, 689, + 690, 741, 691, 298, 692, 426, 693, 729, 730, 425, + 393, 395, 571, 305, 427, 410, 723, 252, 623, 694, + 340, 363, 295, 772, 695, 282, 559, 560, 561, 562, + 753, 567, 566, 297, 302, 290, 450, 283, 696, 697, + 698, 699, 700, 331, 720, 701, 702, 347, 627, 774, + 523, 48, 462, 703, 704, 705, 706, 707, 325, 320, + 444, 453, 66, 91, 407, 708, 709, 751, 357, 352, + 42, 710, 711, 712, 713, 318, 98, 503, 505, 506, + 507, 508, 509, 504, 511, 714, 344, 60, 775, 776, + 777, 312, 778, 551, 552, 553, 554, 12, 605, 588, + 616, 589, 606, 590, 599, 591, 607, 615, 617, 572, + 580, 573, 581, 611, 594, 608, 600, 593, 592, 614, + 597, 601, 574, 582, 612, 598, 575, 583, 576, 584, + 577, 585, 610, 609, 602, 613, 578, 586, 604, 579, + 587, 603, 595, 596, 455, 474, 785, 786, 546, 463, + 429, 724, 138, 322, 323, 52, 380, 304, 715, 335, + 716, 370, 371, 519, 520, 385, 356, 381, 145, 738, + 345, 354, 736, 306, 430, 524, 292, 717, 452, 319, + 402, 130, 353, 408, 336, 628, 564, 311, 431, 750, + 626, 65, 555, 556, 378, 375, 313, 557, 718, 403, + 740, 432, 266, 307, 308, 719, 737, 433, 434, 329, + 435, 436, 437, 438, 439, 441, 342, 440, 739, 733, + 734, 314, 502, 625, 350, 373, 409, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, - 497, 498, 499, 500, 520, 264, -105, 264, -219, -337, - -156, 741, 743, 193, -308, 412, -326, 414, 427, 422, - 432, 420, -317, 423, 425, 305, -443, 442, 264, 429, - 241, 415, 424, 433, 434, 329, 440, 435, 341, 439, - 314, 436, 437, 438, -427, 193, 762, 777, 344, 352, - 149, 376, 419, 417, 443, 741, 100, -343, 100, 101, - 102, -330, 344, -346, 349, -331, -427, -330, 347, -105, - -105, -348, -348, -156, -239, -174, 157, -188, -295, -191, - 101, -179, -182, -233, -234, -235, -236, -189, -253, -293, - 182, 183, 190, 158, -249, -192, 29, 617, 513, 512, - 193, 34, 236, 77, 78, 515, 516, 160, 63, 15, - 478, 479, -190, 468, 469, 480, 474, 475, 541, 543, - 544, 545, 542, 547, 548, 549, 550, 551, 552, 553, - 554, 555, 556, 546, 557, 518, 519, 129, 520, 117, - 119, 118, 127, 128, 521, 522, 523, 373, 569, 570, - 564, 567, 568, 566, 565, 388, 389, 524, 587, 588, - 592, 591, 589, 590, 593, 596, 597, 598, 599, 600, - 601, 603, 602, 594, 595, 572, 571, 573, 574, 575, - 576, 577, 578, 580, 579, 581, 582, 583, 584, 585, - 586, 604, 605, 606, 607, 608, 610, 609, 614, 613, - 611, 612, 616, 615, 525, 526, 120, 121, 122, 123, - 124, 125, 126, 527, 530, 528, 529, 531, 532, 533, - 538, 539, 534, 535, 536, 537, 540, 399, 397, 398, - 394, 393, 392, -115, -128, 644, 643, -129, 465, 470, - 471, 473, -180, -181, -194, -195, -331, -337, 269, 467, - 263, 188, 511, -183, -177, -251, 116, 102, -34, -248, - 466, 476, 477, 481, 472, 482, 630, 632, 647, 648, - 650, 635, 640, 639, 642, 558, 559, 560, 561, 562, - 563, 726, 727, 728, 729, 730, 731, 732, 733, -427, - -330, 100, -186, -184, -228, 103, 108, 111, 112, 114, - -449, 288, 369, 370, 130, -458, -244, -245, -185, 105, - 106, 107, 132, 133, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, - 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, 233, 234, 235, 755, 98, 104, 50, - 428, 428, -219, -105, -105, -105, -105, -456, 758, 622, - -263, -154, -265, -36, -34, -458, 12, -105, -34, -35, - -33, -40, -105, -42, 649, -41, -337, -105, 109, -270, - -287, 16, 67, 177, 48, 56, -299, -296, -295, 100, - 101, -268, -269, -37, -34, -174, 23, 41, 27, -158, - 184, -174, -337, -158, -315, 268, -105, -105, -304, -351, - 344, -306, 443, 741, 442, -294, -309, 100, -293, -308, - 441, 101, -393, 174, -379, -383, -331, 279, -409, 275, - -219, -402, -401, -331, -458, 28, -289, -331, -70, -71, - -72, -308, 192, 761, -137, 297, 301, 96, 96, -383, - -382, -381, -431, 301, 279, -408, -400, 271, 280, -389, - 272, 273, -384, 265, 151, -431, -384, 270, 280, 275, - 279, 301, 301, 139, 301, 139, 301, 301, 301, 301, - 301, 301, 301, 301, 301, 296, -390, 166, -390, 625, - 625, -396, -431, 275, 265, -431, -431, 271, -327, -384, - 267, 28, 267, 38, 38, -390, -390, -390, -308, 192, - -390, -390, -390, -390, 309, 309, -390, -390, -390, -390, - -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, - -390, -390, -390, 264, -430, -163, 439, 329, 467, 263, - -164, 90, -73, 311, -43, -219, -325, 265, 266, -430, - 305, 298, 322, -219, 237, 264, 744, -319, 174, 19, - -319, -316, 428, 426, 413, 418, -319, -319, -319, -319, - 312, 411, -385, 265, 38, 276, 428, 312, 411, 312, - 313, 312, 313, 421, 431, 312, -342, 18, 177, 467, - 416, 420, 305, 264, 306, 266, 430, 313, -342, 98, - -320, 174, 312, 428, 422, 308, -319, -319, -349, -458, - -333, -331, -329, 246, 41, 156, 28, 30, 159, 193, - 142, 23, 160, 40, 248, 376, 275, 192, 271, 262, - 256, 512, 241, 81, 630, 468, 475, 466, 474, 478, - 514, 515, 467, 414, 253, 34, 17, 632, 31, 286, - 27, 44, 186, 243, 163, 164, 633, 289, 29, 257, - 287, 129, 133, 635, 26, 84, 280, 18, 273, 46, - 20, 636, 637, 21, 74, 269, 268, 177, 265, 79, - 725, 15, 236, 32, 173, 75, 638, 151, 145, 639, - 640, 641, 642, 143, 77, 174, 24, 781, 476, 477, - 36, 742, 617, 300, 188, 82, 65, 743, 157, 472, - 643, 644, 130, 645, 134, 85, 748, 153, 22, 724, - 80, 48, 646, 301, 647, 270, 782, 648, 446, 649, - 175, 244, 511, 78, 176, 755, 650, 756, 263, 427, - 12, 517, 35, 285, 284, 272, 73, 72, 259, 260, - 261, 141, 76, 482, 651, 264, 162, 267, 144, 132, - 258, 11, 150, 37, 16, 83, 86, 479, 480, 481, - 63, 140, 621, 161, 19, 652, 447, 155, -427, 744, - -349, -349, 312, 353, 35, 101, -453, -454, -455, 621, - 446, 267, -331, -219, -111, 734, 245, -112, 740, 41, - 252, 146, 38, -161, 428, -149, 193, 762, 745, 746, - 747, 744, 425, 752, 750, 748, 312, 749, 96, 153, - 155, 156, 4, -174, 173, -229, -230, 172, 166, 167, - 168, 169, 170, 171, 178, 177, 157, 159, 174, -280, - 154, 179, 180, 181, 182, 183, 184, 185, 187, 186, - 188, 189, 175, 176, 192, 239, 240, -182, -182, -182, - -182, -249, -255, -254, -458, -251, -427, -330, -337, -458, - -458, -182, -314, -458, -179, -458, -458, -458, -458, -458, - -258, -174, -458, -458, -462, -458, -462, -462, -462, -368, - -458, -368, -368, -458, -458, -458, -458, -458, -458, -458, - -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, - -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, - -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, - -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, - -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, - -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, - -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, - -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, - -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, - -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, - -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, - -458, -458, -458, -458, -458, -458, -458, -458, 237, -458, - -458, -458, -458, -458, -368, -368, -368, -368, -368, -368, - -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, - -458, -458, -458, -458, 98, 112, 108, 111, 103, 114, - 98, 98, 98, 98, -34, -35, -239, 63, -458, -348, - -440, -441, -222, -219, -458, 329, -331, -331, 298, 105, - -268, -37, -34, -263, -269, -265, -34, -105, -147, -160, - 69, 70, -159, -162, 27, 44, 74, 76, 99, 72, - 73, 71, 41, -459, 97, -459, -287, -459, -171, -325, - -155, -164, 265, 273, 272, 150, -430, -172, 153, 316, - 96, -42, -290, 115, -242, -247, -245, 755, 678, 708, - 678, 708, 67, 49, 98, 98, 96, 96, 25, -264, - -266, -174, 18, -335, 4, -334, 28, -331, 98, 237, - 18, -220, 32, -219, -315, -315, 96, 100, 344, -305, - -307, 444, 446, 166, -336, -331, 98, 34, 97, 96, - -219, -357, -360, -362, -361, -363, -358, -359, 373, 374, - 193, 377, 379, 380, 381, 382, 383, 384, 385, 386, - 387, 390, 402, 35, 288, 369, 370, 371, 372, 391, - 392, 393, 394, 396, 397, 398, 399, 354, 375, 619, - 355, 356, 357, 358, 359, 360, 362, 363, 366, 364, - 365, 367, 368, -332, -331, 95, 97, 96, -367, 95, - -174, -32, 97, 96, -390, -390, -390, 296, 23, -52, - -49, -416, 22, -48, -49, 246, 135, 136, 243, 95, - -379, 95, -388, -332, -331, 95, 151, 270, 150, -387, - -384, -387, -388, -331, -251, -331, 151, 151, -331, -331, - -301, -331, -301, -301, 41, -301, 41, -301, 41, 105, - -331, -301, 41, -301, 41, -301, 41, -301, 41, -301, - 41, 34, 87, 88, 89, 34, 91, 92, 93, -251, - -331, -331, -251, -379, -251, -219, -331, -308, 105, 105, - 105, -390, -390, 105, 98, 98, 98, -390, -390, 105, - 98, -339, -337, 98, 98, -432, 281, 326, 328, 105, - 105, 105, 105, 34, 98, -433, 34, 769, 768, 770, - 771, 772, 98, 105, 34, 105, 34, 105, -331, 95, - -219, -171, 241, 243, 246, 85, 98, 334, 332, 333, - 330, 335, 336, 337, 166, 50, 96, 267, 264, -331, - -321, 269, -321, -321, -331, -338, -337, -329, -219, 267, - 410, 98, -174, -386, 18, 177, -342, -342, -319, -219, - -386, -342, -319, -219, -319, -319, -319, -319, -342, -342, - -342, -319, -337, -337, -219, -219, -219, -219, -219, -219, - -219, -349, -320, -319, 744, 98, -313, 18, 85, -349, - -349, -328, 26, 26, 96, 350, 447, 448, -347, 347, - -107, -331, 98, -13, -32, -21, -20, -22, 166, -13, - 96, 621, -212, -219, 744, 744, 744, 744, 744, 744, - -174, -174, -174, -174, 645, -237, -451, 157, 132, 133, - 130, 131, -191, 42, 43, 41, -174, -238, -244, -249, - 115, 177, 159, 174, -280, -179, -182, -179, -179, -179, - -179, -179, -179, 236, -179, 236, -179, -179, -179, -179, - -179, -179, -350, -331, 98, 193, -187, -186, 114, -449, - -187, 618, 96, -254, 237, -174, -174, -427, -145, 484, - 485, 486, 487, 489, 490, 491, 494, 495, 499, 500, - 483, 501, 488, 493, 496, 497, 498, 492, 372, -174, - -240, -239, -240, -174, -174, -256, -257, 161, -251, -174, - -459, -459, 105, 184, -153, 27, 44, -153, -153, -153, - -153, -174, -174, -174, -174, -174, -174, -174, -174, -174, - -174, -153, -174, -146, 483, 501, 488, 493, 496, 497, - 498, 492, 372, 502, 503, 504, 505, 506, 507, 508, - 509, 510, -146, -145, -174, -174, -174, -174, -174, -174, - -174, -174, -113, -174, 142, 143, 144, -239, -174, -179, - -174, -174, -174, -459, -174, -174, -174, -240, -174, -174, + 497, 498, 499, 500, 501, 521, 264, -105, 264, -219, + -338, -156, 742, 744, 193, -308, 413, -327, 415, 428, + 423, 433, 421, -318, 424, 426, 305, -444, 443, 264, + 430, 241, 416, 425, 434, 435, 329, 441, 436, 342, + 440, 314, 437, 438, 439, -428, 193, 763, 778, 345, + 353, 148, 377, 420, 418, 444, 742, 99, -344, 99, + 100, 101, -331, 345, -347, 350, -332, -428, -331, 348, + -105, -105, -349, -349, -156, -239, -174, 156, -188, -295, + -191, 100, -179, -182, -233, -234, -235, -236, -189, -253, + -293, 182, 183, 190, 157, -249, -192, 28, 618, 514, + 513, 193, 33, 236, 76, 77, 516, 517, 159, 62, + 14, 479, 480, -190, 469, 470, 481, 475, 476, 542, + 544, 545, 546, 543, 548, 549, 550, 551, 552, 553, + 554, 555, 556, 557, 547, 558, 519, 520, 128, 521, + 116, 118, 117, 126, 127, 522, 523, 524, 374, 570, + 571, 565, 568, 569, 567, 566, 389, 390, 525, 588, + 589, 593, 592, 590, 591, 594, 597, 598, 599, 600, + 601, 602, 604, 603, 595, 596, 573, 572, 574, 575, + 576, 577, 578, 579, 581, 580, 582, 583, 584, 585, + 586, 587, 605, 606, 607, 608, 609, 611, 610, 615, + 614, 612, 613, 617, 616, 526, 527, 119, 120, 121, + 122, 123, 124, 125, 528, 531, 529, 530, 532, 533, + 534, 539, 540, 535, 536, 537, 538, 541, 400, 398, + 399, 395, 394, 393, -115, -128, 645, 644, -129, 466, + 471, 472, 474, -180, -181, -194, -195, -332, -338, 269, + 468, 263, 188, 512, -183, -177, -251, 115, 101, -34, + -248, 467, 477, 478, 482, 473, 483, 631, 633, 648, + 649, 651, 636, 641, 640, 643, 559, 560, 561, 562, + 563, 564, 727, 728, 729, 730, 731, 732, 733, 734, + -428, -331, 99, -186, -184, -228, 102, 107, 110, 111, + 113, -450, 288, 370, 371, 129, -459, -244, -245, -185, + 104, 105, 106, 131, 132, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 756, 97, 103, + 49, 429, 429, -219, -105, -105, -105, -105, -457, 759, + 623, -263, -154, -265, -36, -34, -459, 11, -105, -34, + -35, -33, -40, -105, -42, 650, -41, -338, -105, 108, + -270, -287, 15, 66, 176, 47, 55, -299, -296, -295, + 99, 100, -268, -269, -37, -34, -174, 22, 40, 26, + -158, 184, -174, -338, -158, -316, 268, -105, -105, -304, + -352, 345, -306, 444, 742, 443, -294, -309, 99, -293, + -308, 442, 100, -394, 173, -380, -384, -332, 279, -410, + 275, -219, -403, -402, -332, -459, 27, -289, -332, -70, + -71, -72, -308, 192, 762, -137, 297, 301, 95, 95, + -384, -383, -382, -432, 301, 279, -409, -401, 271, 280, + -390, 272, 273, -385, 265, 150, -432, -385, 270, 280, + 275, 279, 301, 301, 138, 301, 138, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 296, -391, 165, -391, + 626, 626, -397, -432, 275, 265, -432, -432, 271, -328, + -385, 267, 27, 267, 37, 37, -391, -391, -391, -308, + 192, -391, -391, -391, -391, 309, 309, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, 264, -431, -163, 440, 329, 468, + 263, -164, 89, -73, 311, -43, -219, -326, 265, 266, + -431, 305, 298, 322, -219, 237, 264, 745, -320, 173, + 18, -320, -317, 429, 427, 414, 419, -320, -320, -320, + -320, 312, 412, -386, 265, 37, 276, 429, 312, 412, + 312, 313, 312, 313, 422, 432, 312, -343, 17, 176, + 468, 417, 421, 305, 264, 306, 266, 431, 313, -343, + 97, -321, 173, 312, 429, 423, 308, -320, -320, -350, + -459, -334, -332, -330, 246, 40, 155, 27, 29, 158, + 193, 141, 22, 159, 39, 248, 377, 275, 192, 271, + 262, 256, 513, 241, 80, 631, 469, 476, 467, 475, + 479, 515, 516, 468, 415, 253, 33, 16, 633, 30, + 286, 26, 43, 186, 243, 162, 163, 634, 289, 28, + 257, 287, 128, 132, 636, 25, 83, 280, 17, 273, + 45, 19, 637, 638, 20, 73, 269, 268, 176, 265, + 78, 726, 14, 236, 31, 172, 74, 639, 150, 144, + 640, 641, 642, 643, 142, 76, 173, 23, 782, 477, + 478, 35, 743, 618, 300, 188, 81, 64, 744, 156, + 473, 644, 645, 129, 646, 133, 84, 749, 152, 21, + 725, 79, 47, 647, 301, 648, 270, 783, 649, 447, + 650, 174, 244, 512, 77, 175, 756, 651, 757, 263, + 428, 11, 518, 34, 285, 284, 272, 72, 71, 259, + 260, 261, 140, 75, 483, 652, 264, 161, 267, 143, + 131, 258, 10, 149, 36, 15, 82, 85, 480, 481, + 482, 62, 139, 622, 160, 18, 653, 448, 154, -428, + 745, -350, -350, 312, 354, 34, 100, -454, -455, -456, + 622, 447, 267, -332, -219, -111, 735, 245, -112, 741, + 40, 252, 145, 37, -161, 429, -149, 193, 763, 746, + 747, 748, 745, 426, 753, 751, 749, 312, 750, 95, + 152, 154, 155, 178, -174, 172, -229, -230, 171, 165, + 166, 167, 168, 169, 170, 177, 176, 156, 158, 173, + -280, 153, 179, 180, 181, 182, 183, 184, 185, 187, + 186, 188, 189, 174, 175, 192, 239, 240, -182, -182, + -182, -182, -249, -255, -254, -459, -251, -428, -331, -338, + -459, -459, -182, -314, -459, -179, -459, -459, -459, -459, + -459, -258, -174, -459, -459, -463, -459, -463, -463, -463, + -369, -459, -369, -369, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, 237, + -459, -459, -459, -459, -459, -369, -369, -369, -369, -369, + -369, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, 97, 111, 107, 110, 102, + 113, 97, 97, 97, 97, -34, -35, -239, 62, -459, + -349, -441, -442, -222, -219, -459, 329, -332, -332, 298, + 104, -268, -37, -34, -263, -269, -265, -34, -105, -147, + -160, 68, 69, -159, -162, 26, 43, 73, 75, 98, + 71, 72, 70, 40, -460, 96, -460, -287, -460, -171, + -326, -155, -164, 265, 273, 272, 149, -431, -172, 152, + 316, 95, -42, -290, 114, -242, -247, -245, 756, 679, + 709, 679, 709, 66, 48, 97, 97, 95, 95, 24, + -264, -266, -174, 17, -336, 178, -335, 27, -332, 97, + 237, 17, -220, 31, -219, -316, -316, 95, 99, 345, + -305, -307, 445, 447, 165, -337, -332, 97, 33, 96, + 95, -219, -358, -361, -363, -362, -364, -359, -360, 374, + 375, 193, 378, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 391, 403, 34, 288, 370, 371, 372, 373, + 392, 393, 394, 395, 397, 398, 399, 400, 355, 376, + 620, 356, 357, 358, 359, 360, 361, 363, 364, 367, + 365, 366, 368, 369, -333, -332, 94, 96, 95, -368, + 94, -174, -32, 96, 95, -391, -391, -391, 296, 22, + -52, -49, -417, 21, -48, -49, 246, 134, 135, 243, + 94, -380, 94, -389, -333, -332, 94, 150, 270, 149, + -388, -385, -388, -389, -332, -251, -332, 150, 150, -332, + -332, -301, -332, -301, -301, 40, -301, 40, -301, 40, + 104, -332, -301, 40, -301, 40, -301, 40, -301, 40, + -301, 40, 33, 86, 87, 88, 33, 90, 91, 92, + -251, -332, -332, -251, -380, -251, -219, -332, -308, 104, + 104, 104, -391, -391, 104, 97, 97, 97, -391, -391, + 104, 97, -340, -338, 97, 97, -433, 281, 326, 328, + 104, 104, 104, 104, 33, 97, -434, 33, 770, 769, + 771, 772, 773, 97, 104, 33, 104, 33, 104, -332, + 94, -219, -171, 241, 243, 246, 84, 97, 334, 332, + 333, 341, 330, 335, 336, 337, 165, 49, 95, 267, + 264, -332, -322, 269, -322, -322, -332, -339, -338, -330, + -219, 267, 411, 97, -174, -387, 17, 176, -343, -343, + -320, -219, -387, -343, -320, -219, -320, -320, -320, -320, + -343, -343, -343, -320, -338, -338, -219, -219, -219, -219, + -219, -219, -219, -350, -321, -320, 745, 97, -313, 17, + 84, -350, -350, -329, 25, 25, 95, 351, 448, 449, + -348, 348, -107, -332, 97, -13, -32, -21, -20, -22, + 165, -13, 95, 622, -212, -219, 745, 745, 745, 745, + 745, 745, -174, -174, -174, -174, 646, -237, -452, 156, + 131, 132, 129, 130, -191, 41, 42, 40, -174, -238, + -244, -249, 114, 176, 158, 173, -280, -179, -182, -179, + -179, -179, -179, -179, -179, 236, -179, 236, -179, -179, + -179, -179, -179, -179, -351, -332, 97, 193, -187, -186, + 113, -450, -187, 619, 95, -254, 237, -174, -174, -428, + -145, 485, 486, 487, 488, 490, 491, 492, 495, 496, + 500, 501, 484, 502, 489, 494, 497, 498, 499, 493, + 373, -174, -240, -239, -240, -174, -174, -256, -257, 160, + -251, -174, -460, -460, 104, 184, -153, 26, 43, -153, + -153, -153, -153, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -153, -174, -146, 484, 502, 489, 494, + 497, 498, 499, 493, 373, 503, 504, 505, 506, 507, + 508, 509, 510, 511, -146, -145, -174, -174, -174, -174, + -174, -174, -174, -174, -113, -174, 141, 142, 143, -239, + -174, -179, -174, -174, -174, -460, -174, -174, -174, -240, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, - -174, -174, -174, -174, -426, -425, -424, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -427, -426, -425, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, - -239, -239, -239, -239, -239, -174, -459, -174, -193, -177, - 105, -295, 114, -174, -174, -174, -174, -174, -174, -240, - -333, -338, -329, -330, -239, -240, -240, -239, -239, -174, - -174, -174, -174, -174, -174, -174, -174, -459, -174, -174, - -174, -174, -174, -287, -459, -239, 96, -442, 446, 447, - 742, -340, 301, -339, 28, -240, 98, 18, -298, 86, - -331, -268, -268, 69, 70, 65, -157, -158, -162, -459, - 305, -166, 318, 264, -163, -171, -331, 265, 265, 265, - -322, 269, 511, 166, -41, 28, 96, -458, 671, 671, - 68, 98, -369, -308, 400, 401, 193, -296, -174, -174, - 96, -267, 30, 31, -219, -334, 184, -338, -219, -300, - 301, -219, -197, -199, -200, -201, -222, -250, -458, -202, - -34, 641, 638, 18, -212, -213, -221, -337, -306, -351, - -305, 96, 445, 447, 448, 85, 134, -174, -370, 192, - -398, -397, -396, -379, -381, -382, -383, 97, -370, -375, - 407, 406, -367, -367, -367, -367, -367, -367, -369, -369, - -369, -367, 95, -367, 95, -367, -367, -367, -367, -372, - 95, -372, -372, -373, -372, 95, -373, -374, 95, -374, - -409, -174, -406, -405, -403, -404, 274, 110, 718, 670, - 621, 662, 704, 86, -401, -267, 105, -459, -108, 621, - -331, 100, 98, 100, 98, 100, 98, -138, -77, -1, - 781, 782, 783, 96, 23, -380, -379, -76, 326, -412, - -413, 301, -408, -402, -388, 151, -387, -388, -388, -331, - 96, 32, 139, 139, 139, 139, 621, 243, 35, -323, - 661, 157, 718, 670, -379, -76, 267, 267, -350, -350, - -350, 98, 98, -318, 777, -212, -166, 307, 307, 264, - 320, 264, 320, -219, 331, 334, 332, 333, 330, 335, - 336, 337, 338, 41, 41, 41, 41, 41, 41, 41, - 319, 321, 323, 309, -219, -219, -321, 85, -214, -219, - 29, -337, -219, 98, 98, -219, -319, -319, -219, -319, - -319, -219, 98, -337, -455, 351, -331, 387, 735, 737, - -149, 446, 96, 621, 26, -150, 26, -458, -451, 132, - 133, -249, -249, -249, -238, -179, -182, -179, 156, 289, - -179, -179, -458, -251, -459, -333, 28, 96, 86, -459, - 182, 96, -459, -459, 96, 18, 96, -259, -257, 163, - -174, -459, 96, -459, -459, -239, -174, -174, -174, -174, - -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, - -239, -459, 96, 96, 18, -354, 28, -459, -459, -459, - -459, 96, -459, -459, -258, -459, 18, -459, 86, 96, - 177, 96, -459, -459, -459, 96, 96, -459, -459, 96, - -459, 96, -459, -459, -459, -459, -459, -459, 96, -459, - 96, -459, -459, -459, 96, -459, 96, -459, -459, 96, - -459, 96, -459, 96, -459, 96, -459, 96, -459, 96, - -459, 96, -459, 96, -459, 96, -459, 96, -459, 96, - -459, 96, -459, 96, -459, 96, -459, 96, -459, 96, - -459, 96, -459, 96, -459, -459, -459, 96, -459, 96, - -459, 96, -459, -459, 96, -459, 96, -459, 96, -459, - 96, 96, -459, 96, 96, 96, -459, 96, 96, 96, - 96, -459, -459, -459, -459, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, -459, -459, -459, -459, -459, - -459, 96, -120, 646, -459, -459, 96, -459, 96, 96, - 96, 96, 96, -459, -458, 237, -459, -459, -459, -459, - -459, 96, 96, 96, 96, 96, 96, -459, -459, -459, - 96, 96, -459, 96, -459, 96, -459, -441, 741, 447, - -226, -225, -223, 83, 268, 84, -458, -339, -459, -187, - -295, -297, -295, -232, -331, 105, 114, -270, -196, 96, - -198, 18, -322, 266, 325, -322, -171, -166, -407, -404, - -331, -331, -331, -337, 157, -173, 478, -168, 98, 100, - -249, -247, -459, -369, -275, -281, -316, -331, 98, 193, - -371, 193, -371, 400, 401, -266, 237, -227, 19, -231, - 35, 63, -32, -458, -458, 35, 96, -215, -217, -216, - -218, 75, 79, 81, 76, 77, 78, 82, -345, 28, - -34, -197, -34, -458, -219, -212, -460, 18, 86, -460, - 96, 237, -307, -310, 449, 446, 452, -427, 98, -137, - 96, -396, -383, -271, -167, 46, -376, 408, -369, 629, - -369, -369, -378, 98, -378, 105, 105, 105, 97, -55, - -50, -51, 36, 90, -403, -390, 98, 45, -390, -390, - -331, 97, -267, -109, 315, 741, -2, 780, 786, 151, - 95, 413, 22, -289, 96, 97, -252, 327, 97, -139, - -331, 97, 95, -388, -388, -331, -458, 264, 34, 34, - 718, 670, 661, -76, -252, -251, -331, -370, 779, 778, - 97, 266, -219, -219, -219, -219, -219, -219, 246, 243, - 436, -450, 339, 98, -450, 310, 267, -212, -219, 96, - -110, 283, 278, -342, -342, 36, -219, 446, 753, 751, - -174, 156, 289, -191, -182, -145, -145, -179, -352, 193, - 373, 288, 371, 367, 387, 378, 406, 369, 407, 364, - 363, 362, -352, -350, -179, -239, -174, -174, -174, 165, - -174, 162, -174, -121, -120, -459, -459, -459, -459, -459, - -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, - -263, -174, -174, -174, -459, 193, 373, -121, -174, 18, - -174, -350, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -239, -239, -239, -239, -239, -174, -460, -174, + -193, -177, 104, -295, 113, -174, -174, -174, -174, -174, + -174, -240, -334, -339, -330, -331, -239, -240, -240, -239, + -239, -174, -174, -174, -174, -174, -174, -174, -174, -460, + -174, -174, -174, -174, -174, -287, -460, -239, 95, -443, + 447, 448, 743, -341, 301, -340, 27, -240, 97, 17, + -298, 85, -332, -268, -268, 68, 69, 64, -157, -158, + -162, -460, 305, -166, 318, 264, -163, -171, -332, 265, + 265, 265, -323, 269, 512, 165, -41, 27, 95, -459, + 672, 672, 67, 97, -370, -308, 401, 402, 193, -296, + -174, -174, 95, -267, 29, 30, -219, -335, 184, -339, + -219, -300, 301, -219, -197, -199, -200, -201, -222, -250, + -459, -202, -34, 642, 639, 17, -212, -213, -221, -338, + -306, -352, -305, 95, 446, 448, 449, 84, 133, -174, + -371, 192, -399, -398, -397, -380, -382, -383, -384, 96, + -371, -376, 408, 407, -368, -368, -368, -368, -368, -368, + -370, -370, -370, -368, 94, -368, 94, -368, -368, -368, + -368, -373, 94, -373, -373, -374, -373, 94, -374, -375, + 94, -375, -410, -174, -407, -406, -404, -405, 274, 109, + 719, 671, 622, 663, 705, 85, -402, -267, 104, -460, + -108, 622, -332, 99, 97, 99, 97, 99, 97, -138, + -77, -1, 782, 783, 784, 95, 22, -381, -380, -76, + 326, -413, -414, 301, -409, -403, -389, 150, -388, -389, + -389, -332, 95, 31, 138, 138, 138, 138, 622, 243, + 34, -324, 662, 156, 719, 671, -380, -76, 267, 267, + -351, -351, -351, 97, 97, -319, 778, -212, -166, 307, + 307, 264, 320, 264, 320, -219, 331, 334, 332, 333, + 341, 330, 335, 336, 337, 338, 40, 40, 40, 333, + 40, 40, 40, 40, 319, 321, 323, 309, -219, -219, + -322, 84, -214, -219, 28, -338, -219, 97, 97, -219, + -320, -320, -219, -320, -320, -219, 97, -338, -456, 352, + -332, 388, 736, 738, -149, 447, 95, 622, 25, -150, + 25, -459, -452, 131, 132, -249, -249, -249, -238, -179, + -182, -179, 155, 289, -179, -179, -459, -251, -460, -334, + 27, 95, 85, -460, 182, 95, -460, -460, 95, 17, + 95, -259, -257, 162, -174, -460, 95, -460, -460, -239, + -174, -174, -174, -174, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -239, -460, 95, 95, 17, -355, + 27, -460, -460, -460, -460, 95, -460, -460, -258, -460, + 17, -460, 85, 95, 176, 95, -460, -460, -460, 95, + 95, -460, -460, 95, -460, 95, -460, -460, -460, -460, + -460, -460, 95, -460, 95, -460, -460, -460, 95, -460, + 95, -460, -460, 95, -460, 95, -460, 95, -460, 95, + -460, 95, -460, 95, -460, 95, -460, 95, -460, 95, + -460, 95, -460, 95, -460, 95, -460, 95, -460, 95, + -460, 95, -460, 95, -460, 95, -460, 95, -460, -460, + -460, 95, -460, 95, -460, 95, -460, -460, 95, -460, + 95, -460, 95, -460, 95, 95, -460, 95, 95, 95, + -460, 95, 95, 95, 95, -460, -460, -460, -460, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, -460, + -460, -460, -460, -460, -460, 95, -120, 647, -460, -460, + 95, -460, 95, 95, 95, 95, 95, -460, -459, 237, + -460, -460, -460, -460, -460, 95, 95, 95, 95, 95, + 95, -460, -460, -460, 95, 95, -460, 95, -460, 95, + -460, -442, 742, 448, -226, -225, -223, 82, 268, 83, + -459, -340, -460, -187, -295, -297, -295, -232, -332, 104, + 113, -270, -196, 95, -198, 17, -323, 266, 325, -323, + -171, -166, -408, -405, -332, -332, -332, -338, 156, -173, + 479, -168, 97, 99, -249, -247, -460, -370, -275, -281, + -317, -332, 97, 193, -372, 193, -372, 401, 402, -266, + 237, -227, 18, -231, 34, -315, -32, -459, 65, 62, + -459, 34, 95, -215, -217, -216, -218, 74, 78, 80, + 75, 76, 77, 81, -346, 27, -34, -197, -34, -459, + -219, -212, -461, 17, 85, -461, 95, 237, -307, -310, + 450, 447, 453, -428, 97, -137, 95, -397, -384, -271, + -167, 45, -377, 409, -370, 630, -370, -370, -379, 97, + -379, 104, 104, 104, 96, -55, -50, -51, 35, 89, + -404, -391, 97, 44, -391, -391, -332, 96, -267, -109, + 315, 742, -2, 781, 787, 150, 94, 414, 21, -289, + 95, 96, -252, 327, 96, -139, -332, 96, 94, -389, + -389, -332, -459, 264, 33, 33, 719, 671, 662, -76, + -252, -251, -332, -371, 780, 779, 96, 266, -219, -219, + -219, -219, -219, -219, 246, 243, 437, 333, -451, 339, + 97, 40, -451, 310, 267, -212, -219, 95, -110, 283, + 278, -343, -343, 35, -219, 447, 754, 752, -174, 155, + 289, -191, -182, -145, -145, -179, -353, 193, 374, 288, + 372, 368, 388, 379, 407, 370, 408, 365, 364, 363, + -353, -351, -179, -239, -174, -174, -174, 164, -174, 161, + -174, -121, -120, -460, -460, -460, -460, -460, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -263, -174, + -174, -174, -460, 193, 374, -121, -174, 17, -174, -351, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, - -174, -174, -174, -174, -174, -174, -174, -424, -174, -239, - -174, -239, -174, -174, -174, -174, -174, -425, -425, -425, - -425, -425, -239, -239, -239, -239, -174, -458, -331, -124, - -123, -122, 697, 268, -120, -193, -124, -193, 236, -174, - 236, 236, 236, -174, -240, -333, -174, -174, -174, -174, - -174, -174, -174, -174, -174, -174, -223, -384, 307, -384, - 307, -384, -301, 96, -312, 26, 18, 63, 63, -196, - -227, -158, -197, -219, -219, -165, 316, 324, -219, -166, - 266, 85, -407, -407, -407, 29, 95, -169, 101, -278, - 734, -284, 52, -282, -283, 53, -279, 54, 62, -371, - -371, 184, -268, -174, -302, 85, -303, -311, -251, -243, - -246, -244, -458, -288, -459, -331, -301, -303, -199, -200, - -200, -199, -200, 75, 75, 75, 80, 75, 80, 75, - -216, -337, -459, -174, -340, 86, -197, -197, -221, -337, - 184, 446, 450, 451, -396, -448, 130, 157, 34, 85, - 404, 110, -446, 192, 658, 713, 718, 670, 662, 704, - -447, 270, 150, 151, 282, 28, 47, 97, 96, 97, - 96, 97, 97, 96, -324, -323, -51, -50, -390, -390, - 105, -427, 98, 98, 275, -140, 784, 105, 95, -3, - 90, -174, 95, 23, -379, -251, -414, -364, -415, -365, - -366, -5, -6, -391, -143, 63, 110, -80, 50, 265, - 764, 765, 139, -458, 777, -406, -289, -410, -412, -219, - -178, -458, -190, -176, -175, -177, -183, 182, 183, 288, - 369, 370, -252, -219, -429, 86, 307, 404, 307, 404, - 98, -452, 340, 98, -452, -219, -110, -55, -219, -319, - -319, 36, -427, -459, -191, -182, -152, 177, 621, -355, - 628, -367, -367, -367, -374, -367, 359, -367, 359, -367, - -459, -459, -459, 96, -459, 26, -459, 96, -174, 96, - -121, -121, -121, -121, -121, -148, 517, 96, 96, -459, - 95, 95, -459, -174, -459, -459, -459, 96, -459, -459, - -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, - -459, 96, -459, 96, -459, 96, -459, 96, -459, 96, - -459, 96, -459, 96, -459, 96, -459, 96, -459, 96, - -459, 96, -459, 96, -459, 96, -459, 96, -459, 96, - -459, 96, -459, -459, 96, -459, -459, -459, 96, -459, - 96, -459, 96, -459, -459, -459, 96, -353, 719, -459, - -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, - -119, -332, -120, 679, 679, -459, -120, -260, 96, -179, - -459, -179, -179, -179, -459, -459, -459, 96, -459, 96, - 96, -459, 96, -459, 96, -459, -459, -459, -459, 96, - -224, 26, -458, -224, -458, -224, -459, -295, -219, -227, - -261, 20, -458, 266, -219, -219, 85, 85, 85, 97, - -275, 57, 379, -286, -285, 61, 53, -283, 23, 55, - 23, 33, -302, 96, 166, -344, 96, 28, -459, -459, - 96, 63, 237, -459, -227, -210, -209, 85, 86, -211, - 85, -209, 75, 75, -290, 96, -300, -197, -227, -227, - 237, 130, -458, -178, 16, 98, 98, -427, -445, 768, - 769, 34, 770, 105, -390, -390, 151, 151, -219, 95, - -369, 98, -369, 105, 105, 34, 91, 92, 93, 34, - 87, 88, 89, 317, -411, 95, 23, -174, 95, 166, - 97, -289, -289, 303, 177, -390, 762, 309, 309, -390, - -390, -390, -142, -141, 784, 97, -459, 96, -377, 621, - 624, -174, -184, -184, -290, -423, 621, -428, -331, -331, - -331, -331, 105, 107, -459, 619, 82, 622, -459, -369, - -174, -174, -174, -174, -268, 98, -174, -174, 105, 105, - -121, -459, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, - -174, -174, -239, -174, -459, -207, -206, -208, 745, 130, - 34, -352, -459, -241, 301, -127, -126, -125, 18, -459, - -174, -145, -145, -145, -145, -174, -174, -174, -174, -174, - -174, -458, 75, 22, 20, -292, -331, 270, -458, -292, - -458, -340, -261, -262, 21, 23, -420, -419, -417, -418, - 177, 725, 724, -219, -219, -219, -219, -276, 59, -274, - 58, -274, -285, 23, 23, 98, 23, 98, 151, -311, - -174, -246, -339, 63, -32, -331, -243, -331, -263, -174, - 95, -174, -187, -227, -227, -174, -234, 541, 543, 544, - 545, 542, 547, 548, 549, 550, 551, 552, 553, 554, - 555, 556, 546, 557, 518, 519, 520, 117, 119, 118, - 127, 128, 521, 522, 523, 373, 569, 570, 564, 567, - 568, 566, 565, 388, 389, 524, 587, 588, 592, 591, - 589, 590, 593, 596, 597, 598, 599, 600, 601, 603, - 602, 594, 595, 572, 571, 573, 574, 575, 576, 577, - 578, 580, 579, 581, 582, 583, 584, 585, 586, 604, - 605, 606, 607, 608, 610, 609, 614, 613, 611, 612, - 616, 615, 525, 526, 120, 121, 122, 123, 124, 125, - 126, 527, 530, 528, 531, 532, 533, 538, 539, 534, - 535, 536, 537, 540, 399, 397, 398, 394, 393, 392, - 465, 470, 471, 473, 558, 559, 560, 561, 562, 563, - 726, 727, 728, 729, 730, 731, 732, 733, 98, 98, - 95, -174, 97, 97, -410, -77, 97, -291, -289, 105, - 97, 304, -244, -458, 98, -390, -390, -390, 105, 105, - -339, -459, 96, -331, -447, -412, 625, 625, -459, 28, - -422, -421, -333, 95, 86, 68, 620, 623, -459, -459, - -459, 96, -459, -459, -459, 97, 97, -459, -459, -459, - -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, - -459, -459, -459, -459, -459, -459, -459, -459, -459, 96, - -459, -206, -208, -459, 85, -187, -263, 23, -124, 326, - 328, -124, -459, -459, -459, -459, -459, 96, -459, -459, - 96, -459, 96, -459, -459, -292, -459, 23, 23, 96, - -459, -292, -459, -292, -226, -262, -134, -133, -132, 652, - -174, -239, -459, 96, -331, -277, 60, 85, 134, 98, - 98, 98, 16, -458, -243, 237, -344, -268, -289, -204, - 413, -263, -459, -289, 97, 97, 786, 151, 97, -244, - -151, -458, 300, -339, 98, 98, -141, -144, -32, 96, - 166, -289, -219, 68, -174, -239, -459, 85, 633, 745, - -118, -117, -114, 756, 782, -239, -120, -120, -174, -174, - -174, -459, -331, 270, -459, -459, -134, 96, -131, -130, - -331, -356, 621, -81, -82, -83, -8, 342, 269, 253, - 284, -417, -357, 85, 134, -303, -289, -344, -331, 97, - -459, -458, -268, 97, -272, 95, -3, 300, -364, -415, - -365, -366, -5, -6, -391, -108, -421, -395, -337, -333, - 98, 105, 97, 621, -459, -459, -116, 159, 754, 716, - -183, 236, -459, 96, -459, 96, -459, 96, -132, 96, - 28, 626, 787, -84, -85, -83, -82, -174, -289, -59, - -331, 256, 257, 258, -65, -63, -64, 260, -331, -459, - -340, -205, -203, -331, 676, -438, -437, 617, -448, -444, - 130, 157, 110, -446, 713, 718, 670, 140, 141, -174, - 95, -459, 237, -429, 622, -116, 755, 690, 664, 690, - 664, -179, -174, -174, -174, -130, -458, 165, -83, 162, - -357, 255, 262, -66, -67, 35, -170, 66, -459, 96, - 26, -357, -79, 687, -435, -436, 85, -439, 419, 686, - 707, 130, 98, 105, 97, -289, -338, -423, 623, 156, - -145, -459, 96, -459, 96, -459, -119, -85, -273, 34, - 26, 26, -68, -69, 453, 454, 455, 456, 457, 458, - 459, 460, 461, 462, 463, 464, -68, 98, -203, 683, - -370, -187, -436, 85, -435, 85, 17, 16, -4, 785, - 97, -116, 690, 664, -174, -174, -459, -89, -88, -87, - 164, -458, -178, -60, -61, -62, -64, 261, 157, 259, - 105, -63, -62, 166, -78, 29, -204, -434, 283, 278, - 281, 35, -434, 105, -4, -459, -459, -86, 163, -87, - -174, -174, -82, 96, 254, -183, 687, 277, 34, 130, - 165, -85, 162, -459, -61, -187, 269, -85, -207, -206, - -206, + -174, -174, -174, -174, -174, -425, -174, -239, -174, -239, + -174, -174, -174, -174, -174, -426, -426, -426, -426, -426, + -239, -239, -239, -239, -174, -459, -332, -124, -123, -122, + 698, 268, -120, -193, -124, -193, 236, -174, 236, 236, + 236, -174, -240, -334, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -223, -385, 307, -385, 307, -385, + -301, 95, -312, 25, 17, 62, 62, -196, -227, -158, + -197, -219, -219, -165, 316, 324, -219, -166, 266, 84, + -408, -408, -408, 28, 94, -169, 100, -278, 735, -284, + 51, -282, -283, 52, -279, 53, 61, -372, -372, 184, + -268, -174, -302, 84, -303, -311, -251, -243, -246, -244, + -459, -288, -460, -332, -301, -303, -199, -200, -200, -199, + -200, 74, 74, 74, 79, 74, 79, 74, -216, -338, + -460, -174, -341, 85, -197, -197, -221, -338, 184, 447, + 451, 452, -397, -449, 129, 156, 33, 84, 405, 109, + -447, 192, 659, 714, 719, 671, 663, 705, -448, 270, + 149, 150, 282, 27, 46, 96, 95, 96, 95, 96, + 96, 95, -325, -324, -51, -50, -391, -391, 104, -428, + 97, 97, 275, -140, 785, 104, 94, -3, 89, -174, + 94, 22, -380, -251, -415, -365, -416, -366, -367, -5, + -6, -392, -143, 62, 109, -80, 49, 265, 765, 766, + 138, -459, 778, -407, -289, -411, -413, -219, -178, -459, + -190, -176, -175, -177, -183, 182, 183, 288, 370, 371, + -252, -219, -430, 85, 307, 405, 307, 405, 97, -453, + 340, 97, -453, -219, -110, -55, -219, -320, -320, 35, + -428, -460, -191, -182, -152, 176, 622, -356, 629, -368, + -368, -368, -375, -368, 360, -368, 360, -368, -460, -460, + -460, 95, -460, 25, -460, 95, -174, 95, -121, -121, + -121, -121, -121, -148, 518, 95, 95, -460, 94, 94, + -460, -174, -460, -460, -460, 95, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, 95, + -460, 95, -460, 95, -460, 95, -460, 95, -460, 95, + -460, 95, -460, 95, -460, 95, -460, 95, -460, 95, + -460, 95, -460, 95, -460, 95, -460, 95, -460, 95, + -460, -460, 95, -460, -460, -460, 95, -460, 95, -460, + 95, -460, -460, -460, 95, -354, 720, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -119, -333, + -120, 680, 680, -460, -120, -260, 95, -179, -460, -179, + -179, -179, -460, -460, -460, 95, -460, 95, 95, -460, + 95, -460, 95, -460, -460, -460, -460, 95, -224, 25, + -459, -224, -459, -224, -460, -295, -219, -227, -261, 19, + -459, 266, -219, -219, 84, 84, 84, 96, -275, 56, + 380, -286, -285, 60, 52, -283, 22, 54, 22, 32, + -302, 95, 165, -345, 95, 27, -460, -460, 95, -315, + 62, 237, -460, -227, -210, -209, 84, 85, -211, 84, + -209, 74, 74, -290, 95, -300, -197, -227, -227, 237, + 129, -459, -178, 15, 97, 97, -428, -446, 769, 770, + 33, 771, 104, -391, -391, 150, 150, -219, 94, -370, + 97, -370, 104, 104, 33, 90, 91, 92, 33, 86, + 87, 88, 317, -412, 94, 22, -174, 94, 165, 96, + -289, -289, 303, 176, -391, 763, 309, 309, -391, -391, + -391, -142, -141, 785, 96, -460, 95, -378, 622, 625, + -174, -184, -184, -290, -424, 622, -429, -332, -332, -332, + -332, 104, 106, -460, 620, 81, 623, -460, -370, -174, + -174, -174, -174, -268, 97, -174, -174, 104, 104, -121, + -460, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -239, -174, -460, -207, -206, -208, 746, 129, 33, + -353, -460, -241, 301, -127, -126, -125, 17, -460, -174, + -145, -145, -145, -145, -174, -174, -174, -174, -174, -174, + -459, 74, 21, 19, -292, -332, 270, -459, -292, -459, + -341, -261, -262, 20, 22, -421, -420, -418, -419, 176, + 726, 725, -219, -219, -219, -219, -276, 58, -274, 57, + -274, -285, 22, 22, 97, 22, 97, 150, -311, -174, + -246, -340, -315, -32, -332, -243, -332, -263, -174, 94, + -174, -187, -227, -227, -174, -234, 542, 544, 545, 546, + 543, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 547, 558, 519, 520, 521, 116, 118, 117, 126, + 127, 522, 523, 524, 374, 570, 571, 565, 568, 569, + 567, 566, 389, 390, 525, 588, 589, 593, 592, 590, + 591, 594, 597, 598, 599, 600, 601, 602, 604, 603, + 595, 596, 573, 572, 574, 575, 576, 577, 578, 579, + 581, 580, 582, 583, 584, 585, 586, 587, 605, 606, + 607, 608, 609, 611, 610, 615, 614, 612, 613, 617, + 616, 526, 527, 119, 120, 121, 122, 123, 124, 125, + 528, 531, 529, 532, 533, 534, 539, 540, 535, 536, + 537, 538, 541, 400, 398, 399, 395, 394, 393, 466, + 471, 472, 474, 559, 560, 561, 562, 563, 564, 727, + 728, 729, 730, 731, 732, 733, 734, 97, 97, 94, + -174, 96, 96, -411, -77, 96, -291, -289, 104, 96, + 304, -244, -459, 97, -391, -391, -391, 104, 104, -340, + -460, 95, -332, -448, -413, 626, 626, -460, 27, -423, + -422, -334, 94, 85, 67, 621, 624, -460, -460, -460, + 95, -460, -460, -460, 96, 96, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, 95, -460, + -206, -208, -460, 84, -187, -263, 22, -124, 326, 328, + -124, -460, -460, -460, -460, -460, 95, -460, -460, 95, + -460, 95, -460, -460, -292, -460, 22, 22, 95, -460, + -292, -460, -292, -226, -262, -134, -133, -132, 653, -174, + -239, -460, 95, -332, -277, 59, 84, 133, 97, 97, + 97, 15, -459, -243, 237, -345, -268, -289, -204, 414, + -263, -460, -289, 96, 96, 787, 150, 96, -244, -151, + -459, 300, -340, 97, 97, -141, -144, -32, 95, 165, + -289, -219, 67, -174, -239, -460, 84, 634, 746, -118, + -117, -114, 757, 783, -239, -120, -120, -174, -174, -174, + -460, -332, 270, -460, -460, -134, 95, -131, -130, -332, + -357, 622, -81, -82, -83, -8, 343, 269, 253, 284, + -418, -358, 84, 133, -303, -289, -345, -332, 96, -460, + -459, -268, 96, -272, 94, -3, 300, -365, -416, -366, + -367, -5, -6, -392, -108, -422, -396, -338, -334, 97, + 104, 96, 622, -460, -460, -116, 158, 755, 717, -183, + 236, -460, 95, -460, 95, -460, 95, -132, 95, 27, + 627, 788, -84, -85, -83, -82, -174, -289, -59, -332, + 256, 257, 258, -65, -63, -64, 260, -332, -460, -341, + -205, -203, -332, 677, -439, -438, 618, -449, -445, 129, + 156, 109, -447, 714, 719, 671, 139, 140, -174, 94, + -460, 237, -430, 623, -116, 756, 691, 665, 691, 665, + -179, -174, -174, -174, -130, -459, 164, -83, 161, -358, + 255, 262, -66, -67, 34, -170, 65, -460, 95, 25, + -358, -79, 688, -436, -437, 84, -440, 420, 687, 708, + 129, 97, 104, 96, -289, -339, -424, 624, 155, -145, + -460, 95, -460, 95, -460, -119, -85, -273, 33, 25, + 25, -68, -69, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, -68, 97, -203, 684, -371, + -187, -437, 84, -436, 84, 16, 15, -4, 786, 96, + -116, 691, 665, -174, -174, -460, -89, -88, -87, 163, + -459, -178, -60, -61, -62, -64, 261, 156, 259, 104, + -63, -62, 165, -78, 28, -204, -435, 283, 278, 281, + 34, -435, 104, -4, -460, -460, -86, 162, -87, -174, + -174, -82, 95, 254, -183, 688, 277, 33, 129, 164, + -85, 161, -460, -61, -187, 269, -85, -207, -206, -206, } var yyDef = [...]int{ - 960, -2, 1, 2, -2, 962, 960, 4, 5, 7, + 962, -2, 1, 2, -2, 964, 962, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 131, 133, 134, 960, 960, - 960, 0, 960, 0, 192, 0, 1021, -2, -2, 960, - 1737, 0, 960, 0, 955, 0, -2, 875, 881, 0, - 890, -2, 0, 0, 960, 960, 2413, 2413, 955, 0, - 0, 0, 0, 0, 960, 960, 960, 960, 1742, 1573, - 111, 960, 0, 149, 150, 960, 910, 911, 912, 126, - 0, 2411, 146, 960, 961, 3, 132, 136, 0, 0, - 0, 119, 1582, 0, 139, 0, 0, 964, 0, 0, - 1720, 960, 960, 0, 190, 191, 0, 0, 0, 0, - 0, 195, -2, 227, 228, 229, 0, 234, 679, 596, + 38, 39, 40, 41, 42, 131, 133, 134, 962, 962, + 962, 0, 962, 0, 192, 0, 1023, -2, -2, 962, + 1741, 0, 962, 0, 957, 0, -2, 877, 883, 0, + 892, -2, 0, 0, 962, 962, 2418, 2418, 957, 0, + 0, 0, 0, 0, 962, 962, 962, 962, 1746, 1575, + 111, 962, 0, 149, 150, 962, 912, 913, 914, 126, + 0, 2416, 146, 962, 963, 3, 132, 136, 0, 0, + 0, 119, 1584, 0, 139, 0, 0, 966, 0, 0, + 1724, 962, 962, 0, 190, 191, 0, 0, 0, 0, + 0, 195, -2, 227, 228, 229, 0, 234, 681, 596, 648, 594, 633, -2, 582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, 471, 471, - 0, 0, -2, 582, 582, 582, 1722, 0, 0, 0, + 0, 0, -2, 582, 582, 582, 1726, 0, 0, 0, 630, 533, 471, 471, 471, 0, 471, 471, 471, 471, 0, 0, 471, 471, 471, 471, 471, 471, 471, 471, - 471, 471, 471, 471, 471, 471, 471, 471, 471, 1600, - 233, 1738, 1735, 1736, 1910, 1911, 1912, 1913, 1914, 1915, - 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, - 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, - 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, - 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, - 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, - 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, - 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, - 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, - 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, - 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, - 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, - 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, - 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, - 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, - 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, - 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, - 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, - 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, - 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, - 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, - 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, - 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, - 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, - 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, - 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, - 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, - 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, - 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195, - 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, - 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, - 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, - 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, - 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, - 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, - 2256, 2257, 2258, 2259, 2260, 2261, 2262, 2263, 2264, 2265, - 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, - 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2284, 2285, - 2286, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, - 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, - 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, - 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, - 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, - 2336, 2337, 2338, 2339, 2340, 2341, 2342, 2343, 2344, 2345, - 2346, 2347, 2348, 2349, 2350, 2351, 2352, 2353, 2354, 2355, - 2356, 2357, 2358, 2359, 2360, 2361, 2362, 2363, 2364, 2365, - 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, - 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2384, 2385, - 2386, 2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, - 2396, 2397, 2398, 2399, 2400, 2401, 2402, 2403, 2404, 2405, - 2406, 2407, 2408, 2409, 2410, 0, 1714, 0, 793, 1064, - 0, 956, 957, 0, 864, 864, 0, 864, 864, 864, - 864, 0, 0, 0, 807, 0, 0, 0, 0, 861, - 0, 823, 824, 0, 861, 0, 830, 867, 0, 0, - 837, 864, 864, 840, 2414, 0, 2414, 2414, 0, 0, - 1705, 0, 858, 856, 870, 871, 103, 874, 877, 878, - 879, 880, 883, 0, 894, 897, 1731, 1732, 0, 899, - 904, 923, 924, 0, 106, 1224, 0, 1088, 0, 1099, - -2, 1110, 1127, 1128, 1129, 1130, 1131, 1133, 1134, 1135, - 0, 0, 0, 0, 1140, 1141, 0, 0, 0, 0, - 0, 1204, 0, 0, 0, 0, 2125, 1544, 0, 0, - 1506, 1506, 1240, 1506, 1506, 1508, 1508, 1508, 1969, 2116, - 2126, 2314, 1924, 1930, 1931, 1932, 2259, 2260, 2261, 2262, - 2357, 2358, 2362, 2036, 1919, 2329, 2330, 0, 2410, 2076, - 2084, 2085, 2061, 2070, 2109, 2216, 2341, 1943, 2104, 2178, - 2032, 2056, 2057, 2197, 2198, 2080, 2081, 2060, 2265, 2267, - 2283, 2284, 2269, 2271, 2280, 2286, 2291, 2270, 2282, 2287, - 2300, 2304, 2307, 2308, 2309, 2277, 2275, 2288, 2292, 2294, - 2296, 2302, 2305, 2278, 2276, 2289, 2293, 2295, 2297, 2303, - 2306, 2264, 2268, 2272, 2281, 2299, 2279, 2298, 2273, 2285, - 2290, 2301, 2274, 2266, 2074, 2077, 2064, 2065, 2067, 2069, - 2075, 2082, 2088, 2066, 2087, 2086, 0, 2062, 2063, 2068, - 2079, 2083, 2071, 2072, 2073, 2078, 2089, 2132, 2131, 2130, - 2177, 2100, 2176, 0, 0, 0, 0, 0, 1913, 1976, - 1977, 2311, 1428, 1429, 1430, 1431, 0, 0, 0, 0, - 0, 0, 0, 360, 361, 1557, 1558, 105, 1223, 1701, - 1508, 1508, 1508, 1508, 1508, 1508, 1162, 1163, 1164, 1165, - 1166, 1192, 1193, 1199, 1200, 2192, 2193, 2194, 2195, 2014, - 2352, 2023, 2024, 2173, 2174, 2038, 2039, 2384, 2385, -2, - -2, -2, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 1975, 2327, 2328, 298, 0, 1699, 1700, 365, 362, - 363, 364, 1206, 1207, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 367, 368, 2413, - 0, 933, 0, 0, 0, 0, 0, 0, 1743, 1744, - 1582, 0, 1574, 1573, 124, 0, 960, -2, 0, 0, - 0, 0, -2, 108, 0, 113, 1021, 0, 963, 138, - 137, 1633, 1636, 0, 0, 0, 1643, 1645, 1646, 1647, - 102, 120, 1583, 128, 130, 1584, 0, 965, 966, 0, - 997, 1001, 0, 0, 0, 1721, 1720, 1720, 166, 0, - 0, 167, 187, 188, 189, 0, 0, 173, 174, 1707, - 1708, 104, 0, 0, 245, 246, 0, 1180, 498, 0, - 241, 0, 491, 430, 0, 0, 0, 1025, 230, 231, - 232, 471, 471, 471, 645, 0, 0, 233, 233, 603, - 604, 605, 0, 0, -2, 496, 0, 583, 0, 0, - 485, 485, 489, 487, 488, 0, 0, 0, 0, 0, - 0, 0, 0, 622, 0, 623, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 740, 0, 472, 0, 643, - 644, 534, 0, 0, 0, 0, 0, 0, 0, 0, - 1723, 1724, 0, 620, 621, 0, 0, 0, 471, 471, - 0, 0, 0, 0, 471, 471, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 221, 1623, 0, 0, 222, 223, - 1601, 0, -2, 0, 784, 0, 0, 0, 1716, 1716, - 1716, 0, 1715, 792, 0, 0, 0, 797, 0, 0, - 798, 0, 861, 861, 859, 860, 800, 801, 802, 803, - 864, 0, 0, 480, 481, 482, 861, 864, 0, 864, - 864, 864, 864, 861, 861, 861, 864, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2414, 867, 864, 0, - 831, 0, 832, 833, 834, 835, 838, 839, 841, 2415, - 2416, 1733, 1734, 1745, 1746, 1747, 1748, 1749, 1750, 1751, - 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, - 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, - 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, - 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, - 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, - 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, - 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, - 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, - 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, - 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, - 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, - 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, - 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, - 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, - 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, - 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 2414, 2414, - 845, 849, 853, 851, 1706, 876, 882, 884, 885, 0, - 0, 895, 898, 917, 110, 2022, 903, 110, 905, 906, - 907, 908, 909, 935, 936, 941, 0, 0, 0, 0, - 947, 948, 949, 0, 0, 952, 953, 954, 0, 0, - 0, 0, 0, 1086, 0, 0, 1212, 1213, 1214, 1215, - 1216, 1217, 1218, 1219, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1111, 1112, 0, 0, 0, 1136, 1137, 1138, - 1139, 1142, 0, 1153, 0, 1155, 1553, -2, 0, 0, - 0, 1147, 1148, 0, 0, 0, 1726, 1726, 0, 0, - 0, 1545, 0, 0, 1238, 0, 1239, 1241, 1242, 1243, - 0, 1244, 1245, 970, 970, 970, 970, 970, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 970, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1726, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1726, 0, 0, - 1726, 1726, 0, 0, 290, 291, 292, 293, 294, 295, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 366, 310, 311, 312, 313, 314, - 369, 315, 316, 317, 1223, 0, 0, 960, 0, 107, - 925, 926, 0, 1047, 1726, 0, 0, 976, 0, 1741, - 118, 127, 129, 1582, 122, 1582, 0, 980, 0, 0, - -2, -2, 981, 982, 986, 987, 988, 989, 990, 991, - 992, 993, 994, 115, 2412, 116, 0, 135, 1605, 0, - 1600, 1623, 0, 0, 0, 0, 1718, 1624, 0, 0, - 0, 109, 0, 140, 141, 1689, 1693, 0, 1634, 0, - 1637, 0, 0, 0, 444, 1641, 0, 0, 0, 1575, - 1576, 1579, 0, 998, 2122, 1002, 0, 1004, 1005, 0, - 0, 164, 0, 1063, 0, 0, 0, 175, 0, 177, - 178, 0, 0, 0, 455, 1709, 1710, 1711, -2, 478, - 0, 455, 439, 377, 378, 379, 430, 381, 430, 430, - 430, 430, 430, 444, 444, 444, 430, 413, 414, 415, - 416, 0, 430, 0, 398, 430, 430, 430, 430, 420, - 421, 422, 423, 424, 425, 426, 427, 382, 383, 384, - 385, 386, 387, 388, 389, 390, 432, 432, 432, 432, - 432, 436, 436, 0, 1181, 0, 459, 0, 1579, 0, - 0, 1609, 1022, 0, 0, 0, 0, 646, 690, 597, - 634, 647, 0, 600, 601, -2, 0, 0, 582, 0, - 584, 0, 479, 0, -2, 0, 489, 0, 485, 489, - 486, 489, 477, 490, 624, 625, 626, 0, 628, 629, - 720, 1033, 0, 0, 0, 0, 0, 726, 727, 728, - 0, 730, 731, 732, 733, 734, 735, 736, 737, 738, - 739, 635, 636, 637, 638, 639, 640, 641, 642, 0, - 0, 0, 0, 584, 0, 631, 0, 0, 535, 536, - 537, 0, 0, 540, 541, 542, 543, 0, 0, 546, - 547, 548, 1050, 1051, 549, 550, 575, 576, 577, 551, - 552, 553, 554, 555, 556, 557, 569, 570, 571, 572, - 573, 574, 558, 559, 560, 561, 562, 563, 566, 0, - 215, 1605, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1716, 0, - 0, 0, 0, 0, 979, 1065, 1739, 1740, 794, 0, - 0, 865, 866, 0, 483, 484, 864, 864, 804, 846, - 0, 864, 808, 847, 809, 811, 810, 812, 825, 826, - 864, 815, 862, 863, 816, 817, 818, 819, 820, 821, - 822, 842, 827, 828, 829, 868, 0, 872, 873, 843, - 844, 0, 854, 0, 0, 0, 888, 889, 0, 896, - 920, 918, 919, 921, 913, 914, 915, 916, 0, 922, - 0, 0, 938, 160, 943, 944, 945, 946, 958, 951, - 1225, 1083, 1084, 1085, 0, 1087, 1093, 0, 1208, 1210, - 1091, 1092, 1095, 0, 0, 0, 1089, 1100, 1220, 1221, - 1222, 0, 0, 0, 0, 0, 1104, 1108, 1113, 1114, - 1115, 1116, 1117, 0, 1118, 0, 1121, 1122, 1123, 1124, - 1125, 1126, 1132, 1521, 1522, 1523, 1151, 370, 371, 0, - 1152, 0, 0, 0, 0, 0, 0, 0, 0, 1468, - 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, - 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1224, - 0, 1727, 0, 0, 0, 1551, 1548, 0, 0, 0, - 1507, 1509, 0, 0, 0, 971, 972, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1488, 1489, 1490, 1491, 1492, 1493, + 471, 471, 471, 471, 471, 471, 471, 471, 471, 1602, + 233, 1742, 1739, 1740, 1914, 1915, 1916, 1917, 1918, 1919, + 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, + 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, + 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, + 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, + 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, + 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, + 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, + 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, + 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, + 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, + 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, + 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, + 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, + 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, + 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, + 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, + 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, + 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, + 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, + 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, + 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, + 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, + 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, + 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2168, 2169, + 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, + 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, + 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, + 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, + 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, + 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, + 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, + 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, + 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2259, + 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, + 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, + 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289, + 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, + 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, + 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, + 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, + 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2337, 2338, 2339, + 2340, 2341, 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349, + 2350, 2351, 2352, 2353, 2354, 2355, 2356, 2357, 2358, 2359, + 2360, 2361, 2362, 2363, 2364, 2365, 2366, 2367, 2368, 2369, + 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, + 2380, 2381, 2382, 2383, 2384, 2385, 2386, 2387, 2388, 2389, + 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399, + 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2407, 2408, 2409, + 2410, 2411, 2412, 2413, 2414, 2415, 0, 1718, 0, 795, + 1066, 0, 958, 959, 0, 866, 866, 0, 866, 866, + 866, 866, 0, 0, 0, 809, 0, 0, 0, 0, + 863, 0, 825, 826, 0, 863, 0, 832, 869, 0, + 0, 839, 866, 866, 842, 2419, 0, 2419, 2419, 0, + 0, 1709, 0, 860, 858, 872, 873, 103, 876, 879, + 880, 881, 882, 885, 0, 896, 899, 1735, 1736, 0, + 901, 906, 925, 926, 0, 106, 1226, 0, 1090, 0, + 1101, -2, 1112, 1129, 1130, 1131, 1132, 1133, 1135, 1136, + 1137, 0, 0, 0, 0, 1142, 1143, 0, 0, 0, + 0, 0, 1206, 0, 0, 0, 0, 2129, 1546, 0, + 0, 1508, 1508, 1242, 1508, 1508, 1510, 1510, 1510, 1973, + 2120, 2130, 2318, 1928, 1934, 1935, 1936, 2263, 2264, 2265, + 2266, 2362, 2363, 2367, 2040, 1923, 2333, 2334, 0, 2415, + 2080, 2088, 2089, 2065, 2074, 2113, 2220, 2345, 1947, 2108, + 2182, 2036, 2060, 2061, 2201, 2202, 2084, 2085, 2064, 2269, + 2271, 2287, 2288, 2273, 2275, 2284, 2290, 2295, 2274, 2286, + 2291, 2304, 2308, 2311, 2312, 2313, 2281, 2279, 2292, 2296, + 2298, 2300, 2306, 2309, 2282, 2280, 2293, 2297, 2299, 2301, + 2307, 2310, 2268, 2272, 2276, 2285, 2303, 2283, 2302, 2277, + 2289, 2294, 2305, 2278, 2270, 2078, 2081, 2068, 2069, 2071, + 2073, 2079, 2086, 2092, 2070, 2091, 2090, 0, 2066, 2067, + 2072, 2083, 2087, 2075, 2076, 2077, 2082, 2093, 2136, 2135, + 2134, 2181, 2104, 2180, 0, 0, 0, 0, 0, 1917, + 1980, 1981, 2315, 1430, 1431, 1432, 1433, 0, 0, 0, + 0, 0, 0, 0, 360, 361, 1559, 1560, 105, 1225, + 1705, 1510, 1510, 1510, 1510, 1510, 1510, 1164, 1165, 1166, + 1167, 1168, 1194, 1195, 1201, 1202, 2196, 2197, 2198, 2199, + 2018, 2356, 2027, 2028, 2177, 2178, 2042, 2043, 2389, 2390, + -2, -2, -2, 302, 303, 304, 305, 306, 307, 308, + 309, 0, 1979, 2331, 2332, 298, 0, 1703, 1704, 365, + 362, 363, 364, 1208, 1209, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 367, 368, + 2418, 0, 935, 0, 0, 0, 0, 0, 0, 1747, + 1748, 1584, 0, 1576, 1575, 124, 0, 962, -2, 0, + 0, 0, 0, -2, 108, 0, 113, 1023, 0, 965, + 138, 137, 1635, 1638, 0, 0, 0, 1645, 1647, 1648, + 1649, 102, 120, 1585, 128, 130, 1586, 0, 967, 968, + 0, 999, 1003, 0, 0, 0, 1725, 1724, 1724, 166, + 0, 0, 167, 187, 188, 189, 0, 0, 173, 174, + 1711, 1712, 104, 0, 0, 245, 246, 0, 1182, 498, + 0, 241, 0, 491, 430, 0, 0, 0, 1027, 230, + 231, 232, 471, 471, 471, 645, 0, 0, 233, 233, + 603, 604, 605, 0, 0, -2, 496, 0, 583, 0, + 0, 485, 485, 489, 487, 488, 0, 0, 0, 0, + 0, 0, 0, 0, 622, 0, 623, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 742, 0, 472, 0, + 643, 644, 534, 0, 0, 0, 0, 0, 0, 0, + 0, 1727, 1728, 0, 620, 621, 0, 0, 0, 471, + 471, 0, 0, 0, 0, 471, 471, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 221, 1625, 0, 0, 222, + 223, 1603, 0, -2, 0, 786, 0, 0, 0, 1720, + 1720, 1720, 0, 1719, 794, 0, 0, 0, 799, 0, + 0, 800, 0, 863, 863, 861, 862, 802, 803, 804, + 805, 866, 0, 0, 480, 481, 482, 863, 866, 0, + 866, 866, 866, 866, 863, 863, 863, 866, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2419, 869, 866, + 0, 833, 0, 834, 835, 836, 837, 840, 841, 843, + 2420, 2421, 1737, 1738, 1749, 1750, 1751, 1752, 1753, 1754, + 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, + 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, + 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, + 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, + 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, + 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, + 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, + 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, + 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, + 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, + 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, + 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, + 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, + 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, + 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, + 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 2419, + 2419, 847, 851, 855, 853, 1710, 878, 884, 886, 887, + 0, 0, 897, 900, 919, 110, 2026, 905, 110, 907, + 908, 909, 910, 911, 937, 938, 943, 0, 0, 0, + 0, 949, 950, 951, 0, 0, 954, 955, 956, 0, + 0, 0, 0, 0, 1088, 0, 0, 1214, 1215, 1216, + 1217, 1218, 1219, 1220, 1221, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1113, 1114, 0, 0, 0, 1138, 1139, + 1140, 1141, 1144, 0, 1155, 0, 1157, 1555, -2, 0, + 0, 0, 1149, 1150, 0, 0, 0, 1730, 1730, 0, + 0, 0, 1547, 0, 0, 1240, 0, 1241, 1243, 1244, + 1245, 0, 1246, 1247, 972, 972, 972, 972, 972, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 972, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1730, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1730, 0, + 0, 1730, 1730, 0, 0, 290, 291, 292, 293, 294, + 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 366, 310, 311, 312, 313, + 314, 369, 315, 316, 317, 1225, 0, 0, 962, 0, + 107, 927, 928, 0, 1049, 1730, 0, 0, 978, 0, + 1745, 118, 127, 129, 1584, 122, 1584, 0, 982, 0, + 0, -2, -2, 983, 984, 988, 989, 990, 991, 992, + 993, 994, 995, 996, 115, 2417, 116, 0, 135, 1607, + 0, 1602, 1625, 0, 0, 0, 0, 1722, 1626, 0, + 0, 0, 109, 0, 140, 141, 1693, 1697, 0, 1636, + 0, 1639, 0, 0, 0, 444, 1643, 0, 0, 0, + 1577, 1578, 1581, 0, 1000, 2126, 1004, 0, 1006, 1007, + 0, 0, 164, 0, 1065, 0, 0, 0, 175, 0, + 177, 178, 0, 0, 0, 455, 1713, 1714, 1715, -2, + 478, 0, 455, 439, 377, 378, 379, 430, 381, 430, + 430, 430, 430, 430, 444, 444, 444, 430, 413, 414, + 415, 416, 0, 430, 0, 398, 430, 430, 430, 430, + 420, 421, 422, 423, 424, 425, 426, 427, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 432, 432, 432, + 432, 432, 436, 436, 0, 1183, 0, 459, 0, 1581, + 0, 0, 1611, 1024, 0, 0, 0, 0, 646, 692, + 597, 634, 647, 0, 600, 601, -2, 0, 0, 582, + 0, 584, 0, 479, 0, -2, 0, 489, 0, 485, + 489, 486, 489, 477, 490, 624, 625, 626, 0, 628, + 629, 722, 1035, 0, 0, 0, 0, 0, 728, 729, + 730, 0, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 635, 636, 637, 638, 639, 640, 641, 642, + 0, 0, 0, 0, 584, 0, 631, 0, 0, 535, + 536, 537, 0, 0, 540, 541, 542, 543, 0, 0, + 546, 547, 548, 1052, 1053, 549, 550, 575, 576, 577, + 551, 552, 553, 554, 555, 556, 557, 569, 570, 571, + 572, 573, 574, 558, 559, 560, 561, 562, 563, 566, + 0, 215, 1607, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1720, 0, 0, 0, 0, 0, 981, 1067, 1743, 1744, + 796, 0, 0, 867, 868, 0, 483, 484, 866, 866, + 806, 848, 0, 866, 810, 849, 811, 813, 812, 814, + 827, 828, 866, 817, 864, 865, 818, 819, 820, 821, + 822, 823, 824, 844, 829, 830, 831, 870, 0, 874, + 875, 845, 846, 0, 856, 0, 0, 0, 890, 891, + 0, 898, 922, 920, 921, 923, 915, 916, 917, 918, + 0, 924, 0, 0, 940, 160, 945, 946, 947, 948, + 960, 953, 1227, 1085, 1086, 1087, 0, 1089, 1095, 0, + 1210, 1212, 1093, 1094, 1097, 0, 0, 0, 1091, 1102, + 1222, 1223, 1224, 0, 0, 0, 0, 0, 1106, 1110, + 1115, 1116, 1117, 1118, 1119, 0, 1120, 0, 1123, 1124, + 1125, 1126, 1127, 1128, 1134, 1523, 1524, 1525, 1153, 370, + 371, 0, 1154, 0, 0, 0, 0, 0, 0, 0, + 0, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, + 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, + 1489, 1226, 0, 1731, 0, 0, 0, 1553, 1550, 0, + 0, 0, 1509, 1511, 0, 0, 0, 973, 974, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, - 1504, 1505, 0, 0, 1524, 0, 0, 0, 0, 0, - 0, 0, 1544, 0, 1157, 1158, 1159, 0, 0, 0, - 0, 0, 0, 1286, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 206, 207, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1432, - 1433, 1434, 1435, 0, 0, 0, 0, 0, 0, 0, - 1555, 0, -2, -2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1457, 0, 0, - 0, 0, 0, 0, 1697, 0, 0, 928, 929, 931, - 0, 1067, 0, 1048, 0, 0, 934, 0, 975, 0, - 978, 121, 123, 984, 985, 0, 1006, 995, 983, 117, - 1718, 0, 0, 1718, 1623, 1605, 1728, 0, 0, 0, - 0, 0, 196, 0, 112, 0, 0, 0, 1635, 1638, - 1639, 444, 1666, 0, 453, 453, 450, 1644, 1585, 1586, - 0, 1578, 1580, 1581, 142, 1003, 999, 0, 1081, 0, - 0, 1062, 0, 1009, 1011, 1012, 1013, 1045, 0, 1016, - 1017, 0, 0, 0, 0, 0, 162, 1064, 168, 0, - 176, 0, 0, 181, 182, 169, 170, 171, 172, 0, - 679, -2, 530, 247, 249, 250, 251, 242, -2, 442, - 440, 441, 380, 444, 444, 406, 407, 444, 409, 410, - 411, 412, 0, 418, 0, 399, 400, 401, 402, 391, - 0, 392, 393, 394, 434, 0, 395, 396, 0, 397, - 497, 0, 1587, 460, 461, 463, 471, 0, 466, 467, - 0, 471, 471, 0, 492, 493, 0, 1579, 194, 1611, - 1026, 235, 236, 237, 238, 239, 240, 715, 0, 0, - 691, 713, 714, 233, 0, 0, 243, 586, 585, 0, - 747, 0, 495, 0, 0, 489, 489, 474, 475, 627, - 0, 0, 722, 723, 724, 725, 0, 0, 0, 613, - 524, 0, 614, 615, 584, 586, 0, 0, 455, 538, - 539, 544, 545, 564, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 662, 663, 665, 668, 670, 588, - 674, 676, 0, 664, 667, 669, 671, 588, 675, 677, - 1602, 1603, 1604, 0, 0, 785, 0, 0, 521, 158, - 1717, 790, 791, 795, 796, 861, 814, 848, 861, 806, - 813, 836, 850, 852, 886, 887, 892, 900, 901, 902, - 942, 0, 0, 0, 0, 950, 0, 0, 1094, 1209, - 1211, 1096, 1097, 1098, 1101, 0, 1105, 1109, 0, 0, - 0, 0, 0, 1156, 1154, 1555, 0, 0, 0, 1205, - 0, 0, 1228, 1229, 0, 0, 0, 0, 1549, 0, - 0, 1236, 0, 1510, 1186, 0, 0, 0, 0, 0, - 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, - 1573, 1263, 0, 0, 0, 0, 0, 1268, 1269, 1270, - 1186, 0, 1273, 1274, 0, 1276, 0, 1277, 0, 0, - 0, 0, 1284, 1285, 1287, 0, 0, 1290, 1291, 0, - 1293, 0, 1295, 1296, 1297, 1298, 1299, 1300, 0, 1302, - 0, 1304, 1305, 1306, 0, 1308, 0, 1310, 1311, 0, - 1313, 0, 1315, 0, 1318, 0, 1321, 0, 1324, 0, - 1327, 0, 1330, 0, 1333, 0, 1336, 0, 1339, 0, - 1342, 0, 1345, 0, 1348, 0, 1351, 0, 1354, 0, - 1357, 0, 1360, 0, 1363, 1364, 1365, 0, 1367, 0, - 1369, 0, 1372, 1373, 0, 1375, 0, 1378, 0, 1381, - 0, 0, 1382, 0, 0, 0, 1386, 0, 0, 0, - 0, 1395, 1396, 1397, 1398, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1409, 1410, 1411, 1412, 1413, - 1414, 0, 1416, 0, 1187, 0, 0, 1187, 0, 0, - 0, 0, 0, 1226, 1726, 0, 1511, 1512, 1513, 1514, - 1515, 0, 0, 0, 0, 0, 0, 1455, 1456, 1458, - 0, 0, 1461, 0, 1463, 0, 1698, 927, 930, 932, - 1019, 1068, 1069, 0, 0, 0, 0, 1049, 1725, 973, - 974, 977, 1027, 0, 1559, 0, 0, 1006, 1081, 0, - 1007, 0, 0, 0, 0, 0, 1605, 0, 0, 1729, - 1728, 1728, 1728, 220, 0, 1625, 1626, 1631, 1629, 1630, - 114, 1690, 1694, 1648, 1642, 1660, 1673, 453, 453, 447, - 448, 454, 449, 451, 452, 1577, 0, 1582, 0, 1687, - 0, 960, 1676, 0, 0, 0, 0, 0, 0, 0, - 0, 1052, 0, 0, 1055, 0, 0, 0, 0, 1046, - 1017, 0, 1018, 0, -2, 0, 0, 156, 157, 0, - 0, 0, 179, 180, 0, 0, 186, 456, 457, 224, - 233, 532, 248, 505, 0, 0, 376, 443, 403, 404, - 405, 408, 0, 428, 0, 0, 0, 0, 526, 193, - 1591, 1590, 471, 471, 462, 0, 465, 0, 0, 0, - 1730, 431, 494, 0, 1612, 1613, 685, 0, 0, 692, - 0, 0, 0, 595, 0, 606, 607, 0, 719, -2, - 781, 459, 0, 473, 476, 1034, 0, 0, 608, 0, - 611, 612, 525, 586, 617, 618, 632, 619, 567, 568, - 565, 0, 197, 653, 655, 659, 654, 658, 0, 0, - 0, 590, 0, 678, 590, 651, 0, 521, 1587, 0, - 789, 522, 523, 864, 864, 937, 161, 0, 940, 0, - 0, 0, 0, 1102, 1106, 1119, 1120, 1516, 1542, 430, - 430, 1529, 430, 436, 1532, 430, 1534, 430, 1537, 430, - 1540, 1541, 0, 0, 1149, 0, 0, 0, 0, 1235, - 1552, 0, 0, 1246, 1185, 1186, 1186, 1186, 1186, 1186, - 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, - 1546, 0, 0, 0, 1267, 0, 0, 1271, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 208, 209, 0, - 0, 0, 0, 0, 0, 1466, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1180, 1184, 0, - 1188, 1189, 0, 0, 1418, 0, 0, 1436, 0, 0, - 0, 0, 0, 0, 0, 1556, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1070, 1077, 0, 1077, - 0, 1077, 0, 0, 0, 1712, 1713, 1560, 1561, 1081, - 1562, 996, 1008, 0, 212, 1606, 1607, 1608, 211, 0, - 0, 0, 0, 0, 0, 1719, 0, 1628, 1632, 1666, - 0, 1659, 0, -2, 1668, 0, 0, 0, 1674, 445, - 446, 1000, 143, 1082, 147, 0, 1687, 1702, 0, 1684, - 1691, 1695, 0, 0, 0, 1680, 0, 1081, 1010, 1041, - 1043, 0, 1038, 1053, 1054, 1056, 0, 1058, 0, 1060, - 1061, 1021, 1015, 0, 164, 0, 1081, 1081, 163, 0, - 1066, 183, 184, 185, 531, 252, 257, 0, 0, 0, - 262, 0, 264, 0, 0, 0, 269, 270, 471, 471, - 506, 0, 373, 375, 0, 0, 255, 444, 0, 444, - 0, 435, 437, 0, 507, 527, 1588, 1589, 0, 0, - 464, 468, 469, 470, 0, 688, 0, 716, 0, 0, - 0, 0, 0, 0, 244, 587, 748, 749, 750, 751, - 752, 753, 754, 755, 756, 0, 471, 0, 0, 0, - 471, 471, 471, 0, 773, 458, 0, 0, 744, 741, - 609, 0, 288, 289, 296, 297, 299, 0, 0, 0, - 0, 0, 616, 1021, 200, 0, 0, 0, 0, 661, - 666, 672, 0, 589, 673, 786, 787, 788, 159, 799, - 805, 939, 959, 1090, 1103, 1107, 0, 0, 0, 0, - 1543, 1527, 444, 1530, 1531, 1533, 1535, 1536, 1538, 1539, - 1145, 1146, 1150, 0, 1232, 0, 1234, 0, 1550, 0, - 1247, 1248, 1249, 1250, 1251, 1582, 0, 0, 0, 1266, - 0, 0, 1186, 0, 1279, 1278, 1280, 0, 1282, 1283, - 1288, 1289, 1292, 1294, 1301, 1303, 1307, 1309, 1312, 1314, - 1316, 0, 1319, 0, 1322, 0, 1325, 0, 1328, 0, - 1331, 0, 1334, 0, 1337, 0, 1340, 0, 1343, 0, - 1346, 0, 1349, 0, 1352, 0, 1355, 0, 1358, 0, - 1361, 0, 1366, 1368, 0, 1371, 1374, 1376, 0, 1379, - 0, 1383, 0, 1385, 1387, 1388, 0, 0, 0, 1399, - 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1415, - 0, 1178, 1417, 1190, 1191, 1196, 1420, 0, 0, 0, - 1423, 0, 0, 0, 1427, 1227, 1438, 0, 1443, 0, - 0, 1449, 0, 1453, 0, 1459, 1460, 1462, 1464, 0, - 0, 0, 0, 0, 0, 0, 1047, 1028, 125, 1562, - 1566, 0, -2, 0, 214, 216, 0, 0, 0, 1627, - 1653, 1651, 1651, 1661, 1662, 0, 0, 1669, 0, 0, - 0, 0, 148, 0, 0, 1675, 0, 0, 1696, 0, - 0, 0, 0, 165, 1573, 1035, 1042, 0, 0, 1036, - 0, 1037, 1057, 1059, 1014, 0, 1081, 1081, 154, 155, - 0, 258, 0, 260, 0, 263, 265, 266, 267, 273, - 274, 275, 276, 268, 0, 0, 372, 374, 0, 0, - 417, 429, 419, 0, 0, 1592, 1593, 1594, 1595, 1596, - 1597, 1598, 1599, 1610, 680, 0, 690, 0, 1023, 0, - 683, 0, 598, 0, 0, 0, 471, 471, 471, 0, - 0, 0, 0, 758, 0, 0, 721, 0, 729, 0, - 0, 0, 300, 301, 0, 652, 0, 198, 199, 0, - 0, 657, 591, 592, 1143, 0, 0, 0, 1144, 1528, - 0, 0, 0, 0, 0, 1547, 0, 0, 0, 0, - 1272, 1275, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1391, 0, 0, 0, 710, 711, - 0, 1467, 1183, 1573, 0, 1187, 1197, 1198, 0, 1187, - 1437, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1078, 0, 0, 0, 1029, 1030, 0, 0, - 0, 1067, 1566, 1571, 0, 0, 0, 1615, 1616, 0, - 1620, 1621, 1622, 213, 217, 218, 219, 1656, 0, 1649, - 1652, 1650, 1663, 0, 0, 1670, 0, 1672, 0, 1703, - 1704, 1692, 1685, 960, 1679, 1682, 1684, 1681, 1582, 1039, - 0, 1044, 0, 1573, 153, 0, 261, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 271, 272, - 0, 0, 433, 438, 0, 0, 681, 0, 1024, 693, - 684, 0, 771, 0, 775, 0, 0, 0, 778, 779, - 780, 757, 0, 761, 499, 745, 742, 743, 610, 0, - 201, 202, 0, 0, 0, 1517, 0, 1520, 1230, 1233, - 1231, 0, 1262, 1264, 1265, 1525, 1526, 1281, 1317, 1320, - 1323, 1326, 1329, 1332, 1335, 1338, 1341, 1344, 1347, 1350, - 1353, 1356, 1359, 1362, 1370, 1377, 1380, 1384, 1389, 0, - 1392, 0, 0, 1393, 0, 712, 1174, 0, 0, 1194, - 1195, 0, 1422, 1424, 1425, 1426, 1439, 0, 1444, 1445, - 0, 1450, 0, 1454, 1465, 0, 1072, 1079, 1080, 0, - 1075, 0, 1076, 0, 1020, 1571, 145, 1572, 1569, 0, - 1567, 1564, 110, 1619, 0, 1640, 0, 1654, 1655, 1664, - 1665, 1671, 0, 0, 1684, 0, 1678, 151, 0, 0, - 0, 1582, 259, 0, 279, 689, 0, 692, 682, 769, - 770, 0, 782, 774, 776, 777, 759, -2, 1609, 0, - 0, 0, 660, 1518, 0, 0, 1394, 0, 708, 709, - 1182, 1175, 0, 1160, 1161, 1179, 1419, 1421, 0, 0, - 0, 1071, 1031, 1032, 1073, 1074, 144, 0, 1568, 1202, - 0, 1563, 0, 210, 89, 90, 43, -2, 0, 0, - 0, 1617, 1618, 1657, 1658, 1688, 0, 1677, 1683, 1040, - 1047, 0, 152, 512, 505, 0, 0, 0, 762, 763, - 764, 765, 766, 767, 768, 649, 203, 204, 0, 579, - 580, 581, 197, 0, 1237, 1390, 1176, 0, 0, 0, - 0, 0, 1440, 0, 1446, 0, 1451, 0, 1570, 0, - 0, 1565, 88, 0, -2, 93, 0, 0, 0, 0, - 1025, 67, 68, 69, 50, 74, 75, 83, 77, 1686, - 694, 0, 696, 0, -2, 500, 513, 0, 253, 280, - 281, 0, 0, 284, 0, 286, 287, 277, 278, 0, - 0, 783, 0, 200, 0, 0, 1167, 1168, 1169, 1170, - 1172, 0, 0, 0, 0, 1203, 1180, 44, 94, 110, - 85, 0, 0, 49, 51, 0, 0, 84, 695, 0, - 0, 455, 0, 705, 501, 502, 0, 508, 509, 510, - 511, 282, 283, 285, 717, 0, 578, 656, 1519, 0, - 0, 1441, 0, 1447, 0, 1452, 0, -2, 46, 0, - 0, 0, 52, 0, 55, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 53, 76, 697, 698, - 706, 0, 503, 0, 504, 0, 0, 0, 686, 0, - 717, 1177, 1171, 1173, 0, 0, 1201, 95, 98, 100, - 0, 0, 87, 110, 71, 78, 79, 80, 0, 82, - 72, 73, 48, 0, 0, 707, 703, 514, 516, 517, - 0, 0, 515, 718, 687, 1442, 1448, 0, 110, 99, - 0, 0, 47, 0, 81, 54, 0, 518, 519, 520, - 0, -2, 110, 86, 70, 699, 45, -2, 700, 701, - 702, + 1504, 1505, 1506, 1507, 0, 0, 1526, 0, 0, 0, + 0, 0, 0, 0, 1546, 0, 1159, 1160, 1161, 0, + 0, 0, 0, 0, 0, 1288, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 207, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1434, 1435, 1436, 1437, 0, 0, 0, 0, 0, + 0, 0, 1557, 0, -2, -2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1459, + 0, 0, 0, 0, 0, 0, 1701, 0, 0, 930, + 931, 933, 0, 1069, 0, 1050, 0, 0, 936, 0, + 977, 0, 980, 121, 123, 986, 987, 0, 1008, 997, + 985, 117, 1722, 0, 0, 1722, 1625, 1607, 1732, 0, + 0, 0, 0, 0, 196, 0, 112, 0, 0, 0, + 1637, 1640, 1641, 444, 1668, 0, 453, 453, 450, 1646, + 1587, 1588, 0, 1580, 1582, 1583, 142, 1005, 1001, 0, + 1083, 0, 0, 1064, 0, 1011, 1013, 1014, 1015, 1047, + 0, 1018, 1019, 0, 0, 0, 0, 0, 162, 1066, + 168, 0, 176, 0, 0, 181, 182, 169, 170, 171, + 172, 0, 681, -2, 530, 247, 249, 250, 251, 242, + -2, 442, 440, 441, 380, 444, 444, 406, 407, 444, + 409, 410, 411, 412, 0, 418, 0, 399, 400, 401, + 402, 391, 0, 392, 393, 394, 434, 0, 395, 396, + 0, 397, 497, 0, 1589, 460, 461, 463, 471, 0, + 466, 467, 0, 471, 471, 0, 492, 493, 0, 1581, + 194, 1613, 1028, 235, 236, 237, 238, 239, 240, 717, + 0, 0, 693, 715, 716, 233, 0, 0, 243, 586, + 585, 0, 749, 0, 495, 0, 0, 489, 489, 474, + 475, 627, 0, 0, 724, 725, 726, 727, 0, 0, + 0, 613, 524, 0, 614, 615, 584, 586, 0, 0, + 455, 538, 539, 544, 545, 564, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 662, 663, 665, 668, + 0, 672, 588, 676, 678, 0, 664, 667, 669, 0, + 673, 588, 677, 679, 1604, 1605, 1606, 0, 0, 787, + 0, 0, 521, 158, 1721, 792, 793, 797, 798, 863, + 816, 850, 863, 808, 815, 838, 852, 854, 888, 889, + 894, 902, 903, 904, 944, 0, 0, 0, 0, 952, + 0, 0, 1096, 1211, 1213, 1098, 1099, 1100, 1103, 0, + 1107, 1111, 0, 0, 0, 0, 0, 1158, 1156, 1557, + 0, 0, 0, 1207, 0, 0, 1230, 1231, 0, 0, + 0, 0, 1551, 0, 0, 1238, 0, 1512, 1188, 0, + 0, 0, 0, 0, 1188, 1188, 1188, 1188, 1188, 1188, + 1188, 1188, 1188, 1188, 1575, 1265, 0, 0, 0, 0, + 0, 1270, 1271, 1272, 1188, 0, 1275, 1276, 0, 1278, + 0, 1279, 0, 0, 0, 0, 1286, 1287, 1289, 0, + 0, 1292, 1293, 0, 1295, 0, 1297, 1298, 1299, 1300, + 1301, 1302, 0, 1304, 0, 1306, 1307, 1308, 0, 1310, + 0, 1312, 1313, 0, 1315, 0, 1317, 0, 1320, 0, + 1323, 0, 1326, 0, 1329, 0, 1332, 0, 1335, 0, + 1338, 0, 1341, 0, 1344, 0, 1347, 0, 1350, 0, + 1353, 0, 1356, 0, 1359, 0, 1362, 0, 1365, 1366, + 1367, 0, 1369, 0, 1371, 0, 1374, 1375, 0, 1377, + 0, 1380, 0, 1383, 0, 0, 1384, 0, 0, 0, + 1388, 0, 0, 0, 0, 1397, 1398, 1399, 1400, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1411, + 1412, 1413, 1414, 1415, 1416, 0, 1418, 0, 1189, 0, + 0, 1189, 0, 0, 0, 0, 0, 1228, 1730, 0, + 1513, 1514, 1515, 1516, 1517, 0, 0, 0, 0, 0, + 0, 1457, 1458, 1460, 0, 0, 1463, 0, 1465, 0, + 1702, 929, 932, 934, 1021, 1070, 1071, 0, 0, 0, + 0, 1051, 1729, 975, 976, 979, 1029, 0, 1561, 0, + 0, 1008, 1083, 0, 1009, 0, 0, 0, 0, 0, + 1607, 0, 0, 1733, 1732, 1732, 1732, 220, 0, 1627, + 1628, 1633, 1631, 1632, 114, 1694, 1698, 1650, 1644, 1662, + 1675, 453, 453, 447, 448, 454, 449, 451, 452, 1579, + 0, 1584, 0, 1691, 0, 0, 1678, 0, 1682, -2, + 0, 0, 0, 0, 0, 0, 0, 1054, 0, 0, + 1057, 0, 0, 0, 0, 1048, 1019, 0, 1020, 0, + -2, 0, 0, 156, 157, 0, 0, 0, 179, 180, + 0, 0, 186, 456, 457, 224, 233, 532, 248, 505, + 0, 0, 376, 443, 403, 404, 405, 408, 0, 428, + 0, 0, 0, 0, 526, 193, 1593, 1592, 471, 471, + 462, 0, 465, 0, 0, 0, 1734, 431, 494, 0, + 1614, 1615, 687, 0, 0, 694, 0, 0, 0, 595, + 0, 606, 607, 0, 721, -2, 783, 459, 0, 473, + 476, 1036, 0, 0, 608, 0, 611, 612, 525, 586, + 617, 618, 632, 619, 567, 568, 565, 0, 197, 653, + 655, 659, 654, 658, 0, 0, 0, 670, 590, 0, + 680, 671, 590, 651, 0, 521, 1589, 0, 791, 522, + 523, 866, 866, 939, 161, 0, 942, 0, 0, 0, + 0, 1104, 1108, 1121, 1122, 1518, 1544, 430, 430, 1531, + 430, 436, 1534, 430, 1536, 430, 1539, 430, 1542, 1543, + 0, 0, 1151, 0, 0, 0, 0, 1237, 1554, 0, + 0, 1248, 1187, 1188, 1188, 1188, 1188, 1188, 1254, 1255, + 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1548, 0, + 0, 0, 1269, 0, 0, 1273, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 208, 209, 0, 0, 0, + 0, 0, 0, 1468, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1182, 1186, 0, 1190, 1191, + 0, 0, 1420, 0, 0, 1438, 0, 0, 0, 0, + 0, 0, 0, 1558, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1072, 1079, 0, 1079, 0, 1079, + 0, 0, 0, 1716, 1717, 1562, 1563, 1083, 1564, 998, + 1010, 0, 212, 1608, 1609, 1610, 211, 0, 0, 0, + 0, 0, 0, 1723, 0, 1630, 1634, 1668, 0, 1661, + 0, -2, 1670, 0, 0, 0, 1676, 445, 446, 1002, + 143, 1084, 147, 0, 1691, 1706, 0, 1688, 1695, 1699, + 0, 0, 0, 1684, 0, 1083, 1012, 1043, 1045, 0, + 1040, 1055, 1056, 1058, 0, 1060, 0, 1062, 1063, 1023, + 1017, 0, 164, 0, 1083, 1083, 163, 0, 1068, 183, + 184, 185, 531, 252, 257, 0, 0, 0, 262, 0, + 264, 0, 0, 0, 269, 270, 471, 471, 506, 0, + 373, 375, 0, 0, 255, 444, 0, 444, 0, 435, + 437, 0, 507, 527, 1590, 1591, 0, 0, 464, 468, + 469, 470, 0, 690, 0, 718, 0, 0, 0, 0, + 0, 0, 244, 587, 750, 751, 752, 753, 754, 755, + 756, 757, 758, 0, 471, 0, 0, 0, 471, 471, + 471, 0, 775, 458, 0, 0, 746, 743, 609, 0, + 288, 289, 296, 297, 299, 0, 0, 0, 0, 0, + 616, 1023, 200, 0, 0, 0, 0, 661, 666, 674, + 0, 589, 675, 788, 789, 790, 159, 801, 807, 941, + 961, 1092, 1105, 1109, 0, 0, 0, 0, 1545, 1529, + 444, 1532, 1533, 1535, 1537, 1538, 1540, 1541, 1147, 1148, + 1152, 0, 1234, 0, 1236, 0, 1552, 0, 1249, 1250, + 1251, 1252, 1253, 1584, 0, 0, 0, 1268, 0, 0, + 1188, 0, 1281, 1280, 1282, 0, 1284, 1285, 1290, 1291, + 1294, 1296, 1303, 1305, 1309, 1311, 1314, 1316, 1318, 0, + 1321, 0, 1324, 0, 1327, 0, 1330, 0, 1333, 0, + 1336, 0, 1339, 0, 1342, 0, 1345, 0, 1348, 0, + 1351, 0, 1354, 0, 1357, 0, 1360, 0, 1363, 0, + 1368, 1370, 0, 1373, 1376, 1378, 0, 1381, 0, 1385, + 0, 1387, 1389, 1390, 0, 0, 0, 1401, 1402, 1403, + 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1417, 0, 1180, + 1419, 1192, 1193, 1198, 1422, 0, 0, 0, 1425, 0, + 0, 0, 1429, 1229, 1440, 0, 1445, 0, 0, 1451, + 0, 1455, 0, 1461, 1462, 1464, 1466, 0, 0, 0, + 0, 0, 0, 0, 1049, 1030, 125, 1564, 1568, 0, + -2, 0, 214, 216, 0, 0, 0, 1629, 1655, 1653, + 1653, 1663, 1664, 0, 0, 1671, 0, 0, 0, 0, + 148, 0, 0, 1677, 0, 0, 1700, 0, 0, 0, + 1683, 0, 165, 1575, 1037, 1044, 0, 0, 1038, 0, + 1039, 1059, 1061, 1016, 0, 1083, 1083, 154, 155, 0, + 258, 0, 260, 0, 263, 265, 266, 267, 273, 274, + 275, 276, 268, 0, 0, 372, 374, 0, 0, 417, + 429, 419, 0, 0, 1594, 1595, 1596, 1597, 1598, 1599, + 1600, 1601, 1612, 682, 0, 692, 0, 1025, 0, 685, + 0, 598, 0, 0, 0, 471, 471, 471, 0, 0, + 0, 0, 760, 0, 0, 723, 0, 731, 0, 0, + 0, 300, 301, 0, 652, 0, 198, 199, 0, 0, + 657, 591, 592, 1145, 0, 0, 0, 1146, 1530, 0, + 0, 0, 0, 0, 1549, 0, 0, 0, 0, 1274, + 1277, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1393, 0, 0, 0, 712, 713, 0, + 1469, 1185, 1575, 0, 1189, 1199, 1200, 0, 1189, 1439, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1080, 0, 0, 0, 1031, 1032, 0, 0, 0, + 1069, 1568, 1573, 0, 0, 0, 1617, 1618, 0, 1622, + 1623, 1624, 213, 217, 218, 219, 1658, 0, 1651, 1654, + 1652, 1665, 0, 0, 1672, 0, 1674, 0, 1707, 1708, + 1696, 1689, 0, 1681, 1686, 1688, 1685, 1584, 1041, 0, + 1046, 0, 1575, 153, 0, 261, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 271, 272, 0, + 0, 433, 438, 0, 0, 683, 0, 1026, 695, 686, + 0, 773, 0, 777, 0, 0, 0, 780, 781, 782, + 759, 0, 763, 499, 747, 744, 745, 610, 0, 201, + 202, 0, 0, 0, 1519, 0, 1522, 1232, 1235, 1233, + 0, 1264, 1266, 1267, 1527, 1528, 1283, 1319, 1322, 1325, + 1328, 1331, 1334, 1337, 1340, 1343, 1346, 1349, 1352, 1355, + 1358, 1361, 1364, 1372, 1379, 1382, 1386, 1391, 0, 1394, + 0, 0, 1395, 0, 714, 1176, 0, 0, 1196, 1197, + 0, 1424, 1426, 1427, 1428, 1441, 0, 1446, 1447, 0, + 1452, 0, 1456, 1467, 0, 1074, 1081, 1082, 0, 1077, + 0, 1078, 0, 1022, 1573, 145, 1574, 1571, 0, 1569, + 1566, 110, 1621, 0, 1642, 0, 1656, 1657, 1666, 1667, + 1673, 0, 0, 1688, 0, 1680, 151, 0, 0, 0, + 1584, 259, 0, 279, 691, 0, 694, 684, 771, 772, + 0, 784, 776, 778, 779, 761, -2, 1611, 0, 0, + 0, 660, 1520, 0, 0, 1396, 0, 710, 711, 1184, + 1177, 0, 1162, 1163, 1181, 1421, 1423, 0, 0, 0, + 1073, 1033, 1034, 1075, 1076, 144, 0, 1570, 1204, 0, + 1565, 0, 210, 89, 90, 43, -2, 0, 0, 0, + 1619, 1620, 1659, 1660, 1692, 0, 1679, 1687, 1042, 1049, + 0, 152, 512, 505, 0, 0, 0, 764, 765, 766, + 767, 768, 769, 770, 649, 203, 204, 0, 579, 580, + 581, 197, 0, 1239, 1392, 1178, 0, 0, 0, 0, + 0, 1442, 0, 1448, 0, 1453, 0, 1572, 0, 0, + 1567, 88, 0, -2, 93, 0, 0, 0, 0, 1027, + 67, 68, 69, 50, 74, 75, 83, 77, 1690, 696, + 0, 698, 0, -2, 500, 513, 0, 253, 280, 281, + 0, 0, 284, 0, 286, 287, 277, 278, 0, 0, + 785, 0, 200, 0, 0, 1169, 1170, 1171, 1172, 1174, + 0, 0, 0, 0, 1205, 1182, 44, 94, 110, 85, + 0, 0, 49, 51, 0, 0, 84, 697, 0, 0, + 455, 0, 707, 501, 502, 0, 508, 509, 510, 511, + 282, 283, 285, 719, 0, 578, 656, 1521, 0, 0, + 1443, 0, 1449, 0, 1454, 0, -2, 46, 0, 0, + 0, 52, 0, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 53, 76, 699, 700, 708, + 0, 503, 0, 504, 0, 0, 0, 688, 0, 719, + 1179, 1173, 1175, 0, 0, 1203, 95, 98, 100, 0, + 0, 87, 110, 71, 78, 79, 80, 0, 82, 72, + 73, 48, 0, 0, 709, 705, 514, 516, 517, 0, + 0, 515, 720, 689, 1444, 1450, 0, 110, 99, 0, + 0, 47, 0, 81, 54, 0, 518, 519, 520, 0, + -2, 110, 86, 70, 701, 45, -2, 702, 703, 704, } var yyTok1 = [...]int{ 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 158, 3, 3, 3, 187, 179, 3, - 95, 97, 184, 182, 96, 183, 237, 185, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 787, - 167, 166, 168, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 157, 3, 3, 3, 187, 179, 3, + 94, 96, 184, 182, 95, 183, 237, 185, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 788, + 166, 165, 167, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 189, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 154, 3, 190, + 3, 3, 3, 3, 153, 3, 190, } var yyTok2 = [...]int{ @@ -10790,13 +10509,13 @@ var yyTok2 = [...]int{ 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - 92, 93, 94, 98, 99, 100, 101, 102, 103, 104, + 92, 93, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, - 156, 157, 159, 160, 161, 162, 163, 164, 165, 169, + 145, 146, 147, 148, 149, 150, 151, 152, 154, 155, + 156, 158, 159, 160, 161, 162, 163, 164, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 180, 181, 186, 188, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, @@ -10912,7 +10631,7 @@ var yyTok3 = [...]int{ 58095, 770, 58096, 771, 58097, 772, 58098, 773, 58099, 774, 58100, 775, 58101, 776, 58102, 777, 58103, 778, 58104, 779, 58105, 780, 58106, 781, 58107, 782, 58108, 783, 58109, 784, - 58110, 785, 58111, 786, 0, + 58110, 785, 58111, 786, 58112, 787, 0, } var yyErrorMessages = [...]struct { @@ -11262,14 +10981,14 @@ yydefault: case 1: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:676 +//line sql.y:675 { setParseTrees(yylex, yyDollar[1].statementsUnion()) } case 2: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []Statement -//line sql.y:682 +//line sql.y:681 { yyLOCAL = []Statement{yyDollar[1].statementUnion()} resetTokenizer(yylex) @@ -11277,7 +10996,7 @@ yydefault: yyVAL.union = yyLOCAL case 3: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:687 +//line sql.y:686 { yySLICE := (*[]Statement)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].statementUnion()) @@ -11286,7 +11005,7 @@ yydefault: case 4: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:694 +//line sql.y:693 { yyLOCAL = yyDollar[2].statementUnion() // If the statement is empty and we have comments @@ -11301,7 +11020,7 @@ yydefault: case 5: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:707 +//line sql.y:706 { yyLOCAL = yyDollar[1].statementUnion() } @@ -11309,7 +11028,7 @@ yydefault: case 6: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Statement -//line sql.y:711 +//line sql.y:710 { yyLOCAL = nil } @@ -11317,7 +11036,7 @@ yydefault: case 7: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:717 +//line sql.y:716 { yyLOCAL = yyDollar[1].tableStmtUnion() } @@ -11325,7 +11044,7 @@ yydefault: case 43: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CompoundStatement -//line sql.y:758 +//line sql.y:757 { yyLOCAL = &SingleStatement{Statement: yyDollar[1].statementUnion()} } @@ -11333,7 +11052,7 @@ yydefault: case 44: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL CompoundStatement -//line sql.y:762 +//line sql.y:761 { yyLOCAL = &BeginEndStatement{Statements: yyDollar[2].compoundStatementsUnion()} } @@ -11341,7 +11060,7 @@ yydefault: case 45: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL CompoundStatement -//line sql.y:766 +//line sql.y:765 { yyLOCAL = &IfStatement{SearchCondition: yyDollar[2].exprUnion(), ThenStatements: yyDollar[4].compoundStatementsUnion(), ElseIfBlocks: yyDollar[5].elseIfsUnion(), ElseStatements: yyDollar[6].compoundStatementsUnion()} } @@ -11349,7 +11068,7 @@ yydefault: case 46: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL CompoundStatement -//line sql.y:770 +//line sql.y:769 { yyDollar[3].columnType.Options = yyDollar[4].columnTypeOptionsUnion() yyLOCAL = &DeclareVar{VarNames: yyDollar[2].columnsUnion(), Type: yyDollar[3].columnType} @@ -11358,7 +11077,7 @@ yydefault: case 47: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL CompoundStatement -//line sql.y:775 +//line sql.y:774 { yyLOCAL = &DeclareHandler{Action: yyDollar[2].handlerActionUnion(), Conditions: yyDollar[5].handlerConditionsUnion(), Statement: yyDollar[6].compoundStatementUnion()} } @@ -11366,7 +11085,7 @@ yydefault: case 48: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL CompoundStatement -//line sql.y:779 +//line sql.y:778 { yyLOCAL = &DeclareCondition{Name: yyDollar[2].identifierCI, Condition: yyDollar[5].handlerConditionUnion()} } @@ -11374,7 +11093,7 @@ yydefault: case 49: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL CompoundStatement -//line sql.y:783 +//line sql.y:782 { yyLOCAL = &Signal{Condition: yyDollar[2].handlerConditionUnion(), SetValues: yyDollar[3].signalSetsUnion()} } @@ -11382,14 +11101,14 @@ yydefault: case 50: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*SignalSet -//line sql.y:788 +//line sql.y:787 { yyLOCAL = nil } yyVAL.union = yyLOCAL case 52: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:795 +//line sql.y:794 { yySLICE := (*[]*SignalSet)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].signalSetUnion()) @@ -11397,7 +11116,7 @@ yydefault: case 53: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []*SignalSet -//line sql.y:799 +//line sql.y:798 { yyLOCAL = []*SignalSet{yyDollar[2].signalSetUnion()} } @@ -11405,7 +11124,7 @@ yydefault: case 54: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SignalSet -//line sql.y:805 +//line sql.y:804 { yyLOCAL = &SignalSet{ConditionName: yyDollar[1].signalConditionNameUnion(), Value: yyDollar[3].exprUnion()} } @@ -11413,7 +11132,7 @@ yydefault: case 55: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SignalConditionName -//line sql.y:811 +//line sql.y:810 { yyLOCAL = ClassOriginType } @@ -11421,7 +11140,7 @@ yydefault: case 56: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SignalConditionName -//line sql.y:815 +//line sql.y:814 { yyLOCAL = SubclassOriginType } @@ -11429,7 +11148,7 @@ yydefault: case 57: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SignalConditionName -//line sql.y:819 +//line sql.y:818 { yyLOCAL = MessageTextType } @@ -11437,7 +11156,7 @@ yydefault: case 58: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SignalConditionName -//line sql.y:823 +//line sql.y:822 { yyLOCAL = MySQLErrNoType } @@ -11445,7 +11164,7 @@ yydefault: case 59: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SignalConditionName -//line sql.y:827 +//line sql.y:826 { yyLOCAL = ConstraintCatalogType } @@ -11453,7 +11172,7 @@ yydefault: case 60: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SignalConditionName -//line sql.y:831 +//line sql.y:830 { yyLOCAL = ConstraintSchemaType } @@ -11461,7 +11180,7 @@ yydefault: case 61: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SignalConditionName -//line sql.y:835 +//line sql.y:834 { yyLOCAL = ConstraintNameType } @@ -11469,7 +11188,7 @@ yydefault: case 62: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SignalConditionName -//line sql.y:839 +//line sql.y:838 { yyLOCAL = CatalogNameType } @@ -11477,7 +11196,7 @@ yydefault: case 63: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SignalConditionName -//line sql.y:843 +//line sql.y:842 { yyLOCAL = SchemaNameType } @@ -11485,7 +11204,7 @@ yydefault: case 64: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SignalConditionName -//line sql.y:847 +//line sql.y:846 { yyLOCAL = TableNameType } @@ -11493,7 +11212,7 @@ yydefault: case 65: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SignalConditionName -//line sql.y:851 +//line sql.y:850 { yyLOCAL = ColumnNameType } @@ -11501,7 +11220,7 @@ yydefault: case 66: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SignalConditionName -//line sql.y:855 +//line sql.y:854 { yyLOCAL = CursorNameType } @@ -11509,7 +11228,7 @@ yydefault: case 67: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL HandlerAction -//line sql.y:861 +//line sql.y:860 { yyLOCAL = ContinueAction } @@ -11517,7 +11236,7 @@ yydefault: case 68: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL HandlerAction -//line sql.y:865 +//line sql.y:864 { yyLOCAL = ExitAction } @@ -11525,14 +11244,14 @@ yydefault: case 69: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL HandlerAction -//line sql.y:869 +//line sql.y:868 { yyLOCAL = UndoAction } yyVAL.union = yyLOCAL case 70: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:875 +//line sql.y:874 { yySLICE := (*[]HandlerCondition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].handlerConditionUnion()) @@ -11540,7 +11259,7 @@ yydefault: case 71: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []HandlerCondition -//line sql.y:879 +//line sql.y:878 { yyLOCAL = []HandlerCondition{yyDollar[1].handlerConditionUnion()} } @@ -11548,7 +11267,7 @@ yydefault: case 72: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL HandlerCondition -//line sql.y:885 +//line sql.y:884 { yyLOCAL = &HandlerConditionErrorCode{ErrorCode: convertStringToInt(yyDollar[1].str)} } @@ -11556,7 +11275,7 @@ yydefault: case 73: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL HandlerCondition -//line sql.y:889 +//line sql.y:888 { yyLOCAL = yyDollar[1].handlerConditionUnion() } @@ -11564,7 +11283,7 @@ yydefault: case 76: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL HandlerCondition -//line sql.y:899 +//line sql.y:898 { yyLOCAL = &HandlerConditionSQLState{SQLStateValue: NewStrLiteral(yyDollar[3].str)} } @@ -11572,7 +11291,7 @@ yydefault: case 77: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL HandlerCondition -//line sql.y:905 +//line sql.y:904 { yyLOCAL = &HandlerConditionNamed{Name: yyDollar[1].identifierCI} } @@ -11580,7 +11299,7 @@ yydefault: case 78: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL HandlerCondition -//line sql.y:911 +//line sql.y:910 { yyLOCAL = yyDollar[1].handlerConditionUnion() } @@ -11588,7 +11307,7 @@ yydefault: case 79: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL HandlerCondition -//line sql.y:915 +//line sql.y:914 { yyLOCAL = yyDollar[1].handlerConditionUnion() } @@ -11596,7 +11315,7 @@ yydefault: case 80: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL HandlerCondition -//line sql.y:919 +//line sql.y:918 { yyLOCAL = &HandlerConditionSQLWarning{} } @@ -11604,7 +11323,7 @@ yydefault: case 81: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL HandlerCondition -//line sql.y:923 +//line sql.y:922 { yyLOCAL = &HandlerConditionNotFound{} } @@ -11612,20 +11331,20 @@ yydefault: case 82: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL HandlerCondition -//line sql.y:927 +//line sql.y:926 { yyLOCAL = &HandlerConditionSQLException{} } yyVAL.union = yyLOCAL case 83: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:932 +//line sql.y:931 { } case 85: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:936 +//line sql.y:935 { yyLOCAL = nil } @@ -11633,7 +11352,7 @@ yydefault: case 86: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:940 +//line sql.y:939 { yyLOCAL = &ColumnTypeOptions{Default: yyDollar[3].exprUnion()} } @@ -11641,7 +11360,7 @@ yydefault: case 87: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:944 +//line sql.y:943 { yyLOCAL = &ColumnTypeOptions{Default: yyDollar[2].exprUnion(), DefaultLiteral: true} } @@ -11649,7 +11368,7 @@ yydefault: case 88: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL CompoundStatement -//line sql.y:950 +//line sql.y:949 { yyLOCAL = yyDollar[1].compoundStatementUnion() } @@ -11657,7 +11376,7 @@ yydefault: case 91: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *CompoundStatements -//line sql.y:959 +//line sql.y:958 { yyLOCAL = nil } @@ -11665,7 +11384,7 @@ yydefault: case 92: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *CompoundStatements -//line sql.y:963 +//line sql.y:962 { yyLOCAL = yyDollar[1].compoundStatementsUnion() } @@ -11673,7 +11392,7 @@ yydefault: case 93: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *CompoundStatements -//line sql.y:969 +//line sql.y:968 { yyLOCAL = &CompoundStatements{Statements: []CompoundStatement{yyDollar[1].compoundStatementUnion()}} } @@ -11681,7 +11400,7 @@ yydefault: case 94: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *CompoundStatements -//line sql.y:973 +//line sql.y:972 { yyDollar[1].compoundStatementsUnion().Statements = append(yyDollar[1].compoundStatementsUnion().Statements, yyDollar[2].compoundStatementUnion()) yyLOCAL = yyDollar[1].compoundStatementsUnion() @@ -11690,7 +11409,7 @@ yydefault: case 95: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *CompoundStatements -//line sql.y:979 +//line sql.y:978 { yyLOCAL = nil } @@ -11698,7 +11417,7 @@ yydefault: case 96: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *CompoundStatements -//line sql.y:983 +//line sql.y:982 { yyLOCAL = yyDollar[2].compoundStatementsUnion() } @@ -11706,7 +11425,7 @@ yydefault: case 97: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*ElseIfBlock -//line sql.y:988 +//line sql.y:987 { yyLOCAL = nil } @@ -11714,14 +11433,14 @@ yydefault: case 98: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ElseIfBlock -//line sql.y:992 +//line sql.y:991 { yyLOCAL = yyDollar[1].elseIfsUnion() } yyVAL.union = yyLOCAL case 99: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:998 +//line sql.y:997 { yySLICE := (*[]*ElseIfBlock)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].elseIfUnion()) @@ -11729,7 +11448,7 @@ yydefault: case 100: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ElseIfBlock -//line sql.y:1002 +//line sql.y:1001 { yyLOCAL = []*ElseIfBlock{yyDollar[1].elseIfUnion()} } @@ -11737,7 +11456,7 @@ yydefault: case 101: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *ElseIfBlock -//line sql.y:1008 +//line sql.y:1007 { yyLOCAL = &ElseIfBlock{SearchCondition: yyDollar[2].exprUnion(), ThenStatements: yyDollar[4].compoundStatementsUnion()} } @@ -11745,21 +11464,21 @@ yydefault: case 102: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:1014 +//line sql.y:1013 { yyLOCAL = NewVariableExpression(yyDollar[1].str, SingleAt) } yyVAL.union = yyLOCAL case 103: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1020 +//line sql.y:1019 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } case 104: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:1026 +//line sql.y:1025 { yyLOCAL = NewVariableExpression(string(yyDollar[1].str), SingleAt) } @@ -11767,7 +11486,7 @@ yydefault: case 105: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:1030 +//line sql.y:1029 { yyLOCAL = NewVariableExpression(string(yyDollar[1].str), DoubleAt) } @@ -11775,7 +11494,7 @@ yydefault: case 106: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:1036 +//line sql.y:1035 { yyLOCAL = &OtherAdmin{} } @@ -11783,7 +11502,7 @@ yydefault: case 107: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:1042 +//line sql.y:1041 { yyLOCAL = &Load{} } @@ -11791,7 +11510,7 @@ yydefault: case 108: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *With -//line sql.y:1048 +//line sql.y:1047 { yyLOCAL = &With{CTEs: yyDollar[2].ctesUnion(), Recursive: false} } @@ -11799,7 +11518,7 @@ yydefault: case 109: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *With -//line sql.y:1052 +//line sql.y:1051 { yyLOCAL = &With{CTEs: yyDollar[3].ctesUnion(), Recursive: true} } @@ -11807,7 +11526,7 @@ yydefault: case 110: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *With -//line sql.y:1057 +//line sql.y:1056 { yyLOCAL = nil } @@ -11815,14 +11534,14 @@ yydefault: case 111: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *With -//line sql.y:1061 +//line sql.y:1060 { yyLOCAL = yyDollar[1].withUnion() } yyVAL.union = yyLOCAL case 112: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1067 +//line sql.y:1066 { yySLICE := (*[]*CommonTableExpr)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].cteUnion()) @@ -11830,7 +11549,7 @@ yydefault: case 113: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*CommonTableExpr -//line sql.y:1071 +//line sql.y:1070 { yyLOCAL = []*CommonTableExpr{yyDollar[1].cteUnion()} } @@ -11838,7 +11557,7 @@ yydefault: case 114: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *CommonTableExpr -//line sql.y:1077 +//line sql.y:1076 { yyLOCAL = &CommonTableExpr{ID: yyDollar[1].identifierCS, Columns: yyDollar[2].columnsUnion(), Subquery: yyDollar[4].subqueryUnion().Select} } @@ -11846,7 +11565,7 @@ yydefault: case 115: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1083 +//line sql.y:1082 { yyLOCAL = yyDollar[2].tableStmtUnion() } @@ -11854,7 +11573,7 @@ yydefault: case 116: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1087 +//line sql.y:1086 { yyLOCAL = yyDollar[2].tableStmtUnion() } @@ -11862,7 +11581,7 @@ yydefault: case 117: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1091 +//line sql.y:1090 { setLockIfPossible(yylex, yyDollar[2].tableStmtUnion(), yyDollar[3].lockUnion()) yyLOCAL = yyDollar[2].tableStmtUnion() @@ -11871,7 +11590,7 @@ yydefault: case 118: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1114 +//line sql.y:1113 { yyDollar[1].tableStmtUnion().SetOrderBy(yyDollar[2].orderByUnion()) yyDollar[1].tableStmtUnion().SetLimit(yyDollar[3].limitUnion()) @@ -11881,7 +11600,7 @@ yydefault: case 119: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1120 +//line sql.y:1119 { yyDollar[1].tableStmtUnion().SetLimit(yyDollar[2].limitUnion()) yyLOCAL = yyDollar[1].tableStmtUnion() @@ -11890,7 +11609,7 @@ yydefault: case 120: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1125 +//line sql.y:1124 { yyDollar[1].tableStmtUnion().SetOrderBy(yyDollar[2].orderByUnion()) yyDollar[1].tableStmtUnion().SetLimit(yyDollar[3].limitUnion()) @@ -11900,7 +11619,7 @@ yydefault: case 121: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1131 +//line sql.y:1130 { yyDollar[2].tableStmtUnion().SetWith(yyDollar[1].withUnion()) yyDollar[2].tableStmtUnion().SetOrderBy(yyDollar[3].orderByUnion()) @@ -11911,7 +11630,7 @@ yydefault: case 122: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1138 +//line sql.y:1137 { yyDollar[2].tableStmtUnion().SetWith(yyDollar[1].withUnion()) yyDollar[2].tableStmtUnion().SetLimit(yyDollar[3].limitUnion()) @@ -11921,7 +11640,7 @@ yydefault: case 123: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1144 +//line sql.y:1143 { yyDollar[2].tableStmtUnion().SetWith(yyDollar[1].withUnion()) yyDollar[2].tableStmtUnion().SetOrderBy(yyDollar[3].orderByUnion()) @@ -11931,14 +11650,14 @@ yydefault: yyVAL.union = yyLOCAL case 124: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1151 +//line sql.y:1150 { yyDollar[2].tableStmtUnion().SetWith(yyDollar[1].withUnion()) } case 125: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1155 +//line sql.y:1154 { yyLOCAL = NewSelect(Comments(yyDollar[2].strs), &SelectExprs{Exprs: []SelectExpr{&Nextval{Expr: yyDollar[5].exprUnion()}}}, []string{yyDollar[3].str} /*options*/, nil, TableExprs{&AliasedTableExpr{Expr: yyDollar[7].tableName}}, nil /*where*/, nil /*groupBy*/, nil /*having*/, nil) } @@ -11946,7 +11665,7 @@ yydefault: case 126: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1161 +//line sql.y:1160 { yyLOCAL = yyDollar[1].tableStmtUnion() } @@ -11954,7 +11673,7 @@ yydefault: case 127: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1165 +//line sql.y:1164 { yyLOCAL = &Union{Left: yyDollar[1].tableStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].tableStmtUnion()} } @@ -11962,7 +11681,7 @@ yydefault: case 128: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1169 +//line sql.y:1168 { yyLOCAL = &Union{Left: yyDollar[1].tableStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].tableStmtUnion()} } @@ -11970,7 +11689,7 @@ yydefault: case 129: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1173 +//line sql.y:1172 { yyLOCAL = &Union{Left: yyDollar[1].tableStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].tableStmtUnion()} } @@ -11978,7 +11697,7 @@ yydefault: case 130: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1177 +//line sql.y:1176 { yyLOCAL = &Union{Left: yyDollar[1].tableStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].tableStmtUnion()} } @@ -11986,7 +11705,7 @@ yydefault: case 131: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1183 +//line sql.y:1182 { yyLOCAL = yyDollar[1].tableStmtUnion() } @@ -11994,7 +11713,7 @@ yydefault: case 132: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1187 +//line sql.y:1186 { setLockIfPossible(yylex, yyDollar[1].tableStmtUnion(), yyDollar[2].lockUnion()) yyLOCAL = yyDollar[1].tableStmtUnion() @@ -12003,7 +11722,7 @@ yydefault: case 133: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1192 +//line sql.y:1191 { yyLOCAL = yyDollar[1].tableStmtUnion() } @@ -12011,7 +11730,7 @@ yydefault: case 134: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1196 +//line sql.y:1195 { yyLOCAL = yyDollar[1].tableStmtUnion() } @@ -12019,7 +11738,7 @@ yydefault: case 135: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1202 +//line sql.y:1201 { yyLOCAL = yyDollar[2].tableStmtUnion() } @@ -12027,7 +11746,7 @@ yydefault: case 136: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1206 +//line sql.y:1205 { setIntoIfPossible(yylex, yyDollar[1].tableStmtUnion(), yyDollar[2].selectIntoUnion()) yyLOCAL = yyDollar[1].tableStmtUnion() @@ -12036,7 +11755,7 @@ yydefault: case 137: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1211 +//line sql.y:1210 { setIntoIfPossible(yylex, yyDollar[1].tableStmtUnion(), yyDollar[2].selectIntoUnion()) setLockIfPossible(yylex, yyDollar[1].tableStmtUnion(), yyDollar[3].lockUnion()) @@ -12046,7 +11765,7 @@ yydefault: case 138: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1217 +//line sql.y:1216 { setLockIfPossible(yylex, yyDollar[1].tableStmtUnion(), yyDollar[2].lockUnion()) setIntoIfPossible(yylex, yyDollar[1].tableStmtUnion(), yyDollar[3].selectIntoUnion()) @@ -12056,7 +11775,7 @@ yydefault: case 139: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1223 +//line sql.y:1222 { setIntoIfPossible(yylex, yyDollar[1].tableStmtUnion(), yyDollar[2].selectIntoUnion()) yyLOCAL = yyDollar[1].tableStmtUnion() @@ -12065,7 +11784,7 @@ yydefault: case 140: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1230 +//line sql.y:1229 { yyLOCAL = &ValuesStatement{Comments: Comments(yyDollar[2].strs).Parsed(), ListArg: ListArg(yyDollar[3].str[2:])} } @@ -12073,7 +11792,7 @@ yydefault: case 141: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1234 +//line sql.y:1233 { yyLOCAL = &ValuesStatement{Comments: Comments(yyDollar[2].strs).Parsed(), Rows: yyDollar[3].valuesUnion()} } @@ -12081,7 +11800,7 @@ yydefault: case 142: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:1240 +//line sql.y:1239 { yyLOCAL = &Stream{Comments: Comments(yyDollar[2].strs).Parsed(), SelectExpr: yyDollar[3].selectExprUnion(), Table: yyDollar[5].tableName} } @@ -12089,7 +11808,7 @@ yydefault: case 143: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:1246 +//line sql.y:1245 { yyLOCAL = &VStream{Comments: Comments(yyDollar[2].strs).Parsed(), SelectExpr: yyDollar[3].selectExprUnion(), Table: yyDollar[5].tableName, Where: NewWhere(WhereClause, yyDollar[6].exprUnion()), Limit: yyDollar[7].limitUnion()} } @@ -12097,7 +11816,7 @@ yydefault: case 144: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1254 +//line sql.y:1253 { yyLOCAL = NewSelect(Comments(yyDollar[2].strs), yyDollar[4].selectExprsUnion() /*SelectExprs*/, yyDollar[3].strs /*options*/, yyDollar[5].selectIntoUnion() /*into*/, yyDollar[6].tableExprsUnion() /*from*/, NewWhere(WhereClause, yyDollar[7].exprUnion()), yyDollar[8].groupByUnion(), NewWhere(HavingClause, yyDollar[9].exprUnion()), yyDollar[10].namedWindowsUnion()) } @@ -12105,7 +11824,7 @@ yydefault: case 145: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1258 +//line sql.y:1257 { yyLOCAL = NewSelect(Comments(yyDollar[2].strs), yyDollar[4].selectExprsUnion() /*SelectExprs*/, yyDollar[3].strs /*options*/, nil, yyDollar[5].tableExprsUnion() /*from*/, NewWhere(WhereClause, yyDollar[6].exprUnion()), yyDollar[7].groupByUnion(), NewWhere(HavingClause, yyDollar[8].exprUnion()), yyDollar[9].namedWindowsUnion()) } @@ -12113,7 +11832,7 @@ yydefault: case 146: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableStatement -//line sql.y:1262 +//line sql.y:1261 { yyLOCAL = yyDollar[1].tableStmtUnion() } @@ -12121,7 +11840,7 @@ yydefault: case 147: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:1268 +//line sql.y:1267 { // insert_data returns a *Insert pre-filled with Columns & Values ins := yyDollar[6].insUnion() @@ -12137,7 +11856,7 @@ yydefault: case 148: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:1280 +//line sql.y:1279 { cols := make(Columns, 0, len(yyDollar[7].updateExprsUnion())) vals := make(ValTuple, 0, len(yyDollar[8].updateExprsUnion())) @@ -12151,7 +11870,7 @@ yydefault: case 149: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL InsertAction -//line sql.y:1292 +//line sql.y:1291 { yyLOCAL = InsertAct } @@ -12159,7 +11878,7 @@ yydefault: case 150: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL InsertAction -//line sql.y:1296 +//line sql.y:1295 { yyLOCAL = ReplaceAct } @@ -12167,7 +11886,7 @@ yydefault: case 151: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Statement -//line sql.y:1302 +//line sql.y:1301 { yyLOCAL = &Update{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), TableExprs: yyDollar[5].tableExprsUnion(), Exprs: yyDollar[7].updateExprsUnion(), Where: NewWhere(WhereClause, yyDollar[8].exprUnion()), OrderBy: yyDollar[9].orderByUnion(), Limit: yyDollar[10].limitUnion()} } @@ -12175,7 +11894,7 @@ yydefault: case 152: yyDollar = yyS[yypt-11 : yypt+1] var yyLOCAL Statement -//line sql.y:1308 +//line sql.y:1307 { yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), TableExprs: TableExprs{&AliasedTableExpr{Expr: yyDollar[6].tableName, As: yyDollar[7].identifierCS}}, Partitions: yyDollar[8].partitionsUnion(), Where: NewWhere(WhereClause, yyDollar[9].exprUnion()), OrderBy: yyDollar[10].orderByUnion(), Limit: yyDollar[11].limitUnion()} } @@ -12183,7 +11902,7 @@ yydefault: case 153: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Statement -//line sql.y:1312 +//line sql.y:1311 { yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), Targets: yyDollar[6].tableNamesUnion(), TableExprs: yyDollar[8].tableExprsUnion(), Where: NewWhere(WhereClause, yyDollar[9].exprUnion())} } @@ -12191,7 +11910,7 @@ yydefault: case 154: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:1316 +//line sql.y:1315 { yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), Targets: yyDollar[5].tableNamesUnion(), TableExprs: yyDollar[7].tableExprsUnion(), Where: NewWhere(WhereClause, yyDollar[8].exprUnion())} } @@ -12199,32 +11918,32 @@ yydefault: case 155: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:1320 +//line sql.y:1319 { yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), Targets: yyDollar[5].tableNamesUnion(), TableExprs: yyDollar[7].tableExprsUnion(), Where: NewWhere(WhereClause, yyDollar[8].exprUnion())} } yyVAL.union = yyLOCAL case 156: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1325 +//line sql.y:1324 { } case 157: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1326 +//line sql.y:1325 { } case 158: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableNames -//line sql.y:1330 +//line sql.y:1329 { yyLOCAL = TableNames{yyDollar[1].tableName} } yyVAL.union = yyLOCAL case 159: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1334 +//line sql.y:1333 { yySLICE := (*TableNames)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableName) @@ -12232,14 +11951,14 @@ yydefault: case 160: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableNames -//line sql.y:1340 +//line sql.y:1339 { yyLOCAL = TableNames{yyDollar[1].tableName} } yyVAL.union = yyLOCAL case 161: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1344 +//line sql.y:1343 { yySLICE := (*TableNames)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableName) @@ -12247,14 +11966,14 @@ yydefault: case 162: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableNames -//line sql.y:1350 +//line sql.y:1349 { yyLOCAL = TableNames{yyDollar[1].tableName} } yyVAL.union = yyLOCAL case 163: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1354 +//line sql.y:1353 { yySLICE := (*TableNames)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableName) @@ -12262,7 +11981,7 @@ yydefault: case 164: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Partitions -//line sql.y:1359 +//line sql.y:1358 { yyLOCAL = nil } @@ -12270,7 +11989,7 @@ yydefault: case 165: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Partitions -//line sql.y:1363 +//line sql.y:1362 { yyLOCAL = yyDollar[3].partitionsUnion() } @@ -12278,7 +11997,7 @@ yydefault: case 166: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:1369 +//line sql.y:1368 { yyLOCAL = NewSetStatement(Comments(yyDollar[2].strs).Parsed(), yyDollar[3].setExprsUnion()) } @@ -12286,14 +12005,14 @@ yydefault: case 167: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SetExprs -//line sql.y:1375 +//line sql.y:1374 { yyLOCAL = SetExprs{yyDollar[1].setExprUnion()} } yyVAL.union = yyLOCAL case 168: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1379 +//line sql.y:1378 { yySLICE := (*SetExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].setExprUnion()) @@ -12301,7 +12020,7 @@ yydefault: case 169: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1385 +//line sql.y:1384 { yyLOCAL = &SetExpr{Var: yyDollar[1].variableUnion(), Expr: NewStrLiteral("on")} } @@ -12309,7 +12028,7 @@ yydefault: case 170: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1389 +//line sql.y:1388 { yyLOCAL = &SetExpr{Var: yyDollar[1].variableUnion(), Expr: NewStrLiteral("off")} } @@ -12317,7 +12036,7 @@ yydefault: case 171: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1393 +//line sql.y:1392 { yyLOCAL = &SetExpr{Var: yyDollar[1].variableUnion(), Expr: yyDollar[3].exprUnion()} } @@ -12325,7 +12044,7 @@ yydefault: case 172: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1397 +//line sql.y:1396 { yyLOCAL = &SetExpr{Var: NewSetVariable(string(yyDollar[1].str), SessionScope), Expr: yyDollar[2].exprUnion()} } @@ -12333,7 +12052,7 @@ yydefault: case 173: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:1403 +//line sql.y:1402 { yyLOCAL = NewSetVariable(string(yyDollar[1].str), NoScope) } @@ -12341,7 +12060,7 @@ yydefault: case 174: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:1407 +//line sql.y:1406 { yyLOCAL = yyDollar[1].variableUnion() } @@ -12349,7 +12068,7 @@ yydefault: case 175: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Variable -//line sql.y:1411 +//line sql.y:1410 { yyLOCAL = NewSetVariable(string(yyDollar[2].str), yyDollar[1].scopeUnion()) } @@ -12357,7 +12076,7 @@ yydefault: case 176: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:1417 +//line sql.y:1416 { yyLOCAL = NewSetStatement(Comments(yyDollar[2].strs).Parsed(), UpdateSetExprsScope(yyDollar[5].setExprsUnion(), yyDollar[3].scopeUnion())) } @@ -12365,7 +12084,7 @@ yydefault: case 177: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:1421 +//line sql.y:1420 { yyLOCAL = NewSetStatement(Comments(yyDollar[2].strs).Parsed(), yyDollar[4].setExprsUnion()) } @@ -12373,14 +12092,14 @@ yydefault: case 178: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SetExprs -//line sql.y:1427 +//line sql.y:1426 { yyLOCAL = SetExprs{yyDollar[1].setExprUnion()} } yyVAL.union = yyLOCAL case 179: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1431 +//line sql.y:1430 { yySLICE := (*SetExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].setExprUnion()) @@ -12388,7 +12107,7 @@ yydefault: case 180: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1437 +//line sql.y:1436 { yyLOCAL = &SetExpr{Var: NewSetVariable(TransactionIsolationStr, NextTxScope), Expr: NewStrLiteral(yyDollar[3].str)} } @@ -12396,7 +12115,7 @@ yydefault: case 181: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1441 +//line sql.y:1440 { yyLOCAL = &SetExpr{Var: NewSetVariable(TransactionReadOnlyStr, NextTxScope), Expr: NewStrLiteral("off")} } @@ -12404,39 +12123,39 @@ yydefault: case 182: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1445 +//line sql.y:1444 { yyLOCAL = &SetExpr{Var: NewSetVariable(TransactionReadOnlyStr, NextTxScope), Expr: NewStrLiteral("on")} } yyVAL.union = yyLOCAL case 183: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1451 +//line sql.y:1450 { yyVAL.str = RepeatableReadStr } case 184: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1455 +//line sql.y:1454 { yyVAL.str = ReadCommittedStr } case 185: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1459 +//line sql.y:1458 { yyVAL.str = ReadUncommittedStr } case 186: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1463 +//line sql.y:1462 { yyVAL.str = SerializableStr } case 187: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Scope -//line sql.y:1469 +//line sql.y:1468 { yyLOCAL = SessionScope } @@ -12444,7 +12163,7 @@ yydefault: case 188: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Scope -//line sql.y:1473 +//line sql.y:1472 { yyLOCAL = SessionScope } @@ -12452,7 +12171,7 @@ yydefault: case 189: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Scope -//line sql.y:1477 +//line sql.y:1476 { yyLOCAL = GlobalScope } @@ -12460,7 +12179,7 @@ yydefault: case 190: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:1483 +//line sql.y:1482 { yyDollar[1].createTableUnion().TableSpec = yyDollar[2].tableSpecUnion() yyDollar[1].createTableUnion().FullyParsed = true @@ -12470,7 +12189,7 @@ yydefault: case 191: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:1489 +//line sql.y:1488 { // Create table [name] like [name] yyDollar[1].createTableUnion().OptLike = yyDollar[2].optLikeUnion() @@ -12481,7 +12200,7 @@ yydefault: case 192: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:1496 +//line sql.y:1495 { yyLOCAL = yyDollar[1].createProcedureUnion() } @@ -12489,7 +12208,7 @@ yydefault: case 193: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:1500 +//line sql.y:1499 { indexDef := yyDollar[1].alterTableUnion().AlterOptions[0].(*AddIndexDefinition).IndexDefinition indexDef.Columns = yyDollar[3].indexColumnsUnion() @@ -12502,7 +12221,7 @@ yydefault: case 194: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:1509 +//line sql.y:1508 { yyDollar[1].createViewUnion().Columns = yyDollar[2].columnsUnion() yyDollar[1].createViewUnion().Select = yyDollar[4].tableStmtUnion() @@ -12513,7 +12232,7 @@ yydefault: case 195: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:1516 +//line sql.y:1515 { yyDollar[1].createDatabaseUnion().FullyParsed = true yyDollar[1].createDatabaseUnion().CreateOptions = yyDollar[2].databaseOptionsUnion() @@ -12523,33 +12242,33 @@ yydefault: case 196: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:1524 +//line sql.y:1523 { yyLOCAL = true } yyVAL.union = yyLOCAL case 197: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1529 +//line sql.y:1528 { yyVAL.identifierCI = NewIdentifierCI("") } case 198: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1533 +//line sql.y:1532 { yyVAL.identifierCI = yyDollar[2].identifierCI } case 199: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1539 +//line sql.y:1538 { yyVAL.identifierCI = yyDollar[1].identifierCI } case 200: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []VindexParam -//line sql.y:1544 +//line sql.y:1543 { var v []VindexParam yyLOCAL = v @@ -12558,7 +12277,7 @@ yydefault: case 201: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []VindexParam -//line sql.y:1549 +//line sql.y:1548 { yyLOCAL = yyDollar[2].vindexParamsUnion() } @@ -12566,7 +12285,7 @@ yydefault: case 202: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []VindexParam -//line sql.y:1555 +//line sql.y:1554 { yyLOCAL = make([]VindexParam, 0, 4) yyLOCAL = append(yyLOCAL, yyDollar[1].vindexParam) @@ -12574,21 +12293,21 @@ yydefault: yyVAL.union = yyLOCAL case 203: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1560 +//line sql.y:1559 { yySLICE := (*[]VindexParam)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].vindexParam) } case 204: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1566 +//line sql.y:1565 { yyVAL.vindexParam = VindexParam{Key: yyDollar[1].identifierCI, Val: yyDollar[3].str} } case 205: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*JSONObjectParam -//line sql.y:1571 +//line sql.y:1570 { yyLOCAL = nil } @@ -12596,7 +12315,7 @@ yydefault: case 206: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*JSONObjectParam -//line sql.y:1575 +//line sql.y:1574 { yyLOCAL = yyDollar[1].jsonObjectParamsUnion() } @@ -12604,28 +12323,28 @@ yydefault: case 207: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*JSONObjectParam -//line sql.y:1581 +//line sql.y:1580 { yyLOCAL = []*JSONObjectParam{yyDollar[1].jsonObjectParam} } yyVAL.union = yyLOCAL case 208: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1585 +//line sql.y:1584 { yySLICE := (*[]*JSONObjectParam)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].jsonObjectParam) } case 209: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1591 +//line sql.y:1590 { yyVAL.jsonObjectParam = &JSONObjectParam{Key: yyDollar[1].exprUnion(), Value: yyDollar[3].exprUnion()} } case 210: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL *CreateProcedure -//line sql.y:1597 +//line sql.y:1596 { yyLOCAL = &CreateProcedure{Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[6].tableName, IfNotExists: yyDollar[5].booleanUnion(), Definer: yyDollar[3].definerUnion(), Params: yyDollar[8].procParamsUnion(), Body: yyDollar[10].compoundStatementUnion()} } @@ -12633,7 +12352,7 @@ yydefault: case 211: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *CreateTable -//line sql.y:1603 +//line sql.y:1602 { yyLOCAL = &CreateTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[6].tableName, IfNotExists: yyDollar[5].booleanUnion(), Temp: yyDollar[3].booleanUnion()} setDDL(yylex, yyLOCAL) @@ -12642,7 +12361,7 @@ yydefault: case 212: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *CreateView -//line sql.y:1619 +//line sql.y:1618 { yyLOCAL = &CreateView{ViewName: yyDollar[6].tableName, Comments: Comments(yyDollar[2].strs).Parsed(), Definer: yyDollar[3].definerUnion(), Security: yyDollar[4].str} } @@ -12650,7 +12369,7 @@ yydefault: case 213: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *CreateView -//line sql.y:1623 +//line sql.y:1622 { yyLOCAL = &CreateView{ViewName: yyDollar[8].tableName, Comments: Comments(yyDollar[2].strs).Parsed(), IsReplace: yyDollar[3].booleanUnion(), Algorithm: yyDollar[4].str, Definer: yyDollar[5].definerUnion(), Security: yyDollar[6].str} } @@ -12658,7 +12377,7 @@ yydefault: case 214: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *CreateView -//line sql.y:1627 +//line sql.y:1626 { yyLOCAL = &CreateView{ViewName: yyDollar[7].tableName, Comments: Comments(yyDollar[2].strs).Parsed(), Algorithm: yyDollar[3].str, Definer: yyDollar[4].definerUnion(), Security: yyDollar[5].str} } @@ -12666,7 +12385,7 @@ yydefault: case 215: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1634 +//line sql.y:1633 { yyLOCAL = &AlterTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[4].tableName} setDDL(yylex, yyLOCAL) @@ -12675,7 +12394,7 @@ yydefault: case 216: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1641 +//line sql.y:1640 { yyLOCAL = &AlterTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[7].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[4].identifierCI}, Options: yyDollar[5].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) @@ -12684,7 +12403,7 @@ yydefault: case 217: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1646 +//line sql.y:1645 { yyLOCAL = &AlterTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[8].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[5].identifierCI, Type: IndexTypeFullText}, Options: yyDollar[6].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) @@ -12693,7 +12412,7 @@ yydefault: case 218: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1651 +//line sql.y:1650 { yyLOCAL = &AlterTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[8].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[5].identifierCI, Type: IndexTypeSpatial}, Options: yyDollar[6].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) @@ -12702,7 +12421,7 @@ yydefault: case 219: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1656 +//line sql.y:1655 { yyLOCAL = &AlterTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[8].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[5].identifierCI, Type: IndexTypeUnique}, Options: yyDollar[6].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) @@ -12711,7 +12430,7 @@ yydefault: case 220: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *CreateDatabase -//line sql.y:1663 +//line sql.y:1662 { yyLOCAL = &CreateDatabase{Comments: Comments(yyDollar[2].strs).Parsed(), DBName: yyDollar[5].identifierCS, IfNotExists: yyDollar[4].booleanUnion()} setDDL(yylex, yyLOCAL) @@ -12720,7 +12439,7 @@ yydefault: case 221: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *AlterDatabase -//line sql.y:1670 +//line sql.y:1669 { yyLOCAL = &AlterDatabase{Comments: Comments(yyDollar[2].strs).Parsed()} setDDL(yylex, yyLOCAL) @@ -12729,7 +12448,7 @@ yydefault: case 224: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *TableSpec -//line sql.y:1681 +//line sql.y:1680 { yyLOCAL = yyDollar[2].tableSpecUnion() yyLOCAL.Options = yyDollar[4].tableOptionsUnion() @@ -12739,7 +12458,7 @@ yydefault: case 225: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1688 +//line sql.y:1687 { yyLOCAL = nil } @@ -12747,7 +12466,7 @@ yydefault: case 226: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1692 +//line sql.y:1691 { yyLOCAL = yyDollar[1].databaseOptionsUnion() } @@ -12755,7 +12474,7 @@ yydefault: case 227: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1698 +//line sql.y:1697 { yyLOCAL = []DatabaseOption{yyDollar[1].databaseOption} } @@ -12763,7 +12482,7 @@ yydefault: case 228: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1702 +//line sql.y:1701 { yyLOCAL = []DatabaseOption{yyDollar[1].databaseOption} } @@ -12771,28 +12490,28 @@ yydefault: case 229: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1706 +//line sql.y:1705 { yyLOCAL = []DatabaseOption{yyDollar[1].databaseOption} } yyVAL.union = yyLOCAL case 230: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1710 +//line sql.y:1709 { yySLICE := (*[]DatabaseOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].databaseOption) } case 231: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1714 +//line sql.y:1713 { yySLICE := (*[]DatabaseOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].databaseOption) } case 232: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1718 +//line sql.y:1717 { yySLICE := (*[]DatabaseOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].databaseOption) @@ -12800,7 +12519,7 @@ yydefault: case 233: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:1724 +//line sql.y:1723 { yyLOCAL = false } @@ -12808,51 +12527,51 @@ yydefault: case 234: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:1728 +//line sql.y:1727 { yyLOCAL = true } yyVAL.union = yyLOCAL case 235: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1734 +//line sql.y:1733 { yyVAL.databaseOption = DatabaseOption{Type: CharacterSetType, Value: string(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } case 236: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1738 +//line sql.y:1737 { yyVAL.databaseOption = DatabaseOption{Type: CharacterSetType, Value: encodeSQLString(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } case 237: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1744 +//line sql.y:1743 { yyVAL.databaseOption = DatabaseOption{Type: CollateType, Value: string(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } case 238: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1748 +//line sql.y:1747 { yyVAL.databaseOption = DatabaseOption{Type: CollateType, Value: encodeSQLString(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } case 239: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1754 +//line sql.y:1753 { yyVAL.databaseOption = DatabaseOption{Type: EncryptionType, Value: string(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } case 240: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1758 +//line sql.y:1757 { yyVAL.databaseOption = DatabaseOption{Type: EncryptionType, Value: encodeSQLString(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } case 241: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *OptLike -//line sql.y:1764 +//line sql.y:1763 { yyLOCAL = &OptLike{LikeTable: yyDollar[2].tableName} } @@ -12860,7 +12579,7 @@ yydefault: case 242: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *OptLike -//line sql.y:1768 +//line sql.y:1767 { yyLOCAL = &OptLike{LikeTable: yyDollar[3].tableName} } @@ -12868,14 +12587,14 @@ yydefault: case 243: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColumnDefinition -//line sql.y:1774 +//line sql.y:1773 { yyLOCAL = []*ColumnDefinition{yyDollar[1].columnDefinitionUnion()} } yyVAL.union = yyLOCAL case 244: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1778 +//line sql.y:1777 { yySLICE := (*[]*ColumnDefinition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].columnDefinitionUnion()) @@ -12883,7 +12602,7 @@ yydefault: case 245: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *TableSpec -//line sql.y:1784 +//line sql.y:1783 { yyLOCAL = &TableSpec{} yyLOCAL.AddColumn(yyDollar[1].columnDefinitionUnion()) @@ -12892,7 +12611,7 @@ yydefault: case 246: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *TableSpec -//line sql.y:1789 +//line sql.y:1788 { yyLOCAL = &TableSpec{} yyLOCAL.AddConstraint(yyDollar[1].constraintDefinitionUnion()) @@ -12900,39 +12619,39 @@ yydefault: yyVAL.union = yyLOCAL case 247: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1794 +//line sql.y:1793 { yyVAL.tableSpecUnion().AddColumn(yyDollar[3].columnDefinitionUnion()) } case 248: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1798 +//line sql.y:1797 { yyVAL.tableSpecUnion().AddColumn(yyDollar[3].columnDefinitionUnion()) yyVAL.tableSpecUnion().AddConstraint(yyDollar[4].constraintDefinitionUnion()) } case 249: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1803 +//line sql.y:1802 { yyVAL.tableSpecUnion().AddIndex(yyDollar[3].indexDefinitionUnion()) } case 250: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1807 +//line sql.y:1806 { yyVAL.tableSpecUnion().AddConstraint(yyDollar[3].constraintDefinitionUnion()) } case 251: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1811 +//line sql.y:1810 { yyVAL.tableSpecUnion().AddConstraint(yyDollar[3].constraintDefinitionUnion()) } case 252: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ColumnDefinition -//line sql.y:1822 +//line sql.y:1821 { yyDollar[2].columnType.Options = yyDollar[4].columnTypeOptionsUnion() if yyDollar[2].columnType.Options.Collate == "" { @@ -12945,7 +12664,7 @@ yydefault: case 253: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL *ColumnDefinition -//line sql.y:1831 +//line sql.y:1830 { yyDollar[2].columnType.Options = yyDollar[9].columnTypeOptionsUnion() yyDollar[2].columnType.Options.As = yyDollar[7].exprUnion() @@ -12956,20 +12675,20 @@ yydefault: yyVAL.union = yyLOCAL case 254: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1840 +//line sql.y:1839 { yyVAL.str = "" } case 255: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1844 +//line sql.y:1843 { yyVAL.str = "" } case 256: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1853 +//line sql.y:1852 { yyLOCAL = &ColumnTypeOptions{Null: nil, Default: nil, OnUpdate: nil, Autoincrement: false, KeyOpt: ColKeyNone, Comment: nil, As: nil, Invisible: nil, Format: UnspecifiedFormat, EngineAttribute: nil, SecondaryEngineAttribute: nil} } @@ -12977,7 +12696,7 @@ yydefault: case 257: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1857 +//line sql.y:1856 { yyDollar[1].columnTypeOptionsUnion().Null = ptr.Of(true) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -12986,7 +12705,7 @@ yydefault: case 258: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1862 +//line sql.y:1861 { yyDollar[1].columnTypeOptionsUnion().Null = ptr.Of(false) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -12995,7 +12714,7 @@ yydefault: case 259: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1867 +//line sql.y:1866 { yyDollar[1].columnTypeOptionsUnion().Default = yyDollar[4].exprUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -13004,7 +12723,7 @@ yydefault: case 260: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1872 +//line sql.y:1871 { yyDollar[1].columnTypeOptionsUnion().Default = yyDollar[3].exprUnion() yyDollar[1].columnTypeOptionsUnion().DefaultLiteral = true @@ -13014,7 +12733,7 @@ yydefault: case 261: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1878 +//line sql.y:1877 { yyDollar[1].columnTypeOptionsUnion().OnUpdate = yyDollar[4].exprUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -13023,7 +12742,7 @@ yydefault: case 262: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1883 +//line sql.y:1882 { yyDollar[1].columnTypeOptionsUnion().Autoincrement = true yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -13032,7 +12751,7 @@ yydefault: case 263: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1888 +//line sql.y:1887 { yyDollar[1].columnTypeOptionsUnion().Comment = NewStrLiteral(yyDollar[3].str) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -13041,7 +12760,7 @@ yydefault: case 264: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1893 +//line sql.y:1892 { yyDollar[1].columnTypeOptionsUnion().KeyOpt = yyDollar[2].colKeyOptUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -13049,14 +12768,14 @@ yydefault: yyVAL.union = yyLOCAL case 265: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1898 +//line sql.y:1897 { yyDollar[1].columnTypeOptionsUnion().Collate = encodeSQLString(yyDollar[3].str) } case 266: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1902 +//line sql.y:1901 { yyDollar[1].columnTypeOptionsUnion().Collate = string(yyDollar[3].identifierCI.String()) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -13064,14 +12783,14 @@ yydefault: yyVAL.union = yyLOCAL case 267: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1907 +//line sql.y:1906 { yyDollar[1].columnTypeOptionsUnion().Format = yyDollar[3].columnFormatUnion() } case 268: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1911 +//line sql.y:1910 { yyDollar[1].columnTypeOptionsUnion().SRID = NewIntLiteral(yyDollar[3].str) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -13080,7 +12799,7 @@ yydefault: case 269: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1916 +//line sql.y:1915 { yyDollar[1].columnTypeOptionsUnion().Invisible = ptr.Of(false) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -13089,7 +12808,7 @@ yydefault: case 270: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1921 +//line sql.y:1920 { yyDollar[1].columnTypeOptionsUnion().Invisible = ptr.Of(true) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -13097,20 +12816,20 @@ yydefault: yyVAL.union = yyLOCAL case 271: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1926 +//line sql.y:1925 { yyDollar[1].columnTypeOptionsUnion().EngineAttribute = NewStrLiteral(yyDollar[4].str) } case 272: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1930 +//line sql.y:1929 { yyDollar[1].columnTypeOptionsUnion().SecondaryEngineAttribute = NewStrLiteral(yyDollar[4].str) } case 273: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnFormat -//line sql.y:1936 +//line sql.y:1935 { yyLOCAL = FixedFormat } @@ -13118,7 +12837,7 @@ yydefault: case 274: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnFormat -//line sql.y:1940 +//line sql.y:1939 { yyLOCAL = DynamicFormat } @@ -13126,7 +12845,7 @@ yydefault: case 275: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnFormat -//line sql.y:1944 +//line sql.y:1943 { yyLOCAL = DefaultFormat } @@ -13134,7 +12853,7 @@ yydefault: case 276: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnFormat -//line sql.y:1948 +//line sql.y:1947 { yyLOCAL = CompressedFormat } @@ -13142,7 +12861,7 @@ yydefault: case 277: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnStorage -//line sql.y:1954 +//line sql.y:1953 { yyLOCAL = VirtualStorage } @@ -13150,7 +12869,7 @@ yydefault: case 278: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnStorage -//line sql.y:1958 +//line sql.y:1957 { yyLOCAL = StoredStorage } @@ -13158,7 +12877,7 @@ yydefault: case 279: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1963 +//line sql.y:1962 { yyLOCAL = &ColumnTypeOptions{} } @@ -13166,7 +12885,7 @@ yydefault: case 280: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1967 +//line sql.y:1966 { yyDollar[1].columnTypeOptionsUnion().Storage = yyDollar[2].columnStorageUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -13175,7 +12894,7 @@ yydefault: case 281: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1972 +//line sql.y:1971 { yyDollar[1].columnTypeOptionsUnion().Null = ptr.Of(true) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -13184,7 +12903,7 @@ yydefault: case 282: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1977 +//line sql.y:1976 { yyDollar[1].columnTypeOptionsUnion().Null = ptr.Of(false) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -13193,7 +12912,7 @@ yydefault: case 283: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1982 +//line sql.y:1981 { yyDollar[1].columnTypeOptionsUnion().Comment = NewStrLiteral(yyDollar[3].str) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -13202,7 +12921,7 @@ yydefault: case 284: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1987 +//line sql.y:1986 { yyDollar[1].columnTypeOptionsUnion().KeyOpt = yyDollar[2].colKeyOptUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -13211,7 +12930,7 @@ yydefault: case 285: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1992 +//line sql.y:1991 { yyDollar[1].columnTypeOptionsUnion().SRID = NewIntLiteral(yyDollar[3].str) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -13220,7 +12939,7 @@ yydefault: case 286: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1997 +//line sql.y:1996 { yyDollar[1].columnTypeOptionsUnion().Invisible = ptr.Of(false) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -13229,7 +12948,7 @@ yydefault: case 287: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:2002 +//line sql.y:2001 { yyDollar[1].columnTypeOptionsUnion().Invisible = ptr.Of(true) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -13238,7 +12957,7 @@ yydefault: case 288: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:2009 +//line sql.y:2008 { yyLOCAL = yyDollar[1].exprUnion() } @@ -13246,7 +12965,7 @@ yydefault: case 290: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:2016 +//line sql.y:2015 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("current_timestamp"), Fsp: yyDollar[2].integerUnion()} } @@ -13254,7 +12973,7 @@ yydefault: case 291: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:2020 +//line sql.y:2019 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("localtime"), Fsp: yyDollar[2].integerUnion()} } @@ -13262,7 +12981,7 @@ yydefault: case 292: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:2024 +//line sql.y:2023 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("localtimestamp"), Fsp: yyDollar[2].integerUnion()} } @@ -13270,7 +12989,7 @@ yydefault: case 293: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:2028 +//line sql.y:2027 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("utc_timestamp"), Fsp: yyDollar[2].integerUnion()} } @@ -13278,7 +12997,7 @@ yydefault: case 294: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:2032 +//line sql.y:2031 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("now"), Fsp: yyDollar[2].integerUnion()} } @@ -13286,7 +13005,7 @@ yydefault: case 295: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:2036 +//line sql.y:2035 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("sysdate"), Fsp: yyDollar[2].integerUnion()} } @@ -13294,7 +13013,7 @@ yydefault: case 298: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:2046 +//line sql.y:2045 { yyLOCAL = &NullVal{} } @@ -13302,7 +13021,7 @@ yydefault: case 300: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:2053 +//line sql.y:2052 { yyLOCAL = yyDollar[2].exprUnion() } @@ -13310,7 +13029,7 @@ yydefault: case 301: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:2057 +//line sql.y:2056 { yyLOCAL = &UnaryExpr{Operator: UMinusOp, Expr: yyDollar[2].exprUnion()} } @@ -13318,7 +13037,7 @@ yydefault: case 302: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:2063 +//line sql.y:2062 { yyLOCAL = yyDollar[1].exprUnion() } @@ -13326,7 +13045,7 @@ yydefault: case 303: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:2067 +//line sql.y:2066 { yyLOCAL = yyDollar[1].exprUnion() } @@ -13334,7 +13053,7 @@ yydefault: case 304: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:2071 +//line sql.y:2070 { yyLOCAL = yyDollar[1].boolValUnion() } @@ -13342,7 +13061,7 @@ yydefault: case 305: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:2075 +//line sql.y:2074 { yyLOCAL = NewHexLiteral(yyDollar[1].str) } @@ -13350,7 +13069,7 @@ yydefault: case 306: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:2079 +//line sql.y:2078 { yyLOCAL = NewHexNumLiteral(yyDollar[1].str) } @@ -13358,7 +13077,7 @@ yydefault: case 307: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:2083 +//line sql.y:2082 { yyLOCAL = NewBitLiteral(yyDollar[1].str) } @@ -13366,7 +13085,7 @@ yydefault: case 308: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:2087 +//line sql.y:2086 { yyLOCAL = NewBitLiteral("0b" + yyDollar[1].str) } @@ -13374,7 +13093,7 @@ yydefault: case 309: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:2091 +//line sql.y:2090 { yyLOCAL = parseBindVariable(yylex, yyDollar[1].str[1:]) } @@ -13382,7 +13101,7 @@ yydefault: case 310: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:2095 +//line sql.y:2094 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewBitLiteral("0b" + yyDollar[2].str)} } @@ -13390,7 +13109,7 @@ yydefault: case 311: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:2099 +//line sql.y:2098 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewHexNumLiteral(yyDollar[2].str)} } @@ -13398,7 +13117,7 @@ yydefault: case 312: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:2103 +//line sql.y:2102 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewBitLiteral(yyDollar[2].str)} } @@ -13406,7 +13125,7 @@ yydefault: case 313: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:2107 +//line sql.y:2106 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewHexLiteral(yyDollar[2].str)} } @@ -13414,7 +13133,7 @@ yydefault: case 314: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:2111 +//line sql.y:2110 { arg := parseBindVariable(yylex, yyDollar[2].str[1:]) yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: arg} @@ -13423,7 +13142,7 @@ yydefault: case 315: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:2116 +//line sql.y:2115 { yyLOCAL = NewDateLiteral(yyDollar[2].str) } @@ -13431,7 +13150,7 @@ yydefault: case 316: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:2120 +//line sql.y:2119 { yyLOCAL = NewTimeLiteral(yyDollar[2].str) } @@ -13439,267 +13158,267 @@ yydefault: case 317: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:2124 +//line sql.y:2123 { yyLOCAL = NewTimestampLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL case 318: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2130 +//line sql.y:2129 { yyVAL.str = Armscii8Str } case 319: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2134 +//line sql.y:2133 { yyVAL.str = ASCIIStr } case 320: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2138 +//line sql.y:2137 { yyVAL.str = Big5Str } case 321: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2142 +//line sql.y:2141 { yyVAL.str = UBinaryStr } case 322: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2146 +//line sql.y:2145 { yyVAL.str = Cp1250Str } case 323: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2150 +//line sql.y:2149 { yyVAL.str = Cp1251Str } case 324: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2154 +//line sql.y:2153 { yyVAL.str = Cp1256Str } case 325: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2158 +//line sql.y:2157 { yyVAL.str = Cp1257Str } case 326: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2162 +//line sql.y:2161 { yyVAL.str = Cp850Str } case 327: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2166 +//line sql.y:2165 { yyVAL.str = Cp852Str } case 328: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2170 +//line sql.y:2169 { yyVAL.str = Cp866Str } case 329: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2174 +//line sql.y:2173 { yyVAL.str = Cp932Str } case 330: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2178 +//line sql.y:2177 { yyVAL.str = Dec8Str } case 331: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2182 +//line sql.y:2181 { yyVAL.str = EucjpmsStr } case 332: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2186 +//line sql.y:2185 { yyVAL.str = EuckrStr } case 333: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2190 +//line sql.y:2189 { yyVAL.str = Gb18030Str } case 334: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2194 +//line sql.y:2193 { yyVAL.str = Gb2312Str } case 335: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2198 +//line sql.y:2197 { yyVAL.str = GbkStr } case 336: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2202 +//line sql.y:2201 { yyVAL.str = Geostd8Str } case 337: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2206 +//line sql.y:2205 { yyVAL.str = GreekStr } case 338: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2210 +//line sql.y:2209 { yyVAL.str = HebrewStr } case 339: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2214 +//line sql.y:2213 { yyVAL.str = Hp8Str } case 340: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2218 +//line sql.y:2217 { yyVAL.str = Keybcs2Str } case 341: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2222 +//line sql.y:2221 { yyVAL.str = Koi8rStr } case 342: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2226 +//line sql.y:2225 { yyVAL.str = Koi8uStr } case 343: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2230 +//line sql.y:2229 { yyVAL.str = Latin1Str } case 344: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2234 +//line sql.y:2233 { yyVAL.str = Latin2Str } case 345: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2238 +//line sql.y:2237 { yyVAL.str = Latin5Str } case 346: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2242 +//line sql.y:2241 { yyVAL.str = Latin7Str } case 347: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2246 +//line sql.y:2245 { yyVAL.str = MacceStr } case 348: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2250 +//line sql.y:2249 { yyVAL.str = MacromanStr } case 349: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2254 +//line sql.y:2253 { yyVAL.str = SjisStr } case 350: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2258 +//line sql.y:2257 { yyVAL.str = Swe7Str } case 351: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2262 +//line sql.y:2261 { yyVAL.str = Tis620Str } case 352: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2266 +//line sql.y:2265 { yyVAL.str = Ucs2Str } case 353: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2270 +//line sql.y:2269 { yyVAL.str = UjisStr } case 354: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2274 +//line sql.y:2273 { yyVAL.str = Utf16Str } case 355: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2278 +//line sql.y:2277 { yyVAL.str = Utf16leStr } case 356: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2282 +//line sql.y:2281 { yyVAL.str = Utf32Str } case 357: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2286 +//line sql.y:2285 { yyVAL.str = Utf8mb3Str } case 358: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2290 +//line sql.y:2289 { yyVAL.str = Utf8mb4Str } case 359: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2294 +//line sql.y:2293 { yyVAL.str = Utf8mb3Str } case 362: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:2304 +//line sql.y:2303 { yyLOCAL = NewIntLiteral(yyDollar[1].str) } @@ -13707,7 +13426,7 @@ yydefault: case 363: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:2308 +//line sql.y:2307 { yyLOCAL = NewFloatLiteral(yyDollar[1].str) } @@ -13715,7 +13434,7 @@ yydefault: case 364: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:2312 +//line sql.y:2311 { yyLOCAL = NewDecimalLiteral(yyDollar[1].str) } @@ -13723,7 +13442,7 @@ yydefault: case 365: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:2318 +//line sql.y:2317 { yyLOCAL = yyDollar[1].exprUnion() } @@ -13731,7 +13450,7 @@ yydefault: case 366: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:2322 +//line sql.y:2321 { yyLOCAL = AppendString(yyDollar[1].exprUnion(), yyDollar[2].str) } @@ -13739,7 +13458,7 @@ yydefault: case 367: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:2328 +//line sql.y:2327 { yyLOCAL = NewStrLiteral(yyDollar[1].str) } @@ -13747,7 +13466,7 @@ yydefault: case 368: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:2332 +//line sql.y:2331 { yyLOCAL = &UnaryExpr{Operator: NStringOp, Expr: NewStrLiteral(yyDollar[1].str)} } @@ -13755,7 +13474,7 @@ yydefault: case 369: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:2336 +//line sql.y:2335 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewStrLiteral(yyDollar[2].str)} } @@ -13763,7 +13482,7 @@ yydefault: case 370: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:2342 +//line sql.y:2341 { yyLOCAL = yyDollar[1].exprUnion() } @@ -13771,7 +13490,7 @@ yydefault: case 371: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:2346 +//line sql.y:2345 { yyLOCAL = parseBindVariable(yylex, yyDollar[1].str[1:]) } @@ -13779,7 +13498,7 @@ yydefault: case 372: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ColumnKeyOption -//line sql.y:2352 +//line sql.y:2351 { yyLOCAL = ColKeyPrimary } @@ -13787,7 +13506,7 @@ yydefault: case 373: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnKeyOption -//line sql.y:2356 +//line sql.y:2355 { yyLOCAL = ColKeyUnique } @@ -13795,7 +13514,7 @@ yydefault: case 374: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ColumnKeyOption -//line sql.y:2360 +//line sql.y:2359 { yyLOCAL = ColKeyUniqueKey } @@ -13803,14 +13522,14 @@ yydefault: case 375: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnKeyOption -//line sql.y:2364 +//line sql.y:2363 { yyLOCAL = ColKey } yyVAL.union = yyLOCAL case 376: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2370 +//line sql.y:2369 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Unsigned = yyDollar[2].booleanUnion() @@ -13818,74 +13537,74 @@ yydefault: } case 380: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2381 +//line sql.y:2380 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Length = yyDollar[2].intPtrUnion() } case 381: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2386 +//line sql.y:2385 { yyVAL.columnType = yyDollar[1].columnType } case 382: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2392 +//line sql.y:2391 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 383: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2396 +//line sql.y:2395 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 384: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2400 +//line sql.y:2399 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 385: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2404 +//line sql.y:2403 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 386: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2408 +//line sql.y:2407 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 387: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2412 +//line sql.y:2411 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 388: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2416 +//line sql.y:2415 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 389: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2420 +//line sql.y:2419 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 390: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2424 +//line sql.y:2423 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 391: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2430 +//line sql.y:2429 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -13893,7 +13612,7 @@ yydefault: } case 392: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2436 +//line sql.y:2435 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -13901,7 +13620,7 @@ yydefault: } case 393: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2442 +//line sql.y:2441 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -13909,7 +13628,7 @@ yydefault: } case 394: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2448 +//line sql.y:2447 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -13917,7 +13636,7 @@ yydefault: } case 395: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2454 +//line sql.y:2453 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -13925,7 +13644,7 @@ yydefault: } case 396: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2460 +//line sql.y:2459 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -13933,7 +13652,7 @@ yydefault: } case 397: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2466 +//line sql.y:2465 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -13941,43 +13660,43 @@ yydefault: } case 398: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2474 +//line sql.y:2473 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 399: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2478 +//line sql.y:2477 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } case 400: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2482 +//line sql.y:2481 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } case 401: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2486 +//line sql.y:2485 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } case 402: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2490 +//line sql.y:2489 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } case 403: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2496 +//line sql.y:2495 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion(), Charset: yyDollar[3].columnCharset} } case 404: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2500 +//line sql.y:2499 { // CHAR BYTE is an alias for binary. See also: // https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html @@ -13985,159 +13704,159 @@ yydefault: } case 405: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2506 +//line sql.y:2505 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion(), Charset: yyDollar[3].columnCharset} } case 406: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2510 +//line sql.y:2509 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } case 407: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2514 +//line sql.y:2513 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } case 408: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2518 +//line sql.y:2517 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion(), Charset: yyDollar[3].columnCharset} } case 409: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2522 +//line sql.y:2521 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset} } case 410: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2526 +//line sql.y:2525 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset} } case 411: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2530 +//line sql.y:2529 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset} } case 412: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2534 +//line sql.y:2533 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } case 413: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2538 +//line sql.y:2537 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 414: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2542 +//line sql.y:2541 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 415: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2546 +//line sql.y:2545 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 416: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2550 +//line sql.y:2549 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 417: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2554 +//line sql.y:2553 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].columnCharset} } case 418: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2558 +//line sql.y:2557 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } case 419: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2563 +//line sql.y:2562 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].columnCharset} } case 420: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2569 +//line sql.y:2568 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 421: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2573 +//line sql.y:2572 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 422: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2577 +//line sql.y:2576 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 423: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2581 +//line sql.y:2580 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 424: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2585 +//line sql.y:2584 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 425: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2589 +//line sql.y:2588 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 426: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2593 +//line sql.y:2592 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 427: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2597 +//line sql.y:2596 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 428: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2603 +//line sql.y:2602 { yyVAL.strs = make([]string, 0, 4) yyVAL.strs = append(yyVAL.strs, encodeSQLString(yyDollar[1].str)) } case 429: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2608 +//line sql.y:2607 { yyVAL.strs = append(yyDollar[1].strs, encodeSQLString(yyDollar[3].str)) } case 430: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *int -//line sql.y:2613 +//line sql.y:2612 { yyLOCAL = nil } @@ -14145,20 +13864,20 @@ yydefault: case 431: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *int -//line sql.y:2617 +//line sql.y:2616 { yyLOCAL = ptr.Of(convertStringToInt(yyDollar[2].str)) } yyVAL.union = yyLOCAL case 432: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2622 +//line sql.y:2621 { yyVAL.LengthScaleOption = LengthScaleOption{} } case 433: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2626 +//line sql.y:2625 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: ptr.Of(convertStringToInt(yyDollar[2].str)), @@ -14167,13 +13886,13 @@ yydefault: } case 434: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2635 +//line sql.y:2634 { yyVAL.LengthScaleOption = yyDollar[1].LengthScaleOption } case 435: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2639 +//line sql.y:2638 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: ptr.Of(convertStringToInt(yyDollar[2].str)), @@ -14181,13 +13900,13 @@ yydefault: } case 436: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2646 +//line sql.y:2645 { yyVAL.LengthScaleOption = LengthScaleOption{} } case 437: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2650 +//line sql.y:2649 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: ptr.Of(convertStringToInt(yyDollar[2].str)), @@ -14195,7 +13914,7 @@ yydefault: } case 438: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2656 +//line sql.y:2655 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: ptr.Of(convertStringToInt(yyDollar[2].str)), @@ -14205,7 +13924,7 @@ yydefault: case 439: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2664 +//line sql.y:2663 { yyLOCAL = false } @@ -14213,7 +13932,7 @@ yydefault: case 440: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2668 +//line sql.y:2667 { yyLOCAL = true } @@ -14221,7 +13940,7 @@ yydefault: case 441: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2672 +//line sql.y:2671 { yyLOCAL = false } @@ -14229,7 +13948,7 @@ yydefault: case 442: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2677 +//line sql.y:2676 { yyLOCAL = false } @@ -14237,66 +13956,66 @@ yydefault: case 443: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2681 +//line sql.y:2680 { yyLOCAL = true } yyVAL.union = yyLOCAL case 444: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2686 +//line sql.y:2685 { yyVAL.columnCharset = ColumnCharset{} } case 445: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2690 +//line sql.y:2689 { yyVAL.columnCharset = ColumnCharset{Name: string(yyDollar[2].identifierCI.String()), Binary: yyDollar[3].booleanUnion()} } case 446: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2694 +//line sql.y:2693 { yyVAL.columnCharset = ColumnCharset{Name: encodeSQLString(yyDollar[2].str), Binary: yyDollar[3].booleanUnion()} } case 447: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2698 +//line sql.y:2697 { yyVAL.columnCharset = ColumnCharset{Name: string(yyDollar[2].str)} } case 448: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2702 +//line sql.y:2701 { // ASCII: Shorthand for CHARACTER SET latin1. yyVAL.columnCharset = ColumnCharset{Name: "latin1", Binary: yyDollar[2].booleanUnion()} } case 449: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2707 +//line sql.y:2706 { // UNICODE: Shorthand for CHARACTER SET ucs2. yyVAL.columnCharset = ColumnCharset{Name: "ucs2", Binary: yyDollar[2].booleanUnion()} } case 450: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2712 +//line sql.y:2711 { // BINARY: Shorthand for default CHARACTER SET but with binary collation yyVAL.columnCharset = ColumnCharset{Name: "", Binary: true} } case 451: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2717 +//line sql.y:2716 { // BINARY ASCII: Shorthand for CHARACTER SET latin1 with binary collation yyVAL.columnCharset = ColumnCharset{Name: "latin1", Binary: true} } case 452: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2722 +//line sql.y:2721 { // BINARY UNICODE: Shorthand for CHARACTER SET ucs2 with binary collation yyVAL.columnCharset = ColumnCharset{Name: "ucs2", Binary: true} @@ -14304,7 +14023,7 @@ yydefault: case 453: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2728 +//line sql.y:2727 { yyLOCAL = false } @@ -14312,33 +14031,33 @@ yydefault: case 454: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2732 +//line sql.y:2731 { yyLOCAL = true } yyVAL.union = yyLOCAL case 455: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2737 +//line sql.y:2736 { yyVAL.str = "" } case 456: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2741 +//line sql.y:2740 { yyVAL.str = string(yyDollar[2].identifierCI.String()) } case 457: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2745 +//line sql.y:2744 { yyVAL.str = encodeSQLString(yyDollar[2].str) } case 458: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *IndexDefinition -//line sql.y:2751 +//line sql.y:2750 { yyLOCAL = &IndexDefinition{Info: yyDollar[1].indexInfoUnion(), Columns: yyDollar[3].indexColumnsUnion(), Options: yyDollar[5].indexOptionsUnion()} } @@ -14346,7 +14065,7 @@ yydefault: case 459: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:2756 +//line sql.y:2755 { yyLOCAL = nil } @@ -14354,7 +14073,7 @@ yydefault: case 460: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:2760 +//line sql.y:2759 { yyLOCAL = yyDollar[1].indexOptionsUnion() } @@ -14362,14 +14081,14 @@ yydefault: case 461: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:2766 +//line sql.y:2765 { yyLOCAL = []*IndexOption{yyDollar[1].indexOptionUnion()} } yyVAL.union = yyLOCAL case 462: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2770 +//line sql.y:2769 { yySLICE := (*[]*IndexOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].indexOptionUnion()) @@ -14377,7 +14096,7 @@ yydefault: case 463: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2776 +//line sql.y:2775 { yyLOCAL = yyDollar[1].indexOptionUnion() } @@ -14385,7 +14104,7 @@ yydefault: case 464: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2780 +//line sql.y:2779 { // should not be string yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} @@ -14394,7 +14113,7 @@ yydefault: case 465: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2785 +//line sql.y:2784 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[2].str)} } @@ -14402,7 +14121,7 @@ yydefault: case 466: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2789 +//line sql.y:2788 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str)} } @@ -14410,7 +14129,7 @@ yydefault: case 467: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2793 +//line sql.y:2792 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str)} } @@ -14418,7 +14137,7 @@ yydefault: case 468: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2797 +//line sql.y:2796 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str) + " " + string(yyDollar[2].str), String: yyDollar[3].identifierCI.String()} } @@ -14426,7 +14145,7 @@ yydefault: case 469: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2801 +//line sql.y:2800 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } @@ -14434,27 +14153,27 @@ yydefault: case 470: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2805 +//line sql.y:2804 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL case 471: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2811 +//line sql.y:2810 { yyVAL.str = "" } case 472: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2815 +//line sql.y:2814 { yyVAL.str = string(yyDollar[1].str) } case 473: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2821 +//line sql.y:2820 { yyLOCAL = &IndexInfo{Type: IndexTypePrimary, ConstraintName: NewIdentifierCI(yyDollar[1].str), Name: NewIdentifierCI("PRIMARY")} } @@ -14462,7 +14181,7 @@ yydefault: case 474: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2825 +//line sql.y:2824 { yyLOCAL = &IndexInfo{Type: IndexTypeSpatial, Name: NewIdentifierCI(yyDollar[3].str)} } @@ -14470,7 +14189,7 @@ yydefault: case 475: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2829 +//line sql.y:2828 { yyLOCAL = &IndexInfo{Type: IndexTypeFullText, Name: NewIdentifierCI(yyDollar[3].str)} } @@ -14478,7 +14197,7 @@ yydefault: case 476: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2833 +//line sql.y:2832 { yyLOCAL = &IndexInfo{Type: IndexTypeUnique, ConstraintName: NewIdentifierCI(yyDollar[1].str), Name: NewIdentifierCI(yyDollar[4].str)} } @@ -14486,100 +14205,100 @@ yydefault: case 477: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2837 +//line sql.y:2836 { yyLOCAL = &IndexInfo{Type: IndexTypeDefault, Name: NewIdentifierCI(yyDollar[2].str)} } yyVAL.union = yyLOCAL case 478: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2842 +//line sql.y:2841 { yyVAL.str = "" } case 479: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2846 +//line sql.y:2845 { yyVAL.str = yyDollar[2].str } case 480: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2852 +//line sql.y:2851 { yyVAL.str = string(yyDollar[1].str) } case 481: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2856 +//line sql.y:2855 { yyVAL.str = string(yyDollar[1].str) } case 482: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2860 +//line sql.y:2859 { yyVAL.str = string(yyDollar[1].str) } case 483: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2866 +//line sql.y:2865 { yyVAL.str = string(yyDollar[1].str) } case 484: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2870 +//line sql.y:2869 { yyVAL.str = string(yyDollar[1].str) } case 485: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2875 +//line sql.y:2874 { yyVAL.str = "" } case 486: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2879 +//line sql.y:2878 { yyVAL.str = yyDollar[1].str } case 487: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2885 +//line sql.y:2884 { yyVAL.str = string(yyDollar[1].str) } case 488: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2889 +//line sql.y:2888 { yyVAL.str = string(yyDollar[1].str) } case 489: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2894 +//line sql.y:2893 { yyVAL.str = "" } case 490: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2898 +//line sql.y:2897 { yyVAL.str = string(yyDollar[1].identifierCI.String()) } case 491: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexColumn -//line sql.y:2904 +//line sql.y:2903 { yyLOCAL = []*IndexColumn{yyDollar[1].indexColumnUnion()} } yyVAL.union = yyLOCAL case 492: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2908 +//line sql.y:2907 { yySLICE := (*[]*IndexColumn)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].indexColumnUnion()) @@ -14587,7 +14306,7 @@ yydefault: case 493: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexColumn -//line sql.y:2914 +//line sql.y:2913 { yyLOCAL = &IndexColumn{Column: yyDollar[1].identifierCI, Length: yyDollar[2].intPtrUnion(), Direction: yyDollar[3].orderDirectionUnion()} } @@ -14595,7 +14314,7 @@ yydefault: case 494: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *IndexColumn -//line sql.y:2918 +//line sql.y:2917 { yyLOCAL = &IndexColumn{Expression: yyDollar[2].exprUnion(), Direction: yyDollar[4].orderDirectionUnion()} } @@ -14603,7 +14322,7 @@ yydefault: case 495: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ConstraintDefinition -//line sql.y:2924 +//line sql.y:2923 { yyLOCAL = &ConstraintDefinition{Name: yyDollar[2].identifierCI, Details: yyDollar[3].constraintInfoUnion()} } @@ -14611,7 +14330,7 @@ yydefault: case 496: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConstraintDefinition -//line sql.y:2928 +//line sql.y:2927 { yyLOCAL = &ConstraintDefinition{Details: yyDollar[1].constraintInfoUnion()} } @@ -14619,7 +14338,7 @@ yydefault: case 497: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ConstraintDefinition -//line sql.y:2934 +//line sql.y:2933 { yyLOCAL = &ConstraintDefinition{Name: yyDollar[2].identifierCI, Details: yyDollar[3].constraintInfoUnion()} } @@ -14627,7 +14346,7 @@ yydefault: case 498: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConstraintDefinition -//line sql.y:2938 +//line sql.y:2937 { yyLOCAL = &ConstraintDefinition{Details: yyDollar[1].constraintInfoUnion()} } @@ -14635,7 +14354,7 @@ yydefault: case 499: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL ConstraintInfo -//line sql.y:2944 +//line sql.y:2943 { yyLOCAL = &ForeignKeyDefinition{IndexName: NewIdentifierCI(yyDollar[3].str), Source: yyDollar[5].columnsUnion(), ReferenceDefinition: yyDollar[7].referenceDefinitionUnion()} } @@ -14643,7 +14362,7 @@ yydefault: case 500: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2950 +//line sql.y:2949 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion()} } @@ -14651,7 +14370,7 @@ yydefault: case 501: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2954 +//line sql.y:2953 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnDelete: yyDollar[7].referenceActionUnion()} } @@ -14659,7 +14378,7 @@ yydefault: case 502: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2958 +//line sql.y:2957 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnUpdate: yyDollar[7].referenceActionUnion()} } @@ -14667,7 +14386,7 @@ yydefault: case 503: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2962 +//line sql.y:2961 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnDelete: yyDollar[7].referenceActionUnion(), OnUpdate: yyDollar[8].referenceActionUnion()} } @@ -14675,7 +14394,7 @@ yydefault: case 504: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2966 +//line sql.y:2965 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnUpdate: yyDollar[7].referenceActionUnion(), OnDelete: yyDollar[8].referenceActionUnion()} } @@ -14683,7 +14402,7 @@ yydefault: case 505: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2971 +//line sql.y:2970 { yyLOCAL = nil } @@ -14691,7 +14410,7 @@ yydefault: case 506: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2975 +//line sql.y:2974 { yyLOCAL = yyDollar[1].referenceDefinitionUnion() } @@ -14699,7 +14418,7 @@ yydefault: case 507: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL ConstraintInfo -//line sql.y:2981 +//line sql.y:2980 { yyLOCAL = &CheckConstraintDefinition{Expr: yyDollar[3].exprUnion(), Enforced: yyDollar[5].booleanUnion()} } @@ -14707,7 +14426,7 @@ yydefault: case 508: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2987 +//line sql.y:2986 { yyLOCAL = yyDollar[2].matchActionUnion() } @@ -14715,7 +14434,7 @@ yydefault: case 509: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2993 +//line sql.y:2992 { yyLOCAL = Full } @@ -14723,7 +14442,7 @@ yydefault: case 510: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2997 +//line sql.y:2996 { yyLOCAL = Partial } @@ -14731,7 +14450,7 @@ yydefault: case 511: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL MatchAction -//line sql.y:3001 +//line sql.y:3000 { yyLOCAL = Simple } @@ -14739,7 +14458,7 @@ yydefault: case 512: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL MatchAction -//line sql.y:3006 +//line sql.y:3005 { yyLOCAL = DefaultMatch } @@ -14747,7 +14466,7 @@ yydefault: case 513: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL MatchAction -//line sql.y:3010 +//line sql.y:3009 { yyLOCAL = yyDollar[1].matchActionUnion() } @@ -14755,7 +14474,7 @@ yydefault: case 514: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:3016 +//line sql.y:3015 { yyLOCAL = yyDollar[3].referenceActionUnion() } @@ -14763,7 +14482,7 @@ yydefault: case 515: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:3022 +//line sql.y:3021 { yyLOCAL = yyDollar[3].referenceActionUnion() } @@ -14771,7 +14490,7 @@ yydefault: case 516: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:3028 +//line sql.y:3027 { yyLOCAL = Restrict } @@ -14779,7 +14498,7 @@ yydefault: case 517: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:3032 +//line sql.y:3031 { yyLOCAL = Cascade } @@ -14787,7 +14506,7 @@ yydefault: case 518: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:3036 +//line sql.y:3035 { yyLOCAL = NoAction } @@ -14795,7 +14514,7 @@ yydefault: case 519: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:3040 +//line sql.y:3039 { yyLOCAL = SetDefault } @@ -14803,33 +14522,33 @@ yydefault: case 520: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:3044 +//line sql.y:3043 { yyLOCAL = SetNull } yyVAL.union = yyLOCAL case 521: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3049 +//line sql.y:3048 { yyVAL.str = "" } case 522: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3053 +//line sql.y:3052 { yyVAL.str = string(yyDollar[1].str) } case 523: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3057 +//line sql.y:3056 { yyVAL.str = string(yyDollar[1].str) } case 524: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3063 +//line sql.y:3062 { yyLOCAL = true } @@ -14837,7 +14556,7 @@ yydefault: case 525: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:3067 +//line sql.y:3066 { yyLOCAL = false } @@ -14845,7 +14564,7 @@ yydefault: case 526: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3072 +//line sql.y:3071 { yyLOCAL = true } @@ -14853,7 +14572,7 @@ yydefault: case 527: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3076 +//line sql.y:3075 { yyLOCAL = yyDollar[1].booleanUnion() } @@ -14861,7 +14580,7 @@ yydefault: case 528: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL TableOptions -//line sql.y:3081 +//line sql.y:3080 { yyLOCAL = nil } @@ -14869,7 +14588,7 @@ yydefault: case 529: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableOptions -//line sql.y:3085 +//line sql.y:3084 { yyLOCAL = yyDollar[1].tableOptionsUnion() } @@ -14877,21 +14596,21 @@ yydefault: case 530: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableOptions -//line sql.y:3091 +//line sql.y:3090 { yyLOCAL = TableOptions{yyDollar[1].tableOptionUnion()} } yyVAL.union = yyLOCAL case 531: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3095 +//line sql.y:3094 { yySLICE := (*TableOptions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableOptionUnion()) } case 532: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3099 +//line sql.y:3098 { yySLICE := (*TableOptions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].tableOptionUnion()) @@ -14899,14 +14618,14 @@ yydefault: case 533: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableOptions -//line sql.y:3105 +//line sql.y:3104 { yyLOCAL = TableOptions{yyDollar[1].tableOptionUnion()} } yyVAL.union = yyLOCAL case 534: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3109 +//line sql.y:3108 { yySLICE := (*TableOptions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].tableOptionUnion()) @@ -14914,7 +14633,7 @@ yydefault: case 535: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3115 +//line sql.y:3114 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -14922,7 +14641,7 @@ yydefault: case 536: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3119 +//line sql.y:3118 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -14930,7 +14649,7 @@ yydefault: case 537: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3123 +//line sql.y:3122 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -14938,7 +14657,7 @@ yydefault: case 538: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3127 +//line sql.y:3126 { yyLOCAL = &TableOption{Name: (string(yyDollar[2].str)), String: yyDollar[4].str, CaseSensitive: true} } @@ -14946,7 +14665,7 @@ yydefault: case 539: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3131 +//line sql.y:3130 { yyLOCAL = &TableOption{Name: string(yyDollar[2].str), String: yyDollar[4].str, CaseSensitive: true} } @@ -14954,7 +14673,7 @@ yydefault: case 540: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3135 +//line sql.y:3134 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -14962,7 +14681,7 @@ yydefault: case 541: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3139 +//line sql.y:3138 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } @@ -14970,7 +14689,7 @@ yydefault: case 542: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3143 +//line sql.y:3142 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } @@ -14978,7 +14697,7 @@ yydefault: case 543: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3147 +//line sql.y:3146 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } @@ -14986,7 +14705,7 @@ yydefault: case 544: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3151 +//line sql.y:3150 { yyLOCAL = &TableOption{Name: (string(yyDollar[1].str) + " " + string(yyDollar[2].str)), Value: NewStrLiteral(yyDollar[4].str)} } @@ -14994,7 +14713,7 @@ yydefault: case 545: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3155 +//line sql.y:3154 { yyLOCAL = &TableOption{Name: (string(yyDollar[1].str) + " " + string(yyDollar[2].str)), Value: NewStrLiteral(yyDollar[4].str)} } @@ -15002,7 +14721,7 @@ yydefault: case 546: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3159 +//line sql.y:3158 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -15010,7 +14729,7 @@ yydefault: case 547: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3163 +//line sql.y:3162 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } @@ -15018,7 +14737,7 @@ yydefault: case 548: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3167 +//line sql.y:3166 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: yyDollar[3].identifierCS.String(), CaseSensitive: true} } @@ -15026,7 +14745,7 @@ yydefault: case 549: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3171 +//line sql.y:3170 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } @@ -15034,7 +14753,7 @@ yydefault: case 550: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3175 +//line sql.y:3174 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } @@ -15042,7 +14761,7 @@ yydefault: case 551: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3179 +//line sql.y:3178 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -15050,7 +14769,7 @@ yydefault: case 552: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3183 +//line sql.y:3182 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -15058,7 +14777,7 @@ yydefault: case 553: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3187 +//line sql.y:3186 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -15066,7 +14785,7 @@ yydefault: case 554: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3191 +//line sql.y:3190 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -15074,7 +14793,7 @@ yydefault: case 555: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3195 +//line sql.y:3194 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } @@ -15082,7 +14801,7 @@ yydefault: case 556: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3199 +//line sql.y:3198 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } @@ -15090,7 +14809,7 @@ yydefault: case 557: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3203 +//line sql.y:3202 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } @@ -15098,7 +14817,7 @@ yydefault: case 558: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3207 +//line sql.y:3206 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } @@ -15106,7 +14825,7 @@ yydefault: case 559: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3211 +//line sql.y:3210 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -15114,7 +14833,7 @@ yydefault: case 560: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3215 +//line sql.y:3214 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } @@ -15122,7 +14841,7 @@ yydefault: case 561: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3219 +//line sql.y:3218 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -15130,7 +14849,7 @@ yydefault: case 562: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3223 +//line sql.y:3222 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } @@ -15138,7 +14857,7 @@ yydefault: case 563: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3227 +//line sql.y:3226 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -15146,7 +14865,7 @@ yydefault: case 564: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3231 +//line sql.y:3230 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: (yyDollar[3].identifierCI.String() + yyDollar[4].str), CaseSensitive: true} } @@ -15154,63 +14873,63 @@ yydefault: case 565: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *TableOption -//line sql.y:3235 +//line sql.y:3234 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Tables: yyDollar[4].tableNamesUnion()} } yyVAL.union = yyLOCAL case 566: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3240 +//line sql.y:3239 { yyVAL.str = "" } case 567: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3244 +//line sql.y:3243 { yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 568: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3248 +//line sql.y:3247 { yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 578: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3267 +//line sql.y:3266 { yyVAL.str = String(TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}) } case 579: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3271 +//line sql.y:3270 { yyVAL.str = yyDollar[1].identifierCI.String() } case 580: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3275 +//line sql.y:3274 { yyVAL.str = encodeSQLString(yyDollar[1].str) } case 581: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3279 +//line sql.y:3278 { yyVAL.str = string(yyDollar[1].str) } case 582: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3284 +//line sql.y:3283 { yyVAL.str = "" } case 584: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3290 +//line sql.y:3289 { yyLOCAL = false } @@ -15218,7 +14937,7 @@ yydefault: case 585: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3294 +//line sql.y:3293 { yyLOCAL = true } @@ -15226,7 +14945,7 @@ yydefault: case 586: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ColName -//line sql.y:3299 +//line sql.y:3298 { yyLOCAL = nil } @@ -15234,27 +14953,27 @@ yydefault: case 587: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColName -//line sql.y:3303 +//line sql.y:3302 { yyLOCAL = yyDollar[2].colNameUnion() } yyVAL.union = yyLOCAL case 588: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3308 +//line sql.y:3307 { yyVAL.str = "" } case 589: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3312 +//line sql.y:3311 { yyVAL.str = string(yyDollar[2].str) } case 590: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Literal -//line sql.y:3317 +//line sql.y:3316 { yyLOCAL = nil } @@ -15262,7 +14981,7 @@ yydefault: case 591: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Literal -//line sql.y:3321 +//line sql.y:3320 { yyLOCAL = NewIntLiteral(yyDollar[2].str) } @@ -15270,7 +14989,7 @@ yydefault: case 592: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Literal -//line sql.y:3325 +//line sql.y:3324 { yyLOCAL = NewDecimalLiteral(yyDollar[2].str) } @@ -15278,7 +14997,7 @@ yydefault: case 593: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:3330 +//line sql.y:3329 { yyLOCAL = nil } @@ -15286,14 +15005,14 @@ yydefault: case 594: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:3334 +//line sql.y:3333 { yyLOCAL = yyDollar[1].alterOptionsUnion() } yyVAL.union = yyLOCAL case 595: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3338 +//line sql.y:3337 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, &OrderByOption{Cols: yyDollar[5].columnsUnion()}) @@ -15301,14 +15020,14 @@ yydefault: case 596: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:3342 +//line sql.y:3341 { yyLOCAL = yyDollar[1].alterOptionsUnion() } yyVAL.union = yyLOCAL case 597: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3346 +//line sql.y:3345 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].alterOptionsUnion()...) @@ -15316,7 +15035,7 @@ yydefault: case 598: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:3350 +//line sql.y:3349 { yyLOCAL = append(append(yyDollar[1].alterOptionsUnion(), yyDollar[3].alterOptionsUnion()...), &OrderByOption{Cols: yyDollar[7].columnsUnion()}) } @@ -15324,21 +15043,21 @@ yydefault: case 599: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:3356 +//line sql.y:3355 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL case 600: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3360 +//line sql.y:3359 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].alterOptionUnion()) } case 601: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3364 +//line sql.y:3363 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].alterOptionUnion()) @@ -15346,7 +15065,7 @@ yydefault: case 602: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3370 +//line sql.y:3369 { yyLOCAL = yyDollar[1].tableOptionsUnion() } @@ -15354,7 +15073,7 @@ yydefault: case 603: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3374 +//line sql.y:3373 { yyLOCAL = &AddConstraintDefinition{ConstraintDefinition: yyDollar[2].constraintDefinitionUnion()} } @@ -15362,7 +15081,7 @@ yydefault: case 604: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3378 +//line sql.y:3377 { yyLOCAL = &AddConstraintDefinition{ConstraintDefinition: yyDollar[2].constraintDefinitionUnion()} } @@ -15370,7 +15089,7 @@ yydefault: case 605: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3382 +//line sql.y:3381 { yyLOCAL = &AddIndexDefinition{IndexDefinition: yyDollar[2].indexDefinitionUnion()} } @@ -15378,7 +15097,7 @@ yydefault: case 606: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3386 +//line sql.y:3385 { yyLOCAL = &AddColumns{Columns: yyDollar[4].columnDefinitionsUnion()} } @@ -15386,7 +15105,7 @@ yydefault: case 607: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3390 +//line sql.y:3389 { yyLOCAL = &AddColumns{Columns: []*ColumnDefinition{yyDollar[3].columnDefinitionUnion()}, First: yyDollar[4].booleanUnion(), After: yyDollar[5].colNameUnion()} } @@ -15394,7 +15113,7 @@ yydefault: case 608: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3394 +//line sql.y:3393 { yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: true} } @@ -15402,7 +15121,7 @@ yydefault: case 609: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3398 +//line sql.y:3397 { yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: false, DefaultVal: yyDollar[6].exprUnion(), DefaultLiteral: true} } @@ -15410,7 +15129,7 @@ yydefault: case 610: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3402 +//line sql.y:3401 { yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: false, DefaultVal: yyDollar[7].exprUnion()} } @@ -15418,7 +15137,7 @@ yydefault: case 611: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3406 +//line sql.y:3405 { yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), Invisible: ptr.Of(false)} } @@ -15426,7 +15145,7 @@ yydefault: case 612: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3410 +//line sql.y:3409 { yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), Invisible: ptr.Of(true)} } @@ -15434,7 +15153,7 @@ yydefault: case 613: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3414 +//line sql.y:3413 { yyLOCAL = &AlterCheck{Name: yyDollar[3].identifierCI, Enforced: yyDollar[4].booleanUnion()} } @@ -15442,7 +15161,7 @@ yydefault: case 614: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3418 +//line sql.y:3417 { yyLOCAL = &AlterIndex{Name: yyDollar[3].identifierCI, Invisible: false} } @@ -15450,7 +15169,7 @@ yydefault: case 615: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3422 +//line sql.y:3421 { yyLOCAL = &AlterIndex{Name: yyDollar[3].identifierCI, Invisible: true} } @@ -15458,7 +15177,7 @@ yydefault: case 616: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3426 +//line sql.y:3425 { yyLOCAL = &ChangeColumn{OldColumn: yyDollar[3].colNameUnion(), NewColDefinition: yyDollar[4].columnDefinitionUnion(), First: yyDollar[5].booleanUnion(), After: yyDollar[6].colNameUnion()} } @@ -15466,7 +15185,7 @@ yydefault: case 617: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3430 +//line sql.y:3429 { yyLOCAL = &ModifyColumn{NewColDefinition: yyDollar[3].columnDefinitionUnion(), First: yyDollar[4].booleanUnion(), After: yyDollar[5].colNameUnion()} } @@ -15474,7 +15193,7 @@ yydefault: case 618: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3434 +//line sql.y:3433 { yyLOCAL = &RenameColumn{OldName: yyDollar[3].colNameUnion(), NewName: yyDollar[5].colNameUnion()} } @@ -15482,7 +15201,7 @@ yydefault: case 619: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3438 +//line sql.y:3437 { yyLOCAL = &AlterCharset{CharacterSet: yyDollar[4].str, Collate: yyDollar[5].str} } @@ -15490,7 +15209,7 @@ yydefault: case 620: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3442 +//line sql.y:3441 { yyLOCAL = &KeyState{Enable: false} } @@ -15498,7 +15217,7 @@ yydefault: case 621: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3446 +//line sql.y:3445 { yyLOCAL = &KeyState{Enable: true} } @@ -15506,7 +15225,7 @@ yydefault: case 622: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3450 +//line sql.y:3449 { yyLOCAL = &TablespaceOperation{Import: false} } @@ -15514,7 +15233,7 @@ yydefault: case 623: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3454 +//line sql.y:3453 { yyLOCAL = &TablespaceOperation{Import: true} } @@ -15522,7 +15241,7 @@ yydefault: case 624: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3458 +//line sql.y:3457 { yyLOCAL = &DropColumn{Name: yyDollar[3].colNameUnion()} } @@ -15530,7 +15249,7 @@ yydefault: case 625: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3462 +//line sql.y:3461 { yyLOCAL = &DropKey{Type: NormalKeyType, Name: yyDollar[3].identifierCI} } @@ -15538,7 +15257,7 @@ yydefault: case 626: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3466 +//line sql.y:3465 { yyLOCAL = &DropKey{Type: PrimaryKeyType} } @@ -15546,7 +15265,7 @@ yydefault: case 627: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3470 +//line sql.y:3469 { yyLOCAL = &DropKey{Type: ForeignKeyType, Name: yyDollar[4].identifierCI} } @@ -15554,7 +15273,7 @@ yydefault: case 628: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3474 +//line sql.y:3473 { yyLOCAL = &DropKey{Type: CheckKeyType, Name: yyDollar[3].identifierCI} } @@ -15562,7 +15281,7 @@ yydefault: case 629: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3478 +//line sql.y:3477 { yyLOCAL = &DropKey{Type: CheckKeyType, Name: yyDollar[3].identifierCI} } @@ -15570,7 +15289,7 @@ yydefault: case 630: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3482 +//line sql.y:3481 { yyLOCAL = &Force{} } @@ -15578,7 +15297,7 @@ yydefault: case 631: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3486 +//line sql.y:3485 { yyLOCAL = &RenameTableName{Table: yyDollar[3].tableName} } @@ -15586,7 +15305,7 @@ yydefault: case 632: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3490 +//line sql.y:3489 { yyLOCAL = &RenameIndex{OldName: yyDollar[3].identifierCI, NewName: yyDollar[5].identifierCI} } @@ -15594,14 +15313,14 @@ yydefault: case 633: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:3496 +//line sql.y:3495 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL case 634: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3500 +//line sql.y:3499 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].alterOptionUnion()) @@ -15609,7 +15328,7 @@ yydefault: case 635: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3506 +//line sql.y:3505 { yyLOCAL = AlgorithmValue(string(yyDollar[3].str)) } @@ -15617,7 +15336,7 @@ yydefault: case 636: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3510 +//line sql.y:3509 { yyLOCAL = AlgorithmValue(string(yyDollar[3].str)) } @@ -15625,7 +15344,7 @@ yydefault: case 637: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3514 +//line sql.y:3513 { yyLOCAL = AlgorithmValue(string(yyDollar[3].str)) } @@ -15633,7 +15352,7 @@ yydefault: case 638: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3518 +//line sql.y:3517 { yyLOCAL = AlgorithmValue(string(yyDollar[3].str)) } @@ -15641,7 +15360,7 @@ yydefault: case 639: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3522 +//line sql.y:3521 { yyLOCAL = &LockOption{Type: DefaultType} } @@ -15649,7 +15368,7 @@ yydefault: case 640: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3526 +//line sql.y:3525 { yyLOCAL = &LockOption{Type: NoneType} } @@ -15657,7 +15376,7 @@ yydefault: case 641: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3530 +//line sql.y:3529 { yyLOCAL = &LockOption{Type: SharedType} } @@ -15665,7 +15384,7 @@ yydefault: case 642: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3534 +//line sql.y:3533 { yyLOCAL = &LockOption{Type: ExclusiveType} } @@ -15673,7 +15392,7 @@ yydefault: case 643: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3538 +//line sql.y:3537 { yyLOCAL = &Validation{With: true} } @@ -15681,7 +15400,7 @@ yydefault: case 644: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3542 +//line sql.y:3541 { yyLOCAL = &Validation{With: false} } @@ -15689,7 +15408,7 @@ yydefault: case 645: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:3548 +//line sql.y:3547 { yyDollar[1].alterTableUnion().FullyParsed = true yyDollar[1].alterTableUnion().AlterOptions = yyDollar[2].alterOptionsUnion() @@ -15700,7 +15419,7 @@ yydefault: case 646: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:3555 +//line sql.y:3554 { yyDollar[1].alterTableUnion().FullyParsed = true yyDollar[1].alterTableUnion().AlterOptions = yyDollar[2].alterOptionsUnion() @@ -15711,7 +15430,7 @@ yydefault: case 647: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:3562 +//line sql.y:3561 { yyDollar[1].alterTableUnion().FullyParsed = true yyDollar[1].alterTableUnion().AlterOptions = yyDollar[2].alterOptionsUnion() @@ -15722,7 +15441,7 @@ yydefault: case 648: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:3569 +//line sql.y:3568 { yyDollar[1].alterTableUnion().FullyParsed = true yyDollar[1].alterTableUnion().PartitionSpec = yyDollar[2].partSpecUnion() @@ -15732,7 +15451,7 @@ yydefault: case 649: yyDollar = yyS[yypt-11 : yypt+1] var yyLOCAL Statement -//line sql.y:3575 +//line sql.y:3574 { yyLOCAL = &AlterView{ViewName: yyDollar[7].tableName, Comments: Comments(yyDollar[2].strs).Parsed(), Algorithm: yyDollar[3].str, Definer: yyDollar[4].definerUnion(), Security: yyDollar[5].str, Columns: yyDollar[8].columnsUnion(), Select: yyDollar[10].tableStmtUnion(), CheckOption: yyDollar[11].str} } @@ -15740,7 +15459,7 @@ yydefault: case 650: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:3585 +//line sql.y:3584 { yyDollar[1].alterDatabaseUnion().FullyParsed = true yyDollar[1].alterDatabaseUnion().DBName = yyDollar[2].identifierCS @@ -15751,7 +15470,7 @@ yydefault: case 651: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3592 +//line sql.y:3591 { yyDollar[1].alterDatabaseUnion().FullyParsed = true yyDollar[1].alterDatabaseUnion().DBName = yyDollar[2].identifierCS @@ -15762,7 +15481,7 @@ yydefault: case 652: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:3599 +//line sql.y:3598 { yyLOCAL = &AlterVschema{ Action: CreateVindexDDLAction, @@ -15778,7 +15497,7 @@ yydefault: case 653: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3611 +//line sql.y:3610 { yyLOCAL = &AlterVschema{ Action: DropVindexDDLAction, @@ -15792,7 +15511,7 @@ yydefault: case 654: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3621 +//line sql.y:3620 { yyLOCAL = &AlterVschema{Action: AddVschemaTableDDLAction, Table: yyDollar[6].tableName} } @@ -15800,7 +15519,7 @@ yydefault: case 655: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3625 +//line sql.y:3624 { yyLOCAL = &AlterVschema{Action: DropVschemaTableDDLAction, Table: yyDollar[6].tableName} } @@ -15808,7 +15527,7 @@ yydefault: case 656: yyDollar = yyS[yypt-13 : yypt+1] var yyLOCAL Statement -//line sql.y:3629 +//line sql.y:3628 { yyLOCAL = &AlterVschema{ Action: AddColVindexDDLAction, @@ -15825,7 +15544,7 @@ yydefault: case 657: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:3642 +//line sql.y:3641 { yyLOCAL = &AlterVschema{ Action: DropColVindexDDLAction, @@ -15839,7 +15558,7 @@ yydefault: case 658: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3652 +//line sql.y:3651 { yyLOCAL = &AlterVschema{Action: AddSequenceDDLAction, Table: yyDollar[6].tableName} } @@ -15847,7 +15566,7 @@ yydefault: case 659: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3656 +//line sql.y:3655 { yyLOCAL = &AlterVschema{Action: DropSequenceDDLAction, Table: yyDollar[6].tableName} } @@ -15855,7 +15574,7 @@ yydefault: case 660: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Statement -//line sql.y:3660 +//line sql.y:3659 { yyLOCAL = &AlterVschema{ Action: AddAutoIncDDLAction, @@ -15870,7 +15589,7 @@ yydefault: case 661: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3671 +//line sql.y:3670 { yyLOCAL = &AlterVschema{ Action: DropAutoIncDDLAction, @@ -15881,7 +15600,7 @@ yydefault: case 662: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3678 +//line sql.y:3677 { yyLOCAL = &AlterMigration{ Type: RetryMigrationType, @@ -15892,7 +15611,7 @@ yydefault: case 663: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3685 +//line sql.y:3684 { yyLOCAL = &AlterMigration{ Type: CleanupMigrationType, @@ -15903,7 +15622,7 @@ yydefault: case 664: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3692 +//line sql.y:3691 { yyLOCAL = &AlterMigration{ Type: CleanupAllMigrationType, @@ -15913,7 +15632,7 @@ yydefault: case 665: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3698 +//line sql.y:3697 { yyLOCAL = &AlterMigration{ Type: LaunchMigrationType, @@ -15924,7 +15643,7 @@ yydefault: case 666: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3705 +//line sql.y:3704 { yyLOCAL = &AlterMigration{ Type: LaunchMigrationType, @@ -15936,7 +15655,7 @@ yydefault: case 667: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3713 +//line sql.y:3712 { yyLOCAL = &AlterMigration{ Type: LaunchAllMigrationType, @@ -15946,7 +15665,7 @@ yydefault: case 668: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3719 +//line sql.y:3718 { yyLOCAL = &AlterMigration{ Type: CompleteMigrationType, @@ -15957,7 +15676,7 @@ yydefault: case 669: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3726 +//line sql.y:3725 { yyLOCAL = &AlterMigration{ Type: CompleteAllMigrationType, @@ -15965,9 +15684,30 @@ yydefault: } yyVAL.union = yyLOCAL case 670: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Statement +//line sql.y:3731 + { + yyLOCAL = &AlterMigration{ + Type: PostponeCompleteMigrationType, + UUID: string(yyDollar[4].str), + } + } + yyVAL.union = yyLOCAL + case 671: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Statement +//line sql.y:3738 + { + yyLOCAL = &AlterMigration{ + Type: PostponeCompleteAllMigrationType, + } + } + yyVAL.union = yyLOCAL + case 672: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3732 +//line sql.y:3744 { yyLOCAL = &AlterMigration{ Type: CancelMigrationType, @@ -15975,20 +15715,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 671: + case 673: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3739 +//line sql.y:3751 { yyLOCAL = &AlterMigration{ Type: CancelAllMigrationType, } } yyVAL.union = yyLOCAL - case 672: + case 674: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3745 +//line sql.y:3757 { yyLOCAL = &AlterMigration{ Type: ThrottleMigrationType, @@ -15998,10 +15738,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 673: + case 675: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3754 +//line sql.y:3766 { yyLOCAL = &AlterMigration{ Type: ThrottleAllMigrationType, @@ -16010,10 +15750,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 674: + case 676: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3762 +//line sql.y:3774 { yyLOCAL = &AlterMigration{ Type: UnthrottleMigrationType, @@ -16021,20 +15761,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 675: + case 677: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3769 +//line sql.y:3781 { yyLOCAL = &AlterMigration{ Type: UnthrottleAllMigrationType, } } yyVAL.union = yyLOCAL - case 676: + case 678: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3775 +//line sql.y:3787 { yyLOCAL = &AlterMigration{ Type: ForceCutOverMigrationType, @@ -16042,20 +15782,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 677: + case 679: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3782 +//line sql.y:3794 { yyLOCAL = &AlterMigration{ Type: ForceCutOverAllMigrationType, } } yyVAL.union = yyLOCAL - case 678: + case 680: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3788 +//line sql.y:3800 { yyLOCAL = &AlterMigration{ Type: SetCutOverThresholdMigrationType, @@ -16064,18 +15804,18 @@ yydefault: } } yyVAL.union = yyLOCAL - case 679: + case 681: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3797 +//line sql.y:3809 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 680: + case 682: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3801 +//line sql.y:3813 { yyDollar[3].partitionOptionUnion().Partitions = yyDollar[4].integerUnion() yyDollar[3].partitionOptionUnion().SubPartition = yyDollar[5].subPartitionUnion() @@ -16083,10 +15823,10 @@ yydefault: yyLOCAL = yyDollar[3].partitionOptionUnion() } yyVAL.union = yyLOCAL - case 681: + case 683: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3810 +//line sql.y:3822 { yyLOCAL = &PartitionOption{ IsLinear: yyDollar[1].booleanUnion(), @@ -16095,10 +15835,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 682: + case 684: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3818 +//line sql.y:3830 { yyLOCAL = &PartitionOption{ IsLinear: yyDollar[1].booleanUnion(), @@ -16108,10 +15848,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 683: + case 685: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3827 +//line sql.y:3839 { yyLOCAL = &PartitionOption{ Type: yyDollar[1].partitionByTypeUnion(), @@ -16119,10 +15859,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 684: + case 686: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3834 +//line sql.y:3846 { yyLOCAL = &PartitionOption{ Type: yyDollar[1].partitionByTypeUnion(), @@ -16130,18 +15870,18 @@ yydefault: } } yyVAL.union = yyLOCAL - case 685: + case 687: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *SubPartition -//line sql.y:3842 +//line sql.y:3854 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 686: + case 688: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *SubPartition -//line sql.y:3846 +//line sql.y:3858 { yyLOCAL = &SubPartition{ IsLinear: yyDollar[3].booleanUnion(), @@ -16151,10 +15891,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 687: + case 689: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL *SubPartition -//line sql.y:3855 +//line sql.y:3867 { yyLOCAL = &SubPartition{ IsLinear: yyDollar[3].booleanUnion(), @@ -16165,678 +15905,678 @@ yydefault: } } yyVAL.union = yyLOCAL - case 688: + case 690: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*PartitionDefinition -//line sql.y:3866 +//line sql.y:3878 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 689: + case 691: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*PartitionDefinition -//line sql.y:3870 +//line sql.y:3882 { yyLOCAL = yyDollar[2].partDefsUnion() } yyVAL.union = yyLOCAL - case 690: + case 692: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3875 +//line sql.y:3887 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 691: + case 693: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3879 +//line sql.y:3891 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 692: + case 694: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:3884 +//line sql.y:3896 { yyLOCAL = 0 } yyVAL.union = yyLOCAL - case 693: + case 695: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:3888 +//line sql.y:3900 { yyLOCAL = convertStringToInt(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 694: + case 696: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL TableExpr -//line sql.y:3894 +//line sql.y:3906 { yyLOCAL = &JSONTableExpr{Expr: yyDollar[3].exprUnion(), Filter: yyDollar[5].exprUnion(), Columns: yyDollar[6].jtColumnListUnion(), Alias: yyDollar[8].identifierCS} } yyVAL.union = yyLOCAL - case 695: + case 697: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL []*JtColumnDefinition -//line sql.y:3900 +//line sql.y:3912 { yyLOCAL = yyDollar[3].jtColumnListUnion() } yyVAL.union = yyLOCAL - case 696: + case 698: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*JtColumnDefinition -//line sql.y:3906 +//line sql.y:3918 { yyLOCAL = []*JtColumnDefinition{yyDollar[1].jtColumnDefinitionUnion()} } yyVAL.union = yyLOCAL - case 697: + case 699: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3910 +//line sql.y:3922 { yySLICE := (*[]*JtColumnDefinition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].jtColumnDefinitionUnion()) } - case 698: + case 700: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3916 +//line sql.y:3928 { yyLOCAL = &JtColumnDefinition{JtOrdinal: &JtOrdinalColDef{Name: yyDollar[1].identifierCI}} } yyVAL.union = yyLOCAL - case 699: + case 701: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3920 +//line sql.y:3932 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 700: + case 702: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3926 +//line sql.y:3938 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 701: + case 703: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3932 +//line sql.y:3944 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 702: + case 704: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3938 +//line sql.y:3950 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 703: + case 705: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3944 +//line sql.y:3956 { jtNestedPath := &JtNestedPathColDef{Path: yyDollar[3].exprUnion(), Columns: yyDollar[4].jtColumnListUnion()} yyLOCAL = &JtColumnDefinition{JtNestedPath: jtNestedPath} } yyVAL.union = yyLOCAL - case 704: + case 706: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3950 +//line sql.y:3962 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 705: + case 707: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3954 +//line sql.y:3966 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 706: + case 708: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3958 +//line sql.y:3970 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 707: + case 709: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3962 +//line sql.y:3974 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 708: + case 710: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3968 +//line sql.y:3980 { yyLOCAL = yyDollar[1].jtOnResponseUnion() } yyVAL.union = yyLOCAL - case 709: + case 711: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3974 +//line sql.y:3986 { yyLOCAL = yyDollar[1].jtOnResponseUnion() } yyVAL.union = yyLOCAL - case 710: + case 712: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3980 +//line sql.y:3992 { yyLOCAL = &JtOnResponse{ResponseType: ErrorJSONType} } yyVAL.union = yyLOCAL - case 711: + case 713: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3984 +//line sql.y:3996 { yyLOCAL = &JtOnResponse{ResponseType: NullJSONType} } yyVAL.union = yyLOCAL - case 712: + case 714: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3988 +//line sql.y:4000 { yyLOCAL = &JtOnResponse{ResponseType: DefaultJSONType, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 713: + case 715: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL PartitionByType -//line sql.y:3994 +//line sql.y:4006 { yyLOCAL = RangeType } yyVAL.union = yyLOCAL - case 714: + case 716: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL PartitionByType -//line sql.y:3998 +//line sql.y:4010 { yyLOCAL = ListType } yyVAL.union = yyLOCAL - case 715: + case 717: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:4003 +//line sql.y:4015 { yyLOCAL = -1 } yyVAL.union = yyLOCAL - case 716: + case 718: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL int -//line sql.y:4007 +//line sql.y:4019 { yyLOCAL = convertStringToInt(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 717: + case 719: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:4012 +//line sql.y:4024 { yyLOCAL = -1 } yyVAL.union = yyLOCAL - case 718: + case 720: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL int -//line sql.y:4016 +//line sql.y:4028 { yyLOCAL = convertStringToInt(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 719: + case 721: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:4022 +//line sql.y:4034 { yyLOCAL = &PartitionSpec{Action: AddAction, Definitions: []*PartitionDefinition{yyDollar[4].partDefUnion()}} } yyVAL.union = yyLOCAL - case 720: + case 722: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:4026 +//line sql.y:4038 { yyLOCAL = &PartitionSpec{Action: DropAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 721: + case 723: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:4030 +//line sql.y:4042 { yyLOCAL = &PartitionSpec{Action: ReorganizeAction, Names: yyDollar[3].partitionsUnion(), Definitions: yyDollar[6].partDefsUnion()} } yyVAL.union = yyLOCAL - case 722: + case 724: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:4034 +//line sql.y:4046 { yyLOCAL = &PartitionSpec{Action: DiscardAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 723: + case 725: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:4038 +//line sql.y:4050 { yyLOCAL = &PartitionSpec{Action: DiscardAction, IsAll: true} } yyVAL.union = yyLOCAL - case 724: + case 726: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:4042 +//line sql.y:4054 { yyLOCAL = &PartitionSpec{Action: ImportAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 725: + case 727: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:4046 +//line sql.y:4058 { yyLOCAL = &PartitionSpec{Action: ImportAction, IsAll: true} } yyVAL.union = yyLOCAL - case 726: + case 728: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:4050 +//line sql.y:4062 { yyLOCAL = &PartitionSpec{Action: TruncateAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 727: + case 729: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:4054 +//line sql.y:4066 { yyLOCAL = &PartitionSpec{Action: TruncateAction, IsAll: true} } yyVAL.union = yyLOCAL - case 728: + case 730: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:4058 +//line sql.y:4070 { yyLOCAL = &PartitionSpec{Action: CoalesceAction, Number: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 729: + case 731: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:4062 +//line sql.y:4074 { yyLOCAL = &PartitionSpec{Action: ExchangeAction, Names: Partitions{yyDollar[3].identifierCI}, TableName: yyDollar[6].tableName, WithoutValidation: yyDollar[7].booleanUnion()} } yyVAL.union = yyLOCAL - case 730: + case 732: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:4066 +//line sql.y:4078 { yyLOCAL = &PartitionSpec{Action: AnalyzeAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 731: + case 733: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:4070 +//line sql.y:4082 { yyLOCAL = &PartitionSpec{Action: AnalyzeAction, IsAll: true} } yyVAL.union = yyLOCAL - case 732: + case 734: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:4074 +//line sql.y:4086 { yyLOCAL = &PartitionSpec{Action: CheckAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 733: + case 735: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:4078 +//line sql.y:4090 { yyLOCAL = &PartitionSpec{Action: CheckAction, IsAll: true} } yyVAL.union = yyLOCAL - case 734: + case 736: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:4082 +//line sql.y:4094 { yyLOCAL = &PartitionSpec{Action: OptimizeAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 735: + case 737: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:4086 +//line sql.y:4098 { yyLOCAL = &PartitionSpec{Action: OptimizeAction, IsAll: true} } yyVAL.union = yyLOCAL - case 736: + case 738: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:4090 +//line sql.y:4102 { yyLOCAL = &PartitionSpec{Action: RebuildAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 737: + case 739: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:4094 +//line sql.y:4106 { yyLOCAL = &PartitionSpec{Action: RebuildAction, IsAll: true} } yyVAL.union = yyLOCAL - case 738: + case 740: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:4098 +//line sql.y:4110 { yyLOCAL = &PartitionSpec{Action: RepairAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 739: + case 741: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:4102 +//line sql.y:4114 { yyLOCAL = &PartitionSpec{Action: RepairAction, IsAll: true} } yyVAL.union = yyLOCAL - case 740: + case 742: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:4106 +//line sql.y:4118 { yyLOCAL = &PartitionSpec{Action: UpgradeAction} } yyVAL.union = yyLOCAL - case 741: + case 743: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4111 +//line sql.y:4123 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 742: + case 744: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:4115 +//line sql.y:4127 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 743: + case 745: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:4119 +//line sql.y:4131 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 744: + case 746: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*PartitionDefinition -//line sql.y:4125 +//line sql.y:4137 { yyLOCAL = []*PartitionDefinition{yyDollar[1].partDefUnion()} } yyVAL.union = yyLOCAL - case 745: + case 747: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4129 +//line sql.y:4141 { yySLICE := (*[]*PartitionDefinition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].partDefUnion()) } - case 746: + case 748: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4135 +//line sql.y:4147 { yyVAL.partDefUnion().Options = yyDollar[2].partitionDefinitionOptionsUnion() } - case 747: + case 749: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:4140 +//line sql.y:4152 { yyLOCAL = &PartitionDefinitionOptions{} } yyVAL.union = yyLOCAL - case 748: + case 750: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:4144 +//line sql.y:4156 { yyDollar[1].partitionDefinitionOptionsUnion().ValueRange = yyDollar[2].partitionValueRangeUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 749: + case 751: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:4149 +//line sql.y:4161 { yyDollar[1].partitionDefinitionOptionsUnion().Comment = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 750: + case 752: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:4154 +//line sql.y:4166 { yyDollar[1].partitionDefinitionOptionsUnion().Engine = yyDollar[2].partitionEngineUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 751: + case 753: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:4159 +//line sql.y:4171 { yyDollar[1].partitionDefinitionOptionsUnion().DataDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 752: + case 754: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:4164 +//line sql.y:4176 { yyDollar[1].partitionDefinitionOptionsUnion().IndexDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 753: + case 755: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:4169 +//line sql.y:4181 { yyDollar[1].partitionDefinitionOptionsUnion().MaxRows = ptr.Of(yyDollar[2].integerUnion()) yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 754: + case 756: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:4174 +//line sql.y:4186 { yyDollar[1].partitionDefinitionOptionsUnion().MinRows = ptr.Of(yyDollar[2].integerUnion()) yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 755: + case 757: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:4179 +//line sql.y:4191 { yyDollar[1].partitionDefinitionOptionsUnion().TableSpace = yyDollar[2].str yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 756: + case 758: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:4184 +//line sql.y:4196 { yyDollar[1].partitionDefinitionOptionsUnion().SubPartitionDefinitions = yyDollar[2].subPartitionDefinitionsUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 757: + case 759: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SubPartitionDefinitions -//line sql.y:4190 +//line sql.y:4202 { yyLOCAL = yyDollar[2].subPartitionDefinitionsUnion() } yyVAL.union = yyLOCAL - case 758: + case 760: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SubPartitionDefinitions -//line sql.y:4196 +//line sql.y:4208 { yyLOCAL = SubPartitionDefinitions{yyDollar[1].subPartitionDefinitionUnion()} } yyVAL.union = yyLOCAL - case 759: + case 761: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4200 +//line sql.y:4212 { yySLICE := (*SubPartitionDefinitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].subPartitionDefinitionUnion()) } - case 760: + case 762: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SubPartitionDefinition -//line sql.y:4206 +//line sql.y:4218 { yyLOCAL = &SubPartitionDefinition{Name: yyDollar[2].identifierCI, Options: yyDollar[3].subPartitionDefinitionOptionsUnion()} } yyVAL.union = yyLOCAL - case 761: + case 763: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:4211 +//line sql.y:4223 { yyLOCAL = &SubPartitionDefinitionOptions{} } yyVAL.union = yyLOCAL - case 762: + case 764: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:4215 +//line sql.y:4227 { yyDollar[1].subPartitionDefinitionOptionsUnion().Comment = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 763: + case 765: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:4220 +//line sql.y:4232 { yyDollar[1].subPartitionDefinitionOptionsUnion().Engine = yyDollar[2].partitionEngineUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 764: + case 766: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:4225 +//line sql.y:4237 { yyDollar[1].subPartitionDefinitionOptionsUnion().DataDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 765: + case 767: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:4230 +//line sql.y:4242 { yyDollar[1].subPartitionDefinitionOptionsUnion().IndexDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 766: + case 768: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:4235 +//line sql.y:4247 { yyDollar[1].subPartitionDefinitionOptionsUnion().MaxRows = ptr.Of(yyDollar[2].integerUnion()) yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 767: + case 769: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:4240 +//line sql.y:4252 { yyDollar[1].subPartitionDefinitionOptionsUnion().MinRows = ptr.Of(yyDollar[2].integerUnion()) yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 768: + case 770: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:4245 +//line sql.y:4257 { yyDollar[1].subPartitionDefinitionOptionsUnion().TableSpace = yyDollar[2].str yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 769: + case 771: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionValueRange -//line sql.y:4252 +//line sql.y:4264 { yyLOCAL = &PartitionValueRange{ Type: LessThanType, @@ -16844,10 +16584,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 770: + case 772: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionValueRange -//line sql.y:4259 +//line sql.y:4271 { yyLOCAL = &PartitionValueRange{ Type: LessThanType, @@ -16855,10 +16595,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 771: + case 773: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionValueRange -//line sql.y:4266 +//line sql.y:4278 { yyLOCAL = &PartitionValueRange{ Type: InType, @@ -16866,131 +16606,131 @@ yydefault: } } yyVAL.union = yyLOCAL - case 772: + case 774: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4274 +//line sql.y:4286 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 773: + case 775: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4278 +//line sql.y:4290 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 774: + case 776: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionEngine -//line sql.y:4284 +//line sql.y:4296 { yyLOCAL = &PartitionEngine{Storage: yyDollar[1].booleanUnion(), Name: yyDollar[4].identifierCS.String()} } yyVAL.union = yyLOCAL - case 775: + case 777: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Literal -//line sql.y:4290 +//line sql.y:4302 { yyLOCAL = NewStrLiteral(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 776: + case 778: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Literal -//line sql.y:4296 +//line sql.y:4308 { yyLOCAL = NewStrLiteral(yyDollar[4].str) } yyVAL.union = yyLOCAL - case 777: + case 779: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Literal -//line sql.y:4302 +//line sql.y:4314 { yyLOCAL = NewStrLiteral(yyDollar[4].str) } yyVAL.union = yyLOCAL - case 778: + case 780: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:4308 +//line sql.y:4320 { yyLOCAL = convertStringToInt(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 779: + case 781: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:4314 +//line sql.y:4326 { yyLOCAL = convertStringToInt(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 780: + case 782: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4320 +//line sql.y:4332 { yyVAL.str = yyDollar[3].identifierCS.String() } - case 781: + case 783: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinition -//line sql.y:4326 +//line sql.y:4338 { yyLOCAL = &PartitionDefinition{Name: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 782: + case 784: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4332 +//line sql.y:4344 { yyVAL.str = "" } - case 783: + case 785: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4336 +//line sql.y:4348 { yyVAL.str = "" } - case 784: + case 786: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4342 +//line sql.y:4354 { yyLOCAL = &RenameTable{TablePairs: yyDollar[3].renameTablePairsUnion()} } yyVAL.union = yyLOCAL - case 785: + case 787: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*RenameTablePair -//line sql.y:4348 +//line sql.y:4360 { yyLOCAL = []*RenameTablePair{{FromTable: yyDollar[1].tableName, ToTable: yyDollar[3].tableName}} } yyVAL.union = yyLOCAL - case 786: + case 788: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:4352 +//line sql.y:4364 { yySLICE := (*[]*RenameTablePair)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, &RenameTablePair{FromTable: yyDollar[3].tableName, ToTable: yyDollar[5].tableName}) } - case 787: + case 789: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4358 +//line sql.y:4370 { yyLOCAL = &DropTable{FromTables: yyDollar[6].tableNamesUnion(), IfExists: yyDollar[5].booleanUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), Temp: yyDollar[3].booleanUnion()} } yyVAL.union = yyLOCAL - case 788: + case 790: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4362 +//line sql.y:4374 { // Change this to an alter statement if yyDollar[4].identifierCI.Lowered() == "primary" { @@ -17000,1385 +16740,1385 @@ yydefault: } } yyVAL.union = yyLOCAL - case 789: + case 791: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:4371 +//line sql.y:4383 { yyLOCAL = &DropView{FromTables: yyDollar[5].tableNamesUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), IfExists: yyDollar[4].booleanUnion()} } yyVAL.union = yyLOCAL - case 790: + case 792: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4375 +//line sql.y:4387 { yyLOCAL = &DropDatabase{Comments: Comments(yyDollar[2].strs).Parsed(), DBName: yyDollar[5].identifierCS, IfExists: yyDollar[4].booleanUnion()} } yyVAL.union = yyLOCAL - case 791: + case 793: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4379 +//line sql.y:4391 { yyLOCAL = &DropProcedure{Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[5].tableName, IfExists: yyDollar[4].booleanUnion()} } yyVAL.union = yyLOCAL - case 792: + case 794: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4385 +//line sql.y:4397 { yyLOCAL = &TruncateTable{Table: yyDollar[3].tableName} } yyVAL.union = yyLOCAL - case 793: + case 795: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4389 +//line sql.y:4401 { yyLOCAL = &TruncateTable{Table: yyDollar[2].tableName} } yyVAL.union = yyLOCAL - case 794: + case 796: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4395 +//line sql.y:4407 { yyLOCAL = &Analyze{IsLocal: yyDollar[2].booleanUnion(), Table: yyDollar[4].tableName} } yyVAL.union = yyLOCAL - case 795: + case 797: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4401 +//line sql.y:4413 { yyLOCAL = &PurgeBinaryLogs{To: string(yyDollar[5].str)} } yyVAL.union = yyLOCAL - case 796: + case 798: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4405 +//line sql.y:4417 { yyLOCAL = &PurgeBinaryLogs{Before: string(yyDollar[5].str)} } yyVAL.union = yyLOCAL - case 797: + case 799: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4411 +//line sql.y:4423 { yyLOCAL = &Show{&ShowBasic{Command: Charset, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 798: + case 800: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4415 +//line sql.y:4427 { yyLOCAL = &Show{&ShowBasic{Command: Collation, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 799: + case 801: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4419 +//line sql.y:4431 { yyLOCAL = &Show{&ShowBasic{Full: yyDollar[2].booleanUnion(), Command: Column, Tbl: yyDollar[5].tableName, DbName: yyDollar[6].identifierCS, Filter: yyDollar[7].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 800: + case 802: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4423 +//line sql.y:4435 { yyLOCAL = &Show{&ShowBasic{Command: Database, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 801: + case 803: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4427 +//line sql.y:4439 { yyLOCAL = &Show{&ShowBasic{Command: Database, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 802: + case 804: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4431 +//line sql.y:4443 { yyLOCAL = &Show{&ShowBasic{Command: Keyspace, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 803: + case 805: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4435 +//line sql.y:4447 { yyLOCAL = &Show{&ShowBasic{Command: Keyspace, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 804: + case 806: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4439 +//line sql.y:4451 { yyLOCAL = &Show{&ShowBasic{Command: Function, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 805: + case 807: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4443 +//line sql.y:4455 { yyLOCAL = &Show{&ShowBasic{Command: Index, Tbl: yyDollar[5].tableName, DbName: yyDollar[6].identifierCS, Filter: yyDollar[7].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 806: + case 808: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4447 +//line sql.y:4459 { yyLOCAL = &Show{&ShowBasic{Command: OpenTable, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 807: + case 809: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4451 +//line sql.y:4463 { yyLOCAL = &Show{&ShowBasic{Command: Privilege}} } yyVAL.union = yyLOCAL - case 808: + case 810: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4455 +//line sql.y:4467 { yyLOCAL = &Show{&ShowBasic{Command: Procedure, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 809: + case 811: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4459 +//line sql.y:4471 { yyLOCAL = &Show{&ShowBasic{Command: StatusSession, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 810: + case 812: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4463 +//line sql.y:4475 { yyLOCAL = &Show{&ShowBasic{Command: StatusGlobal, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 811: + case 813: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4467 +//line sql.y:4479 { yyLOCAL = &Show{&ShowBasic{Command: VariableSession, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 812: + case 814: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4471 +//line sql.y:4483 { yyLOCAL = &Show{&ShowBasic{Command: VariableGlobal, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 813: + case 815: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4475 +//line sql.y:4487 { yyLOCAL = &Show{&ShowBasic{Command: TableStatus, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 814: + case 816: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4479 +//line sql.y:4491 { yyLOCAL = &Show{&ShowBasic{Command: Table, Full: yyDollar[2].booleanUnion(), DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 815: + case 817: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4483 +//line sql.y:4495 { yyLOCAL = &Show{&ShowBasic{Command: Trigger, DbName: yyDollar[3].identifierCS, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 816: + case 818: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4487 +//line sql.y:4499 { yyLOCAL = &Show{&ShowCreate{Command: CreateDb, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 817: + case 819: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4491 +//line sql.y:4503 { yyLOCAL = &Show{&ShowCreate{Command: CreateE, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 818: + case 820: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4495 +//line sql.y:4507 { yyLOCAL = &Show{&ShowCreate{Command: CreateF, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 819: + case 821: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4499 +//line sql.y:4511 { yyLOCAL = &Show{&ShowCreate{Command: CreateProc, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 820: + case 822: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4503 +//line sql.y:4515 { yyLOCAL = &Show{&ShowCreate{Command: CreateTbl, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 821: + case 823: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4507 +//line sql.y:4519 { yyLOCAL = &Show{&ShowCreate{Command: CreateTr, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 822: + case 824: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4511 +//line sql.y:4523 { yyLOCAL = &Show{&ShowCreate{Command: CreateV, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 823: + case 825: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4515 +//line sql.y:4527 { yyLOCAL = &Show{&ShowBasic{Command: Engines}} } yyVAL.union = yyLOCAL - case 824: + case 826: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4519 +//line sql.y:4531 { yyLOCAL = &Show{&ShowBasic{Command: Plugins}} } yyVAL.union = yyLOCAL - case 825: + case 827: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4523 +//line sql.y:4535 { yyLOCAL = &Show{&ShowBasic{Command: GtidExecGlobal, DbName: yyDollar[4].identifierCS}} } yyVAL.union = yyLOCAL - case 826: + case 828: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4527 +//line sql.y:4539 { yyLOCAL = &Show{&ShowBasic{Command: VGtidExecGlobal, DbName: yyDollar[4].identifierCS}} } yyVAL.union = yyLOCAL - case 827: + case 829: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4531 +//line sql.y:4543 { yyLOCAL = &Show{&ShowBasic{Command: VitessVariables, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 828: + case 830: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4535 +//line sql.y:4547 { yyLOCAL = &Show{&ShowBasic{Command: VitessMigrations, Filter: yyDollar[4].showFilterUnion(), DbName: yyDollar[3].identifierCS}} } yyVAL.union = yyLOCAL - case 829: + case 831: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4539 +//line sql.y:4551 { yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 830: + case 832: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4543 +//line sql.y:4555 { yyLOCAL = &ShowThrottledApps{} } yyVAL.union = yyLOCAL - case 831: + case 833: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4547 +//line sql.y:4559 { yyLOCAL = &Show{&ShowBasic{Command: VitessReplicationStatus, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 832: + case 834: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4551 +//line sql.y:4563 { yyLOCAL = &ShowThrottlerStatus{} } yyVAL.union = yyLOCAL - case 833: + case 835: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4555 +//line sql.y:4567 { yyLOCAL = &Show{&ShowBasic{Command: VschemaTables}} } yyVAL.union = yyLOCAL - case 834: + case 836: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4559 +//line sql.y:4571 { yyLOCAL = &Show{&ShowBasic{Command: VschemaKeyspaces}} } yyVAL.union = yyLOCAL - case 835: + case 837: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4563 +//line sql.y:4575 { yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes}} } yyVAL.union = yyLOCAL - case 836: + case 838: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4567 +//line sql.y:4579 { yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes, Tbl: yyDollar[5].tableName}} } yyVAL.union = yyLOCAL - case 837: + case 839: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4571 +//line sql.y:4583 { yyLOCAL = &Show{&ShowBasic{Command: Warnings}} } yyVAL.union = yyLOCAL - case 838: + case 840: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4575 +//line sql.y:4587 { yyLOCAL = &Show{&ShowBasic{Command: VitessShards, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 839: + case 841: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4579 +//line sql.y:4591 { yyLOCAL = &Show{&ShowBasic{Command: VitessTablets, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 840: + case 842: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4583 +//line sql.y:4595 { yyLOCAL = &Show{&ShowBasic{Command: VitessTarget}} } yyVAL.union = yyLOCAL - case 841: + case 843: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4590 +//line sql.y:4602 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].identifierCI.String())}} } yyVAL.union = yyLOCAL - case 842: + case 844: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4594 +//line sql.y:4606 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL - case 843: + case 845: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4598 +//line sql.y:4610 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String()}} } yyVAL.union = yyLOCAL - case 844: + case 846: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4602 +//line sql.y:4614 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL - case 845: + case 847: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4606 +//line sql.y:4618 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}} } yyVAL.union = yyLOCAL - case 846: + case 848: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4610 +//line sql.y:4622 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}} } yyVAL.union = yyLOCAL - case 847: + case 849: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4614 +//line sql.y:4626 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}} } yyVAL.union = yyLOCAL - case 848: + case 850: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4618 +//line sql.y:4630 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL - case 849: + case 851: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4622 +//line sql.y:4634 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}} } yyVAL.union = yyLOCAL - case 850: + case 852: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4626 +//line sql.y:4638 { yyLOCAL = &Show{&ShowTransactionStatus{TransactionID: string(yyDollar[5].str)}} } yyVAL.union = yyLOCAL - case 851: + case 853: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4630 +//line sql.y:4642 { yyLOCAL = &Show{&ShowTransactionStatus{}} } yyVAL.union = yyLOCAL - case 852: + case 854: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4634 +//line sql.y:4646 { yyLOCAL = &Show{&ShowTransactionStatus{Keyspace: yyDollar[5].identifierCS.String()}} } yyVAL.union = yyLOCAL - case 853: + case 855: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4639 +//line sql.y:4651 { } - case 854: + case 856: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4641 +//line sql.y:4653 { } - case 855: + case 857: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4645 +//line sql.y:4657 { yyVAL.str = "" } - case 856: + case 858: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4649 +//line sql.y:4661 { yyVAL.str = "extended " } - case 857: + case 859: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4655 +//line sql.y:4667 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 858: + case 860: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4659 +//line sql.y:4671 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 859: + case 861: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4665 +//line sql.y:4677 { yyVAL.str = string(yyDollar[1].str) } - case 860: + case 862: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4669 +//line sql.y:4681 { yyVAL.str = string(yyDollar[1].str) } - case 861: + case 863: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4675 +//line sql.y:4687 { yyVAL.identifierCS = NewIdentifierCS("") } - case 862: + case 864: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4679 +//line sql.y:4691 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 863: + case 865: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4683 +//line sql.y:4695 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 864: + case 866: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4689 +//line sql.y:4701 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 865: + case 867: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4693 +//line sql.y:4705 { yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 866: + case 868: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4697 +//line sql.y:4709 { yyLOCAL = &ShowFilter{Filter: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 867: + case 869: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4703 +//line sql.y:4715 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 868: + case 870: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4707 +//line sql.y:4719 { yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 869: + case 871: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4713 +//line sql.y:4725 { yyVAL.empty = struct{}{} } - case 870: + case 872: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4717 +//line sql.y:4729 { yyVAL.empty = struct{}{} } - case 871: + case 873: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4721 +//line sql.y:4733 { yyVAL.empty = struct{}{} } - case 872: + case 874: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4727 +//line sql.y:4739 { yyVAL.str = string(yyDollar[1].str) } - case 873: + case 875: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4731 +//line sql.y:4743 { yyVAL.str = string(yyDollar[1].str) } - case 874: + case 876: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4737 +//line sql.y:4749 { yyLOCAL = &Use{DBName: yyDollar[2].identifierCS} } yyVAL.union = yyLOCAL - case 875: + case 877: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4741 +//line sql.y:4753 { yyLOCAL = &Use{DBName: IdentifierCS{v: ""}} } yyVAL.union = yyLOCAL - case 876: + case 878: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4745 +//line sql.y:4757 { yyLOCAL = &Use{DBName: NewIdentifierCS(yyDollar[2].identifierCS.String() + "@" + string(yyDollar[3].str))} } yyVAL.union = yyLOCAL - case 877: + case 879: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4752 +//line sql.y:4764 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 878: + case 880: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4756 +//line sql.y:4768 { yyVAL.identifierCS = NewIdentifierCS("@" + string(yyDollar[1].str)) } - case 879: + case 881: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4760 +//line sql.y:4772 { yyVAL.identifierCS = NewIdentifierCS("@@" + string(yyDollar[1].str)) } - case 880: + case 882: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4764 +//line sql.y:4776 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 881: + case 883: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4771 +//line sql.y:4783 { - yyLOCAL = &Begin{} + yyLOCAL = &Begin{Type: BeginStmt} } yyVAL.union = yyLOCAL - case 882: + case 884: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4775 +//line sql.y:4787 { - yyLOCAL = &Begin{TxAccessModes: yyDollar[3].txAccessModesUnion()} + yyLOCAL = &Begin{Type: StartTransactionStmt, TxAccessModes: yyDollar[3].txAccessModesUnion()} } yyVAL.union = yyLOCAL - case 883: + case 885: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4780 +//line sql.y:4792 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 884: + case 886: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4784 +//line sql.y:4796 { yyLOCAL = yyDollar[1].txAccessModesUnion() } yyVAL.union = yyLOCAL - case 885: + case 887: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4790 +//line sql.y:4802 { yyLOCAL = []TxAccessMode{yyDollar[1].txAccessModeUnion()} } yyVAL.union = yyLOCAL - case 886: + case 888: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4794 +//line sql.y:4806 { yySLICE := (*[]TxAccessMode)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].txAccessModeUnion()) } - case 887: + case 889: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4800 +//line sql.y:4812 { yyLOCAL = WithConsistentSnapshot } yyVAL.union = yyLOCAL - case 888: + case 890: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4804 +//line sql.y:4816 { yyLOCAL = ReadWrite } yyVAL.union = yyLOCAL - case 889: + case 891: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4808 +//line sql.y:4820 { yyLOCAL = ReadOnly } yyVAL.union = yyLOCAL - case 890: + case 892: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4815 +//line sql.y:4827 { yyLOCAL = &Commit{} } yyVAL.union = yyLOCAL - case 891: + case 893: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4821 +//line sql.y:4833 { yyLOCAL = &Rollback{} } yyVAL.union = yyLOCAL - case 892: + case 894: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4825 +//line sql.y:4837 { yyLOCAL = &SRollback{Name: yyDollar[5].identifierCI} } yyVAL.union = yyLOCAL - case 893: + case 895: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4830 +//line sql.y:4842 { yyVAL.empty = struct{}{} } - case 894: + case 896: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4832 +//line sql.y:4844 { yyVAL.empty = struct{}{} } - case 895: + case 897: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4835 +//line sql.y:4847 { yyVAL.empty = struct{}{} } - case 896: + case 898: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4837 +//line sql.y:4849 { yyVAL.empty = struct{}{} } - case 897: + case 899: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4841 +//line sql.y:4853 { yyLOCAL = &Savepoint{Name: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 898: + case 900: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4847 +//line sql.y:4859 { yyLOCAL = &Release{Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 899: + case 901: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4852 +//line sql.y:4864 { yyLOCAL = EmptyType } yyVAL.union = yyLOCAL - case 900: + case 902: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4856 +//line sql.y:4868 { yyLOCAL = JSONType } yyVAL.union = yyLOCAL - case 901: + case 903: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4860 +//line sql.y:4872 { yyLOCAL = TreeType } yyVAL.union = yyLOCAL - case 902: + case 904: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4864 +//line sql.y:4876 { yyLOCAL = TraditionalType } yyVAL.union = yyLOCAL - case 903: + case 905: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4868 +//line sql.y:4880 { yyLOCAL = AnalyzeType } yyVAL.union = yyLOCAL - case 904: + case 906: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4873 +//line sql.y:4885 { yyLOCAL = PlanVExplainType } yyVAL.union = yyLOCAL - case 905: + case 907: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4877 +//line sql.y:4889 { yyLOCAL = PlanVExplainType } yyVAL.union = yyLOCAL - case 906: + case 908: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4881 +//line sql.y:4893 { yyLOCAL = AllVExplainType } yyVAL.union = yyLOCAL - case 907: + case 909: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4885 +//line sql.y:4897 { yyLOCAL = QueriesVExplainType } yyVAL.union = yyLOCAL - case 908: + case 910: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4889 +//line sql.y:4901 { yyLOCAL = TraceVExplainType } yyVAL.union = yyLOCAL - case 909: + case 911: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4893 +//line sql.y:4905 { yyLOCAL = KeysVExplainType } yyVAL.union = yyLOCAL - case 910: + case 912: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4899 +//line sql.y:4911 { yyVAL.str = yyDollar[1].str } - case 911: + case 913: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4903 +//line sql.y:4915 { yyVAL.str = yyDollar[1].str } - case 912: + case 914: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4907 +//line sql.y:4919 { yyVAL.str = yyDollar[1].str } - case 913: + case 915: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4913 +//line sql.y:4925 { yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL - case 914: + case 916: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4917 +//line sql.y:4929 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 915: + case 917: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4921 +//line sql.y:4933 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 916: + case 918: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4925 +//line sql.y:4937 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 917: + case 919: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4930 +//line sql.y:4942 { yyVAL.str = "" } - case 918: + case 920: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4934 +//line sql.y:4946 { yyVAL.str = yyDollar[1].identifierCI.val } - case 919: + case 921: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4938 +//line sql.y:4950 { yyVAL.str = encodeSQLString(yyDollar[1].str) } - case 920: + case 922: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4944 +//line sql.y:4956 { yyLOCAL = &ExplainTab{Table: yyDollar[3].tableName, Wild: yyDollar[4].str} } yyVAL.union = yyLOCAL - case 921: + case 923: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4948 +//line sql.y:4960 { yyLOCAL = &ExplainStmt{Type: yyDollar[3].explainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()} } yyVAL.union = yyLOCAL - case 922: + case 924: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4954 +//line sql.y:4966 { yyLOCAL = &VExplainStmt{Type: yyDollar[3].vexplainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()} } yyVAL.union = yyLOCAL - case 923: + case 925: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4960 +//line sql.y:4972 { yyLOCAL = &OtherAdmin{} } yyVAL.union = yyLOCAL - case 924: + case 926: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4964 +//line sql.y:4976 { yyLOCAL = &OtherAdmin{} } yyVAL.union = yyLOCAL - case 925: + case 927: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4970 +//line sql.y:4982 { yyLOCAL = &LockTables{Tables: yyDollar[3].tableAndLockTypesUnion()} } yyVAL.union = yyLOCAL - case 926: + case 928: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableAndLockTypes -//line sql.y:4976 +//line sql.y:4988 { yyLOCAL = TableAndLockTypes{yyDollar[1].tableAndLockTypeUnion()} } yyVAL.union = yyLOCAL - case 927: + case 929: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4980 +//line sql.y:4992 { yySLICE := (*TableAndLockTypes)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableAndLockTypeUnion()) } - case 928: + case 930: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *TableAndLockType -//line sql.y:4986 +//line sql.y:4998 { yyLOCAL = &TableAndLockType{Table: yyDollar[1].aliasedTableNameUnion(), Lock: yyDollar[2].lockTypeUnion()} } yyVAL.union = yyLOCAL - case 929: + case 931: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LockType -//line sql.y:4992 +//line sql.y:5004 { yyLOCAL = Read } yyVAL.union = yyLOCAL - case 930: + case 932: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL LockType -//line sql.y:4996 +//line sql.y:5008 { yyLOCAL = ReadLocal } yyVAL.union = yyLOCAL - case 931: + case 933: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LockType -//line sql.y:5000 +//line sql.y:5012 { yyLOCAL = Write } yyVAL.union = yyLOCAL - case 932: + case 934: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL LockType -//line sql.y:5004 +//line sql.y:5016 { yyLOCAL = LowPriorityWrite } yyVAL.union = yyLOCAL - case 933: + case 935: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:5010 +//line sql.y:5022 { yyLOCAL = &UnlockTables{} } yyVAL.union = yyLOCAL - case 934: + case 936: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:5016 +//line sql.y:5028 { yyLOCAL = &RevertMigration{Comments: Comments(yyDollar[2].strs).Parsed(), UUID: string(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 935: + case 937: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:5022 +//line sql.y:5034 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), FlushOptions: yyDollar[3].strs} } yyVAL.union = yyLOCAL - case 936: + case 938: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:5026 +//line sql.y:5038 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion()} } yyVAL.union = yyLOCAL - case 937: + case 939: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:5030 +//line sql.y:5042 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), WithLock: true} } yyVAL.union = yyLOCAL - case 938: + case 940: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:5034 +//line sql.y:5046 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion()} } yyVAL.union = yyLOCAL - case 939: + case 941: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:5038 +//line sql.y:5050 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), WithLock: true} } yyVAL.union = yyLOCAL - case 940: + case 942: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:5042 +//line sql.y:5054 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), ForExport: true} } yyVAL.union = yyLOCAL - case 941: + case 943: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5048 +//line sql.y:5060 { yyVAL.strs = []string{yyDollar[1].str} } - case 942: + case 944: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5052 +//line sql.y:5064 { yyVAL.strs = append(yyDollar[1].strs, yyDollar[3].str) } - case 943: + case 945: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5058 +//line sql.y:5070 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 944: + case 946: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5062 +//line sql.y:5074 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 945: + case 947: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5066 +//line sql.y:5078 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 946: + case 948: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5070 +//line sql.y:5082 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 947: + case 949: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5074 +//line sql.y:5086 { yyVAL.str = string(yyDollar[1].str) } - case 948: + case 950: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5078 +//line sql.y:5090 { yyVAL.str = string(yyDollar[1].str) } - case 949: + case 951: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5082 +//line sql.y:5094 { yyVAL.str = string(yyDollar[1].str) } - case 950: + case 952: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5086 +//line sql.y:5098 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) + yyDollar[3].str } - case 951: + case 953: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5090 +//line sql.y:5102 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 952: + case 954: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5094 +//line sql.y:5106 { yyVAL.str = string(yyDollar[1].str) } - case 953: + case 955: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5098 +//line sql.y:5110 { yyVAL.str = string(yyDollar[1].str) } - case 954: + case 956: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5102 +//line sql.y:5114 { yyVAL.str = string(yyDollar[1].str) } - case 955: + case 957: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:5107 +//line sql.y:5119 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 956: + case 958: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:5111 +//line sql.y:5123 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 957: + case 959: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:5115 +//line sql.y:5127 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 958: + case 960: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5120 +//line sql.y:5132 { yyVAL.str = "" } - case 959: + case 961: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5124 +//line sql.y:5136 { yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String() } - case 960: + case 962: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5129 +//line sql.y:5141 { setAllowComments(yylex, true) } - case 961: + case 963: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5133 +//line sql.y:5145 { yyVAL.strs = yyDollar[2].strs setAllowComments(yylex, false) } - case 962: + case 964: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5139 +//line sql.y:5151 { yyVAL.strs = nil } - case 963: + case 965: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5143 +//line sql.y:5155 { yyVAL.strs = append(yyDollar[1].strs, yyDollar[2].str) } - case 964: + case 966: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:5149 +//line sql.y:5161 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 965: + case 967: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:5153 +//line sql.y:5165 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 966: + case 968: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:5157 +//line sql.y:5169 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 967: + case 969: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5162 +//line sql.y:5174 { yyVAL.str = "" } - case 968: + case 970: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5166 +//line sql.y:5178 { yyVAL.str = SQLNoCacheStr } - case 969: + case 971: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5170 +//line sql.y:5182 { yyVAL.str = SQLCacheStr } - case 970: + case 972: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:5175 +//line sql.y:5187 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 971: + case 973: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:5179 +//line sql.y:5191 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 972: + case 974: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:5183 +//line sql.y:5195 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 973: + case 975: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:5189 +//line sql.y:5201 { yyLOCAL = &PrepareStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Statement: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 974: + case 976: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:5193 +//line sql.y:5205 { yyLOCAL = &PrepareStmt{ Name: yyDollar[3].identifierCI, @@ -18387,600 +18127,600 @@ yydefault: } } yyVAL.union = yyLOCAL - case 975: + case 977: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:5203 +//line sql.y:5215 { yyLOCAL = &ExecuteStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Arguments: yyDollar[4].variablesUnion()} } yyVAL.union = yyLOCAL - case 976: + case 978: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*Variable -//line sql.y:5208 +//line sql.y:5220 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 977: + case 979: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []*Variable -//line sql.y:5212 +//line sql.y:5224 { yyLOCAL = yyDollar[2].variablesUnion() } yyVAL.union = yyLOCAL - case 978: + case 980: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:5218 +//line sql.y:5230 { yyLOCAL = &DeallocateStmt{Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI} } yyVAL.union = yyLOCAL - case 979: + case 981: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:5222 +//line sql.y:5234 { yyLOCAL = &DeallocateStmt{Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI} } yyVAL.union = yyLOCAL - case 980: + case 982: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5227 +//line sql.y:5239 { yyVAL.strs = nil } - case 981: + case 983: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5231 +//line sql.y:5243 { yyVAL.strs = yyDollar[1].strs } - case 982: + case 984: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5237 +//line sql.y:5249 { yyVAL.strs = []string{yyDollar[1].str} } - case 983: + case 985: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5241 +//line sql.y:5253 { yyVAL.strs = append(yyDollar[1].strs, yyDollar[2].str) } - case 984: + case 986: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5247 +//line sql.y:5259 { yyVAL.str = SQLNoCacheStr } - case 985: + case 987: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5251 +//line sql.y:5263 { yyVAL.str = SQLCacheStr } - case 986: + case 988: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5255 +//line sql.y:5267 { yyVAL.str = DistinctStr } - case 987: + case 989: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5259 +//line sql.y:5271 { yyVAL.str = DistinctStr } - case 988: + case 990: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5263 +//line sql.y:5275 { yyVAL.str = HighPriorityStr } - case 989: + case 991: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5267 +//line sql.y:5279 { yyVAL.str = StraightJoinHint } - case 990: + case 992: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5271 +//line sql.y:5283 { yyVAL.str = SQLBufferResultStr } - case 991: + case 993: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5275 +//line sql.y:5287 { yyVAL.str = SQLSmallResultStr } - case 992: + case 994: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5279 +//line sql.y:5291 { yyVAL.str = SQLBigResultStr } - case 993: + case 995: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5283 +//line sql.y:5295 { yyVAL.str = SQLCalcFoundRowsStr } - case 994: + case 996: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5287 +//line sql.y:5299 { yyVAL.str = AllStr // These are not picked up by NewSelect, and so ALL will be dropped. But this is OK, since it's redundant anyway } - case 995: + case 997: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *SelectExprs -//line sql.y:5293 +//line sql.y:5305 { yyLOCAL = &SelectExprs{Exprs: []SelectExpr{yyDollar[1].selectExprUnion()}} } yyVAL.union = yyLOCAL - case 996: + case 998: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SelectExprs -//line sql.y:5297 +//line sql.y:5309 { res := yyDollar[1].selectExprsUnion() res.Exprs = append(res.Exprs, yyDollar[3].selectExprUnion()) yyLOCAL = res } yyVAL.union = yyLOCAL - case 997: + case 999: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:5305 +//line sql.y:5317 { yyLOCAL = &StarExpr{} } yyVAL.union = yyLOCAL - case 998: + case 1000: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:5309 +//line sql.y:5321 { yyLOCAL = &AliasedExpr{Expr: yyDollar[1].exprUnion(), As: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 999: + case 1001: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:5313 +//line sql.y:5325 { yyLOCAL = &StarExpr{TableName: TableName{Name: yyDollar[1].identifierCS}} } yyVAL.union = yyLOCAL - case 1000: + case 1002: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:5317 +//line sql.y:5329 { yyLOCAL = &StarExpr{TableName: TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}} } yyVAL.union = yyLOCAL - case 1001: + case 1003: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5322 +//line sql.y:5334 { yyVAL.identifierCI = IdentifierCI{} } - case 1002: + case 1004: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5326 +//line sql.y:5338 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 1003: + case 1005: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5330 +//line sql.y:5342 { yyVAL.identifierCI = yyDollar[2].identifierCI } - case 1005: + case 1007: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5337 +//line sql.y:5349 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 1006: + case 1008: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5342 +//line sql.y:5354 { yyLOCAL = TableExprs{&AliasedTableExpr{Expr: TableName{Name: NewIdentifierCS("dual")}}} } yyVAL.union = yyLOCAL - case 1007: + case 1009: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5346 +//line sql.y:5358 { yyLOCAL = yyDollar[1].tableExprsUnion() } yyVAL.union = yyLOCAL - case 1008: + case 1010: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5352 +//line sql.y:5364 { yyLOCAL = yyDollar[2].tableExprsUnion() } yyVAL.union = yyLOCAL - case 1009: + case 1011: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5358 +//line sql.y:5370 { yyLOCAL = TableExprs{yyDollar[1].tableExprUnion()} } yyVAL.union = yyLOCAL - case 1010: + case 1012: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5362 +//line sql.y:5374 { yySLICE := (*TableExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableExprUnion()) } - case 1013: + case 1015: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5372 +//line sql.y:5384 { yyLOCAL = yyDollar[1].aliasedTableNameUnion() } yyVAL.union = yyLOCAL - case 1014: + case 1016: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5376 +//line sql.y:5388 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].derivedTableUnion(), As: yyDollar[3].identifierCS, Columns: yyDollar[4].columnsUnion()} } yyVAL.union = yyLOCAL - case 1015: + case 1017: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5380 +//line sql.y:5392 { yyLOCAL = &ParenTableExpr{Exprs: yyDollar[2].tableExprsUnion()} } yyVAL.union = yyLOCAL - case 1016: + case 1018: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5384 +//line sql.y:5396 { yyLOCAL = yyDollar[1].tableExprUnion() } yyVAL.union = yyLOCAL - case 1017: + case 1019: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *DerivedTable -//line sql.y:5390 +//line sql.y:5402 { yyLOCAL = &DerivedTable{Lateral: false, Select: yyDollar[1].tableStmtUnion()} } yyVAL.union = yyLOCAL - case 1018: + case 1020: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *DerivedTable -//line sql.y:5394 +//line sql.y:5406 { yyLOCAL = &DerivedTable{Lateral: true, Select: yyDollar[2].tableStmtUnion()} } yyVAL.union = yyLOCAL - case 1019: + case 1021: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *AliasedTableExpr -//line sql.y:5400 +//line sql.y:5412 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].tableName, As: yyDollar[2].identifierCS, Hints: yyDollar[3].indexHintsUnion()} } yyVAL.union = yyLOCAL - case 1020: + case 1022: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *AliasedTableExpr -//line sql.y:5404 +//line sql.y:5416 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].tableName, Partitions: yyDollar[4].partitionsUnion(), As: yyDollar[6].identifierCS, Hints: yyDollar[7].indexHintsUnion()} } yyVAL.union = yyLOCAL - case 1021: + case 1023: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Columns -//line sql.y:5409 +//line sql.y:5421 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1022: + case 1024: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Columns -//line sql.y:5413 +//line sql.y:5425 { yyLOCAL = yyDollar[2].columnsUnion() } yyVAL.union = yyLOCAL - case 1023: + case 1025: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Columns -//line sql.y:5418 +//line sql.y:5430 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1024: + case 1026: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5422 +//line sql.y:5434 { yyLOCAL = yyDollar[1].columnsUnion() } yyVAL.union = yyLOCAL - case 1025: + case 1027: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5428 +//line sql.y:5440 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 1026: + case 1028: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5432 +//line sql.y:5444 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 1027: + case 1029: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*Variable -//line sql.y:5438 +//line sql.y:5450 { yyLOCAL = []*Variable{yyDollar[1].variableUnion()} } yyVAL.union = yyLOCAL - case 1028: + case 1030: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5442 +//line sql.y:5454 { yySLICE := (*[]*Variable)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].variableUnion()) } - case 1029: + case 1031: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5448 +//line sql.y:5460 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 1030: + case 1032: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5452 +//line sql.y:5464 { yyLOCAL = Columns{NewIdentifierCI(string(yyDollar[1].str))} } yyVAL.union = yyLOCAL - case 1031: + case 1033: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5456 +//line sql.y:5468 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 1032: + case 1034: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5460 +//line sql.y:5472 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, NewIdentifierCI(string(yyDollar[3].str))) } - case 1033: + case 1035: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Partitions -//line sql.y:5466 +//line sql.y:5478 { yyLOCAL = Partitions{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 1034: + case 1036: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5470 +//line sql.y:5482 { yySLICE := (*Partitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 1035: + case 1037: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5483 +//line sql.y:5495 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 1036: + case 1038: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5487 +//line sql.y:5499 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 1037: + case 1039: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5491 +//line sql.y:5503 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 1038: + case 1040: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5495 +//line sql.y:5507 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion()} } yyVAL.union = yyLOCAL - case 1039: + case 1041: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5501 +//line sql.y:5513 { yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()} } - case 1040: + case 1042: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:5503 +//line sql.y:5515 { yyVAL.joinCondition = &JoinCondition{Using: yyDollar[3].columnsUnion()} } - case 1041: + case 1043: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5507 +//line sql.y:5519 { yyVAL.joinCondition = &JoinCondition{} } - case 1042: + case 1044: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5509 +//line sql.y:5521 { yyVAL.joinCondition = yyDollar[1].joinCondition } - case 1043: + case 1045: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5513 +//line sql.y:5525 { yyVAL.joinCondition = &JoinCondition{} } - case 1044: + case 1046: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5515 +//line sql.y:5527 { yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()} } - case 1045: + case 1047: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5518 +//line sql.y:5530 { yyVAL.empty = struct{}{} } - case 1046: + case 1048: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5520 +//line sql.y:5532 { yyVAL.empty = struct{}{} } - case 1047: + case 1049: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5523 +//line sql.y:5535 { yyVAL.identifierCS = NewIdentifierCS("") } - case 1048: + case 1050: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5527 +//line sql.y:5539 { yyVAL.identifierCS = yyDollar[1].identifierCS } - case 1049: + case 1051: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5531 +//line sql.y:5543 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 1051: + case 1053: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5538 +//line sql.y:5550 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1052: + case 1054: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL JoinType -//line sql.y:5544 +//line sql.y:5556 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 1053: + case 1055: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5548 +//line sql.y:5560 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 1054: + case 1056: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5552 +//line sql.y:5564 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 1055: + case 1057: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL JoinType -//line sql.y:5558 +//line sql.y:5570 { yyLOCAL = StraightJoinType } yyVAL.union = yyLOCAL - case 1056: + case 1058: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5564 +//line sql.y:5576 { yyLOCAL = LeftJoinType } yyVAL.union = yyLOCAL - case 1057: + case 1059: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL JoinType -//line sql.y:5568 +//line sql.y:5580 { yyLOCAL = LeftJoinType } yyVAL.union = yyLOCAL - case 1058: + case 1060: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5572 +//line sql.y:5584 { yyLOCAL = RightJoinType } yyVAL.union = yyLOCAL - case 1059: + case 1061: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL JoinType -//line sql.y:5576 +//line sql.y:5588 { yyLOCAL = RightJoinType } yyVAL.union = yyLOCAL - case 1060: + case 1062: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5582 +//line sql.y:5594 { yyLOCAL = NaturalJoinType } yyVAL.union = yyLOCAL - case 1061: + case 1063: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5586 +//line sql.y:5598 { if yyDollar[2].joinTypeUnion() == LeftJoinType { yyLOCAL = NaturalLeftJoinType @@ -18989,667 +18729,667 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1062: + case 1064: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5596 +//line sql.y:5608 { yyVAL.tableName = yyDollar[2].tableName } - case 1063: + case 1065: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5600 +//line sql.y:5612 { yyVAL.tableName = yyDollar[1].tableName } - case 1064: + case 1066: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5606 +//line sql.y:5618 { yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS} } - case 1065: + case 1067: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5610 +//line sql.y:5622 { yyVAL.tableName = TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS} } - case 1066: + case 1068: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5616 +//line sql.y:5628 { yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS} } - case 1067: + case 1069: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5621 +//line sql.y:5633 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1068: + case 1070: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5625 +//line sql.y:5637 { yyLOCAL = yyDollar[1].indexHintsUnion() } yyVAL.union = yyLOCAL - case 1069: + case 1071: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5631 +//line sql.y:5643 { yyLOCAL = IndexHints{yyDollar[1].indexHintUnion()} } yyVAL.union = yyLOCAL - case 1070: + case 1072: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5635 +//line sql.y:5647 { yySLICE := (*IndexHints)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].indexHintUnion()) } - case 1071: + case 1073: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5641 +//line sql.y:5653 { yyLOCAL = &IndexHint{Type: UseOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 1072: + case 1074: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5645 +//line sql.y:5657 { yyLOCAL = &IndexHint{Type: UseOp, ForType: yyDollar[3].indexHintForTypeUnion()} } yyVAL.union = yyLOCAL - case 1073: + case 1075: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5649 +//line sql.y:5661 { yyLOCAL = &IndexHint{Type: IgnoreOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 1074: + case 1076: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5653 +//line sql.y:5665 { yyLOCAL = &IndexHint{Type: ForceOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 1075: + case 1077: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5657 +//line sql.y:5669 { yyLOCAL = &IndexHint{Type: UseVindexOp, Indexes: yyDollar[4].columnsUnion()} } yyVAL.union = yyLOCAL - case 1076: + case 1078: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5661 +//line sql.y:5673 { yyLOCAL = &IndexHint{Type: IgnoreVindexOp, Indexes: yyDollar[4].columnsUnion()} } yyVAL.union = yyLOCAL - case 1077: + case 1079: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5666 +//line sql.y:5678 { yyLOCAL = NoForType } yyVAL.union = yyLOCAL - case 1078: + case 1080: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5670 +//line sql.y:5682 { yyLOCAL = JoinForType } yyVAL.union = yyLOCAL - case 1079: + case 1081: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5674 +//line sql.y:5686 { yyLOCAL = OrderByForType } yyVAL.union = yyLOCAL - case 1080: + case 1082: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5678 +//line sql.y:5690 { yyLOCAL = GroupByForType } yyVAL.union = yyLOCAL - case 1081: + case 1083: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:5684 +//line sql.y:5696 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1082: + case 1084: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5688 +//line sql.y:5700 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1083: + case 1085: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5695 +//line sql.y:5707 { yyLOCAL = &OrExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1084: + case 1086: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5699 +//line sql.y:5711 { yyLOCAL = &XorExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1085: + case 1087: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5703 +//line sql.y:5715 { yyLOCAL = &AndExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1086: + case 1088: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5707 +//line sql.y:5719 { yyLOCAL = &NotExpr{Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1087: + case 1089: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5711 +//line sql.y:5723 { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].isExprOperatorUnion()} } yyVAL.union = yyLOCAL - case 1088: + case 1090: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5715 +//line sql.y:5727 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1089: + case 1091: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5719 +//line sql.y:5731 { yyLOCAL = &AssignmentExpr{Left: yyDollar[1].variableUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1090: + case 1092: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5723 +//line sql.y:5735 { yyLOCAL = &MemberOfExpr{Value: yyDollar[1].exprUnion(), JSONArr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1091: + case 1093: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5729 +//line sql.y:5741 { } - case 1092: + case 1094: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5732 +//line sql.y:5744 { } - case 1093: + case 1095: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5737 +//line sql.y:5749 { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNullOp} } yyVAL.union = yyLOCAL - case 1094: + case 1096: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5741 +//line sql.y:5753 { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNotNullOp} } yyVAL.union = yyLOCAL - case 1095: + case 1097: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5745 +//line sql.y:5757 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1096: + case 1098: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5749 +//line sql.y:5761 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Modifier: Any, Right: yyDollar[4].subqueryUnion()} } yyVAL.union = yyLOCAL - case 1097: + case 1099: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5753 +//line sql.y:5765 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Modifier: Any, Right: yyDollar[4].subqueryUnion()} } yyVAL.union = yyLOCAL - case 1098: + case 1100: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5757 +//line sql.y:5769 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Modifier: All, Right: yyDollar[4].subqueryUnion()} } yyVAL.union = yyLOCAL - case 1099: + case 1101: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5761 +//line sql.y:5773 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1100: + case 1102: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5767 +//line sql.y:5779 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: InOp, Right: yyDollar[3].colTupleUnion()} } yyVAL.union = yyLOCAL - case 1101: + case 1103: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5771 +//line sql.y:5783 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotInOp, Right: yyDollar[4].colTupleUnion()} } yyVAL.union = yyLOCAL - case 1102: + case 1104: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5775 +//line sql.y:5787 { yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: true, From: yyDollar[3].exprUnion(), To: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1103: + case 1105: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5779 +//line sql.y:5791 { yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: false, From: yyDollar[4].exprUnion(), To: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL - case 1104: + case 1106: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5783 +//line sql.y:5795 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1105: + case 1107: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5787 +//line sql.y:5799 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1106: + case 1108: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5791 +//line sql.y:5803 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion(), Escape: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1107: + case 1109: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5795 +//line sql.y:5807 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion(), Escape: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL - case 1108: + case 1110: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5799 +//line sql.y:5811 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: RegexpOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1109: + case 1111: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5803 +//line sql.y:5815 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotRegexpOp, Right: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1110: + case 1112: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5807 +//line sql.y:5819 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1111: + case 1113: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5813 +//line sql.y:5825 { } - case 1112: + case 1114: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5816 +//line sql.y:5828 { } - case 1113: + case 1115: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5822 +//line sql.y:5834 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitOrOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1114: + case 1116: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5826 +//line sql.y:5838 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitAndOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1115: + case 1117: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5830 +//line sql.y:5842 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftLeftOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1116: + case 1118: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5834 +//line sql.y:5846 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftRightOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1117: + case 1119: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5838 +//line sql.y:5850 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: PlusOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1118: + case 1120: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5842 +//line sql.y:5854 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MinusOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1119: + case 1121: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5846 +//line sql.y:5858 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprBinaryAdd, Date: yyDollar[1].exprUnion(), Unit: yyDollar[5].intervalTypeUnion(), Interval: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1120: + case 1122: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5850 +//line sql.y:5862 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprBinarySub, Date: yyDollar[1].exprUnion(), Unit: yyDollar[5].intervalTypeUnion(), Interval: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1121: + case 1123: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5854 +//line sql.y:5866 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MultOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1122: + case 1124: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5858 +//line sql.y:5870 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: DivOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1123: + case 1125: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5862 +//line sql.y:5874 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1124: + case 1126: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5866 +//line sql.y:5878 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: IntDivOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1125: + case 1127: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5870 +//line sql.y:5882 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1126: + case 1128: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5874 +//line sql.y:5886 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitXorOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1127: + case 1129: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5878 +//line sql.y:5890 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1128: + case 1130: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5884 +//line sql.y:5896 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1129: + case 1131: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5888 +//line sql.y:5900 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1130: + case 1132: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5892 +//line sql.y:5904 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1131: + case 1133: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5896 +//line sql.y:5908 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1132: + case 1134: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5900 +//line sql.y:5912 { yyLOCAL = &CollateExpr{Expr: yyDollar[1].exprUnion(), Collation: yyDollar[3].str} } yyVAL.union = yyLOCAL - case 1133: + case 1135: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5904 +//line sql.y:5916 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1134: + case 1136: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5908 +//line sql.y:5920 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1135: + case 1137: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5912 +//line sql.y:5924 { yyLOCAL = yyDollar[1].variableUnion() } yyVAL.union = yyLOCAL - case 1136: + case 1138: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5916 +//line sql.y:5928 { yyLOCAL = yyDollar[2].exprUnion() // TODO: do we really want to ignore unary '+' before any kind of literals? } yyVAL.union = yyLOCAL - case 1137: + case 1139: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5920 +//line sql.y:5932 { yyLOCAL = &UnaryExpr{Operator: UMinusOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1138: + case 1140: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5924 +//line sql.y:5936 { yyLOCAL = &UnaryExpr{Operator: TildaOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1139: + case 1141: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5928 +//line sql.y:5940 { yyLOCAL = &UnaryExpr{Operator: BangOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1140: + case 1142: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5932 +//line sql.y:5944 { yyLOCAL = yyDollar[1].subqueryUnion() } yyVAL.union = yyLOCAL - case 1141: + case 1143: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5936 +//line sql.y:5948 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1142: + case 1144: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5940 +//line sql.y:5952 { yyLOCAL = &ExistsExpr{Subquery: yyDollar[2].subqueryUnion()} } yyVAL.union = yyLOCAL - case 1143: + case 1145: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:5944 +//line sql.y:5956 { yyLOCAL = &MatchExpr{Columns: yyDollar[2].colNamesUnion(), Expr: yyDollar[5].exprUnion(), Option: yyDollar[6].matchExprOptionUnion()} } yyVAL.union = yyLOCAL - case 1144: + case 1146: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:5948 +//line sql.y:5960 { yyLOCAL = &CastExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion(), Array: yyDollar[6].booleanUnion()} } yyVAL.union = yyLOCAL - case 1145: + case 1147: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5952 +//line sql.y:5964 { yyLOCAL = &ConvertExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion()} } yyVAL.union = yyLOCAL - case 1146: + case 1148: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5956 +//line sql.y:5968 { yyLOCAL = &ConvertUsingExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].str} } yyVAL.union = yyLOCAL - case 1147: + case 1149: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5960 +//line sql.y:5972 { // From: https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#operator_binary // To convert a string expression to a binary string, these constructs are equivalent: @@ -19658,3218 +19398,3218 @@ yydefault: yyLOCAL = &ConvertExpr{Expr: yyDollar[2].exprUnion(), Type: &ConvertType{Type: yyDollar[1].str}} } yyVAL.union = yyLOCAL - case 1148: + case 1150: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5968 +//line sql.y:5980 { yyLOCAL = &Default{ColName: yyDollar[2].str} } yyVAL.union = yyLOCAL - case 1149: + case 1151: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5972 +//line sql.y:5984 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprBinaryAddLeft, Date: yyDollar[5].exprUnion(), Unit: yyDollar[3].intervalTypeUnion(), Interval: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1150: + case 1152: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5976 +//line sql.y:5988 { yyLOCAL = &IntervalFuncExpr{Expr: yyDollar[3].exprUnion(), Exprs: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1151: + case 1153: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5980 +//line sql.y:5992 { yyLOCAL = &JSONExtractExpr{JSONDoc: yyDollar[1].exprUnion(), PathList: []Expr{yyDollar[3].exprUnion()}} } yyVAL.union = yyLOCAL - case 1152: + case 1154: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5984 +//line sql.y:5996 { yyLOCAL = &JSONUnquoteExpr{JSONValue: &JSONExtractExpr{JSONDoc: yyDollar[1].exprUnion(), PathList: []Expr{yyDollar[3].exprUnion()}}} } yyVAL.union = yyLOCAL - case 1153: + case 1155: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5990 +//line sql.y:6002 { yyLOCAL = yyDollar[1].colNamesUnion() } yyVAL.union = yyLOCAL - case 1154: + case 1156: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5994 +//line sql.y:6006 { yyLOCAL = yyDollar[2].colNamesUnion() } yyVAL.union = yyLOCAL - case 1155: + case 1157: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColName -//line sql.y:6000 +//line sql.y:6012 { yyLOCAL = []*ColName{yyDollar[1].colNameUnion()} } yyVAL.union = yyLOCAL - case 1156: + case 1158: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:6004 +//line sql.y:6016 { yySLICE := (*[]*ColName)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].colNameUnion()) } - case 1157: + case 1159: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:6010 +//line sql.y:6022 { yyLOCAL = BothTrimType } yyVAL.union = yyLOCAL - case 1158: + case 1160: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:6014 +//line sql.y:6026 { yyLOCAL = LeadingTrimType } yyVAL.union = yyLOCAL - case 1159: + case 1161: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:6018 +//line sql.y:6030 { yyLOCAL = TrailingTrimType } yyVAL.union = yyLOCAL - case 1160: + case 1162: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FrameUnitType -//line sql.y:6024 +//line sql.y:6036 { yyLOCAL = FrameRowsType } yyVAL.union = yyLOCAL - case 1161: + case 1163: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FrameUnitType -//line sql.y:6028 +//line sql.y:6040 { yyLOCAL = FrameRangeType } yyVAL.union = yyLOCAL - case 1162: + case 1164: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:6035 +//line sql.y:6047 { yyLOCAL = CumeDistExprType } yyVAL.union = yyLOCAL - case 1163: + case 1165: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:6039 +//line sql.y:6051 { yyLOCAL = DenseRankExprType } yyVAL.union = yyLOCAL - case 1164: + case 1166: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:6043 +//line sql.y:6055 { yyLOCAL = PercentRankExprType } yyVAL.union = yyLOCAL - case 1165: + case 1167: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:6047 +//line sql.y:6059 { yyLOCAL = RankExprType } yyVAL.union = yyLOCAL - case 1166: + case 1168: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:6051 +//line sql.y:6063 { yyLOCAL = RowNumberExprType } yyVAL.union = yyLOCAL - case 1167: + case 1169: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:6057 +//line sql.y:6069 { yyLOCAL = &FramePoint{Type: CurrentRowType} } yyVAL.union = yyLOCAL - case 1168: + case 1170: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:6061 +//line sql.y:6073 { yyLOCAL = &FramePoint{Type: UnboundedPrecedingType} } yyVAL.union = yyLOCAL - case 1169: + case 1171: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:6065 +//line sql.y:6077 { yyLOCAL = &FramePoint{Type: UnboundedFollowingType} } yyVAL.union = yyLOCAL - case 1170: + case 1172: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:6069 +//line sql.y:6081 { yyLOCAL = &FramePoint{Type: ExprPrecedingType, Expr: yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1171: + case 1173: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:6073 +//line sql.y:6085 { yyLOCAL = &FramePoint{Type: ExprPrecedingType, Expr: yyDollar[2].exprUnion(), Unit: yyDollar[3].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1172: + case 1174: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:6077 +//line sql.y:6089 { yyLOCAL = &FramePoint{Type: ExprFollowingType, Expr: yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1173: + case 1175: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:6081 +//line sql.y:6093 { yyLOCAL = &FramePoint{Type: ExprFollowingType, Expr: yyDollar[2].exprUnion(), Unit: yyDollar[3].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1174: + case 1176: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:6086 +//line sql.y:6098 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1175: + case 1177: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:6090 +//line sql.y:6102 { yyLOCAL = yyDollar[1].frameClauseUnion() } yyVAL.union = yyLOCAL - case 1176: + case 1178: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:6096 +//line sql.y:6108 { yyLOCAL = &FrameClause{Unit: yyDollar[1].frameUnitTypeUnion(), Start: yyDollar[2].framePointUnion()} } yyVAL.union = yyLOCAL - case 1177: + case 1179: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:6100 +//line sql.y:6112 { yyLOCAL = &FrameClause{Unit: yyDollar[1].frameUnitTypeUnion(), Start: yyDollar[3].framePointUnion(), End: yyDollar[5].framePointUnion()} } yyVAL.union = yyLOCAL - case 1178: + case 1180: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []Expr -//line sql.y:6105 +//line sql.y:6117 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1179: + case 1181: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []Expr -//line sql.y:6109 +//line sql.y:6121 { yyLOCAL = yyDollar[3].exprsUnion() } yyVAL.union = yyLOCAL - case 1180: + case 1182: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:6114 +//line sql.y:6126 { yyVAL.identifierCI = IdentifierCI{} } - case 1181: + case 1183: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6118 +//line sql.y:6130 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 1182: + case 1184: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *WindowSpecification -//line sql.y:6124 +//line sql.y:6136 { yyLOCAL = &WindowSpecification{Name: yyDollar[1].identifierCI, PartitionClause: yyDollar[2].exprsUnion(), OrderClause: yyDollar[3].orderByUnion(), FrameClause: yyDollar[4].frameClauseUnion()} } yyVAL.union = yyLOCAL - case 1183: + case 1185: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *OverClause -//line sql.y:6130 +//line sql.y:6142 { yyLOCAL = &OverClause{WindowSpec: yyDollar[3].windowSpecificationUnion()} } yyVAL.union = yyLOCAL - case 1184: + case 1186: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *OverClause -//line sql.y:6134 +//line sql.y:6146 { yyLOCAL = &OverClause{WindowName: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 1185: + case 1187: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *OverClause -//line sql.y:6140 +//line sql.y:6152 { yyLOCAL = yyDollar[1].overClauseUnion() } yyVAL.union = yyLOCAL - case 1186: + case 1188: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *OverClause -//line sql.y:6144 +//line sql.y:6156 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1187: + case 1189: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *NullTreatmentClause -//line sql.y:6149 +//line sql.y:6161 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1189: + case 1191: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *NullTreatmentClause -//line sql.y:6156 +//line sql.y:6168 { yyLOCAL = &NullTreatmentClause{yyDollar[1].nullTreatmentTypeUnion()} } yyVAL.union = yyLOCAL - case 1190: + case 1192: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL NullTreatmentType -//line sql.y:6162 +//line sql.y:6174 { yyLOCAL = RespectNullsType } yyVAL.union = yyLOCAL - case 1191: + case 1193: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL NullTreatmentType -//line sql.y:6166 +//line sql.y:6178 { yyLOCAL = IgnoreNullsType } yyVAL.union = yyLOCAL - case 1192: + case 1194: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FirstOrLastValueExprType -//line sql.y:6172 +//line sql.y:6184 { yyLOCAL = FirstValueExprType } yyVAL.union = yyLOCAL - case 1193: + case 1195: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FirstOrLastValueExprType -//line sql.y:6176 +//line sql.y:6188 { yyLOCAL = LastValueExprType } yyVAL.union = yyLOCAL - case 1194: + case 1196: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL FromFirstLastType -//line sql.y:6182 +//line sql.y:6194 { yyLOCAL = FromFirstType } yyVAL.union = yyLOCAL - case 1195: + case 1197: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL FromFirstLastType -//line sql.y:6186 +//line sql.y:6198 { yyLOCAL = FromLastType } yyVAL.union = yyLOCAL - case 1196: + case 1198: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *FromFirstLastClause -//line sql.y:6191 +//line sql.y:6203 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1198: + case 1200: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *FromFirstLastClause -//line sql.y:6198 +//line sql.y:6210 { yyLOCAL = &FromFirstLastClause{yyDollar[1].fromFirstLastTypeUnion()} } yyVAL.union = yyLOCAL - case 1199: + case 1201: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LagLeadExprType -//line sql.y:6204 +//line sql.y:6216 { yyLOCAL = LagExprType } yyVAL.union = yyLOCAL - case 1200: + case 1202: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LagLeadExprType -//line sql.y:6208 +//line sql.y:6220 { yyLOCAL = LeadExprType } yyVAL.union = yyLOCAL - case 1201: + case 1203: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *WindowDefinition -//line sql.y:6214 +//line sql.y:6226 { yyLOCAL = &WindowDefinition{Name: yyDollar[1].identifierCI, WindowSpec: yyDollar[4].windowSpecificationUnion()} } yyVAL.union = yyLOCAL - case 1202: + case 1204: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL WindowDefinitions -//line sql.y:6220 +//line sql.y:6232 { yyLOCAL = WindowDefinitions{yyDollar[1].windowDefinitionUnion()} } yyVAL.union = yyLOCAL - case 1203: + case 1205: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:6224 +//line sql.y:6236 { yySLICE := (*WindowDefinitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].windowDefinitionUnion()) } - case 1204: + case 1206: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:6230 +//line sql.y:6242 { yyVAL.str = "" } - case 1205: + case 1207: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:6234 +//line sql.y:6246 { yyVAL.str = string(yyDollar[2].identifierCI.String()) } - case 1206: + case 1208: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL BoolVal -//line sql.y:6240 +//line sql.y:6252 { yyLOCAL = BoolVal(true) } yyVAL.union = yyLOCAL - case 1207: + case 1209: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL BoolVal -//line sql.y:6244 +//line sql.y:6256 { yyLOCAL = BoolVal(false) } yyVAL.union = yyLOCAL - case 1208: + case 1210: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:6251 +//line sql.y:6263 { yyLOCAL = IsTrueOp } yyVAL.union = yyLOCAL - case 1209: + case 1211: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:6255 +//line sql.y:6267 { yyLOCAL = IsNotTrueOp } yyVAL.union = yyLOCAL - case 1210: + case 1212: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:6259 +//line sql.y:6271 { yyLOCAL = IsFalseOp } yyVAL.union = yyLOCAL - case 1211: + case 1213: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:6263 +//line sql.y:6275 { yyLOCAL = IsNotFalseOp } yyVAL.union = yyLOCAL - case 1212: + case 1214: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6269 +//line sql.y:6281 { yyLOCAL = yyDollar[1].comparisonExprOperatorUnion() } yyVAL.union = yyLOCAL - case 1213: + case 1215: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6273 +//line sql.y:6285 { yyLOCAL = NullSafeEqualOp } yyVAL.union = yyLOCAL - case 1214: + case 1216: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6279 +//line sql.y:6291 { yyLOCAL = EqualOp } yyVAL.union = yyLOCAL - case 1215: + case 1217: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6283 +//line sql.y:6295 { yyLOCAL = LessThanOp } yyVAL.union = yyLOCAL - case 1216: + case 1218: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6287 +//line sql.y:6299 { yyLOCAL = GreaterThanOp } yyVAL.union = yyLOCAL - case 1217: + case 1219: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6291 +//line sql.y:6303 { yyLOCAL = LessEqualOp } yyVAL.union = yyLOCAL - case 1218: + case 1220: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6295 +//line sql.y:6307 { yyLOCAL = GreaterEqualOp } yyVAL.union = yyLOCAL - case 1219: + case 1221: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6299 +//line sql.y:6311 { yyLOCAL = NotEqualOp } yyVAL.union = yyLOCAL - case 1220: + case 1222: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:6305 +//line sql.y:6317 { yyLOCAL = yyDollar[1].valTupleUnion() } yyVAL.union = yyLOCAL - case 1221: + case 1223: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:6309 +//line sql.y:6321 { yyLOCAL = yyDollar[1].subqueryUnion() } yyVAL.union = yyLOCAL - case 1222: + case 1224: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:6313 +//line sql.y:6325 { yyLOCAL = ListArg(yyDollar[1].str[2:]) markBindVariable(yylex, yyDollar[1].str[2:]) } yyVAL.union = yyLOCAL - case 1223: + case 1225: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Subquery -//line sql.y:6320 +//line sql.y:6332 { yyLOCAL = &Subquery{yyDollar[1].tableStmtUnion()} } yyVAL.union = yyLOCAL - case 1224: + case 1226: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []Expr -//line sql.y:6326 +//line sql.y:6338 { yyLOCAL = []Expr{yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1225: + case 1227: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:6330 +//line sql.y:6342 { yySLICE := (*[]Expr)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].exprUnion()) } - case 1226: + case 1228: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6340 +//line sql.y:6352 { yyLOCAL = &FuncExpr{Name: yyDollar[1].identifierCI, Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1227: + case 1229: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6344 +//line sql.y:6356 { yyLOCAL = &FuncExpr{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCI, Exprs: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1228: + case 1230: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6354 +//line sql.y:6366 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("left"), Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1229: + case 1231: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6358 +//line sql.y:6370 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("right"), Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1230: + case 1232: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6362 +//line sql.y:6374 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1231: + case 1233: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6366 +//line sql.y:6378 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1232: + case 1234: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6370 +//line sql.y:6382 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1233: + case 1235: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6374 +//line sql.y:6386 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1234: + case 1236: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6378 +//line sql.y:6390 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1235: + case 1237: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6382 +//line sql.y:6394 { yyLOCAL = &CaseExpr{Expr: yyDollar[2].exprUnion(), Whens: yyDollar[3].whensUnion(), Else: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1236: + case 1238: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6386 +//line sql.y:6398 { yyLOCAL = &ValuesFuncExpr{Name: yyDollar[3].colNameUnion()} } yyVAL.union = yyLOCAL - case 1237: + case 1239: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6390 +//line sql.y:6402 { yyLOCAL = &InsertExpr{Str: yyDollar[3].exprUnion(), Pos: yyDollar[5].exprUnion(), Len: yyDollar[7].exprUnion(), NewStr: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1238: + case 1240: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6394 +//line sql.y:6406 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1239: + case 1241: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6405 +//line sql.y:6417 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("utc_date")} } yyVAL.union = yyLOCAL - case 1240: + case 1242: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6409 +//line sql.y:6421 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1241: + case 1243: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6415 +//line sql.y:6427 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("current_date")} } yyVAL.union = yyLOCAL - case 1242: + case 1244: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6419 +//line sql.y:6431 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("curdate")} } yyVAL.union = yyLOCAL - case 1243: + case 1245: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6423 +//line sql.y:6435 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("utc_time"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 1244: + case 1246: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6428 +//line sql.y:6440 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("curtime"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 1245: + case 1247: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6433 +//line sql.y:6445 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("current_time"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 1246: + case 1248: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6437 +//line sql.y:6449 { yyLOCAL = &CountStar{OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1247: + case 1249: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6441 +//line sql.y:6453 { yyLOCAL = &Count{Distinct: yyDollar[3].booleanUnion(), Args: yyDollar[4].exprsUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1248: + case 1250: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6445 +//line sql.y:6457 { yyLOCAL = &Max{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1249: + case 1251: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6449 +//line sql.y:6461 { yyLOCAL = &Min{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1250: + case 1252: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6453 +//line sql.y:6465 { yyLOCAL = &Sum{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1251: + case 1253: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6457 +//line sql.y:6469 { yyLOCAL = &Avg{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1252: + case 1254: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6461 +//line sql.y:6473 { yyLOCAL = &BitAnd{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1253: + case 1255: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6465 +//line sql.y:6477 { yyLOCAL = &BitOr{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1254: + case 1256: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6469 +//line sql.y:6481 { yyLOCAL = &BitXor{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1255: + case 1257: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6473 +//line sql.y:6485 { yyLOCAL = &Std{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1256: + case 1258: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6477 +//line sql.y:6489 { yyLOCAL = &StdDev{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1257: + case 1259: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6481 +//line sql.y:6493 { yyLOCAL = &StdPop{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1258: + case 1260: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6485 +//line sql.y:6497 { yyLOCAL = &StdSamp{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1259: + case 1261: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6489 +//line sql.y:6501 { yyLOCAL = &VarPop{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1260: + case 1262: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6493 +//line sql.y:6505 { yyLOCAL = &VarSamp{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1261: + case 1263: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6497 +//line sql.y:6509 { yyLOCAL = &Variance{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1262: + case 1264: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6501 +//line sql.y:6513 { yyLOCAL = &GroupConcatExpr{Distinct: yyDollar[3].booleanUnion(), Exprs: yyDollar[4].exprsUnion(), OrderBy: yyDollar[5].orderByUnion(), Separator: yyDollar[6].str, Limit: yyDollar[7].limitUnion()} } yyVAL.union = yyLOCAL - case 1263: + case 1265: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6505 +//line sql.y:6517 { yyLOCAL = &AnyValue{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1264: + case 1266: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6509 +//line sql.y:6521 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprTimestampadd, Date: yyDollar[7].exprUnion(), Interval: yyDollar[5].exprUnion(), Unit: yyDollar[3].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1265: + case 1267: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6513 +//line sql.y:6525 { yyLOCAL = &TimestampDiffExpr{Unit: yyDollar[3].intervalTypeUnion(), Expr1: yyDollar[5].exprUnion(), Expr2: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1266: + case 1268: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6517 +//line sql.y:6529 { yyLOCAL = &ExtractFuncExpr{IntervalType: yyDollar[3].intervalTypeUnion(), Expr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1267: + case 1269: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6521 +//line sql.y:6533 { yyLOCAL = &WeightStringFuncExpr{Expr: yyDollar[3].exprUnion(), As: yyDollar[4].convertTypeUnion()} } yyVAL.union = yyLOCAL - case 1268: + case 1270: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6525 +//line sql.y:6537 { yyLOCAL = &JSONPrettyExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1269: + case 1271: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6529 +//line sql.y:6541 { yyLOCAL = &JSONStorageFreeExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1270: + case 1272: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6533 +//line sql.y:6545 { yyLOCAL = &JSONStorageSizeExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1271: + case 1273: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6537 +//line sql.y:6549 { yyLOCAL = &JSONArrayAgg{Expr: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1272: + case 1274: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:6541 +//line sql.y:6553 { yyLOCAL = &JSONObjectAgg{Key: yyDollar[3].exprUnion(), Value: yyDollar[5].exprUnion(), OverClause: yyDollar[7].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1273: + case 1275: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6545 +//line sql.y:6557 { yyLOCAL = &TrimFuncExpr{TrimFuncType: LTrimType, Type: LeadingTrimType, StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1274: + case 1276: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6549 +//line sql.y:6561 { yyLOCAL = &TrimFuncExpr{TrimFuncType: RTrimType, Type: TrailingTrimType, StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1275: + case 1277: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:6553 +//line sql.y:6565 { yyLOCAL = &TrimFuncExpr{Type: yyDollar[3].trimTypeUnion(), TrimArg: yyDollar[4].exprUnion(), StringArg: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL - case 1276: + case 1278: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6557 +//line sql.y:6569 { yyLOCAL = &TrimFuncExpr{StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1277: + case 1279: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6561 +//line sql.y:6573 { yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1278: + case 1280: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6565 +//line sql.y:6577 { yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion(), Charset: yyDollar[5].str} } yyVAL.union = yyLOCAL - case 1279: + case 1281: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6569 +//line sql.y:6581 { yyLOCAL = &TrimFuncExpr{TrimArg: yyDollar[3].exprUnion(), StringArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1280: + case 1282: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6573 +//line sql.y:6585 { yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1281: + case 1283: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6577 +//line sql.y:6589 { yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion(), Pos: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1282: + case 1284: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6581 +//line sql.y:6593 { yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1283: + case 1285: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6585 +//line sql.y:6597 { yyLOCAL = &LockingFunc{Type: GetLock, Name: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1284: + case 1286: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6589 +//line sql.y:6601 { yyLOCAL = &LockingFunc{Type: IsFreeLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1285: + case 1287: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6593 +//line sql.y:6605 { yyLOCAL = &LockingFunc{Type: IsUsedLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1286: + case 1288: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:6597 +//line sql.y:6609 { yyLOCAL = &LockingFunc{Type: ReleaseAllLocks} } yyVAL.union = yyLOCAL - case 1287: + case 1289: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6601 +//line sql.y:6613 { yyLOCAL = &LockingFunc{Type: ReleaseLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1288: + case 1290: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6605 +//line sql.y:6617 { yyLOCAL = &JSONSchemaValidFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1289: + case 1291: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6609 +//line sql.y:6621 { yyLOCAL = &JSONSchemaValidationReportFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1290: + case 1292: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6613 +//line sql.y:6625 { yyLOCAL = &JSONArrayExpr{Params: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1291: + case 1293: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6617 +//line sql.y:6629 { yyLOCAL = &GeomFormatExpr{FormatType: BinaryFormat, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1292: + case 1294: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6621 +//line sql.y:6633 { yyLOCAL = &GeomFormatExpr{FormatType: BinaryFormat, Geom: yyDollar[3].exprUnion(), AxisOrderOpt: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1293: + case 1295: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6625 +//line sql.y:6637 { yyLOCAL = &GeomFormatExpr{FormatType: TextFormat, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1294: + case 1296: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6629 +//line sql.y:6641 { yyLOCAL = &GeomFormatExpr{FormatType: TextFormat, Geom: yyDollar[3].exprUnion(), AxisOrderOpt: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1295: + case 1297: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6633 +//line sql.y:6645 { yyLOCAL = &GeomPropertyFuncExpr{Property: IsEmpty, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1296: + case 1298: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6637 +//line sql.y:6649 { yyLOCAL = &GeomPropertyFuncExpr{Property: IsSimple, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1297: + case 1299: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6641 +//line sql.y:6653 { yyLOCAL = &GeomPropertyFuncExpr{Property: Dimension, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1298: + case 1300: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6645 +//line sql.y:6657 { yyLOCAL = &GeomPropertyFuncExpr{Property: Envelope, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1299: + case 1301: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6649 +//line sql.y:6661 { yyLOCAL = &GeomPropertyFuncExpr{Property: GeometryType, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1300: + case 1302: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6653 +//line sql.y:6665 { yyLOCAL = &PointPropertyFuncExpr{Property: Latitude, Point: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1301: + case 1303: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6657 +//line sql.y:6669 { yyLOCAL = &PointPropertyFuncExpr{Property: Latitude, Point: yyDollar[3].exprUnion(), ValueToSet: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1302: + case 1304: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6661 +//line sql.y:6673 { yyLOCAL = &PointPropertyFuncExpr{Property: Longitude, Point: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1303: + case 1305: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6665 +//line sql.y:6677 { yyLOCAL = &PointPropertyFuncExpr{Property: Longitude, Point: yyDollar[3].exprUnion(), ValueToSet: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1304: + case 1306: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6669 +//line sql.y:6681 { yyLOCAL = &LinestrPropertyFuncExpr{Property: EndPoint, Linestring: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1305: + case 1307: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6673 +//line sql.y:6685 { yyLOCAL = &LinestrPropertyFuncExpr{Property: IsClosed, Linestring: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1306: + case 1308: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6677 +//line sql.y:6689 { yyLOCAL = &LinestrPropertyFuncExpr{Property: Length, Linestring: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1307: + case 1309: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6681 +//line sql.y:6693 { yyLOCAL = &LinestrPropertyFuncExpr{Property: Length, Linestring: yyDollar[3].exprUnion(), PropertyDefArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1308: + case 1310: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6685 +//line sql.y:6697 { yyLOCAL = &LinestrPropertyFuncExpr{Property: NumPoints, Linestring: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1309: + case 1311: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6689 +//line sql.y:6701 { yyLOCAL = &LinestrPropertyFuncExpr{Property: PointN, Linestring: yyDollar[3].exprUnion(), PropertyDefArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1310: + case 1312: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6693 +//line sql.y:6705 { yyLOCAL = &LinestrPropertyFuncExpr{Property: StartPoint, Linestring: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1311: + case 1313: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6697 +//line sql.y:6709 { yyLOCAL = &PointPropertyFuncExpr{Property: XCordinate, Point: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1312: + case 1314: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6701 +//line sql.y:6713 { yyLOCAL = &PointPropertyFuncExpr{Property: XCordinate, Point: yyDollar[3].exprUnion(), ValueToSet: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1313: + case 1315: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6705 +//line sql.y:6717 { yyLOCAL = &PointPropertyFuncExpr{Property: YCordinate, Point: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1314: + case 1316: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6709 +//line sql.y:6721 { yyLOCAL = &PointPropertyFuncExpr{Property: YCordinate, Point: yyDollar[3].exprUnion(), ValueToSet: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1315: + case 1317: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6713 +//line sql.y:6725 { yyLOCAL = &GeomFromTextExpr{Type: GeometryFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1316: + case 1318: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6717 +//line sql.y:6729 { yyLOCAL = &GeomFromTextExpr{Type: GeometryFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1317: + case 1319: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6721 +//line sql.y:6733 { yyLOCAL = &GeomFromTextExpr{Type: GeometryFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1318: + case 1320: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6725 +//line sql.y:6737 { yyLOCAL = &GeomFromTextExpr{Type: GeometryCollectionFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1319: + case 1321: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6729 +//line sql.y:6741 { yyLOCAL = &GeomFromTextExpr{Type: GeometryCollectionFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1320: + case 1322: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6733 +//line sql.y:6745 { yyLOCAL = &GeomFromTextExpr{Type: GeometryCollectionFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1321: + case 1323: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6737 +//line sql.y:6749 { yyLOCAL = &GeomFromTextExpr{Type: LineStringFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1322: + case 1324: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6741 +//line sql.y:6753 { yyLOCAL = &GeomFromTextExpr{Type: LineStringFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1323: + case 1325: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6745 +//line sql.y:6757 { yyLOCAL = &GeomFromTextExpr{Type: LineStringFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1324: + case 1326: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6749 +//line sql.y:6761 { yyLOCAL = &GeomFromTextExpr{Type: MultiLinestringFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1325: + case 1327: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6753 +//line sql.y:6765 { yyLOCAL = &GeomFromTextExpr{Type: MultiLinestringFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1326: + case 1328: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6757 +//line sql.y:6769 { yyLOCAL = &GeomFromTextExpr{Type: MultiLinestringFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1327: + case 1329: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6761 +//line sql.y:6773 { yyLOCAL = &GeomFromTextExpr{Type: MultiPointFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1328: + case 1330: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6765 +//line sql.y:6777 { yyLOCAL = &GeomFromTextExpr{Type: MultiPointFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1329: + case 1331: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6769 +//line sql.y:6781 { yyLOCAL = &GeomFromTextExpr{Type: MultiPointFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1330: + case 1332: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6773 +//line sql.y:6785 { yyLOCAL = &GeomFromTextExpr{Type: MultiPolygonFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1331: + case 1333: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6777 +//line sql.y:6789 { yyLOCAL = &GeomFromTextExpr{Type: MultiPolygonFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1332: + case 1334: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6781 +//line sql.y:6793 { yyLOCAL = &GeomFromTextExpr{Type: MultiPolygonFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1333: + case 1335: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6785 +//line sql.y:6797 { yyLOCAL = &GeomFromTextExpr{Type: PointFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1334: + case 1336: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6789 +//line sql.y:6801 { yyLOCAL = &GeomFromTextExpr{Type: PointFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1335: + case 1337: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6793 +//line sql.y:6805 { yyLOCAL = &GeomFromTextExpr{Type: PointFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1336: + case 1338: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6797 +//line sql.y:6809 { yyLOCAL = &GeomFromTextExpr{Type: PolygonFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1337: + case 1339: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6801 +//line sql.y:6813 { yyLOCAL = &GeomFromTextExpr{Type: PolygonFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1338: + case 1340: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6805 +//line sql.y:6817 { yyLOCAL = &GeomFromTextExpr{Type: PolygonFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1339: + case 1341: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6809 +//line sql.y:6821 { yyLOCAL = &GeomFromWKBExpr{Type: GeometryFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1340: + case 1342: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6813 +//line sql.y:6825 { yyLOCAL = &GeomFromWKBExpr{Type: GeometryFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1341: + case 1343: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6817 +//line sql.y:6829 { yyLOCAL = &GeomFromWKBExpr{Type: GeometryFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1342: + case 1344: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6821 +//line sql.y:6833 { yyLOCAL = &GeomFromWKBExpr{Type: GeometryCollectionFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1343: + case 1345: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6825 +//line sql.y:6837 { yyLOCAL = &GeomFromWKBExpr{Type: GeometryCollectionFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1344: + case 1346: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6829 +//line sql.y:6841 { yyLOCAL = &GeomFromWKBExpr{Type: GeometryCollectionFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1345: + case 1347: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6833 +//line sql.y:6845 { yyLOCAL = &GeomFromWKBExpr{Type: LineStringFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1346: + case 1348: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6837 +//line sql.y:6849 { yyLOCAL = &GeomFromWKBExpr{Type: LineStringFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1347: + case 1349: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6841 +//line sql.y:6853 { yyLOCAL = &GeomFromWKBExpr{Type: LineStringFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1348: + case 1350: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6845 +//line sql.y:6857 { yyLOCAL = &GeomFromWKBExpr{Type: MultiLinestringFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1349: + case 1351: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6849 +//line sql.y:6861 { yyLOCAL = &GeomFromWKBExpr{Type: MultiLinestringFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1350: + case 1352: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6853 +//line sql.y:6865 { yyLOCAL = &GeomFromWKBExpr{Type: MultiLinestringFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1351: + case 1353: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6857 +//line sql.y:6869 { yyLOCAL = &GeomFromWKBExpr{Type: MultiPointFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1352: + case 1354: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6861 +//line sql.y:6873 { yyLOCAL = &GeomFromWKBExpr{Type: MultiPointFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1353: + case 1355: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6865 +//line sql.y:6877 { yyLOCAL = &GeomFromWKBExpr{Type: MultiPointFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1354: + case 1356: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6869 +//line sql.y:6881 { yyLOCAL = &GeomFromWKBExpr{Type: MultiPolygonFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1355: + case 1357: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6873 +//line sql.y:6885 { yyLOCAL = &GeomFromWKBExpr{Type: MultiPolygonFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1356: + case 1358: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6877 +//line sql.y:6889 { yyLOCAL = &GeomFromWKBExpr{Type: MultiPolygonFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1357: + case 1359: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6881 +//line sql.y:6893 { yyLOCAL = &GeomFromWKBExpr{Type: PointFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1358: + case 1360: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6885 +//line sql.y:6897 { yyLOCAL = &GeomFromWKBExpr{Type: PointFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1359: + case 1361: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6889 +//line sql.y:6901 { yyLOCAL = &GeomFromWKBExpr{Type: PointFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1360: + case 1362: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6893 +//line sql.y:6905 { yyLOCAL = &GeomFromWKBExpr{Type: PolygonFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1361: + case 1363: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6897 +//line sql.y:6909 { yyLOCAL = &GeomFromWKBExpr{Type: PolygonFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1362: + case 1364: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6901 +//line sql.y:6913 { yyLOCAL = &GeomFromWKBExpr{Type: PolygonFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1363: + case 1365: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6905 +//line sql.y:6917 { yyLOCAL = &PolygonPropertyFuncExpr{Property: Area, Polygon: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1364: + case 1366: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6909 +//line sql.y:6921 { yyLOCAL = &PolygonPropertyFuncExpr{Property: Centroid, Polygon: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1365: + case 1367: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6913 +//line sql.y:6925 { yyLOCAL = &PolygonPropertyFuncExpr{Property: ExteriorRing, Polygon: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1366: + case 1368: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6917 +//line sql.y:6929 { yyLOCAL = &PolygonPropertyFuncExpr{Property: InteriorRingN, Polygon: yyDollar[3].exprUnion(), PropertyDefArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1367: + case 1369: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6921 +//line sql.y:6933 { yyLOCAL = &PolygonPropertyFuncExpr{Property: NumInteriorRings, Polygon: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1368: + case 1370: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6925 +//line sql.y:6937 { yyLOCAL = &GeomCollPropertyFuncExpr{Property: GeometryN, GeomColl: yyDollar[3].exprUnion(), PropertyDefArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1369: + case 1371: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6929 +//line sql.y:6941 { yyLOCAL = &GeomCollPropertyFuncExpr{Property: NumGeometries, GeomColl: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1370: + case 1372: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6933 +//line sql.y:6945 { yyLOCAL = &GeoHashFromLatLongExpr{Longitude: yyDollar[3].exprUnion(), Latitude: yyDollar[5].exprUnion(), MaxLength: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1371: + case 1373: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6937 +//line sql.y:6949 { yyLOCAL = &GeoHashFromPointExpr{Point: yyDollar[3].exprUnion(), MaxLength: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1372: + case 1374: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6941 +//line sql.y:6953 { yyLOCAL = &GeomFromGeoHashExpr{GeomType: LatitudeFromHash, GeoHash: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1373: + case 1375: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6945 +//line sql.y:6957 { yyLOCAL = &GeomFromGeoHashExpr{GeomType: LongitudeFromHash, GeoHash: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1374: + case 1376: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6949 +//line sql.y:6961 { yyLOCAL = &GeomFromGeoHashExpr{GeomType: PointFromHash, GeoHash: yyDollar[3].exprUnion(), SridOpt: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1375: + case 1377: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6953 +//line sql.y:6965 { yyLOCAL = &GeomFromGeoJSONExpr{GeoJSON: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1376: + case 1378: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6957 +//line sql.y:6969 { yyLOCAL = &GeomFromGeoJSONExpr{GeoJSON: yyDollar[3].exprUnion(), HigherDimHandlerOpt: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1377: + case 1379: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6961 +//line sql.y:6973 { yyLOCAL = &GeomFromGeoJSONExpr{GeoJSON: yyDollar[3].exprUnion(), HigherDimHandlerOpt: yyDollar[5].exprUnion(), Srid: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1378: + case 1380: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6965 +//line sql.y:6977 { yyLOCAL = &GeoJSONFromGeomExpr{Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1379: + case 1381: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6969 +//line sql.y:6981 { yyLOCAL = &GeoJSONFromGeomExpr{Geom: yyDollar[3].exprUnion(), MaxDecimalDigits: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1380: + case 1382: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6973 +//line sql.y:6985 { yyLOCAL = &GeoJSONFromGeomExpr{Geom: yyDollar[3].exprUnion(), MaxDecimalDigits: yyDollar[5].exprUnion(), Bitmask: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1381: + case 1383: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6977 +//line sql.y:6989 { yyLOCAL = &JSONObjectExpr{Params: yyDollar[3].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1382: + case 1384: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6981 +//line sql.y:6993 { yyLOCAL = &JSONQuoteExpr{StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1383: + case 1385: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6985 +//line sql.y:6997 { yyLOCAL = &JSONContainsExpr{Target: yyDollar[3].exprUnion(), Candidate: yyDollar[5].exprsUnion()[0], PathList: yyDollar[5].exprsUnion()[1:]} } yyVAL.union = yyLOCAL - case 1384: + case 1386: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6989 +//line sql.y:7001 { yyLOCAL = &JSONContainsPathExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), PathList: yyDollar[7].exprsUnion()} } yyVAL.union = yyLOCAL - case 1385: + case 1387: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6993 +//line sql.y:7005 { yyLOCAL = &JSONExtractExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1386: + case 1388: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6997 +//line sql.y:7009 { yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1387: + case 1389: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7001 +//line sql.y:7013 { yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1388: + case 1390: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7005 +//line sql.y:7017 { yyLOCAL = &JSONOverlapsExpr{JSONDoc1: yyDollar[3].exprUnion(), JSONDoc2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1389: + case 1391: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:7009 +//line sql.y:7021 { yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1390: + case 1392: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:7013 +//line sql.y:7025 { yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion(), EscapeChar: yyDollar[9].exprsUnion()[0], PathList: yyDollar[9].exprsUnion()[1:]} } yyVAL.union = yyLOCAL - case 1391: + case 1393: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:7017 +//line sql.y:7029 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion()} } yyVAL.union = yyLOCAL - case 1392: + case 1394: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:7021 +//line sql.y:7033 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()} } yyVAL.union = yyLOCAL - case 1393: + case 1395: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:7025 +//line sql.y:7037 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()} } yyVAL.union = yyLOCAL - case 1394: + case 1396: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr -//line sql.y:7029 +//line sql.y:7041 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()} } yyVAL.union = yyLOCAL - case 1395: + case 1397: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7033 +//line sql.y:7045 { yyLOCAL = &JSONAttributesExpr{Type: DepthAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1396: + case 1398: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7037 +//line sql.y:7049 { yyLOCAL = &JSONAttributesExpr{Type: ValidAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1397: + case 1399: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7041 +//line sql.y:7053 { yyLOCAL = &JSONAttributesExpr{Type: TypeAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1398: + case 1400: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7045 +//line sql.y:7057 { yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1399: + case 1401: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7049 +//line sql.y:7061 { yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1400: + case 1402: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7053 +//line sql.y:7065 { yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayAppendType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1401: + case 1403: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7057 +//line sql.y:7069 { yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1402: + case 1404: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7061 +//line sql.y:7073 { yyLOCAL = &JSONValueModifierExpr{Type: JSONInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1403: + case 1405: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7065 +//line sql.y:7077 { yyLOCAL = &JSONValueModifierExpr{Type: JSONReplaceType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1404: + case 1406: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7069 +//line sql.y:7081 { yyLOCAL = &JSONValueModifierExpr{Type: JSONSetType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1405: + case 1407: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7073 +//line sql.y:7085 { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergeType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1406: + case 1408: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7077 +//line sql.y:7089 { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePatchType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1407: + case 1409: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7081 +//line sql.y:7093 { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePreserveType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1408: + case 1410: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7085 +//line sql.y:7097 { yyLOCAL = &JSONRemoveExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1409: + case 1411: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7089 +//line sql.y:7101 { yyLOCAL = &JSONUnquoteExpr{JSONValue: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1410: + case 1412: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7093 +//line sql.y:7105 { yyLOCAL = &MultiPolygonExpr{PolygonParams: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1411: + case 1413: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7097 +//line sql.y:7109 { yyLOCAL = &MultiPointExpr{PointParams: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1412: + case 1414: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7101 +//line sql.y:7113 { yyLOCAL = &MultiLinestringExpr{LinestringParams: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1413: + case 1415: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7105 +//line sql.y:7117 { yyLOCAL = &PolygonExpr{LinestringParams: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1414: + case 1416: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7109 +//line sql.y:7121 { yyLOCAL = &LineStringExpr{PointParams: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1415: + case 1417: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7113 +//line sql.y:7125 { yyLOCAL = &PointExpr{XCordinate: yyDollar[3].exprUnion(), YCordinate: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1416: + case 1418: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7117 +//line sql.y:7129 { yyLOCAL = &ArgumentLessWindowExpr{Type: yyDollar[1].argumentLessWindowExprTypeUnion(), OverClause: yyDollar[4].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1417: + case 1419: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7121 +//line sql.y:7133 { yyLOCAL = &FirstOrLastValueExpr{Type: yyDollar[1].firstOrLastValueExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1418: + case 1420: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:7125 +//line sql.y:7137 { yyLOCAL = &NtileExpr{N: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1419: + case 1421: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr -//line sql.y:7129 +//line sql.y:7141 { yyLOCAL = &NTHValueExpr{Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), FromFirstLastClause: yyDollar[7].fromFirstLastClauseUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1420: + case 1422: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7133 +//line sql.y:7145 { yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1421: + case 1423: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr -//line sql.y:7137 +//line sql.y:7149 { yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), Default: yyDollar[6].exprUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1422: + case 1424: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:7141 +//line sql.y:7153 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprAdddate, Date: yyDollar[3].exprUnion(), Interval: yyDollar[6].exprUnion(), Unit: yyDollar[7].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1423: + case 1425: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7145 +//line sql.y:7157 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprAdddate, Date: yyDollar[3].exprUnion(), Interval: yyDollar[5].exprUnion(), Unit: IntervalNone} } yyVAL.union = yyLOCAL - case 1424: + case 1426: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:7149 +//line sql.y:7161 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprDateAdd, Date: yyDollar[3].exprUnion(), Interval: yyDollar[6].exprUnion(), Unit: yyDollar[7].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1425: + case 1427: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:7153 +//line sql.y:7165 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprDateSub, Date: yyDollar[3].exprUnion(), Interval: yyDollar[6].exprUnion(), Unit: yyDollar[7].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1426: + case 1428: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:7157 +//line sql.y:7169 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprSubdate, Date: yyDollar[3].exprUnion(), Interval: yyDollar[6].exprUnion(), Unit: yyDollar[7].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1427: + case 1429: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7161 +//line sql.y:7173 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprSubdate, Date: yyDollar[3].exprUnion(), Interval: yyDollar[5].exprUnion(), Unit: IntervalNone} } yyVAL.union = yyLOCAL - case 1432: + case 1434: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7171 +//line sql.y:7183 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1433: + case 1435: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7175 +//line sql.y:7187 { yyLOCAL = NewIntLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1434: + case 1436: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7179 +//line sql.y:7191 { yyLOCAL = yyDollar[1].variableUnion() } yyVAL.union = yyLOCAL - case 1435: + case 1437: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7183 +//line sql.y:7195 { yyLOCAL = parseBindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL - case 1436: + case 1438: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:7188 +//line sql.y:7200 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1437: + case 1439: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7192 +//line sql.y:7204 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1438: + case 1440: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7198 +//line sql.y:7210 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1439: + case 1441: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:7202 +//line sql.y:7214 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1440: + case 1442: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:7206 +//line sql.y:7218 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1441: + case 1443: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:7210 +//line sql.y:7222 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), ReturnOption: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1442: + case 1444: yyDollar = yyS[yypt-14 : yypt+1] var yyLOCAL Expr -//line sql.y:7214 +//line sql.y:7226 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), ReturnOption: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()} } yyVAL.union = yyLOCAL - case 1443: + case 1445: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7219 +//line sql.y:7231 { yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1444: + case 1446: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:7223 +//line sql.y:7235 { yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), MatchType: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1445: + case 1447: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:7227 +//line sql.y:7239 { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1446: + case 1448: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:7231 +//line sql.y:7243 { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1447: + case 1449: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:7235 +//line sql.y:7247 { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1448: + case 1450: yyDollar = yyS[yypt-14 : yypt+1] var yyLOCAL Expr -//line sql.y:7239 +//line sql.y:7251 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()} } yyVAL.union = yyLOCAL - case 1449: + case 1451: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7244 +//line sql.y:7256 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1450: + case 1452: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:7248 +//line sql.y:7260 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1451: + case 1453: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:7252 +//line sql.y:7264 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1452: + case 1454: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:7256 +//line sql.y:7268 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), MatchType: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1453: + case 1455: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7263 +//line sql.y:7275 { yyLOCAL = &ExtractValueExpr{Fragment: yyDollar[3].exprUnion(), XPathExpr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1454: + case 1456: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:7267 +//line sql.y:7279 { yyLOCAL = &UpdateXMLExpr{Target: yyDollar[3].exprUnion(), XPathExpr: yyDollar[5].exprUnion(), NewXML: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1455: + case 1457: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7273 +//line sql.y:7285 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatBytesType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1456: + case 1458: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7277 +//line sql.y:7289 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatPicoTimeType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1457: + case 1459: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:7281 +//line sql.y:7293 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: PsCurrentThreadIDType} } yyVAL.union = yyLOCAL - case 1458: + case 1460: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7285 +//line sql.y:7297 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: PsThreadIDType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1459: + case 1461: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7291 +//line sql.y:7303 { yyLOCAL = >IDFuncExpr{Type: GTIDSubsetType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1460: + case 1462: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7295 +//line sql.y:7307 { yyLOCAL = >IDFuncExpr{Type: GTIDSubtractType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1461: + case 1463: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7299 +//line sql.y:7311 { yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1462: + case 1464: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7303 +//line sql.y:7315 { yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1463: + case 1465: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7307 +//line sql.y:7319 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1464: + case 1466: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:7311 +//line sql.y:7323 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1465: + case 1467: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:7315 +//line sql.y:7327 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion(), Channel: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1466: + case 1468: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7320 +//line sql.y:7332 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1467: + case 1469: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7324 +//line sql.y:7336 { yyLOCAL = yyDollar[2].convertTypeUnion() } yyVAL.union = yyLOCAL - case 1468: + case 1470: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7330 +//line sql.y:7342 { yyLOCAL = IntervalDayHour } yyVAL.union = yyLOCAL - case 1469: + case 1471: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7334 +//line sql.y:7346 { yyLOCAL = IntervalDayMicrosecond } yyVAL.union = yyLOCAL - case 1470: + case 1472: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7338 +//line sql.y:7350 { yyLOCAL = IntervalDayMinute } yyVAL.union = yyLOCAL - case 1471: + case 1473: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7342 +//line sql.y:7354 { yyLOCAL = IntervalDaySecond } yyVAL.union = yyLOCAL - case 1472: + case 1474: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7346 +//line sql.y:7358 { yyLOCAL = IntervalHourMicrosecond } yyVAL.union = yyLOCAL - case 1473: + case 1475: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7350 +//line sql.y:7362 { yyLOCAL = IntervalHourMinute } yyVAL.union = yyLOCAL - case 1474: + case 1476: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7354 +//line sql.y:7366 { yyLOCAL = IntervalHourSecond } yyVAL.union = yyLOCAL - case 1475: + case 1477: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7358 +//line sql.y:7370 { yyLOCAL = IntervalMinuteMicrosecond } yyVAL.union = yyLOCAL - case 1476: + case 1478: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7362 +//line sql.y:7374 { yyLOCAL = IntervalMinuteSecond } yyVAL.union = yyLOCAL - case 1477: + case 1479: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7366 +//line sql.y:7378 { yyLOCAL = IntervalSecondMicrosecond } yyVAL.union = yyLOCAL - case 1478: + case 1480: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7370 +//line sql.y:7382 { yyLOCAL = IntervalYearMonth } yyVAL.union = yyLOCAL - case 1479: + case 1481: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7374 +//line sql.y:7386 { yyLOCAL = IntervalDay } yyVAL.union = yyLOCAL - case 1480: + case 1482: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7378 +//line sql.y:7390 { yyLOCAL = IntervalWeek } yyVAL.union = yyLOCAL - case 1481: + case 1483: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7382 +//line sql.y:7394 { yyLOCAL = IntervalHour } yyVAL.union = yyLOCAL - case 1482: + case 1484: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7386 +//line sql.y:7398 { yyLOCAL = IntervalMinute } yyVAL.union = yyLOCAL - case 1483: + case 1485: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7390 +//line sql.y:7402 { yyLOCAL = IntervalMonth } yyVAL.union = yyLOCAL - case 1484: + case 1486: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7394 +//line sql.y:7406 { yyLOCAL = IntervalQuarter } yyVAL.union = yyLOCAL - case 1485: + case 1487: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7398 +//line sql.y:7410 { yyLOCAL = IntervalSecond } yyVAL.union = yyLOCAL - case 1486: + case 1488: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7402 +//line sql.y:7414 { yyLOCAL = IntervalMicrosecond } yyVAL.union = yyLOCAL - case 1487: + case 1489: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7406 +//line sql.y:7418 { yyLOCAL = IntervalYear } yyVAL.union = yyLOCAL - case 1488: + case 1490: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7412 +//line sql.y:7424 { yyLOCAL = IntervalDay } yyVAL.union = yyLOCAL - case 1489: + case 1491: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7416 +//line sql.y:7428 { yyLOCAL = IntervalWeek } yyVAL.union = yyLOCAL - case 1490: + case 1492: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7420 +//line sql.y:7432 { yyLOCAL = IntervalHour } yyVAL.union = yyLOCAL - case 1491: + case 1493: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7424 +//line sql.y:7436 { yyLOCAL = IntervalMinute } yyVAL.union = yyLOCAL - case 1492: + case 1494: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7428 +//line sql.y:7440 { yyLOCAL = IntervalMonth } yyVAL.union = yyLOCAL - case 1493: + case 1495: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7432 +//line sql.y:7444 { yyLOCAL = IntervalQuarter } yyVAL.union = yyLOCAL - case 1494: + case 1496: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7436 +//line sql.y:7448 { yyLOCAL = IntervalSecond } yyVAL.union = yyLOCAL - case 1495: + case 1497: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7440 +//line sql.y:7452 { yyLOCAL = IntervalMicrosecond } yyVAL.union = yyLOCAL - case 1496: + case 1498: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7444 +//line sql.y:7456 { yyLOCAL = IntervalYear } yyVAL.union = yyLOCAL - case 1497: + case 1499: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7448 +//line sql.y:7460 { yyLOCAL = IntervalDay } yyVAL.union = yyLOCAL - case 1498: + case 1500: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7452 +//line sql.y:7464 { yyLOCAL = IntervalWeek } yyVAL.union = yyLOCAL - case 1499: + case 1501: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7456 +//line sql.y:7468 { yyLOCAL = IntervalHour } yyVAL.union = yyLOCAL - case 1500: + case 1502: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7460 +//line sql.y:7472 { yyLOCAL = IntervalMinute } yyVAL.union = yyLOCAL - case 1501: + case 1503: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7464 +//line sql.y:7476 { yyLOCAL = IntervalMonth } yyVAL.union = yyLOCAL - case 1502: + case 1504: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7468 +//line sql.y:7480 { yyLOCAL = IntervalQuarter } yyVAL.union = yyLOCAL - case 1503: + case 1505: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7472 +//line sql.y:7484 { yyLOCAL = IntervalSecond } yyVAL.union = yyLOCAL - case 1504: + case 1506: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7476 +//line sql.y:7488 { yyLOCAL = IntervalMicrosecond } yyVAL.union = yyLOCAL - case 1505: + case 1507: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7480 +//line sql.y:7492 { yyLOCAL = IntervalYear } yyVAL.union = yyLOCAL - case 1508: + case 1510: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:7490 +//line sql.y:7502 { yyLOCAL = 0 } yyVAL.union = yyLOCAL - case 1509: + case 1511: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL int -//line sql.y:7494 +//line sql.y:7506 { yyLOCAL = 0 } yyVAL.union = yyLOCAL - case 1510: + case 1512: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:7498 +//line sql.y:7510 { yyLOCAL = convertStringToInt(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 1511: + case 1513: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7508 +//line sql.y:7520 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("if"), Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1512: + case 1514: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7512 +//line sql.y:7524 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("database"), Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1513: + case 1515: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7516 +//line sql.y:7528 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("schema"), Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1514: + case 1516: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7520 +//line sql.y:7532 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("mod"), Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1515: + case 1517: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7524 +//line sql.y:7536 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("replace"), Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1516: + case 1518: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:7530 +//line sql.y:7542 { yyLOCAL = NoOption } yyVAL.union = yyLOCAL - case 1517: + case 1519: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:7534 +//line sql.y:7546 { yyLOCAL = BooleanModeOpt } yyVAL.union = yyLOCAL - case 1518: + case 1520: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:7538 +//line sql.y:7550 { yyLOCAL = NaturalLanguageModeOpt } yyVAL.union = yyLOCAL - case 1519: + case 1521: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:7542 +//line sql.y:7554 { yyLOCAL = NaturalLanguageModeWithQueryExpansionOpt } yyVAL.union = yyLOCAL - case 1520: + case 1522: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:7546 +//line sql.y:7558 { yyLOCAL = QueryExpansionOpt } yyVAL.union = yyLOCAL - case 1521: + case 1523: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7552 +//line sql.y:7564 { yyVAL.str = string(yyDollar[1].identifierCI.String()) } - case 1522: + case 1524: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7556 +//line sql.y:7568 { yyVAL.str = string(yyDollar[1].str) } - case 1523: + case 1525: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7560 +//line sql.y:7572 { yyVAL.str = string(yyDollar[1].str) } - case 1524: + case 1526: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7566 +//line sql.y:7578 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1525: + case 1527: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7570 +//line sql.y:7582 { yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: ptr.Of(convertStringToInt(yyDollar[4].str))} } yyVAL.union = yyLOCAL - case 1526: + case 1528: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7574 +//line sql.y:7586 { yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: ptr.Of(convertStringToInt(yyDollar[4].str))} } yyVAL.union = yyLOCAL - case 1527: + case 1529: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7580 +//line sql.y:7592 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } yyVAL.union = yyLOCAL - case 1528: + case 1530: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7584 +//line sql.y:7596 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion(), Charset: yyDollar[3].columnCharset} } yyVAL.union = yyLOCAL - case 1529: + case 1531: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7588 +//line sql.y:7600 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1530: + case 1532: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7592 +//line sql.y:7604 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } yyVAL.union = yyLOCAL - case 1531: + case 1533: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7596 +//line sql.y:7608 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} yyLOCAL.Length = yyDollar[2].LengthScaleOption.Length yyLOCAL.Scale = yyDollar[2].LengthScaleOption.Scale } yyVAL.union = yyLOCAL - case 1532: + case 1534: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7602 +//line sql.y:7614 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1533: + case 1535: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7606 +//line sql.y:7618 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } yyVAL.union = yyLOCAL - case 1534: + case 1536: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7610 +//line sql.y:7622 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1535: + case 1537: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7614 +//line sql.y:7626 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1536: + case 1538: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7618 +//line sql.y:7630 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } yyVAL.union = yyLOCAL - case 1537: + case 1539: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7622 +//line sql.y:7634 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1538: + case 1540: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7626 +//line sql.y:7638 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1539: + case 1541: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7630 +//line sql.y:7642 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } yyVAL.union = yyLOCAL - case 1540: + case 1542: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7634 +//line sql.y:7646 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1541: + case 1543: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7638 +//line sql.y:7650 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1542: + case 1544: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7644 +//line sql.y:7656 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1543: + case 1545: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:7648 +//line sql.y:7660 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1544: + case 1546: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:7653 +//line sql.y:7665 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1545: + case 1547: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7657 +//line sql.y:7669 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1546: + case 1548: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7662 +//line sql.y:7674 { yyVAL.str = string("") } - case 1547: + case 1549: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7666 +//line sql.y:7678 { yyVAL.str = encodeSQLString(yyDollar[2].str) } - case 1548: + case 1550: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*When -//line sql.y:7672 +//line sql.y:7684 { yyLOCAL = []*When{yyDollar[1].whenUnion()} } yyVAL.union = yyLOCAL - case 1549: + case 1551: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7676 +//line sql.y:7688 { yySLICE := (*[]*When)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].whenUnion()) } - case 1550: + case 1552: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *When -//line sql.y:7682 +//line sql.y:7694 { yyLOCAL = &When{Cond: yyDollar[2].exprUnion(), Val: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1551: + case 1553: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:7687 +//line sql.y:7699 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1552: + case 1554: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7691 +//line sql.y:7703 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1553: + case 1555: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ColName -//line sql.y:7697 +//line sql.y:7709 { yyLOCAL = &ColName{Name: yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 1554: + case 1556: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ColName -//line sql.y:7701 +//line sql.y:7713 { yyLOCAL = &ColName{Name: NewIdentifierCI(string(yyDollar[1].str))} } yyVAL.union = yyLOCAL - case 1555: + case 1557: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColName -//line sql.y:7705 +//line sql.y:7717 { yyLOCAL = &ColName{Qualifier: TableName{Name: yyDollar[1].identifierCS}, Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 1556: + case 1558: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ColName -//line sql.y:7709 +//line sql.y:7721 { yyLOCAL = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}, Name: yyDollar[5].identifierCI} } yyVAL.union = yyLOCAL - case 1557: + case 1559: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7715 +//line sql.y:7727 { yyLOCAL = yyDollar[1].colNameUnion() } yyVAL.union = yyLOCAL - case 1558: + case 1560: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7719 +//line sql.y:7731 { yyLOCAL = &Offset{V: convertStringToInt(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1559: + case 1561: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7725 +//line sql.y:7737 { // TODO(sougou): Deprecate this construct. if yyDollar[1].identifierCI.Lowered() != "value" { @@ -22879,513 +22619,513 @@ yydefault: yyLOCAL = NewIntLiteral("1") } yyVAL.union = yyLOCAL - case 1560: + case 1562: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7734 +//line sql.y:7746 { yyLOCAL = NewIntLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1561: + case 1563: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7738 +//line sql.y:7750 { yyLOCAL = parseBindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL - case 1562: + case 1564: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *GroupBy -//line sql.y:7743 +//line sql.y:7755 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1563: + case 1565: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *GroupBy -//line sql.y:7747 +//line sql.y:7759 { yyLOCAL = &GroupBy{Exprs: yyDollar[3].exprsUnion(), WithRollup: yyDollar[4].booleanUnion()} } yyVAL.union = yyLOCAL - case 1564: + case 1566: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7752 +//line sql.y:7764 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1565: + case 1567: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:7756 +//line sql.y:7768 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1566: + case 1568: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:7762 +//line sql.y:7774 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1567: + case 1569: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7766 +//line sql.y:7778 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1568: + case 1570: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *NamedWindow -//line sql.y:7772 +//line sql.y:7784 { yyLOCAL = &NamedWindow{yyDollar[2].windowDefinitionsUnion()} } yyVAL.union = yyLOCAL - case 1569: + case 1571: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:7778 +//line sql.y:7790 { yyLOCAL = NamedWindows{yyDollar[1].namedWindowUnion()} } yyVAL.union = yyLOCAL - case 1570: + case 1572: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7782 +//line sql.y:7794 { yySLICE := (*NamedWindows)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].namedWindowUnion()) } - case 1571: + case 1573: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:7787 +//line sql.y:7799 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1572: + case 1574: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:7791 +//line sql.y:7803 { yyLOCAL = yyDollar[1].namedWindowsUnion() } yyVAL.union = yyLOCAL - case 1573: + case 1575: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7796 +//line sql.y:7808 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1574: + case 1576: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7800 +//line sql.y:7812 { yyLOCAL = yyDollar[1].orderByUnion() } yyVAL.union = yyLOCAL - case 1575: + case 1577: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7806 +//line sql.y:7818 { yyLOCAL = yyDollar[3].orderByUnion() } yyVAL.union = yyLOCAL - case 1576: + case 1578: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7812 +//line sql.y:7824 { yyLOCAL = OrderBy{yyDollar[1].orderUnion()} } yyVAL.union = yyLOCAL - case 1577: + case 1579: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7816 +//line sql.y:7828 { yySLICE := (*OrderBy)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].orderUnion()) } - case 1578: + case 1580: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Order -//line sql.y:7822 +//line sql.y:7834 { yyLOCAL = &Order{Expr: yyDollar[1].exprUnion(), Direction: yyDollar[2].orderDirectionUnion()} } yyVAL.union = yyLOCAL - case 1579: + case 1581: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7827 +//line sql.y:7839 { yyLOCAL = AscOrder } yyVAL.union = yyLOCAL - case 1580: + case 1582: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7831 +//line sql.y:7843 { yyLOCAL = AscOrder } yyVAL.union = yyLOCAL - case 1581: + case 1583: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7835 +//line sql.y:7847 { yyLOCAL = DescOrder } yyVAL.union = yyLOCAL - case 1582: + case 1584: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Limit -//line sql.y:7840 +//line sql.y:7852 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1583: + case 1585: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Limit -//line sql.y:7844 +//line sql.y:7856 { yyLOCAL = yyDollar[1].limitUnion() } yyVAL.union = yyLOCAL - case 1584: + case 1586: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Limit -//line sql.y:7850 +//line sql.y:7862 { yyLOCAL = &Limit{Rowcount: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1585: + case 1587: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Limit -//line sql.y:7854 +//line sql.y:7866 { yyLOCAL = &Limit{Offset: yyDollar[2].exprUnion(), Rowcount: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1586: + case 1588: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Limit -//line sql.y:7858 +//line sql.y:7870 { yyLOCAL = &Limit{Offset: yyDollar[4].exprUnion(), Rowcount: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1587: + case 1589: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7863 +//line sql.y:7875 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1588: + case 1590: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7867 +//line sql.y:7879 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1589: + case 1591: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7871 +//line sql.y:7883 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1590: + case 1592: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7875 +//line sql.y:7887 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1591: + case 1593: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7879 +//line sql.y:7891 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1592: + case 1594: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7886 +//line sql.y:7898 { yyLOCAL = &LockOption{Type: DefaultType} } yyVAL.union = yyLOCAL - case 1593: + case 1595: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7890 +//line sql.y:7902 { yyLOCAL = &LockOption{Type: NoneType} } yyVAL.union = yyLOCAL - case 1594: + case 1596: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7894 +//line sql.y:7906 { yyLOCAL = &LockOption{Type: SharedType} } yyVAL.union = yyLOCAL - case 1595: + case 1597: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7898 +//line sql.y:7910 { yyLOCAL = &LockOption{Type: ExclusiveType} } yyVAL.union = yyLOCAL - case 1596: + case 1598: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7904 +//line sql.y:7916 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1597: + case 1599: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7908 +//line sql.y:7920 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1598: + case 1600: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7912 +//line sql.y:7924 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1599: + case 1601: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7916 +//line sql.y:7928 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1600: + case 1602: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7921 +//line sql.y:7933 { yyVAL.str = "" } - case 1602: + case 1604: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7928 +//line sql.y:7940 { yyVAL.str = string(yyDollar[3].str) } - case 1603: + case 1605: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7932 +//line sql.y:7944 { yyVAL.str = string(yyDollar[3].str) } - case 1604: + case 1606: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7936 +//line sql.y:7948 { yyVAL.str = string(yyDollar[3].str) } - case 1605: + case 1607: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7941 +//line sql.y:7953 { yyVAL.str = "" } - case 1606: + case 1608: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7945 +//line sql.y:7957 { yyVAL.str = yyDollar[3].str } - case 1607: + case 1609: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7951 +//line sql.y:7963 { yyVAL.str = string(yyDollar[1].str) } - case 1608: + case 1610: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7955 +//line sql.y:7967 { yyVAL.str = string(yyDollar[1].str) } - case 1609: + case 1611: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7960 +//line sql.y:7972 { yyVAL.str = "" } - case 1610: + case 1612: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:7964 +//line sql.y:7976 { yyVAL.str = yyDollar[2].str } - case 1611: + case 1613: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7969 +//line sql.y:7981 { yyVAL.str = "cascaded" } - case 1612: + case 1614: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7973 +//line sql.y:7985 { yyVAL.str = string(yyDollar[1].str) } - case 1613: + case 1615: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7977 +//line sql.y:7989 { yyVAL.str = string(yyDollar[1].str) } - case 1614: + case 1616: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*ProcParameter -//line sql.y:7982 +//line sql.y:7994 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1615: + case 1617: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ProcParameter -//line sql.y:7986 +//line sql.y:7998 { yyLOCAL = yyDollar[1].procParamsUnion() } yyVAL.union = yyLOCAL - case 1616: + case 1618: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ProcParameter -//line sql.y:7992 +//line sql.y:8004 { yyLOCAL = []*ProcParameter{yyDollar[1].procParamUnion()} } yyVAL.union = yyLOCAL - case 1617: + case 1619: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7996 +//line sql.y:8008 { yySLICE := (*[]*ProcParameter)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].procParamUnion()) } - case 1618: + case 1620: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ProcParameter -//line sql.y:8002 +//line sql.y:8014 { yyLOCAL = &ProcParameter{Mode: yyDollar[1].procParamModeUnion(), Name: yyDollar[2].identifierCI, Type: yyDollar[3].columnType} } yyVAL.union = yyLOCAL - case 1619: + case 1621: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL ProcParameterMode -//line sql.y:8007 +//line sql.y:8019 { yyLOCAL = InMode } yyVAL.union = yyLOCAL - case 1620: + case 1622: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ProcParameterMode -//line sql.y:8011 +//line sql.y:8023 { yyLOCAL = InMode } yyVAL.union = yyLOCAL - case 1621: + case 1623: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ProcParameterMode -//line sql.y:8015 +//line sql.y:8027 { yyLOCAL = InoutMode } yyVAL.union = yyLOCAL - case 1622: + case 1624: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ProcParameterMode -//line sql.y:8019 +//line sql.y:8031 { yyLOCAL = OutMode } yyVAL.union = yyLOCAL - case 1623: + case 1625: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Definer -//line sql.y:8024 +//line sql.y:8036 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1625: + case 1627: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Definer -//line sql.y:8031 +//line sql.y:8043 { yyLOCAL = yyDollar[3].definerUnion() } yyVAL.union = yyLOCAL - case 1626: + case 1628: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Definer -//line sql.y:8037 +//line sql.y:8049 { yyLOCAL = &Definer{ Name: string(yyDollar[1].str), } } yyVAL.union = yyLOCAL - case 1627: + case 1629: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Definer -//line sql.y:8043 +//line sql.y:8055 { yyLOCAL = &Definer{ Name: string(yyDollar[1].str), } } yyVAL.union = yyLOCAL - case 1628: + case 1630: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Definer -//line sql.y:8049 +//line sql.y:8061 { yyLOCAL = &Definer{ Name: yyDollar[1].str, @@ -23393,503 +23133,503 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1629: + case 1631: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8058 +//line sql.y:8070 { yyVAL.str = encodeSQLString(yyDollar[1].str) } - case 1630: + case 1632: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8062 +//line sql.y:8074 { yyVAL.str = formatIdentifier(yyDollar[1].str) } - case 1631: + case 1633: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8067 +//line sql.y:8079 { yyVAL.str = "" } - case 1632: + case 1634: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8071 +//line sql.y:8083 { yyVAL.str = formatAddress(yyDollar[1].str) } - case 1633: + case 1635: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Lock -//line sql.y:8077 +//line sql.y:8089 { yyLOCAL = ForUpdateLock } yyVAL.union = yyLOCAL - case 1634: + case 1636: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Lock -//line sql.y:8081 +//line sql.y:8093 { yyLOCAL = ForUpdateLockNoWait } yyVAL.union = yyLOCAL - case 1635: + case 1637: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Lock -//line sql.y:8085 +//line sql.y:8097 { yyLOCAL = ForUpdateLockSkipLocked } yyVAL.union = yyLOCAL - case 1636: + case 1638: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Lock -//line sql.y:8089 +//line sql.y:8101 { yyLOCAL = ForShareLock } yyVAL.union = yyLOCAL - case 1637: + case 1639: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Lock -//line sql.y:8093 +//line sql.y:8105 { yyLOCAL = ForShareLockNoWait } yyVAL.union = yyLOCAL - case 1638: + case 1640: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Lock -//line sql.y:8097 +//line sql.y:8109 { yyLOCAL = ForShareLockSkipLocked } yyVAL.union = yyLOCAL - case 1639: + case 1641: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Lock -//line sql.y:8101 +//line sql.y:8113 { yyLOCAL = ShareModeLock } yyVAL.union = yyLOCAL - case 1640: + case 1642: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:8107 +//line sql.y:8119 { yyLOCAL = &SelectInto{Type: IntoOutfileS3, FileName: encodeSQLString(yyDollar[4].str), Charset: yyDollar[5].columnCharset, FormatOption: yyDollar[6].str, ExportOption: yyDollar[7].str, Manifest: yyDollar[8].str, Overwrite: yyDollar[9].str} } yyVAL.union = yyLOCAL - case 1641: + case 1643: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:8111 +//line sql.y:8123 { yyLOCAL = &SelectInto{Type: IntoDumpfile, FileName: encodeSQLString(yyDollar[3].str), Charset: ColumnCharset{}, FormatOption: "", ExportOption: "", Manifest: "", Overwrite: ""} } yyVAL.union = yyLOCAL - case 1642: + case 1644: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:8115 +//line sql.y:8127 { yyLOCAL = &SelectInto{Type: IntoOutfile, FileName: encodeSQLString(yyDollar[3].str), Charset: yyDollar[4].columnCharset, FormatOption: "", ExportOption: yyDollar[5].str, Manifest: "", Overwrite: ""} } yyVAL.union = yyLOCAL - case 1643: + case 1645: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:8119 +//line sql.y:8131 { yyLOCAL = &SelectInto{Type: IntoVariables, VarList: yyDollar[2].variablesUnion()} } yyVAL.union = yyLOCAL - case 1644: + case 1646: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:8125 +//line sql.y:8137 { yySLICE := (*[]*Variable)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].variableUnion()) } - case 1645: + case 1647: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*Variable -//line sql.y:8129 +//line sql.y:8141 { yyLOCAL = []*Variable{yyDollar[1].variableUnion()} } yyVAL.union = yyLOCAL - case 1646: + case 1648: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:8135 +//line sql.y:8147 { yyLOCAL = yyDollar[1].variableUnion() } yyVAL.union = yyLOCAL - case 1647: + case 1649: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:8139 +//line sql.y:8151 { yyLOCAL = &Variable{Name: createIdentifierCI(yyDollar[1].str), Scope: NoScope} } yyVAL.union = yyLOCAL - case 1648: + case 1650: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8144 +//line sql.y:8156 { yyVAL.str = "" } - case 1649: + case 1651: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:8148 +//line sql.y:8160 { yyVAL.str = " format csv" + yyDollar[3].str } - case 1650: + case 1652: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:8152 +//line sql.y:8164 { yyVAL.str = " format text" + yyDollar[3].str } - case 1651: + case 1653: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8157 +//line sql.y:8169 { yyVAL.str = "" } - case 1652: + case 1654: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8161 +//line sql.y:8173 { yyVAL.str = " header" } - case 1653: + case 1655: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8166 +//line sql.y:8178 { yyVAL.str = "" } - case 1654: + case 1656: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:8170 +//line sql.y:8182 { yyVAL.str = " manifest on" } - case 1655: + case 1657: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:8174 +//line sql.y:8186 { yyVAL.str = " manifest off" } - case 1656: + case 1658: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8179 +//line sql.y:8191 { yyVAL.str = "" } - case 1657: + case 1659: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:8183 +//line sql.y:8195 { yyVAL.str = " overwrite on" } - case 1658: + case 1660: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:8187 +//line sql.y:8199 { yyVAL.str = " overwrite off" } - case 1659: + case 1661: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:8193 +//line sql.y:8205 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1660: + case 1662: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8198 +//line sql.y:8210 { yyVAL.str = "" } - case 1661: + case 1663: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:8202 +//line sql.y:8214 { yyVAL.str = " lines" + yyDollar[2].str } - case 1662: + case 1664: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8208 +//line sql.y:8220 { yyVAL.str = yyDollar[1].str } - case 1663: + case 1665: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:8212 +//line sql.y:8224 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1664: + case 1666: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:8218 +//line sql.y:8230 { yyVAL.str = " starting by " + encodeSQLString(yyDollar[3].str) } - case 1665: + case 1667: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:8222 +//line sql.y:8234 { yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str) } - case 1666: + case 1668: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8227 +//line sql.y:8239 { yyVAL.str = "" } - case 1667: + case 1669: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:8231 +//line sql.y:8243 { yyVAL.str = " " + yyDollar[1].str + yyDollar[2].str } - case 1668: + case 1670: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8237 +//line sql.y:8249 { yyVAL.str = yyDollar[1].str } - case 1669: + case 1671: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:8241 +//line sql.y:8253 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1670: + case 1672: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:8247 +//line sql.y:8259 { yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str) } - case 1671: + case 1673: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:8251 +//line sql.y:8263 { yyVAL.str = yyDollar[1].str + " enclosed by " + encodeSQLString(yyDollar[4].str) } - case 1672: + case 1674: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:8255 +//line sql.y:8267 { yyVAL.str = " escaped by " + encodeSQLString(yyDollar[3].str) } - case 1673: + case 1675: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8260 +//line sql.y:8272 { yyVAL.str = "" } - case 1674: + case 1676: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8264 +//line sql.y:8276 { yyVAL.str = " optionally" } - case 1675: + case 1677: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Insert -//line sql.y:8277 +//line sql.y:8289 { yyLOCAL = &Insert{Rows: yyDollar[2].valuesUnion(), RowAlias: yyDollar[3].rowAliasUnion()} } yyVAL.union = yyLOCAL - case 1676: + case 1678: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Insert -//line sql.y:8281 +//line sql.y:8293 { yyLOCAL = &Insert{Rows: yyDollar[1].tableStmtUnion()} } yyVAL.union = yyLOCAL - case 1677: + case 1679: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *Insert -//line sql.y:8285 +//line sql.y:8297 { yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[5].valuesUnion(), RowAlias: yyDollar[6].rowAliasUnion()} } yyVAL.union = yyLOCAL - case 1678: + case 1680: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *Insert -//line sql.y:8289 +//line sql.y:8301 { yyLOCAL = &Insert{Columns: []IdentifierCI{}, Rows: yyDollar[4].valuesUnion(), RowAlias: yyDollar[5].rowAliasUnion()} } yyVAL.union = yyLOCAL - case 1679: + case 1681: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Insert -//line sql.y:8293 +//line sql.y:8305 { yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[4].tableStmtUnion()} } yyVAL.union = yyLOCAL - case 1680: + case 1684: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:8299 +//line sql.y:8315 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 1681: + case 1685: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Columns -//line sql.y:8303 +//line sql.y:8319 { yyLOCAL = Columns{yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 1682: + case 1686: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:8307 +//line sql.y:8323 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 1683: + case 1687: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:8311 +//line sql.y:8327 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[5].identifierCI) } - case 1684: + case 1688: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *RowAlias -//line sql.y:8316 +//line sql.y:8332 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1685: + case 1689: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *RowAlias -//line sql.y:8320 +//line sql.y:8336 { yyLOCAL = &RowAlias{TableName: yyDollar[2].identifierCS} } yyVAL.union = yyLOCAL - case 1686: + case 1690: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *RowAlias -//line sql.y:8324 +//line sql.y:8340 { yyLOCAL = &RowAlias{TableName: yyDollar[2].identifierCS, Columns: yyDollar[4].columnsUnion()} } yyVAL.union = yyLOCAL - case 1687: + case 1691: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:8329 +//line sql.y:8345 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1688: + case 1692: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:8333 +//line sql.y:8349 { yyLOCAL = yyDollar[5].updateExprsUnion() } yyVAL.union = yyLOCAL - case 1689: + case 1693: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Values -//line sql.y:8339 +//line sql.y:8355 { yyLOCAL = Values{yyDollar[1].valTupleUnion()} } yyVAL.union = yyLOCAL - case 1690: + case 1694: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:8343 +//line sql.y:8359 { yySLICE := (*Values)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].valTupleUnion()) } - case 1691: + case 1695: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Values -//line sql.y:8349 +//line sql.y:8365 { yyLOCAL = Values{yyDollar[1].valTupleUnion()} } yyVAL.union = yyLOCAL - case 1692: + case 1696: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:8353 +//line sql.y:8369 { yySLICE := (*Values)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].valTupleUnion()) } - case 1693: + case 1697: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ValTuple -//line sql.y:8359 +//line sql.y:8375 { yyLOCAL = yyDollar[1].valTupleUnion() } yyVAL.union = yyLOCAL - case 1694: + case 1698: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ValTuple -//line sql.y:8363 +//line sql.y:8379 { yyLOCAL = ValTuple{} } yyVAL.union = yyLOCAL - case 1695: + case 1699: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ValTuple -//line sql.y:8369 +//line sql.y:8385 { yyLOCAL = yyDollar[1].valTupleUnion() } yyVAL.union = yyLOCAL - case 1696: + case 1700: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ValTuple -//line sql.y:8373 +//line sql.y:8389 { yyLOCAL = ValTuple{} } yyVAL.union = yyLOCAL - case 1697: + case 1701: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ValTuple -//line sql.y:8379 +//line sql.y:8395 { yyLOCAL = ValTuple(yyDollar[2].exprsUnion()) } yyVAL.union = yyLOCAL - case 1698: + case 1702: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL ValTuple -//line sql.y:8385 +//line sql.y:8401 { yyLOCAL = ValTuple(yyDollar[3].exprsUnion()) } yyVAL.union = yyLOCAL - case 1701: + case 1705: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:8395 +//line sql.y:8411 { if len(yyDollar[1].valTupleUnion()) == 1 { yyLOCAL = yyDollar[1].valTupleUnion()[0] @@ -23898,300 +23638,300 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1702: + case 1706: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:8405 +//line sql.y:8421 { yyLOCAL = UpdateExprs{yyDollar[1].updateExprUnion()} } yyVAL.union = yyLOCAL - case 1703: + case 1707: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:8409 +//line sql.y:8425 { yySLICE := (*UpdateExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].updateExprUnion()) } - case 1704: + case 1708: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *UpdateExpr -//line sql.y:8415 +//line sql.y:8431 { yyLOCAL = &UpdateExpr{Name: yyDollar[1].colNameUnion(), Expr: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1706: + case 1710: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:8422 +//line sql.y:8438 { yyVAL.str = "charset" } - case 1709: + case 1713: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:8432 +//line sql.y:8448 { yyLOCAL = NewStrLiteral(yyDollar[1].identifierCI.String()) } yyVAL.union = yyLOCAL - case 1710: + case 1714: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:8436 +//line sql.y:8452 { yyLOCAL = NewStrLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1711: + case 1715: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:8440 +//line sql.y:8456 { yyLOCAL = &Default{} } yyVAL.union = yyLOCAL - case 1714: + case 1718: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:8449 +//line sql.y:8465 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1715: + case 1719: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:8451 +//line sql.y:8467 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1716: + case 1720: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:8454 +//line sql.y:8470 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1717: + case 1721: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:8456 +//line sql.y:8472 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1718: + case 1722: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:8459 +//line sql.y:8475 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1719: + case 1723: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL bool -//line sql.y:8461 +//line sql.y:8477 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1720: + case 1724: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Ignore -//line sql.y:8464 +//line sql.y:8480 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1721: + case 1725: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Ignore -//line sql.y:8466 +//line sql.y:8482 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1722: + case 1726: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8469 +//line sql.y:8485 { yyVAL.empty = struct{}{} } - case 1723: + case 1727: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8471 +//line sql.y:8487 { yyVAL.empty = struct{}{} } - case 1724: + case 1728: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8473 +//line sql.y:8489 { yyVAL.empty = struct{}{} } - case 1725: + case 1729: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:8477 +//line sql.y:8493 { yyLOCAL = &CallProc{Name: yyDollar[2].tableName, Params: yyDollar[4].exprsUnion()} } yyVAL.union = yyLOCAL - case 1726: + case 1730: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []Expr -//line sql.y:8482 +//line sql.y:8498 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1727: + case 1731: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []Expr -//line sql.y:8486 +//line sql.y:8502 { yyLOCAL = yyDollar[1].exprsUnion() } yyVAL.union = yyLOCAL - case 1728: + case 1732: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:8491 +//line sql.y:8507 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1729: + case 1733: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:8493 +//line sql.y:8509 { yyLOCAL = []*IndexOption{yyDollar[1].indexOptionUnion()} } yyVAL.union = yyLOCAL - case 1730: + case 1734: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:8497 +//line sql.y:8513 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), String: string(yyDollar[2].identifierCI.String())} } yyVAL.union = yyLOCAL - case 1731: + case 1735: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8503 +//line sql.y:8519 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 1732: + case 1736: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8507 +//line sql.y:8523 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 1734: + case 1738: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8514 +//line sql.y:8530 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 1735: + case 1739: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8520 +//line sql.y:8536 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1736: + case 1740: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8524 +//line sql.y:8540 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1737: + case 1741: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8530 +//line sql.y:8546 { yyVAL.identifierCS = NewIdentifierCS("") } - case 1738: + case 1742: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8534 +//line sql.y:8550 { yyVAL.identifierCS = yyDollar[1].identifierCS } - case 1740: + case 1744: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8541 +//line sql.y:8557 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1741: + case 1745: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:8547 +//line sql.y:8563 { yyLOCAL = &Kill{Type: yyDollar[2].killTypeUnion(), ProcesslistID: convertStringToUInt64(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 1742: + case 1746: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL KillType -//line sql.y:8553 +//line sql.y:8569 { yyLOCAL = ConnectionType } yyVAL.union = yyLOCAL - case 1743: + case 1747: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL KillType -//line sql.y:8557 +//line sql.y:8573 { yyLOCAL = ConnectionType } yyVAL.union = yyLOCAL - case 1744: + case 1748: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL KillType -//line sql.y:8561 +//line sql.y:8577 { yyLOCAL = QueryType } yyVAL.union = yyLOCAL - case 2411: + case 2416: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:9256 +//line sql.y:9273 { } - case 2412: + case 2417: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:9261 +//line sql.y:9278 { } - case 2413: + case 2418: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:9265 +//line sql.y:9282 { skipToEnd(yylex) } - case 2414: + case 2419: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:9270 +//line sql.y:9287 { skipToEnd(yylex) } - case 2415: + case 2420: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:9274 +//line sql.y:9291 { skipToEnd(yylex) } - case 2416: + case 2421: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:9278 +//line sql.y:9295 { skipToEnd(yylex) } diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index 42a8c4e7086..b2c78cef767 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -230,7 +230,6 @@ func markBindVariable(yylex yyLexer, bvar string) { } // These precedence rules are there to handle shift-reduce conflicts. -%nonassoc MEMBER // MULTIPLE_TEXT_LITERAL is used to resolve shift-reduce conflicts occuring due to multiple STRING symbols occuring one after the other. // According to the ANSI standard, these strings should be concatenated together. // The shift-reduce conflict occurrs because after seeing a STRING, if we see another one, then we can either shift to concatenate them or @@ -318,7 +317,7 @@ func markBindVariable(yylex yyLexer, bvar string) { %left AND %right NOT '!' %left BETWEEN CASE WHEN THEN ELSE ELSEIF END -%left '=' '<' '>' LE GE NE NULL_SAFE_EQUAL IS LIKE REGEXP RLIKE IN ASSIGNMENT_OPT +%left '=' '<' '>' LE GE NE NULL_SAFE_EQUAL IS LIKE REGEXP RLIKE IN ASSIGNMENT_OPT MEMBER %left '&' %left SHIFT_LEFT SHIFT_RIGHT %left '+' '-' @@ -354,7 +353,7 @@ func markBindVariable(yylex yyLexer, bvar string) { %token SEQUENCE MERGE TEMPORARY TEMPTABLE INVOKER SECURITY FIRST AFTER LAST // Migration tokens -%token VITESS_MIGRATION CANCEL RETRY LAUNCH COMPLETE CLEANUP THROTTLE UNTHROTTLE FORCE_CUTOVER CUTOVER_THRESHOLD EXPIRE RATIO +%token VITESS_MIGRATION CANCEL RETRY LAUNCH COMPLETE CLEANUP THROTTLE UNTHROTTLE FORCE_CUTOVER CUTOVER_THRESHOLD EXPIRE RATIO POSTPONE // Throttler tokens %token VITESS_THROTTLER @@ -591,7 +590,7 @@ func markBindVariable(yylex yyLexer, bvar string) { %type charset_or_character_set charset_or_character_set_or_names isolation_level %type update_expression %type for_from from_or_on -%type default_opt +%type default_opt value_or_values %type ignore_opt %type columns_or_fields extended_opt storage_opt %type like_or_where_opt like_opt @@ -3728,6 +3727,19 @@ alter_statement: Type: CompleteAllMigrationType, } } +| ALTER comment_opt VITESS_MIGRATION STRING POSTPONE COMPLETE + { + $$ = &AlterMigration{ + Type: PostponeCompleteMigrationType, + UUID: string($4), + } + } +| ALTER comment_opt VITESS_MIGRATION POSTPONE COMPLETE ALL + { + $$ = &AlterMigration{ + Type: PostponeCompleteAllMigrationType, + } + } | ALTER comment_opt VITESS_MIGRATION STRING CANCEL { $$ = &AlterMigration{ @@ -4769,11 +4781,11 @@ use_table_name: begin_statement: BEGIN { - $$ = &Begin{} + $$ = &Begin{Type: BeginStmt} } | START TRANSACTION tx_chacteristics_opt { - $$ = &Begin{TxAccessModes: $3} + $$ = &Begin{Type: StartTransactionStmt, TxAccessModes: $3} } tx_chacteristics_opt: @@ -5719,9 +5731,9 @@ expression: { $$ = &AssignmentExpr{Left: $1, Right: $3} } -| expression MEMBER OF openb expression closeb +| expression MEMBER OF openb expression closeb %prec '=' { - $$ = &MemberOfExpr{Value: $1, JSONArr:$5 } + $$ = &MemberOfExpr{Value: $1, JSONArr: $5} } null_or_unknown: @@ -8273,7 +8285,7 @@ optionally_opt: // Because the rules are together, the parser can keep shifting // the tokens until it disambiguates a as sql_id and select as keyword. insert_data: - VALUES val_tuple_list row_alias_opt + value_or_values val_tuple_list row_alias_opt { $$ = &Insert{Rows: $2, RowAlias: $3} } @@ -8281,11 +8293,11 @@ insert_data: { $$ = &Insert{Rows: $1} } -| openb ins_column_list closeb VALUES val_tuple_list row_alias_opt +| openb ins_column_list closeb value_or_values val_tuple_list row_alias_opt { $$ = &Insert{Columns: $2, Rows: $5, RowAlias: $6} } -| openb closeb VALUES val_tuple_list row_alias_opt +| openb closeb value_or_values val_tuple_list row_alias_opt { $$ = &Insert{Columns: []IdentifierCI{}, Rows: $4, RowAlias: $5} } @@ -8294,6 +8306,10 @@ insert_data: $$ = &Insert{Columns: $2, Rows: $4} } +value_or_values: + VALUE +| VALUES + ins_column_list: sql_id { @@ -9194,6 +9210,7 @@ non_reserved_keyword: | USER | USER_RESOURCES | VALIDATION +| VALUE | VAR_POP %prec FUNCTION_CALL_NON_KEYWORD | VAR_SAMP %prec FUNCTION_CALL_NON_KEYWORD | VARBINARY diff --git a/go/vt/sqlparser/testdata/select_cases.txt b/go/vt/sqlparser/testdata/select_cases.txt index 61a68c4d2d1..68632848887 100644 --- a/go/vt/sqlparser/testdata/select_cases.txt +++ b/go/vt/sqlparser/testdata/select_cases.txt @@ -1310,7 +1310,7 @@ INPUT select value,description,COUNT(bug_id) from t2 left join t1 on t2.program=t1.product and t2.value=t1.component where program="AAAAA" group by value having COUNT(bug_id) IN (0,2); END OUTPUT -select value, description, count(bug_id) from t2 left join t1 on t2.program = t1.product and t2.value = t1.component where program = 'AAAAA' group by value having count(bug_id) in (0, 2) +select `value`, description, count(bug_id) from t2 left join t1 on t2.program = t1.product and t2.`value` = t1.component where program = 'AAAAA' group by `value` having count(bug_id) in (0, 2) END INPUT select * from t1 where s1 < 'K' and s1 = 'Y'; @@ -3920,7 +3920,7 @@ INPUT select row_number() over (), value,description,COUNT(bug_id) from t2 left join t1 on t2.program=t1.product and t2.value=t1.component where program="AAAAA" group by value having COUNT(bug_id) IN (0,2); END OUTPUT -select row_number() over (), value, description, count(bug_id) from t2 left join t1 on t2.program = t1.product and t2.value = t1.component where program = 'AAAAA' group by value having count(bug_id) in (0, 2) +select row_number() over (), `value`, description, count(bug_id) from t2 left join t1 on t2.program = t1.product and t2.`value` = t1.component where program = 'AAAAA' group by `value` having count(bug_id) in (0, 2) END INPUT select * from t1 where lower(a)='aaa'; @@ -4292,7 +4292,7 @@ INPUT select max(value) from t1 AS m LEFT JOIN t2 AS c1 ON m.c1id = c1.id AND c1.active = 'Yes' LEFT JOIN t3 AS c2 ON m.c2id = c2.id AND c2.active = 'Yes' WHERE m.pid=1 AND (c1.id IS NOT NULL OR c2.id IS NOT NULL); END OUTPUT -select max(value) from t1 as m left join t2 as c1 on m.c1id = c1.id and c1.active = 'Yes' left join t3 as c2 on m.c2id = c2.id and c2.active = 'Yes' where m.pid = 1 and (c1.id is not null or c2.id is not null) +select max(`value`) from t1 as m left join t2 as c1 on m.c1id = c1.id and c1.active = 'Yes' left join t3 as c2 on m.c2id = c2.id and c2.active = 'Yes' where m.pid = 1 and (c1.id is not null or c2.id is not null) END INPUT select * from t1 where a in (select a from t11) order by 1, 2, 3 limit 1; @@ -10178,7 +10178,7 @@ INPUT select t1.*, t2.*, t1.value<=>t2.value from t1, t2 where t1.id=t2.id and t1.id=1; END OUTPUT -select t1.*, t2.*, t1.value <=> t2.value from t1, t2 where t1.id = t2.id and t1.id = 1 +select t1.*, t2.*, t1.`value` <=> t2.`value` from t1, t2 where t1.id = t2.id and t1.id = 1 END INPUT select left('hello',null),left(null,1),left(null,null); @@ -10634,7 +10634,7 @@ INPUT select value,description,COUNT(bug_id) from t2 left join t1 on t2.program=t1.product and t2.value=t1.component where program="AAAAA" group by value; END OUTPUT -select value, description, count(bug_id) from t2 left join t1 on t2.program = t1.product and t2.value = t1.component where program = 'AAAAA' group by value +select `value`, description, count(bug_id) from t2 left join t1 on t2.program = t1.product and t2.`value` = t1.component where program = 'AAAAA' group by `value` END INPUT select sql_big_result c,count(t) from t1 group by c order by c limit 10; @@ -11426,7 +11426,7 @@ INPUT select * from t1 where id <=> value or value<=>id; END OUTPUT -select * from t1 where id <=> value or value <=> id +select * from t1 where id <=> `value` or `value` <=> id END INPUT select a1,a2,b, max(c) from t1 where (c > 'f123') group by a1,a2,b; @@ -17180,7 +17180,7 @@ INPUT select value,description,bug_id from t2 left join t1 on t2.program=t1.product and t2.value=t1.component where program="AAAAA"; END OUTPUT -select value, description, bug_id from t2 left join t1 on t2.program = t1.product and t2.value = t1.component where program = 'AAAAA' +select `value`, description, bug_id from t2 left join t1 on t2.program = t1.product and t2.`value` = t1.component where program = 'AAAAA' END INPUT select "foo" = "foo " collate latin1_test; @@ -23060,7 +23060,7 @@ INPUT select * from t1 where value <=> value; END OUTPUT -select * from t1 where value <=> value +select * from t1 where `value` <=> `value` END INPUT select f3 from t1 where f3 between cast("2006-1-1 12:1:1" as datetime) and cast("2006-1-1 12:1:2" as datetime); diff --git a/go/vt/srvtopo/resilient_server.go b/go/vt/srvtopo/resilient_server.go index 78fc9134bce..1b8b390f087 100644 --- a/go/vt/srvtopo/resilient_server.go +++ b/go/vt/srvtopo/resilient_server.go @@ -26,6 +26,7 @@ import ( "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/servenv" "vitess.io/vitess/go/vt/topo" + "vitess.io/vitess/go/vt/utils" ) var ( @@ -33,23 +34,23 @@ var ( // the caching for both watched and unwatched values. // // For entries we don't watch (like the list of Keyspaces), we refresh - // the cached list from the topo after srv_topo_cache_refresh elapses. + // the cached list from the topo after srv-topo-cache-refresh elapses. // If the fetch fails, we hold onto the cached value until - // srv_topo_cache_ttl elapses. + // srv-topo-cache-ttl elapses. // // For entries we watch (like the SrvKeyspace for a given cell), if // setting the watch fails, we will use the last known value until - // srv_topo_cache_ttl elapses and we only try to re-establish the watch - // once every srv_topo_cache_refresh interval. + // srv-topo-cache-ttl elapses and we only try to re-establish the watch + // once every srv-topo-cache-refresh interval. srvTopoTimeout = 5 * time.Second srvTopoCacheTTL = 1 * time.Second srvTopoCacheRefresh = 1 * time.Second ) func registerFlags(fs *pflag.FlagSet) { - fs.DurationVar(&srvTopoTimeout, "srv_topo_timeout", srvTopoTimeout, "topo server timeout") - fs.DurationVar(&srvTopoCacheTTL, "srv_topo_cache_ttl", srvTopoCacheTTL, "how long to use cached entries for topology") - fs.DurationVar(&srvTopoCacheRefresh, "srv_topo_cache_refresh", srvTopoCacheRefresh, "how frequently to refresh the topology for cached entries") + utils.SetFlagDurationVar(fs, &srvTopoTimeout, "srv-topo-timeout", srvTopoTimeout, "topo server timeout") + utils.SetFlagDurationVar(fs, &srvTopoCacheTTL, "srv-topo-cache-ttl", srvTopoCacheTTL, "how long to use cached entries for topology") + utils.SetFlagDurationVar(fs, &srvTopoCacheRefresh, "srv-topo-cache-refresh", srvTopoCacheRefresh, "how frequently to refresh the topology for cached entries") } func init() { @@ -80,7 +81,7 @@ type ResilientServer struct { // based on the provided topo.Server. func NewResilientServer(ctx context.Context, base *topo.Server, counts *stats.CountersWithSingleLabel) *ResilientServer { if srvTopoCacheRefresh > srvTopoCacheTTL { - log.Fatalf("srv_topo_cache_refresh must be less than or equal to srv_topo_cache_ttl") + log.Fatalf("srv-topo-cache-refresh must be less than or equal to srv-topo-cache-ttl") } return &ResilientServer{ diff --git a/go/vt/srvtopo/server.go b/go/vt/srvtopo/server.go index bfbde498122..384fc9d6ebb 100644 --- a/go/vt/srvtopo/server.go +++ b/go/vt/srvtopo/server.go @@ -42,6 +42,9 @@ type Server interface { // GetSrvKeyspace returns the SrvKeyspace for a cell/keyspace. GetSrvKeyspace(ctx context.Context, cell, keyspace string) (*topodatapb.SrvKeyspace, error) + // WatchSrvKeyspace starts watching the SrvKeyspace object for changes. The callback function is called upon change. + // The callback function should return `true` if it wishes to continue watching for further changes, or `false` if it + // is done and wants to stop watching. WatchSrvKeyspace(ctx context.Context, cell, keyspace string, callback func(*topodatapb.SrvKeyspace, error) bool) // WatchSrvVSchema starts watching the SrvVSchema object for diff --git a/go/vt/tableacl/acl/acl.go b/go/vt/tableacl/acl/acl.go index abff749384c..7180e2c00f7 100644 --- a/go/vt/tableacl/acl/acl.go +++ b/go/vt/tableacl/acl/acl.go @@ -47,3 +47,12 @@ type AcceptAllACL struct{} func (acl AcceptAllACL) IsMember(principal *querypb.VTGateCallerID) bool { return true } + +type ACLState int8 + +const ( + ACLUnknown ACLState = iota + ACLAllow + ACLDenied + ACLPseudoDenied +) diff --git a/go/vt/throttler/max_replication_lag_module_config.go b/go/vt/throttler/max_replication_lag_module_config.go index e61909f57dc..ba4fe232526 100644 --- a/go/vt/throttler/max_replication_lag_module_config.go +++ b/go/vt/throttler/max_replication_lag_module_config.go @@ -35,7 +35,7 @@ func (cfg MaxReplicationLagModuleConfig) Clone() MaxReplicationLagModuleConfig { } // Most of the values are based on the assumption that vttablet is started -// with the flag --health_check_interval=20s. +// with the flag --health-check-interval=20s. const healthCheckInterval = 20 var defaultMaxReplicationLagModuleConfig = MaxReplicationLagModuleConfig{ diff --git a/go/vt/topo/conn.go b/go/vt/topo/conn.go index b00bdc67207..980981b24c4 100644 --- a/go/vt/topo/conn.go +++ b/go/vt/topo/conn.go @@ -123,7 +123,7 @@ type Conn interface { // LockWithTTL is similar to `Lock` but the difference is that it allows // you to override the global default TTL that is configured for the - // implementation (--topo_etcd_lease_ttl and --topo_consul_lock_session_ttl). + // implementation (--topo-etcd-lease-ttl and --topo-consul-lock-session-ttl). // Note: this is no different than `Lock` for ZooKeeper as it does not // support lock TTLs and they exist until released or the session ends. LockWithTTL(ctx context.Context, dirPath, contents string, ttl time.Duration) (LockDescriptor, error) diff --git a/go/vt/topo/consultopo/lock.go b/go/vt/topo/consultopo/lock.go index 49554474677..fb271ec1a79 100644 --- a/go/vt/topo/consultopo/lock.go +++ b/go/vt/topo/consultopo/lock.go @@ -113,7 +113,7 @@ func (s *Server) lock(ctx context.Context, dirPath, contents, ttl string) (topo. lockOpts.SessionOpts.Checks = s.lockChecks if s.lockTTL != "" { // Override the API default with the global default from - // --topo_consul_lock_session_ttl. + // --topo-consul-lock-session-ttl. lockOpts.SessionOpts.TTL = s.lockTTL } if ttl != "" { diff --git a/go/vt/topo/consultopo/server.go b/go/vt/topo/consultopo/server.go index ab61a40b1e8..b0f096726a7 100644 --- a/go/vt/topo/consultopo/server.go +++ b/go/vt/topo/consultopo/server.go @@ -32,6 +32,7 @@ import ( "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/servenv" "vitess.io/vitess/go/vt/topo" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vterrors" ) @@ -48,10 +49,10 @@ func init() { } func registerServerFlags(fs *pflag.FlagSet) { - fs.StringVar(&consulAuthClientStaticFile, "consul_auth_static_file", consulAuthClientStaticFile, "JSON File to read the topos/tokens from.") - fs.StringVar(&consulLockSessionChecks, "topo_consul_lock_session_checks", consulLockSessionChecks, "List of checks for consul session.") - fs.StringVar(&consulLockSessionTTL, "topo_consul_lock_session_ttl", consulLockSessionTTL, "TTL for consul session.") - fs.DurationVar(&consulLockDelay, "topo_consul_lock_delay", consulLockDelay, "LockDelay for consul session.") + utils.SetFlagStringVar(fs, &consulAuthClientStaticFile, "consul-auth-static-file", consulAuthClientStaticFile, "JSON File to read the topos/tokens from.") + utils.SetFlagStringVar(fs, &consulLockSessionChecks, "topo-consul-lock-session-checks", consulLockSessionChecks, "List of checks for consul session.") + utils.SetFlagStringVar(fs, &consulLockSessionTTL, "topo-consul-lock-session-ttl", consulLockSessionTTL, "TTL for consul session.") + utils.SetFlagDurationVar(fs, &consulLockDelay, "topo-consul-lock-delay", consulLockDelay, "LockDelay for consul session.") } // ClientAuthCred credential to use for consul clusters @@ -78,18 +79,18 @@ func getClientCreds() (creds map[string]*ClientAuthCred, err error) { if consulAuthClientStaticFile == "" { // Not configured, nothing to do. - log.Infof("Consul client auth is not set up. consul_auth_static_file was not provided") + log.Infof("Consul client auth is not set up. consul-auth-static-file was not provided") return nil, nil } data, err := os.ReadFile(consulAuthClientStaticFile) if err != nil { - err = vterrors.Wrapf(err, "Failed to read consul_auth_static_file file") + err = vterrors.Wrapf(err, "Failed to read consul-auth-static-file file") return creds, err } if err := json.Unmarshal(data, &creds); err != nil { - err = vterrors.Wrapf(err, "Error parsing consul_auth_static_file") + err = vterrors.Wrapf(err, "Error parsing consul-auth-static-file") return creds, err } return creds, nil diff --git a/go/vt/topo/consultopo/watch.go b/go/vt/topo/consultopo/watch.go index 8f3d4f6ad7c..883915a49d0 100644 --- a/go/vt/topo/consultopo/watch.go +++ b/go/vt/topo/consultopo/watch.go @@ -26,6 +26,7 @@ import ( "vitess.io/vitess/go/vt/servenv" "vitess.io/vitess/go/vt/topo" + "vitess.io/vitess/go/vt/utils" ) var ( @@ -37,7 +38,7 @@ func init() { } func registerWatchFlags(fs *pflag.FlagSet) { - fs.DurationVar(&watchPollDuration, "topo_consul_watch_poll_duration", watchPollDuration, "time of the long poll for watch queries.") + utils.SetFlagDurationVar(fs, &watchPollDuration, "topo-consul-watch-poll-duration", watchPollDuration, "time of the long poll for watch queries.") } // Watch is part of the topo.Conn interface. diff --git a/go/vt/topo/etcd2topo/lock.go b/go/vt/topo/etcd2topo/lock.go index 7fb761611cd..e86294e240f 100644 --- a/go/vt/topo/etcd2topo/lock.go +++ b/go/vt/topo/etcd2topo/lock.go @@ -31,6 +31,7 @@ import ( "vitess.io/vitess/go/vt/proto/vtrpc" "vitess.io/vitess/go/vt/servenv" "vitess.io/vitess/go/vt/topo" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vterrors" ) @@ -45,7 +46,7 @@ func init() { } func registerEtcd2TopoLockFlags(fs *pflag.FlagSet) { - fs.IntVar(&leaseTTL, "topo_etcd_lease_ttl", leaseTTL, "Lease TTL for locks and leader election. The client will use KeepAlive to keep the lease going.") + utils.SetFlagIntVar(fs, &leaseTTL, "topo-etcd-lease-ttl", leaseTTL, "Lease TTL for locks and leader election. The client will use KeepAlive to keep the lease going.") } // newUniqueEphemeralKV creates a new file in the provided directory. diff --git a/go/vt/topo/etcd2topo/server.go b/go/vt/topo/etcd2topo/server.go index 085ec3f3ff0..ecb46f91664 100644 --- a/go/vt/topo/etcd2topo/server.go +++ b/go/vt/topo/etcd2topo/server.go @@ -47,6 +47,7 @@ import ( "vitess.io/vitess/go/vt/servenv" "vitess.io/vitess/go/vt/topo" + "vitess.io/vitess/go/vt/utils" ) var ( @@ -87,9 +88,9 @@ func init() { } func registerEtcd2TopoFlags(fs *pflag.FlagSet) { - fs.StringVar(&clientCertPath, "topo_etcd_tls_cert", clientCertPath, "path to the client cert to use to connect to the etcd topo server, requires topo_etcd_tls_key, enables TLS") - fs.StringVar(&clientKeyPath, "topo_etcd_tls_key", clientKeyPath, "path to the client key to use to connect to the etcd topo server, enables TLS") - fs.StringVar(&serverCaPath, "topo_etcd_tls_ca", serverCaPath, "path to the ca to use to validate the server cert when connecting to the etcd topo server") + utils.SetFlagStringVar(fs, &clientCertPath, "topo-etcd-tls-cert", clientCertPath, "path to the client cert to use to connect to the etcd topo server, requires topo-etcd-tls-key, enables TLS") + utils.SetFlagStringVar(fs, &clientKeyPath, "topo-etcd-tls-key", clientKeyPath, "path to the client key to use to connect to the etcd topo server, enables TLS") + utils.SetFlagStringVar(fs, &serverCaPath, "topo-etcd-tls-ca", serverCaPath, "path to the ca to use to validate the server cert when connecting to the etcd topo server") } // Close implements topo.Server.Close. diff --git a/go/vt/topo/keyspace.go b/go/vt/topo/keyspace.go index 710bbee0653..c885dad61a7 100755 --- a/go/vt/topo/keyspace.go +++ b/go/vt/topo/keyspace.go @@ -393,6 +393,41 @@ func (ts *Server) DeleteKeyspace(ctx context.Context, keyspace string) error { return nil } +// DeleteOrphanedKeyspaceFiles clears the residual files for a given keyspace in a cell. +func (ts *Server) DeleteOrphanedKeyspaceFiles(ctx context.Context, cell string, keyspace string) error { + conn, err := ts.ConnForCell(ctx, cell) + if err != nil { + return err + } + + dirsToClear := []string{path.Join(KeyspacesPath, keyspace)} + for len(dirsToClear) > 0 { + dir := dirsToClear[len(dirsToClear)-1] + dirsToClear = dirsToClear[0 : len(dirsToClear)-1] + + children, err := conn.ListDir(ctx, dir, true) + if err != nil { + if IsErrType(err, NoNode) { + continue + } + return err + } + + for _, child := range children { + childPath := path.Join(dir, child.Name) + if child.Type == TypeDirectory { + dirsToClear = append(dirsToClear, childPath) + continue + } + err = conn.Delete(ctx, childPath, nil) + if err != nil { + return err + } + } + } + return nil +} + // GetKeyspaces returns the list of keyspaces in the topology. func (ts *Server) GetKeyspaces(ctx context.Context) ([]string, error) { if ctx.Err() != nil { diff --git a/go/vt/topo/keyspace_test.go b/go/vt/topo/keyspace_test.go new file mode 100644 index 00000000000..d790c31df7e --- /dev/null +++ b/go/vt/topo/keyspace_test.go @@ -0,0 +1,171 @@ +/* +Copyright 2025 The Vitess Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package topo_test + +import ( + "context" + "testing" + + "github.com/stretchr/testify/require" + + topodatapb "vitess.io/vitess/go/vt/proto/topodata" + "vitess.io/vitess/go/vt/topo" + "vitess.io/vitess/go/vt/topo/memorytopo" +) + +func TestDeleteOrphanedKeyspaceFiles(t *testing.T) { + cell := "zone-1" + cell2 := "zone-2" + keyspace := "ks" + keyspace2 := "ks2" + ctx := context.Background() + tests := []struct { + name string + setup func(t *testing.T, ts *topo.Server, mtf *memorytopo.Factory) + verify func(t *testing.T, ts *topo.Server, mtf *memorytopo.Factory) + }{ + { + name: "No orphaned files to delete", + setup: func(t *testing.T, ts *topo.Server, mtf *memorytopo.Factory) { + // We don't create anything that needs to be cleared. + }, + verify: func(t *testing.T, ts *topo.Server, mtf *memorytopo.Factory) { + // We check that we only get one ListDir call. + require.EqualValues(t, 1, mtf.GetCallStats().Counts()["ListDir"]) + }, + }, { + name: "Single orphaned file to delete", + setup: func(t *testing.T, ts *topo.Server, mtf *memorytopo.Factory) { + err := ts.UpdateShardReplicationFields(ctx, cell, keyspace, "0", func(sr *topodatapb.ShardReplication) error { + sr.Nodes = append(sr.Nodes, &topodatapb.ShardReplication_Node{TabletAlias: &topodatapb.TabletAlias{Cell: cell, Uid: 0}}) + return nil + }) + require.NoError(t, err) + // Verify that getting srvKeyspaceNames now gives us this keyspace. + keyspaces, err := ts.GetSrvKeyspaceNames(ctx, cell) + require.NoError(t, err) + require.EqualValues(t, 1, len(keyspaces)) + require.EqualValues(t, keyspace, keyspaces[0]) + // Also verify that we can't get the SrvKeyspace. + _, err = ts.GetSrvKeyspace(ctx, cell, keyspace) + require.Error(t, err) + require.True(t, topo.IsErrType(err, topo.NoNode)) + mtf.GetCallStats().ResetAll() + }, + verify: func(t *testing.T, ts *topo.Server, mtf *memorytopo.Factory) { + // We check that we only get 3 ListDir calls - + // - keyspaces/ks + // - keyspaces/ks/shards + // - keyspaces/ks/shards/0 + require.EqualValues(t, 3, mtf.GetCallStats().Counts()["ListDir"]) + // We check that we delete the shard replication file + // - keyspaces/ks/shards/0/ShardReplication + require.EqualValues(t, 1, mtf.GetCallStats().Counts()["Delete"]) + // Verify that getting srvKeyspaceNames is now empty. + keyspaces, err := ts.GetSrvKeyspaceNames(ctx, cell) + require.NoError(t, err) + require.Len(t, keyspaces, 0) + }, + }, { + name: "Ensure we don't delete extra files", + setup: func(t *testing.T, ts *topo.Server, mtf *memorytopo.Factory) { + err := ts.UpdateShardReplicationFields(ctx, cell, keyspace, "0", func(sr *topodatapb.ShardReplication) error { + sr.Nodes = append(sr.Nodes, &topodatapb.ShardReplication_Node{TabletAlias: &topodatapb.TabletAlias{Cell: cell, Uid: 0}}) + return nil + }) + require.NoError(t, err) + err = ts.CreateKeyspace(ctx, keyspace2, &topodatapb.Keyspace{KeyspaceType: topodatapb.KeyspaceType_NORMAL}) + require.NoError(t, err) + err = ts.UpdateShardReplicationFields(ctx, cell, keyspace2, "0", func(sr *topodatapb.ShardReplication) error { + sr.Nodes = append(sr.Nodes, &topodatapb.ShardReplication_Node{TabletAlias: &topodatapb.TabletAlias{Cell: cell, Uid: 0}}) + return nil + }) + require.NoError(t, err) + }, + verify: func(t *testing.T, ts *topo.Server, mtf *memorytopo.Factory) { + // Verify that we don't delete the files for the other keyspace. + _, err := ts.GetKeyspace(ctx, keyspace2) + require.NoError(t, err) + _, err = ts.GetShardReplication(ctx, cell, keyspace2, "0") + require.NoError(t, err) + }, + }, { + name: "Multiple orphaned files to delete", + setup: func(t *testing.T, ts *topo.Server, mtf *memorytopo.Factory) { + err := ts.UpdateShardReplicationFields(ctx, cell, keyspace, "0", func(sr *topodatapb.ShardReplication) error { + sr.Nodes = append(sr.Nodes, &topodatapb.ShardReplication_Node{TabletAlias: &topodatapb.TabletAlias{Cell: cell, Uid: 0}}) + return nil + }) + require.NoError(t, err) + err = ts.UpdateSrvKeyspace(ctx, cell, keyspace, &topodatapb.SrvKeyspace{ + Partitions: []*topodatapb.SrvKeyspace_KeyspacePartition{ + { + ServedType: topodatapb.TabletType_PRIMARY, + }, + }, + }) + require.NoError(t, err) + err = ts.UpdateSrvKeyspace(ctx, cell2, keyspace, &topodatapb.SrvKeyspace{ + Partitions: []*topodatapb.SrvKeyspace_KeyspacePartition{ + { + ServedType: topodatapb.TabletType_PRIMARY, + }, + }, + }) + require.NoError(t, err) + // Verify that getting srvKeyspaceNames now gives us this keyspace. + keyspaces, err := ts.GetSrvKeyspaceNames(ctx, cell) + require.NoError(t, err) + require.EqualValues(t, 1, len(keyspaces)) + require.EqualValues(t, keyspace, keyspaces[0]) + // Also verify that we can't get the SrvKeyspace. + _, err = ts.GetSrvKeyspace(ctx, cell, keyspace) + require.NoError(t, err) + mtf.GetCallStats().ResetAll() + }, + verify: func(t *testing.T, ts *topo.Server, mtf *memorytopo.Factory) { + // We check that we only get 3 ListDir calls - + // - keyspaces/ks + // - keyspaces/ks/shards + // - keyspaces/ks/shards/0 + require.EqualValues(t, 3, mtf.GetCallStats().Counts()["ListDir"]) + // We check that we delete the shard replication file + // - keyspaces/ks/shards/0/ShardReplication + // - keyspaces/ks/SrvKeyspace + require.EqualValues(t, 2, mtf.GetCallStats().Counts()["Delete"]) + // Verify that getting srvKeyspaceNames is now empty. + keyspaces, err := ts.GetSrvKeyspaceNames(ctx, cell) + require.NoError(t, err) + require.Len(t, keyspaces, 0) + // Since we only clear orphaned files for one cell, we should still see + // they srvKeyspace in the other cell. + keyspaces, err = ts.GetSrvKeyspaceNames(ctx, cell2) + require.NoError(t, err) + require.Len(t, keyspaces, 1) + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + ts, mtf := memorytopo.NewServerAndFactory(ctx, cell, cell2) + tt.setup(t, ts, mtf) + err := ts.DeleteOrphanedKeyspaceFiles(ctx, cell, keyspace) + require.NoError(t, err) + tt.verify(t, ts, mtf) + }) + } +} diff --git a/go/vt/topo/locks.go b/go/vt/topo/locks.go index 967d3f7f2e4..b2a3957d116 100644 --- a/go/vt/topo/locks.go +++ b/go/vt/topo/locks.go @@ -31,6 +31,7 @@ import ( "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/proto/vtrpc" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vterrors" ) @@ -73,7 +74,7 @@ func init() { } func registerTopoLockFlags(fs *pflag.FlagSet) { - fs.DurationVar(&RemoteOperationTimeout, "remote_operation_timeout", RemoteOperationTimeout, "time to wait for a remote operation") + utils.SetFlagDurationVar(fs, &RemoteOperationTimeout, "remote-operation-timeout", RemoteOperationTimeout, "time to wait for a remote operation") fs.DurationVar(&LockTimeout, "lock-timeout", LockTimeout, "Maximum time to wait when attempting to acquire a lock from the topo server") } @@ -324,8 +325,8 @@ func newFuncLockOption(f func(*lockOptions)) *funcLockOption { // WithTTL allows you to specify how long the underlying topo server // implementation should hold the lock before releasing it — even if the caller // has not explicitly released it. This provides a way to override the global -// ttl values that are set via --topo_consul_lock_session_ttl and -// --topo_etcd_lease_ttl. +// ttl values that are set via --topo-consul-lock-session-ttl and +// --topo-etcd-lease-ttl. // Note: This option is ignored by the ZooKeeper implementation as it does not // support TTLs. func WithTTL(ttl time.Duration) LockOption { diff --git a/go/vt/topo/server.go b/go/vt/topo/server.go index 865dbc4bed8..875d7633346 100644 --- a/go/vt/topo/server.go +++ b/go/vt/topo/server.go @@ -54,6 +54,7 @@ import ( "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/proto/topodata" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vterrors" ) @@ -194,10 +195,10 @@ func init() { } func registerTopoFlags(fs *pflag.FlagSet) { - fs.StringVar(&topoImplementation, "topo_implementation", topoImplementation, "the topology implementation to use") - fs.StringVar(&topoGlobalServerAddress, "topo_global_server_address", topoGlobalServerAddress, "the address of the global topology server") - fs.StringVar(&topoGlobalRoot, "topo_global_root", topoGlobalRoot, "the path of the global topology data in the global topology server") - fs.Int64Var(&DefaultReadConcurrency, "topo_read_concurrency", DefaultReadConcurrency, "Maximum concurrency of topo reads per global or local cell.") + utils.SetFlagStringVar(fs, &topoImplementation, "topo-implementation", topoImplementation, "the topology implementation to use") + utils.SetFlagStringVar(fs, &topoGlobalServerAddress, "topo-global-server-address", topoGlobalServerAddress, "the address of the global topology server") + utils.SetFlagStringVar(fs, &topoGlobalRoot, "topo-global-root", topoGlobalRoot, "the path of the global topology data in the global topology server") + utils.SetFlagInt64Var(fs, &DefaultReadConcurrency, "topo-read-concurrency", DefaultReadConcurrency, "Maximum concurrency of topo reads per global or local cell.") } // RegisterFactory registers a Factory for an implementation for a Server. @@ -253,10 +254,10 @@ func OpenServer(implementation, serverAddress, root string) (*Server, error) { // for implementation, address and root. It log.Exits out if an error occurs. func Open() *Server { if topoGlobalServerAddress == "" { - log.Exitf("topo_global_server_address must be configured") + log.Exitf("topo-global-server-address must be configured") } if topoGlobalRoot == "" { - log.Exit("topo_global_root must be non-empty") + log.Exit("topo-global-root must be non-empty") } ts, err := OpenServer(topoImplementation, topoGlobalServerAddress, topoGlobalRoot) if err != nil { diff --git a/go/vt/topo/zk2topo/zk_conn.go b/go/vt/topo/zk2topo/zk_conn.go index aa7ac13d281..1df25f7471d 100644 --- a/go/vt/topo/zk2topo/zk_conn.go +++ b/go/vt/topo/zk2topo/zk_conn.go @@ -34,6 +34,7 @@ import ( "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" ) const ( @@ -62,13 +63,12 @@ func init() { } func registerFlags(fs *pflag.FlagSet) { - fs.IntVar(&maxConcurrency, "topo_zk_max_concurrency", maxConcurrency, "maximum number of pending requests to send to a Zookeeper server.") - fs.DurationVar(&baseTimeout, "topo_zk_base_timeout", baseTimeout, "zk base timeout (see zk.Connect)") - fs.StringVar(&certPath, "topo_zk_tls_cert", certPath, "the cert to use to connect to the zk topo server, requires topo_zk_tls_key, enables TLS") - fs.StringVar(&keyPath, "topo_zk_tls_key", keyPath, "the key to use to connect to the zk topo server, enables TLS") - fs.StringVar(&caPath, "topo_zk_tls_ca", caPath, "the server ca to use to validate servers when connecting to the zk topo server") - fs.StringVar(&authFile, "topo_zk_auth_file", authFile, "auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass") - + utils.SetFlagIntVar(fs, &maxConcurrency, "topo-zk-max-concurrency", maxConcurrency, "maximum number of pending requests to send to a Zookeeper server.") + utils.SetFlagDurationVar(fs, &baseTimeout, "topo-zk-base-timeout", baseTimeout, "zk base timeout (see zk.Connect)") + utils.SetFlagStringVar(fs, &certPath, "topo-zk-tls-cert", certPath, "the cert to use to connect to the zk topo server, requires topo-zk-tls-key, enables TLS") + utils.SetFlagStringVar(fs, &keyPath, "topo-zk-tls-key", keyPath, "the key to use to connect to the zk topo server, enables TLS") + utils.SetFlagStringVar(fs, &caPath, "topo-zk-tls-ca", caPath, "the server ca to use to validate servers when connecting to the zk topo server") + utils.SetFlagStringVar(fs, &authFile, "topo-zk-auth-file", authFile, "auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass") } // Time returns a time.Time from a ZK int64 milliseconds since Epoch time. @@ -296,25 +296,25 @@ func (c *ZkConn) getConn(ctx context.Context) (*zk.Conn, error) { return c.conn, nil } -// maybeAddAuth calls AddAuth if the `-topo_zk_auth_file` flag was specified +// maybeAddAuth calls AddAuth if the `-topo-zk-auth-file` flag was specified func (c *ZkConn) maybeAddAuth(ctx context.Context) { if authFile == "" { return } authInfoBytes, err := os.ReadFile(authFile) if err != nil { - log.Errorf("failed to read topo_zk_auth_file: %v", err) + log.Errorf("failed to read topo-zk-auth-file: %v", err) return } authInfo := strings.TrimRight(string(authInfoBytes), "\n") authInfoParts := strings.SplitN(authInfo, ":", 2) if len(authInfoParts) != 2 { - log.Errorf("failed to parse topo_zk_auth_file contents, expected format : but saw: %s", authInfo) + log.Errorf("failed to parse topo-zk-auth-file contents, expected format : but saw: %s", authInfo) return } err = c.conn.AddAuth(authInfoParts[0], []byte(authInfoParts[1])) if err != nil { - log.Errorf("failed to add auth from topo_zk_auth_file: %v", err) + log.Errorf("failed to add auth from topo-zk-auth-file: %v", err) return } } diff --git a/go/vt/topotools/rebuild_keyspace.go b/go/vt/topotools/rebuild_keyspace.go index 72e060b79e2..ae8b83d793d 100644 --- a/go/vt/topotools/rebuild_keyspace.go +++ b/go/vt/topotools/rebuild_keyspace.go @@ -31,6 +31,19 @@ import ( // RebuildKeyspace rebuilds the serving graph data while locking out other changes. func RebuildKeyspace(ctx context.Context, log logutil.Logger, ts *topo.Server, keyspace string, cells []string, allowPartial bool) (err error) { + _, err = ts.GetKeyspace(ctx, keyspace) + if err != nil { + // If we get an error trying to get the keyspace and it's not a + // no node, error, we should fail. + if !topo.IsErrType(err, topo.NoNode) { + return err + } + // If the keyspace doesn't exist, we should delete the serving keyspace records. + // This is to ensure that the serving graph is consistent with the topo. + if err = deleteOrphanedFiles(ctx, ts, keyspace, cells); err != nil { + return err + } + } ctx, unlock, lockErr := ts.LockKeyspace(ctx, keyspace, "RebuildKeyspace") if lockErr != nil { return lockErr @@ -40,6 +53,16 @@ func RebuildKeyspace(ctx context.Context, log logutil.Logger, ts *topo.Server, k return RebuildKeyspaceLocked(ctx, log, ts, keyspace, cells, allowPartial) } +// deleteOrphanedFiles clears the residual records for a keyspace that has already been deleted. +func deleteOrphanedFiles(ctx context.Context, ts *topo.Server, keyspace string, cells []string) error { + for _, cell := range cells { + if err := ts.DeleteOrphanedKeyspaceFiles(ctx, cell, keyspace); err != nil { + return err + } + } + return nil +} + // RebuildKeyspaceLocked should only be used with an action lock on the keyspace // - otherwise the consistency of the serving graph data can't be // guaranteed. diff --git a/go/vt/utils/flags.go b/go/vt/utils/flags.go new file mode 100644 index 00000000000..ed49a443121 --- /dev/null +++ b/go/vt/utils/flags.go @@ -0,0 +1,138 @@ +/* +Copyright 2025 The Vitess Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package utils + +import ( + "fmt" + "math/rand/v2" + "strings" + "time" + + "github.com/spf13/pflag" + // "vitess.io/vitess/go/vt/log" +) + +/* +Contains utility functions for working with flags during the flags refactor project. +*/ + +// flagVariants returns two variants of the flag name: +// one with dashes replaced by underscores and one with underscores replaced by dashes. +func flagVariants(name string) (underscored, dashed string) { + prefix := "--" + if strings.HasPrefix(name, prefix) { + nameWithoutPrefix := strings.TrimPrefix(name, prefix) + underscored = prefix + strings.ReplaceAll(nameWithoutPrefix, "-", "_") + dashed = prefix + strings.ReplaceAll(nameWithoutPrefix, "_", "-") + } else { + underscored = strings.ReplaceAll(name, "-", "_") + dashed = strings.ReplaceAll(name, "_", "-") + } + return +} + +// setFlagVar is a generic helper for registering flags. +// setFunc should be a function with signature func(fs *pflag.FlagSet, p *T, name string, def T, usage string) +func setFlagVar[T any](fs *pflag.FlagSet, p *T, name string, def T, usage string, + setFunc func(fs *pflag.FlagSet, p *T, name string, def T, usage string)) { + + underscored, dashed := flagVariants(name) + if name == underscored { + fmt.Printf("[WARNING] Please use flag names with dashes instead of underscores, preparing for deprecation of underscores in flag names") + } + + setFunc(fs, p, dashed, def, usage) + setFunc(fs, p, underscored, def, "") + _ = fs.MarkHidden(underscored) + _ = fs.MarkDeprecated(underscored, fmt.Sprintf("use %s instead", dashed)) +} + +func SetFlagIntVar(fs *pflag.FlagSet, p *int, name string, def int, usage string) { + setFlagVar(fs, p, name, def, usage, (*pflag.FlagSet).IntVar) +} + +func SetFlagInt64Var(fs *pflag.FlagSet, p *int64, name string, def int64, usage string) { + setFlagVar(fs, p, name, def, usage, (*pflag.FlagSet).Int64Var) +} + +func SetFlagBoolVar(fs *pflag.FlagSet, p *bool, name string, def bool, usage string) { + setFlagVar(fs, p, name, def, usage, (*pflag.FlagSet).BoolVar) +} + +func SetFlagStringVar(fs *pflag.FlagSet, p *string, name string, def string, usage string) { + setFlagVar(fs, p, name, def, usage, (*pflag.FlagSet).StringVar) +} + +func SetFlagDurationVar(fs *pflag.FlagSet, p *time.Duration, name string, def time.Duration, usage string) { + setFlagVar(fs, p, name, def, usage, (*pflag.FlagSet).DurationVar) +} + +func SetFlagUint32Var(fs *pflag.FlagSet, p *uint32, name string, def uint32, usage string) { + setFlagVar(fs, p, name, def, usage, (*pflag.FlagSet).Uint32Var) +} + +func SetFlagUint64Var(fs *pflag.FlagSet, p *uint64, name string, def uint64, usage string) { + setFlagVar(fs, p, name, def, usage, (*pflag.FlagSet).Uint64Var) +} + +func SetFlagStringSliceVar(fs *pflag.FlagSet, p *[]string, name string, def []string, usage string) { + setFlagVar(fs, p, name, def, usage, (*pflag.FlagSet).StringSliceVar) +} + +func SetFlagUintVar(fs *pflag.FlagSet, p *uint, name string, def uint, usage string) { + setFlagVar(fs, p, name, def, usage, (*pflag.FlagSet).UintVar) +} + +func SetFlagFloat64Var(fs *pflag.FlagSet, p *float64, name string, def float64, usage string) { + setFlagVar(fs, p, name, def, usage, (*pflag.FlagSet).Float64Var) +} + +// SetFlagVar registers a flag (that implements the pflag.Value interface) +// using both the dashed and underscored versions of the flag name. +// The underscored version is hidden and marked as deprecated. +func SetFlagVar(fs *pflag.FlagSet, value pflag.Value, name, usage string) { + underscored, dashed := flagVariants(name) + if name == underscored { + fmt.Printf("[WARNING] Please use flag names with dashes instead of underscores, preparing for deprecation of underscores in flag names") + } + fs.Var(value, dashed, usage) + fs.Var(value, underscored, "") + _ = fs.MarkHidden(underscored) + _ = fs.MarkDeprecated(underscored, fmt.Sprintf("use %s instead", dashed)) +} + +// SetFlagVariantsForTests randomly assigns either the underscored or dashed version of the flag name to the map. +// This is designed to help catch cases where code does not properly handle both formats during testing. +func SetFlagVariantsForTests(m map[string]string, key, value string) { + underscored, dashed := flagVariants(key) + if rand.Int()%2 == 0 { + m[underscored] = value + } else { + m[dashed] = value + } +} + +// GetFlagVariantForTests randomly returns either the underscored or dashed version of the flag name. +func GetFlagVariantForTests(flagName string) string { + underscored, dashed := flagVariants(flagName) + if rand.Int()%2 == 0 { + // fmt.Print("Using flag variant: ", underscored, "\n") + return underscored + } + // fmt.Print("Using flag variant: ", dashed, "\n") + return dashed +} diff --git a/go/vt/utils/flags_test.go b/go/vt/utils/flags_test.go new file mode 100644 index 00000000000..8d47065505c --- /dev/null +++ b/go/vt/utils/flags_test.go @@ -0,0 +1,138 @@ +/* +Copyright 2025 The Vitess Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package utils + +import ( + "fmt" + "testing" + + "github.com/spf13/pflag" +) + +func TestFlagVariants(t *testing.T) { + tests := []struct { + input string + expectedUnderscored string + expectedDashed string + }{ + {"a-b", "a_b", "a-b"}, + {"a_b", "a_b", "a-b"}, + {"a-b_c", "a_b_c", "a-b-c"}, + {"example", "example", "example"}, + } + + for _, tc := range tests { + underscored, dashed := flagVariants(tc.input) + if underscored != tc.expectedUnderscored { + t.Errorf("For input %q, expected underscored %q, got %q", tc.input, tc.expectedUnderscored, underscored) + } + if dashed != tc.expectedDashed { + t.Errorf("For input %q, expected dashed %q, got %q", tc.input, tc.expectedDashed, dashed) + } + } +} + +// testFlagVar is a generic helper to test both flag setters for various data types. +func testFlagVar[T any](t *testing.T, name string, def T, usage string, setter func(fs *pflag.FlagSet, p *T, name string, def T, usage string)) { + fs := pflag.NewFlagSet("test", pflag.ContinueOnError) + var value T + setter(fs, &value, name, def, usage) + underscored, dashed := flagVariants(name) + + // Verify the primary (dashed) flag. + fDashed := fs.Lookup(dashed) + if fDashed == nil { + t.Fatalf("Expected flag %q to be registered", dashed) + } else { + if fDashed.Usage != usage { + t.Errorf("Expected usage %q for flag %q, got %q", usage, dashed, fDashed.Usage) + } + if fDashed.Hidden { + t.Errorf("Flag %q should not be hidden", dashed) + } + } + + // Verify the (deprecated )alias (underscored) flag. + fUnderscored := fs.Lookup(underscored) + if fUnderscored == nil { + t.Fatalf("Expected flag %q to be registered", underscored) + } else { + if fUnderscored.Usage != "" { + t.Errorf("Expected empty usage for flag %q, got %q", underscored, fUnderscored.Usage) + } + if !fUnderscored.Hidden { + t.Errorf("Flag %q should be hidden", underscored) + } + expectedDep := fmt.Sprintf("use %s instead", dashed) + if fUnderscored.Deprecated != expectedDep { + t.Errorf("Expected deprecated message %q for flag %q, got %q", expectedDep, underscored, fUnderscored.Deprecated) + } + } +} + +func testFlagVars[T any](t *testing.T, name string, def T, usage string, setter func(fs *pflag.FlagSet, p *T, name string, def T, usage string)) { + underscored, dashed := flagVariants(name) + testFlagVar(t, dashed, def, usage, setter) + testFlagVar(t, underscored, def, "", setter) +} + +func TestSetFlagIntVar(t *testing.T) { + testFlagVars(t, "int-flag", 42, "an integer flag", SetFlagIntVar) +} + +func TestSetFlagBoolVar(t *testing.T) { + testFlagVars(t, "bool-flag", true, "a boolean flag", SetFlagBoolVar) +} + +func TestSetFlagVariantsForTests(t *testing.T) { + m := make(map[string]string) + key := "test-flag" + value := "some-value" + + SetFlagVariantsForTests(m, key, value) + + underscored, dashed := flagVariants(key) + if m[underscored] != value && m[dashed] != value { + t.Errorf("Expected either m[%q] or m[%q] to be %q, but got neither", underscored, dashed, value) + } + + if m[underscored] == value && m[dashed] == value { + t.Errorf("Expected only one variant to be set, but both were set") + } +} + +// TestGetFlagVariantForTests checks that GetFlagVariantForTests returns either the underscored or dashed variant. +func TestGetFlagVariantForTests(t *testing.T) { + tests := []struct { + input string + }{ + {"a-b"}, // expects either "a_b" or "a-b" + {"--a_b"}, // expects either "--a_b" or "--a-b" + {"example"}, // expects "example" + } + + for _, tc := range tests { + underscored, dashed := flagVariants(tc.input) + result := GetFlagVariantForTests(tc.input) + if result != underscored && result != dashed { + t.Errorf( + "Expected either %q or %q for input %q, got %q", + underscored, dashed, tc.input, result, + ) + } + } +} diff --git a/go/vt/vitessdriver/fakeserver_test.go b/go/vt/vitessdriver/fakeserver_test.go index a2b43caefde..f914b280a1b 100644 --- a/go/vt/vitessdriver/fakeserver_test.go +++ b/go/vt/vitessdriver/fakeserver_test.go @@ -28,6 +28,7 @@ import ( querypb "vitess.io/vitess/go/vt/proto/query" topodatapb "vitess.io/vitess/go/vt/proto/topodata" vtgatepb "vitess.io/vitess/go/vt/proto/vtgate" + "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/vtgate/vtgateservice" ) @@ -177,6 +178,43 @@ func (f *fakeVTGateService) VStream(ctx context.Context, tabletType topodatapb.T return nil } +// ExecuteMulti is part of the VTGateService interface +func (f *fakeVTGateService) ExecuteMulti(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sqlString string) (newSession *vtgatepb.Session, qrs []*sqltypes.Result, err error) { + queries, err := sqlparser.NewTestParser().SplitStatementToPieces(sqlString) + if err != nil { + return session, nil, err + } + var result *sqltypes.Result + for _, query := range queries { + session, result, err = f.Execute(ctx, mysqlCtx, session, query, nil, false) + if err != nil { + return session, qrs, err + } + qrs = append(qrs, result) + } + return session, qrs, nil +} + +// StreamExecuteMulti is part of the VTGateService interface +func (f *fakeVTGateService) StreamExecuteMulti(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sqlString string, callback func(qr sqltypes.QueryResponse, more bool, firstPacket bool) error) (*vtgatepb.Session, error) { + queries, err := sqlparser.NewTestParser().SplitStatementToPieces(sqlString) + if err != nil { + return session, err + } + for idx, query := range queries { + firstPacket := true + session, err = f.StreamExecute(ctx, mysqlCtx, session, query, nil, func(result *sqltypes.Result) error { + err = callback(sqltypes.QueryResponse{QueryResult: result}, idx < len(queries)-1, firstPacket) + firstPacket = false + return err + }) + if err != nil { + return session, err + } + } + return session, nil +} + // HandlePanic is part of the VTGateService interface func (f *fakeVTGateService) HandlePanic(err *error) { if x := recover(); x != nil { diff --git a/go/vt/vtadmin/cluster/discovery/discovery_consul.go b/go/vt/vtadmin/cluster/discovery/discovery_consul.go index 76ee229edd5..4367a547eda 100644 --- a/go/vt/vtadmin/cluster/discovery/discovery_consul.go +++ b/go/vt/vtadmin/cluster/discovery/discovery_consul.go @@ -90,7 +90,7 @@ func NewConsul(cluster *vtadminpb.Cluster, flags *pflag.FlagSet, args []string) flags.StringVar(&disco.vtgatePoolTag, "vtgate-pool-tag", "pool", "consul service tag to group vtgates by pool") flags.StringVar(&disco.vtgateCellTag, "vtgate-cell-tag", "cell", "consul service tag to group vtgates by cell") flags.StringVar(&disco.vtgateKeyspacesToWatchTag, "vtgate-keyspaces-to-watch-tag", "keyspaces", - "consul service tag identifying -keyspaces_to_watch for vtgates") + "consul service tag identifying -keyspaces-to-watch for vtgates") vtgateAddrTmplStr := flags.String("vtgate-addr-tmpl", "{{ .Hostname }}", "Go template string to produce a dialable address from a *vtadminpb.VTGate "+ diff --git a/go/vt/vtcombo/tablet_map.go b/go/vt/vtcombo/tablet_map.go index e8c8935f989..aec054b6969 100644 --- a/go/vt/vtcombo/tablet_map.go +++ b/go/vt/vtcombo/tablet_map.go @@ -202,7 +202,7 @@ func InitTabletMap( // Do this before any tablets are created so that they respect the protocol, // otherwise it defaults to grpc. // - // main() forces the --tablet_manager_protocol flag to this value. + // main() forces the --tablet-manager-protocol flag to this value. tmclient.RegisterTabletManagerClientFactory("internal", func() tmclient.TabletManagerClient { return &internalTabletManagerClient{} }) @@ -223,7 +223,7 @@ func InitTabletMap( return 0, fmt.Errorf("RebuildVSchemaGraph failed: %v", err) } - // Register the tablet dialer for tablet server. main() forces the --tablet_protocol + // Register the tablet dialer for tablet server. main() forces the --tablet-protocol // flag to this value. tabletconn.RegisterDialer("internal", dialer) @@ -992,6 +992,14 @@ func (itmc *internalTabletManagerClient) UpdateVReplicationWorkflows(context.Con return nil, fmt.Errorf("not implemented in vtcombo") } +func (itmc *internalTabletManagerClient) UpdateSequenceTables(ctx context.Context, tablet *topodatapb.Tablet, request *tabletmanagerdatapb.UpdateSequenceTablesRequest) (*tabletmanagerdatapb.UpdateSequenceTablesResponse, error) { + return nil, fmt.Errorf("not implemented in vtcombo") +} + +func (itmc *internalTabletManagerClient) GetMaxValueForSequences(ctx context.Context, tablet *topodatapb.Tablet, request *tabletmanagerdatapb.GetMaxValueForSequencesRequest) (*tabletmanagerdatapb.GetMaxValueForSequencesResponse, error) { + return nil, fmt.Errorf("not implemented in vtcombo") +} + func (itmc *internalTabletManagerClient) ResetReplication(context.Context, *topodatapb.Tablet) error { return fmt.Errorf("not implemented in vtcombo") } diff --git a/go/vt/vtctl/grpcclientcommon/dial_option.go b/go/vt/vtctl/grpcclientcommon/dial_option.go index 697c79c2a6f..f955981b61f 100644 --- a/go/vt/vtctl/grpcclientcommon/dial_option.go +++ b/go/vt/vtctl/grpcclientcommon/dial_option.go @@ -24,6 +24,7 @@ import ( "vitess.io/vitess/go/vt/grpcclient" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" ) var cert, key, ca, crl, name string @@ -36,11 +37,11 @@ func init() { } func RegisterFlags(fs *pflag.FlagSet) { - fs.StringVar(&cert, "vtctld_grpc_cert", cert, "the cert to use to connect") - fs.StringVar(&key, "vtctld_grpc_key", key, "the key to use to connect") - fs.StringVar(&ca, "vtctld_grpc_ca", ca, "the server ca to use to validate servers when connecting") - fs.StringVar(&crl, "vtctld_grpc_crl", crl, "the server crl to use to validate server certificates when connecting") - fs.StringVar(&name, "vtctld_grpc_server_name", name, "the server name to use to validate server certificate") + utils.SetFlagStringVar(fs, &cert, "vtctld-grpc-cert", cert, "the cert to use to connect") + utils.SetFlagStringVar(fs, &key, "vtctld-grpc-key", key, "the key to use to connect") + utils.SetFlagStringVar(fs, &ca, "vtctld-grpc-ca", ca, "the server ca to use to validate servers when connecting") + utils.SetFlagStringVar(fs, &crl, "vtctld-grpc-crl", crl, "the server crl to use to validate server certificates when connecting") + utils.SetFlagStringVar(fs, &name, "vtctld-grpc-server-name", name, "the server name to use to validate server certificate") } // SecureDialOption returns a grpc.DialOption configured to use TLS (or diff --git a/go/vt/vtctl/grpcvtctlclient/client_test.go b/go/vt/vtctl/grpcvtctlclient/client_test.go index 00ec4888e76..912cb8fb3b1 100644 --- a/go/vt/vtctl/grpcvtctlclient/client_test.go +++ b/go/vt/vtctl/grpcvtctlclient/client_test.go @@ -111,10 +111,10 @@ func TestVtctlAuthClient(t *testing.T) { grpcclient.RegisterFlags(fs) err = fs.Parse([]string{ - "--grpc_auth_static_client_creds", + "--grpc-auth-static-client-creds", f.Name(), }) - require.NoError(t, err, "failed to set `--grpc_auth_static_client_creds=%s`", f.Name()) + require.NoError(t, err, "failed to set `--grpc-auth-static-client-creds=%s`", f.Name()) // Create a VtctlClient gRPC client to talk to the fake server client, err := gRPCVtctlClientFactory(ctx, fmt.Sprintf("localhost:%v", port)) diff --git a/go/vt/vtctl/grpcvtctldclient/client_gen.go b/go/vt/vtctl/grpcvtctldclient/client_gen.go index 368c0573bd7..b56c27a4171 100644 --- a/go/vt/vtctl/grpcvtctldclient/client_gen.go +++ b/go/vt/vtctl/grpcvtctldclient/client_gen.go @@ -1127,6 +1127,15 @@ func (client *gRPCVtctldClient) ValidateVersionShard(ctx context.Context, in *vt return client.c.ValidateVersionShard(ctx, in, opts...) } +// WorkflowAddTables is part of the vtctlservicepb.VtctldClient interface. +func (client *gRPCVtctldClient) WorkflowAddTables(ctx context.Context, in *vtctldatapb.WorkflowAddTablesRequest, opts ...grpc.CallOption) (*vtctldatapb.WorkflowAddTablesResponse, error) { + if client.c == nil { + return nil, status.Error(codes.Unavailable, connClosedMsg) + } + + return client.c.WorkflowAddTables(ctx, in, opts...) +} + // WorkflowDelete is part of the vtctlservicepb.VtctldClient interface. func (client *gRPCVtctldClient) WorkflowDelete(ctx context.Context, in *vtctldatapb.WorkflowDeleteRequest, opts ...grpc.CallOption) (*vtctldatapb.WorkflowDeleteResponse, error) { if client.c == nil { diff --git a/go/vt/vtctl/grpcvtctldserver/server.go b/go/vt/vtctl/grpcvtctldserver/server.go index fce5ef10c90..f47041dc39b 100644 --- a/go/vt/vtctl/grpcvtctldserver/server.go +++ b/go/vt/vtctl/grpcvtctldserver/server.go @@ -235,7 +235,7 @@ func (s *VtctldServer) ApplySchema(ctx context.Context, req *vtctldatapb.ApplySc defer panicHandler(&err) span.Annotate("keyspace", req.Keyspace) - span.Annotate("ddl_strategy", req.DdlStrategy) + span.Annotate("ddl-strategy", req.DdlStrategy) if len(req.Sql) == 0 { err = vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "Sql must be a non-empty array") @@ -3122,6 +3122,21 @@ func (s *VtctldServer) MaterializeCreate(ctx context.Context, req *vtctldatapb.M return resp, err } +// WorkflowAddTables is part of the vtctlservicepb.VtctldServer interface. +func (s *VtctldServer) WorkflowAddTables(ctx context.Context, req *vtctldatapb.WorkflowAddTablesRequest) (resp *vtctldatapb.WorkflowAddTablesResponse, err error) { + span, ctx := trace.NewSpan(ctx, "VtctldServer.WorkflowAddTables") + defer span.Finish() + + defer panicHandler(&err) + + span.Annotate("workflow", req.Workflow) + span.Annotate("keyspace", req.Keyspace) + span.Annotate("table_settings", req.TableSettings) + + err = s.ws.WorkflowAddTables(ctx, req) + return resp, err +} + // MigrateCreate is part of the vtctlservicepb.VtctldServer interface. func (s *VtctldServer) MigrateCreate(ctx context.Context, req *vtctldatapb.MigrateCreateRequest) (resp *vtctldatapb.WorkflowStatusResponse, err error) { span, ctx := trace.NewSpan(ctx, "VtctldServer.MigrateCreate") @@ -5078,8 +5093,17 @@ func (s *VtctldServer) ValidateShard(ctx context.Context, req *vtctldatapb.Valid var ( wg sync.WaitGroup - results = make(chan string, len(aliases)) + results = make(chan string, len(aliases)+1) ) + // Start processing results immediately, so that we + // don't end up blocking on writes. + done := make(chan bool) + go func() { + for result := range results { + resp.Results = append(resp.Results, result) + } + done <- true + }() for _, alias := range aliases { wg.Add(1) @@ -5184,14 +5208,6 @@ func (s *VtctldServer) ValidateShard(ctx context.Context, req *vtctldatapb.Valid pingTablets(ctx, tabletMap, results) // done async, using the waitgroup declared above in the main method body. } - done := make(chan bool) - go func() { - for result := range results { - resp.Results = append(resp.Results, result) - } - done <- true - }() - wg.Wait() close(results) <-done diff --git a/go/vt/vtctl/grpcvtctldserver/server_test.go b/go/vt/vtctl/grpcvtctldserver/server_test.go index 83a8d609b4b..180d4b92622 100644 --- a/go/vt/vtctl/grpcvtctldserver/server_test.go +++ b/go/vt/vtctl/grpcvtctldserver/server_test.go @@ -22,6 +22,7 @@ import ( "fmt" "io" "os" + "path" "slices" "sort" "strings" @@ -14398,6 +14399,117 @@ func TestValidateKeyspace(t *testing.T) { } } +// This test validates the bug described in https://github.com/vitessio/vitess/issues/18113. +func TestValidateKeyspaceErrors(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + cell := "zone-1" + ks := "ks" + shard := "-" + // Setup the topo server and the vtctld server. + ts := memorytopo.NewServer(ctx, cell) + tmc := &testutil.TabletManagerClient{} + vtctldServer := NewTestVtctldServer(ts, tmc) + conn, err := ts.ConnForCell(ctx, cell) + require.NoError(t, err) + + // Create the keyspace and shard record + _, err = ts.GetOrCreateShard(ctx, ks, shard) + require.NoError(t, err) + + // verify ValidateKeyspace finds all the issues without hanging + resp := validateKeyspace(t, vtctldServer, ctx, ks) + // We expect two results - + // 1. no primary for shard ks/- + // 2. no primary in shard record ks/- + require.Len(t, resp.GetResultsByShard()[shard].Results, 2) + + // Next we test the worst case for ValidateKeyspace wherein everything creates + // issues to ensure we never block on writing to the results field. + + // We first create all tablets. We intentionally create a mismatch in the tablet alias + // file name and the tablet alias actually stored so that we see the error in Validate. + numTablets := 10 + tablets := make([]*topodatapb.Tablet, numTablets) + for i := 0; i < numTablets; i++ { + typ := topodatapb.TabletType_REPLICA + if i == 0 { + typ = topodatapb.TabletType_PRIMARY + } + tablets[i] = &topodatapb.Tablet{ + Keyspace: ks, + Shard: shard, + Type: typ, + Alias: &topodatapb.TabletAlias{ + Cell: cell, + Uid: uint32(100 + i), + }, + } + err = ts.CreateTablet(ctx, tablets[i]) + require.NoError(t, err) + + // We're explicitly messing up the record, so we can't use + // the UpdateTablet function as it doesn't not allow this. + tabletPath := path.Join(topo.TabletsPath, topoproto.TabletAliasString(tablets[i].Alias), topo.TabletFile) + tablets[i].Alias.Uid += 100 + data, err := tablets[i].MarshalVT() + require.NoError(t, err) + _, err = conn.Update(ctx, tabletPath, data, nil) + require.NoError(t, err) + // Reset the values for later use. + tablets[i].Alias.Uid -= 100 + } + + // verify ValidateKeyspace finds all the issues without hanging + resp = validateKeyspace(t, vtctldServer, ctx, ks) + // This time we expect the following results - + // 1. primary mismatch for shard ks/-: found zone-1-0000000100, expected + // 2. no primary in shard record ks/- + // 3. topo.Validate for all numTablets tablets. + // 4. tabletmanager ping for all numTablets tablets with a general error. + require.Len(t, resp.GetResultsByShard()[shard].Results, 2*numTablets+2, strings.Join(resp.GetResultsByShard()[shard].Results, ",")) + + // We now fix the shard record so that we can get even more errors. + _, err = ts.UpdateShardFields(ctx, ks, shard, func(info *topo.ShardInfo) error { + info.PrimaryAlias = tablets[0].Alias + return nil + }) + require.NoError(t, err) + + tmc.GetReplicasResults = map[string]struct { + Replicas []string + Error error + }{ + "zone-1-0000000200": { + // We return numTablets-1 values for the replica tablets. + Replicas: make([]string, numTablets-1), + }, + } + + // verify ValidateKeyspace finds all the issues without hanging + resp = validateKeyspace(t, vtctldServer, ctx, ks) + // This time we expect the following results results - + // 1. topo.Validate for all numTablets tablets. + // 2. Failure in resolving the hostname for all numTablets tablets. + // 3. Replicas not being in the replication graph (since we couldn't get their hostnames). This is for all the replicas -> numTablets - 1 + // 4. Resolving hostname again for all the replicas -> numTablets - 1 + // 5. tabletmanager ping for all numTablets tablets with a general error. + require.Len(t, resp.GetResultsByShard()[shard].Results, 5*numTablets-2, strings.Join(resp.GetResultsByShard()[shard].Results, ",")) +} + +// validateKeyspace is a helper function for testing. +func validateKeyspace(t *testing.T, vtctldServer *VtctldServer, ctx context.Context, ks string) *vtctldatapb.ValidateKeyspaceResponse { + t.Helper() + resp, err := vtctldServer.ValidateKeyspace(ctx, &vtctldatapb.ValidateKeyspaceRequest{ + Keyspace: ks, + PingTablets: true, + }) + require.NoError(t, err) + require.NotNil(t, resp) + require.NotNil(t, resp.GetResultsByShard()) + return resp +} + func TestValidateShard(t *testing.T) { t.Parallel() diff --git a/go/vt/vtctl/grpcvtctldserver/testutil/test_tmclient.go b/go/vt/vtctl/grpcvtctldserver/testutil/test_tmclient.go index 3b6af754d4e..7383a7bd3be 100644 --- a/go/vt/vtctl/grpcvtctldserver/testutil/test_tmclient.go +++ b/go/vt/vtctl/grpcvtctldserver/testutil/test_tmclient.go @@ -128,7 +128,7 @@ func NewVtctldServerWithTabletManagerClient(t testing.TB, ts *topo.Server, tmc t const ( fsName = "go.vt.vtctl.grpcvtctldserver.testutil" - tmclientProtocolFlagName = "tablet_manager_protocol" + tmclientProtocolFlagName = "tablet-manager-protocol" ) var fs *pflag.FlagSet diff --git a/go/vt/vtctl/localvtctldclient/client_gen.go b/go/vt/vtctl/localvtctldclient/client_gen.go index 53b8f2d1b8c..fa59f2befae 100644 --- a/go/vt/vtctl/localvtctldclient/client_gen.go +++ b/go/vt/vtctl/localvtctldclient/client_gen.go @@ -777,6 +777,11 @@ func (client *localVtctldClient) ValidateVersionShard(ctx context.Context, in *v return client.s.ValidateVersionShard(ctx, in) } +// WorkflowAddTables is part of the vtctlservicepb.VtctldClient interface. +func (client *localVtctldClient) WorkflowAddTables(ctx context.Context, in *vtctldatapb.WorkflowAddTablesRequest, opts ...grpc.CallOption) (*vtctldatapb.WorkflowAddTablesResponse, error) { + return client.s.WorkflowAddTables(ctx, in) +} + // WorkflowDelete is part of the vtctlservicepb.VtctldClient interface. func (client *localVtctldClient) WorkflowDelete(ctx context.Context, in *vtctldatapb.WorkflowDeleteRequest, opts ...grpc.CallOption) (*vtctldatapb.WorkflowDeleteResponse, error) { return client.s.WorkflowDelete(ctx, in) diff --git a/go/vt/vtctl/reparent.go b/go/vt/vtctl/reparent.go index 192d19ed7ee..161306c0308 100644 --- a/go/vt/vtctl/reparent.go +++ b/go/vt/vtctl/reparent.go @@ -69,7 +69,7 @@ func init() { func commandReparentTablet(ctx context.Context, wr *wrangler.Wrangler, subFlags *pflag.FlagSet, args []string) error { if mysqlctl.DisableActiveReparents { - return fmt.Errorf("active reparent commands disabled (unset the --disable_active_reparents flag to enable)") + return fmt.Errorf("active reparent commands disabled (unset the --disable-active-reparents flag to enable)") } if err := subFlags.Parse(args); err != nil { @@ -87,7 +87,7 @@ func commandReparentTablet(ctx context.Context, wr *wrangler.Wrangler, subFlags func commandInitShardPrimary(ctx context.Context, wr *wrangler.Wrangler, subFlags *pflag.FlagSet, args []string) error { if mysqlctl.DisableActiveReparents { - return fmt.Errorf("active reparent commands disabled (unset the --disable_active_reparents flag to enable)") + return fmt.Errorf("active reparent commands disabled (unset the --disable-active-reparents flag to enable)") } force := subFlags.Bool("force", false, "will force the reparent even if the provided tablet is not writable or the shard primary") @@ -111,7 +111,7 @@ func commandInitShardPrimary(ctx context.Context, wr *wrangler.Wrangler, subFlag func commandPlannedReparentShard(ctx context.Context, wr *wrangler.Wrangler, subFlags *pflag.FlagSet, args []string) error { if mysqlctl.DisableActiveReparents { - return fmt.Errorf("active reparent commands disabled (unset the --disable_active_reparents flag to enable)") + return fmt.Errorf("active reparent commands disabled (unset the --disable-active-reparents flag to enable)") } waitReplicasTimeout := subFlags.Duration("wait_replicas_timeout", topo.RemoteOperationTimeout, "time to wait for replicas to catch up on replication before and after reparenting") @@ -164,7 +164,7 @@ func commandPlannedReparentShard(ctx context.Context, wr *wrangler.Wrangler, sub func commandEmergencyReparentShard(ctx context.Context, wr *wrangler.Wrangler, subFlags *pflag.FlagSet, args []string) error { if mysqlctl.DisableActiveReparents { - return fmt.Errorf("active reparent commands disabled (unset the --disable_active_reparents flag to enable)") + return fmt.Errorf("active reparent commands disabled (unset the --disable-active-reparents flag to enable)") } waitReplicasTimeout := subFlags.Duration("wait_replicas_timeout", topo.RemoteOperationTimeout, "time to wait for replicas to catch up in reparenting") diff --git a/go/vt/vtctl/vtctl.go b/go/vt/vtctl/vtctl.go index cbcaa00cc14..8507ff86410 100644 --- a/go/vt/vtctl/vtctl.go +++ b/go/vt/vtctl/vtctl.go @@ -174,7 +174,7 @@ var commands = []commandGroup{ { name: "InitTablet", method: commandInitTablet, - params: "[--allow_update] [--allow_different_shard] [--allow_master_override] [--parent] [--db_name_override=] [--hostname=] [--mysql_port=] [--port=] [--grpc_port=] [--tags=tag1:value1,tag2:value2] --keyspace= --shard= ", + params: "[--allow_update] [--allow_different_shard] [--allow_master_override] [--parent] [--db_name_override=] [--hostname=] [--mysql-port=] [--port=] [--grpc-port=] [--tags=tag1:value1,tag2:value2] --keyspace= --shard= ", help: "Initializes a tablet in the topology.", deprecated: true, }, @@ -593,8 +593,8 @@ var commands = []commandGroup{ { name: "ApplySchema", method: commandApplySchema, - params: "[--wait_replicas_timeout=10s] [--ddl_strategy=] [--uuid_list=] [--migration_context=] {--sql= || --sql-file=} [--batch-size=] ", - help: "Applies the schema change to the specified keyspace on every primary, running in parallel on all shards. The changes are then propagated to replicas via replication. -ddl_strategy is used to instruct migrations via vreplication, mysql or direct with optional parameters. -migration_context allows the user to specify a custom request context for online DDL migrations.", + params: "[--wait_replicas_timeout=10s] [--ddl-strategy=] [--uuid_list=] [--migration_context=] {--sql= || --sql-file=} [--batch-size=] ", + help: "Applies the schema change to the specified keyspace on every primary, running in parallel on all shards. The changes are then propagated to replicas via replication. -ddl-strategy is used to instruct migrations via vreplication, mysql or direct with optional parameters. -migration_context allows the user to specify a custom request context for online DDL migrations.", }, { name: "CopySchemaShard", @@ -918,9 +918,9 @@ func commandInitTablet(ctx context.Context, wr *wrangler.Wrangler, subFlags *pfl createShardAndKeyspace := subFlags.Bool("parent", false, "Creates the parent shard and keyspace if they don't yet exist") hostname := subFlags.String("hostname", "", "The server on which the tablet is running") mysqlHost := subFlags.String("mysql_host", "", "The mysql host for the mysql server") - mysqlPort := subFlags.Int("mysql_port", 0, "The mysql port for the mysql server") + mysqlPort := subFlags.Int("mysql-port", 0, "The mysql port for the mysql server") port := subFlags.Int("port", 0, "The main port for the vttablet process") - grpcPort := subFlags.Int("grpc_port", 0, "The gRPC port for the vttablet process") + grpcPort := subFlags.Int("grpc-port", 0, "The gRPC port for the vttablet process") keyspace := subFlags.String("keyspace", "", "The keyspace to which this tablet belongs") shard := subFlags.String("shard", "", "The shard to which this tablet belongs") @@ -2918,7 +2918,7 @@ func commandValidateSchemaKeyspace(ctx context.Context, wr *wrangler.Wrangler, s func commandApplySchema(ctx context.Context, wr *wrangler.Wrangler, subFlags *pflag.FlagSet, args []string) error { sql := subFlags.String("sql", "", "A list of semicolon-delimited SQL commands") sqlFile := subFlags.String("sql-file", "", "Identifies the file that contains the SQL commands") - ddlStrategy := subFlags.String("ddl_strategy", string(schema.DDLStrategyDirect), "Online DDL strategy, compatible with @@ddl_strategy session variable (examples: 'direct', 'mysql', 'vitess --postpone-completion'") + ddlStrategy := subFlags.String("ddl-strategy", string(schema.DDLStrategyDirect), "Online DDL strategy, compatible with @@ddl_strategy session variable (examples: 'direct', 'mysql', 'vitess --postpone-completion'") uuidList := subFlags.String("uuid_list", "", "Optional: comma delimited explicit UUIDs for migration. If given, must match number of DDL changes") migrationContext := subFlags.String("migration_context", "", "For Online DDL, optionally supply a custom unique string used as context for the migration(s) in this command. By default a unique context is auto-generated by Vitess") requestContext := subFlags.String("request_context", "", "synonym for --migration_context") diff --git a/go/vt/vtctl/vtctlclient/interface.go b/go/vt/vtctl/vtctlclient/interface.go index 8de7f48097b..c314db4c07c 100644 --- a/go/vt/vtctl/vtctlclient/interface.go +++ b/go/vt/vtctl/vtctlclient/interface.go @@ -27,13 +27,14 @@ import ( "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/logutil" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" ) // vtctlClientProtocol specifics which RPC client implementation should be used. var vtctlClientProtocol = "grpc" func RegisterFlags(fs *pflag.FlagSet) { - fs.StringVar(&vtctlClientProtocol, "vtctl_client_protocol", vtctlClientProtocol, "Protocol to use to talk to the vtctl server.") + utils.SetFlagStringVar(fs, &vtctlClientProtocol, "vtctl-client-protocol", vtctlClientProtocol, "Protocol to use to talk to the vtctl server.") } func init() { diff --git a/go/vt/vtctl/workflow/framework_test.go b/go/vt/vtctl/workflow/framework_test.go index 0575965c433..e0d40954418 100644 --- a/go/vt/vtctl/workflow/framework_test.go +++ b/go/vt/vtctl/workflow/framework_test.go @@ -17,6 +17,7 @@ limitations under the License. package workflow import ( + "cmp" "context" "fmt" "os" @@ -270,9 +271,11 @@ type testTMClient struct { mu sync.Mutex vrQueries map[int][]*queryResult createVReplicationWorkflowRequests map[uint32]*createVReplicationWorkflowRequestResponse + getMaxValueForSequencesRequests map[uint32]*getMaxValueForSequencesRequestResponse + updateSequenceTablesRequests map[uint32]*tabletmanagerdatapb.UpdateSequenceTablesRequest readVReplicationWorkflowRequests map[uint32]*readVReplicationWorkflowRequestResponse updateVReplicationWorklowsRequests map[uint32]*tabletmanagerdatapb.UpdateVReplicationWorkflowsRequest - updateVReplicationWorklowRequests map[uint32]*updateVReplicationWorkflowRequestResponse + updateVReplicationWorklowRequests map[uint32][]*updateVReplicationWorkflowRequestResponse applySchemaRequests map[uint32][]*applySchemaRequestResponse primaryPositions map[uint32]string vdiffRequests map[uint32]*vdiffRequestResponse @@ -296,9 +299,11 @@ func newTestTMClient(env *testEnv) *testTMClient { schema: make(map[string]*tabletmanagerdatapb.SchemaDefinition), vrQueries: make(map[int][]*queryResult), createVReplicationWorkflowRequests: make(map[uint32]*createVReplicationWorkflowRequestResponse), + getMaxValueForSequencesRequests: make(map[uint32]*getMaxValueForSequencesRequestResponse), + updateSequenceTablesRequests: make(map[uint32]*tabletmanagerdatapb.UpdateSequenceTablesRequest), readVReplicationWorkflowRequests: make(map[uint32]*readVReplicationWorkflowRequestResponse), updateVReplicationWorklowsRequests: make(map[uint32]*tabletmanagerdatapb.UpdateVReplicationWorkflowsRequest), - updateVReplicationWorklowRequests: make(map[uint32]*updateVReplicationWorkflowRequestResponse), + updateVReplicationWorklowRequests: make(map[uint32][]*updateVReplicationWorkflowRequestResponse), applySchemaRequests: make(map[uint32][]*applySchemaRequestResponse), readVReplicationWorkflowsResponses: make(map[string][]*tabletmanagerdatapb.ReadVReplicationWorkflowsResponse), primaryPositions: make(map[uint32]string), @@ -425,6 +430,20 @@ func (tmc *testTMClient) GetSchema(ctx context.Context, tablet *topodatapb.Table return schemaDefn, nil } +func (tmc *testTMClient) expectUpdateSequenceTablesRequest(tabletID uint32, req *tabletmanagerdatapb.UpdateSequenceTablesRequest) { + tmc.mu.Lock() + defer tmc.mu.Unlock() + + tmc.updateSequenceTablesRequests[tabletID] = req +} + +func (tmc *testTMClient) expectGetMaxValueForSequencesRequest(tabletID uint32, reqres *getMaxValueForSequencesRequestResponse) { + tmc.mu.Lock() + defer tmc.mu.Unlock() + + tmc.getMaxValueForSequencesRequests[tabletID] = reqres +} + func (tmc *testTMClient) expectVRQuery(tabletID int, query string, result *sqltypes.Result) { tmc.mu.Lock() defer tmc.mu.Unlock() @@ -544,7 +563,19 @@ func (tmc *testTMClient) ApplySchema(ctx context.Context, tablet *topodatapb.Tab topoproto.TabletAliasString(tablet.Alias), change) } expect := requests[0] - if !reflect.DeepEqual(change, expect.change) { + if expect.matchSqlOnly { + matched := false + if expect.change.SQL[0] == '/' { + matched = regexp.MustCompile("(?i)" + expect.change.SQL[1:]).MatchString(change.SQL) + + } else { + matched = strings.EqualFold(change.SQL, expect.change.SQL) + } + if !matched { + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected ApplySchema request on tablet %s: got %+v, want %+v", + topoproto.TabletAliasString(tablet.Alias), change, expect.change) + } + } else if !reflect.DeepEqual(change, expect.change) { return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected ApplySchema request on tablet %s: got %+v, want %+v", topoproto.TabletAliasString(tablet.Alias), change, expect.change) } @@ -587,9 +618,10 @@ type readVReplicationWorkflowRequestResponse struct { } type applySchemaRequestResponse struct { - change *tmutils.SchemaChange - res *tabletmanagerdatapb.SchemaChangeResult - err error + matchSqlOnly bool + change *tmutils.SchemaChange + res *tabletmanagerdatapb.SchemaChangeResult + err error } type updateVReplicationWorkflowRequestResponse struct { @@ -598,6 +630,12 @@ type updateVReplicationWorkflowRequestResponse struct { err error } +type getMaxValueForSequencesRequestResponse struct { + req *tabletmanagerdatapb.GetMaxValueForSequencesRequest + res *tabletmanagerdatapb.GetMaxValueForSequencesResponse + err error +} + type validateVReplicationPermissionsResponse struct { res *tabletmanagerdatapb.ValidateVReplicationPermissionsResponse err error @@ -719,11 +757,13 @@ func (tmc *testTMClient) ReadVReplicationWorkflows(ctx context.Context, tablet * func (tmc *testTMClient) UpdateVReplicationWorkflow(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.UpdateVReplicationWorkflowRequest) (*tabletmanagerdatapb.UpdateVReplicationWorkflowResponse, error) { tmc.mu.Lock() defer tmc.mu.Unlock() - if expect := tmc.updateVReplicationWorklowRequests[tablet.Alias.Uid]; expect != nil { + if requests := tmc.updateVReplicationWorklowRequests[tablet.Alias.Uid]; len(requests) > 0 { + expect := requests[0] if !proto.Equal(expect.req, req) { - return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected ReadVReplicationWorkflow request on tablet %s: got %+v, want %+v", - topoproto.TabletAliasString(tablet.Alias), req, expect) + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected UpdateVReplicationWorkflow request on tablet %s: got %+v, want %+v", + topoproto.TabletAliasString(tablet.Alias), req, expect.req) } + tmc.updateVReplicationWorklowRequests[tablet.Alias.Uid] = tmc.updateVReplicationWorklowRequests[tablet.Alias.Uid][1:] return expect.res, expect.err } return &tabletmanagerdatapb.UpdateVReplicationWorkflowResponse{ @@ -738,7 +778,7 @@ func (tmc *testTMClient) UpdateVReplicationWorkflows(ctx context.Context, tablet defer tmc.mu.Unlock() if expect := tmc.updateVReplicationWorklowsRequests[tablet.Alias.Uid]; expect != nil { if !proto.Equal(expect, req) { - return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected ReadVReplicationWorkflow request on tablet %s: got %+v, want %+v", + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected UpdateVReplicationWorkflows request on tablet %s: got %+v, want %+v", topoproto.TabletAliasString(tablet.Alias), req, expect) } } @@ -819,7 +859,7 @@ func (tmc *testTMClient) AddUpdateVReplicationRequests(tabletUID uint32, req *ta func (tmc *testTMClient) AddUpdateVReplicationWorkflowRequestResponse(tabletUID uint32, reqres *updateVReplicationWorkflowRequestResponse) { tmc.mu.Lock() defer tmc.mu.Unlock() - tmc.updateVReplicationWorklowRequests[tabletUID] = reqres + tmc.updateVReplicationWorklowRequests[tabletUID] = append(tmc.updateVReplicationWorklowRequests[tabletUID], reqres) } func (tmc *testTMClient) getVReplicationWorkflowsResponse(key string) *tabletmanagerdatapb.ReadVReplicationWorkflowsResponse { @@ -839,6 +879,46 @@ func (tmc *testTMClient) ReloadSchema(ctx context.Context, tablet *topodatapb.Ta return nil } +func (tmc *testTMClient) UpdateSequenceTables(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.UpdateSequenceTablesRequest) (*tabletmanagerdatapb.UpdateSequenceTablesResponse, error) { + expect := tmc.updateSequenceTablesRequests[tablet.Alias.Uid] + if expect == nil { + return nil, nil + } + slices.SortFunc(expect.Sequences, func(x, y *tabletmanagerdatapb.UpdateSequenceTablesRequest_SequenceMetadata) int { + return cmp.Compare(x.BackingTableName, y.BackingTableName) + }) + slices.SortFunc(req.Sequences, func(x, y *tabletmanagerdatapb.UpdateSequenceTablesRequest_SequenceMetadata) int { + return cmp.Compare(x.BackingTableName, y.BackingTableName) + }) + if !proto.Equal(expect, req) { + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected UpdateSequenceTables request on tablet %s: got %+v, want %+v", + topoproto.TabletAliasString(tablet.Alias), req, expect) + } + delete(tmc.updateSequenceTablesRequests, tablet.Alias.Uid) + return &tabletmanagerdatapb.UpdateSequenceTablesResponse{}, nil +} + +func (tmc *testTMClient) GetMaxValueForSequences(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.GetMaxValueForSequencesRequest) (*tabletmanagerdatapb.GetMaxValueForSequencesResponse, error) { + expect := tmc.getMaxValueForSequencesRequests[tablet.Alias.Uid] + if expect == nil { + return &tabletmanagerdatapb.GetMaxValueForSequencesResponse{ + MaxValuesBySequenceTable: map[string]int64{}, + }, nil + } + slices.SortFunc(expect.req.Sequences, func(x, y *tabletmanagerdatapb.GetMaxValueForSequencesRequest_SequenceMetadata) int { + return cmp.Compare(x.BackingTableName, y.BackingTableName) + }) + slices.SortFunc(req.Sequences, func(x, y *tabletmanagerdatapb.GetMaxValueForSequencesRequest_SequenceMetadata) int { + return cmp.Compare(x.BackingTableName, y.BackingTableName) + }) + if !proto.Equal(expect.req, req) { + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected GetMaxValueForSequences request on tablet %s: got %+v, want %+v", + topoproto.TabletAliasString(tablet.Alias), req, expect.req) + } + delete(tmc.getMaxValueForSequencesRequests, tablet.Alias.Uid) + return expect.res, expect.err +} + // // Utility / helper functions. // diff --git a/go/vt/vtctl/workflow/lookup_vindex.go b/go/vt/vtctl/workflow/lookup_vindex.go index 157dba083b0..38bb71bde61 100644 --- a/go/vt/vtctl/workflow/lookup_vindex.go +++ b/go/vt/vtctl/workflow/lookup_vindex.go @@ -18,11 +18,12 @@ package workflow import ( "context" + "encoding/json" "fmt" "slices" "strings" + "sync" - "golang.org/x/exp/maps" "google.golang.org/protobuf/proto" "vitess.io/vitess/go/sqlescape" @@ -63,7 +64,7 @@ func newLookupVindex(ws *Server) *lookupVindex { } } -// prepareCreate performs the preparatory steps for creating a Lookup Vindex. +// prepareCreate performs the preparatory steps for creating a LookupVindex. func (lv *lookupVindex) prepareCreate(ctx context.Context, workflow, keyspace string, specs *vschemapb.Keyspace, continueAfterCopyWithOwner bool) ( ms *vtctldatapb.MaterializeSettings, sourceVSchema, targetVSchema *topo.KeyspaceVSchemaInfo, cancelFunc func() error, err error) { var ( @@ -72,151 +73,200 @@ func (lv *lookupVindex) prepareCreate(ctx context.Context, workflow, keyspace st // sourceVindexColumns are computed from the input sourceTable. sourceVindexColumns []string + // origTargetVSchema is the original target keyspace VSchema. + // If any error occurs, we can revert back to the original VSchema. + origTargetVSchema *topo.KeyspaceVSchemaInfo + // Target table info. createDDL string materializeQuery string + + targetKeyspace string + tableSettings []*vtctldatapb.TableMaterializeSettings ) - // Validate input vindex. - vindex, vInfo, err := lv.validateAndGetVindex(specs) - if err != nil { - return nil, nil, nil, nil, err + if specs == nil || len(specs.Vindexes) == 0 { + return nil, nil, nil, nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "no vindex provided") } - vInfo.sourceTable, vInfo.sourceTableName, err = getSourceTable(specs, vInfo.targetTableName, vInfo.fromCols) - if err != nil { - return nil, nil, nil, nil, err - } + targetVSchemaChanged := false - sourceVindexColumns, err = validateSourceTableAndGetVindexColumns(vInfo, vindex, keyspace) - if err != nil { - return nil, nil, nil, nil, err + // If we are about to backfill multiple vindexes, we should validate if + // all the vindexes are owned, as creating a backfilling workflow with a + // mix of unowned and owned vindexes can be a problem while performing + // other operations like externalize, internalize, complete and cancel. + if len(specs.Vindexes) > 1 { + for vindexName, vindex := range specs.Vindexes { + if vindex.Owner == "" { + return nil, nil, nil, nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "vindex(%s) has no owner", vindexName) + } + } } - sourceVSchema, targetVSchema, err = lv.getTargetAndSourceVSchema(ctx, keyspace, vInfo.targetKeyspace) - if err != nil { - return nil, nil, nil, nil, err + // Collect columnVindexes in a map, for faster access of source column vindexes + // in the main loop. + columnVindexByName := map[string]*vschemapb.ColumnVindex{} + for _, table := range specs.Tables { + for _, colVindex := range table.ColumnVindexes { + columnVindexByName[colVindex.Name] = colVindex + } } - if existing, ok := sourceVSchema.Vindexes[vInfo.name]; ok { - if !proto.Equal(existing, vindex) { // If the exact same vindex already exists then we can re-use it - return nil, nil, nil, nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "a conflicting vindex named %s already exists in the %s keyspace", - vInfo.name, keyspace) + for vindexName, vindex := range specs.Vindexes { + vInfo, err := lv.validateAndGetVindexInfo(vindexName, vindex, specs.Tables) + if err != nil { + return nil, nil, nil, nil, err } - } - sourceVSchemaTable = sourceVSchema.Tables[vInfo.sourceTableName] - if sourceVSchemaTable == nil && !schema.IsInternalOperationTableName(vInfo.sourceTableName) { - return nil, nil, nil, nil, - vterrors.Errorf(vtrpcpb.Code_INTERNAL, "table %s not found in the %s keyspace", vInfo.sourceTableName, keyspace) - } - if err := validateNonConflictingColumnVindex(sourceVSchemaTable, vInfo, sourceVindexColumns, keyspace); err != nil { - return nil, nil, nil, nil, err - } + if vindex.Owner == "" { + // If the vindex is unowned, we need to search for source table + // using a loop iterating over specs.Tables. And, as we have + // already validated if all vindexes are owned in case of multiple + // vindexes, so this case should be possible only when we are + // backfilling a single vindex. So, this approach can be used. + if len(specs.Tables) < 1 || len(specs.Tables) > 2 { + return nil, nil, nil, nil, fmt.Errorf("one or two tables must be specified") + } + vInfo.sourceTable, vInfo.sourceTableName, err = getSourceTable(specs.Tables, vInfo.targetTableName, vInfo.fromCols) + if err != nil { + return nil, nil, nil, nil, err + } + if vInfo.sourceTable == nil || vInfo.sourceTableName == "" { + return nil, nil, nil, nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "source table not found for vindex %s", vInfo.name) + } + } else { + var ok bool + if vInfo.sourceTable, ok = specs.Tables[vindex.Owner]; !ok { + return nil, nil, nil, nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "table owner not found for vindex %s", vInfo.name) + } + vInfo.sourceTableName = vindex.Owner + } - // Validate against source schema. - sourceShards, err := lv.ts.GetServingShards(ctx, keyspace) - if err != nil { - return nil, nil, nil, nil, err - } - onesource := sourceShards[0] - if onesource.PrimaryAlias == nil { - return nil, nil, nil, nil, - vterrors.Errorf(vtrpcpb.Code_INTERNAL, "source shard %s has no primary", onesource.ShardName()) - } + if len(specs.Vindexes) == 1 { + sourceVindexColumns, err = validateSourceTableAndGetVindexColumns(vInfo, vindex, keyspace) + } else { + sourceVindexColumns, err = getSourceVindexColumns(vInfo, columnVindexByName[vindexName]) + } + if err != nil { + return nil, nil, nil, nil, err + } - req := &tabletmanagerdatapb.GetSchemaRequest{Tables: []string{vInfo.sourceTableName}} - tableSchema, err := schematools.GetSchema(ctx, lv.ts, lv.tmc, onesource.PrimaryAlias, req) - if err != nil { - return nil, nil, nil, nil, err - } - if len(tableSchema.TableDefinitions) != 1 { - return nil, nil, nil, nil, - vterrors.Errorf(vtrpcpb.Code_INTERNAL, "unexpected number of tables (%d) returned from %s schema", - len(tableSchema.TableDefinitions), keyspace) - } + // This should be possible only for the first iteration. + if sourceVSchema == nil || targetVSchema == nil { + targetKeyspace = vInfo.targetKeyspace + sourceVSchema, targetVSchema, err = lv.getTargetAndSourceVSchema(ctx, keyspace, vInfo.targetKeyspace) + if err != nil { + return nil, nil, nil, nil, err + } + // Save a copy of the original vschema if we modify it and need to provide + // a cancelFunc. We do NOT want to clone the key version as we explicitly + // want to go back in time. So we only clone the internal vschema.Keyspace. + origTargetVSchema = &topo.KeyspaceVSchemaInfo{ + Name: vInfo.targetKeyspace, + Keyspace: targetVSchema.Keyspace.CloneVT(), + } + } - // Generate "create table" statement. - createDDL, err = lv.generateCreateDDLStatement(tableSchema, sourceVindexColumns, vInfo, vindex) - if err != nil { - return nil, nil, nil, nil, err - } - - // Generate vreplication query. - materializeQuery = generateMaterializeQuery(vInfo, vindex, sourceVindexColumns) - - // Save a copy of the original vschema if we modify it and need to provide - // a cancelFunc. We do NOT want to clone the key version as we explicitly - // want to go back in time. So we only clone the internal vschema.Keyspace. - origTargetVSchema := &topo.KeyspaceVSchemaInfo{ - Name: vInfo.targetKeyspace, - Keyspace: targetVSchema.Keyspace.CloneVT(), - } - targetChanged := false - - // Update targetVSchema. - targetTable := specs.Tables[vInfo.targetTableName] - if targetVSchema.Sharded { - // Choose a primary vindex type for the lookup table based on the source - // definition if one was not explicitly specified. - var targetVindexType string - var targetVindex *vschemapb.Vindex - for _, field := range tableSchema.TableDefinitions[0].Fields { - if sourceVindexColumns[0] == field.Name { - if targetTable != nil && len(targetTable.ColumnVindexes) > 0 { - targetVindexType = targetTable.ColumnVindexes[0].Name - } - if targetVindexType == "" { - targetVindexType, err = vindexes.ChooseVindexForType(field.Type) - if err != nil { - return nil, nil, nil, nil, err - } - } - targetVindex = &vschemapb.Vindex{ - Type: targetVindexType, - } - break + if existing, ok := sourceVSchema.Vindexes[vInfo.name]; ok { + if !proto.Equal(existing, vindex) { // If the exact same vindex already exists then we can re-use it + return nil, nil, nil, nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "a conflicting vindex named %s already exists in the %s keyspace", + vInfo.name, keyspace) } } - if targetVindex == nil { - // Unreachable. We validated column names when generating the DDL. + + sourceVSchemaTable = sourceVSchema.Tables[vInfo.sourceTableName] + if sourceVSchemaTable == nil && !schema.IsInternalOperationTableName(vInfo.sourceTableName) { + return nil, nil, nil, nil, + vterrors.Errorf(vtrpcpb.Code_INTERNAL, "table %s not found in the %s keyspace", vInfo.sourceTableName, keyspace) + } + if err := validateNonConflictingColumnVindex(sourceVSchemaTable, vInfo, sourceVindexColumns, keyspace); err != nil { + return nil, nil, nil, nil, err + } + + // Validate against source schema. + sourceShards, err := lv.ts.GetServingShards(ctx, keyspace) + if err != nil { + return nil, nil, nil, nil, err + } + onesource := sourceShards[0] + if onesource.PrimaryAlias == nil { return nil, nil, nil, nil, - vterrors.Errorf(vtrpcpb.Code_INTERNAL, "column %s not found in target schema %s", - sourceVindexColumns[0], tableSchema.TableDefinitions[0].Schema) + vterrors.Errorf(vtrpcpb.Code_INTERNAL, "source shard %s has no primary", onesource.ShardName()) } - if existing, ok := targetVSchema.Vindexes[targetVindexType]; ok { - if !proto.Equal(existing, targetVindex) { + req := &tabletmanagerdatapb.GetSchemaRequest{Tables: []string{vInfo.sourceTableName}} + tableSchema, err := schematools.GetSchema(ctx, lv.ts, lv.tmc, onesource.PrimaryAlias, req) + if err != nil { + return nil, nil, nil, nil, err + } + if len(tableSchema.TableDefinitions) != 1 { + return nil, nil, nil, nil, + vterrors.Errorf(vtrpcpb.Code_INTERNAL, "unexpected number of tables (%d) returned from %s schema", + len(tableSchema.TableDefinitions), keyspace) + } + + // Generate "create table" statement. + createDDL, err = lv.generateCreateDDLStatement(tableSchema, sourceVindexColumns, vInfo, vindex) + if err != nil { + return nil, nil, nil, nil, err + } + + // Generate vreplication query. + materializeQuery = generateMaterializeQuery(vInfo, vindex, sourceVindexColumns) + + // Update targetVSchema. + targetTable := specs.Tables[vInfo.targetTableName] + if targetVSchema.Sharded { + targetVindex, err := getTargetVindex(tableSchema.TableDefinitions[0], sourceVindexColumns[0], targetTable) + if err != nil { + return nil, nil, nil, nil, err + } + targetVindexType := targetVindex.Type + + if existing, ok := targetVSchema.Vindexes[targetVindexType]; ok { + if !proto.Equal(existing, targetVindex) { + return nil, nil, nil, nil, + vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "a conflicting vindex named %v already exists in the %s keyspace", + targetVindexType, vInfo.targetKeyspace) + } + } else { + targetVSchema.Vindexes[targetVindexType] = targetVindex + targetVSchemaChanged = true + } + + targetTable = &vschemapb.Table{ + ColumnVindexes: []*vschemapb.ColumnVindex{{ + Column: vInfo.fromCols[0], + Name: targetVindexType, + }}, + } + } else { + targetTable = &vschemapb.Table{} + } + if existing, ok := targetVSchema.Tables[vInfo.targetTableName]; ok { + if !proto.Equal(existing, targetTable) { return nil, nil, nil, nil, - vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "a conflicting vindex named %v already exists in the %s keyspace", - targetVindexType, vInfo.targetKeyspace) + vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "a conflicting table named %s already exists in the %s vschema", + vInfo.targetTableName, vInfo.targetKeyspace) } } else { - targetVSchema.Vindexes[targetVindexType] = targetVindex - targetChanged = true + targetVSchema.Tables[vInfo.targetTableName] = targetTable + targetVSchemaChanged = true } - targetTable = &vschemapb.Table{ - ColumnVindexes: []*vschemapb.ColumnVindex{{ - Column: vInfo.fromCols[0], - Name: targetVindexType, - }}, - } - } else { - targetTable = &vschemapb.Table{} - } - if existing, ok := targetVSchema.Tables[vInfo.targetTableName]; ok { - if !proto.Equal(existing, targetTable) { - return nil, nil, nil, nil, - vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "a conflicting table named %s already exists in the %s vschema", - vInfo.targetTableName, vInfo.targetKeyspace) + materializeTableSettings := &vtctldatapb.TableMaterializeSettings{ + TargetTable: vInfo.targetTableName, + SourceExpression: materializeQuery, + CreateDdl: createDDL, } - } else { - targetVSchema.Tables[vInfo.targetTableName] = targetTable - targetChanged = true + + tableSettings = append(tableSettings, materializeTableSettings) + // Update sourceVSchema + sourceVSchema.Vindexes[vInfo.name] = vindex + sourceVSchemaTable.ColumnVindexes = append(sourceVSchemaTable.ColumnVindexes, columnVindexByName[vindexName]) } - if targetChanged { + if targetVSchemaChanged { cancelFunc = func() error { // Restore the original target vschema. return lv.ts.SaveVSchema(ctx, origTargetVSchema) @@ -227,19 +277,11 @@ func (lv *lookupVindex) prepareCreate(ctx context.Context, workflow, keyspace st Workflow: workflow, MaterializationIntent: vtctldatapb.MaterializationIntent_CREATELOOKUPINDEX, SourceKeyspace: keyspace, - TargetKeyspace: vInfo.targetKeyspace, - StopAfterCopy: vindex.Owner != "" && !continueAfterCopyWithOwner, - TableSettings: []*vtctldatapb.TableMaterializeSettings{{ - TargetTable: vInfo.targetTableName, - SourceExpression: materializeQuery, - CreateDdl: createDDL, - }}, + TargetKeyspace: targetKeyspace, + StopAfterCopy: !continueAfterCopyWithOwner, + TableSettings: tableSettings, } - // Update sourceVSchema - sourceVSchema.Vindexes[vInfo.name] = vindex - sourceVSchemaTable.ColumnVindexes = append(sourceVSchemaTable.ColumnVindexes, vInfo.sourceTable.ColumnVindexes[0]) - return ms, sourceVSchema, targetVSchema, cancelFunc, nil } @@ -258,24 +300,14 @@ type vindexInfo struct { } // validateAndGetVindex validates and extracts vindex configuration -func (lv *lookupVindex) validateAndGetVindex(specs *vschemapb.Keyspace) (*vschemapb.Vindex, *vindexInfo, error) { - if specs == nil { - return nil, nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "no vindex provided") - } - if len(specs.Vindexes) != 1 { - return nil, nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "only one vindex must be specified") - } - - vindexName := maps.Keys(specs.Vindexes)[0] - vindex := maps.Values(specs.Vindexes)[0] - +func (lv *lookupVindex) validateAndGetVindexInfo(vindexName string, vindex *vschemapb.Vindex, tables map[string]*vschemapb.Table) (*vindexInfo, error) { if !strings.Contains(vindex.Type, "lookup") { - return nil, nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "vindex %s is not a lookup type", vindex.Type) + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "vindex %s is not a lookup type", vindex.Type) } targetKeyspace, targetTableName, err := lv.parser.ParseTable(vindex.Params["table"]) if err != nil || targetKeyspace == "" { - return nil, nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "vindex table name (%s) must be in the form .", vindex.Params["table"]) } @@ -286,7 +318,7 @@ func (lv *lookupVindex) validateAndGetVindex(specs *vschemapb.Keyspace) (*vschem if strings.Contains(vindex.Type, "unique") { if len(vindexFromCols) != 1 { - return nil, nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unique vindex 'from' should have only one column") + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unique vindex 'from' should have only one column") } } @@ -297,7 +329,7 @@ func (lv *lookupVindex) validateAndGetVindex(specs *vschemapb.Keyspace) (*vschem // See if we can create the vindex without errors. if _, err := vindexes.CreateVindex(vindex.Type, vindexName, vindex.Params); err != nil { - return nil, nil, err + return nil, err } ignoreNulls := false @@ -309,18 +341,18 @@ func (lv *lookupVindex) validateAndGetVindex(specs *vschemapb.Keyspace) (*vschem case "false": ignoreNulls = false default: - return nil, nil, + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "ignore_nulls (%s) value must be 'true' or 'false'", ignoreNullsStr) } } // Validate input table. - if len(specs.Tables) < 1 || len(specs.Tables) > 2 { - return nil, nil, fmt.Errorf("one or two tables must be specified") + if len(tables) < 1 { + return nil, fmt.Errorf("at least one table must be specified") } - return vindex, &vindexInfo{ + return &vindexInfo{ name: vindexName, targetKeyspace: targetKeyspace, targetTableName: targetTableName, @@ -358,9 +390,9 @@ func (lv *lookupVindex) getTargetAndSourceVSchema(ctx context.Context, sourceKey return sourceVSchema, targetVSchema, nil } -func getSourceTable(specs *vschemapb.Keyspace, targetTableName string, fromCols []string) (sourceTable *vschemapb.Table, sourceTableName string, err error) { +func getSourceTable(tables map[string]*vschemapb.Table, targetTableName string, fromCols []string) (sourceTable *vschemapb.Table, sourceTableName string, err error) { // Loop executes once or twice. - for tableName, table := range specs.Tables { + for tableName, table := range tables { if len(table.ColumnVindexes) != 1 { return nil, "", vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "exactly one ColumnVindex must be specified for the %s table", tableName) @@ -471,7 +503,7 @@ func generateMaterializeQuery(vInfo *vindexInfo, vindex *vschemapb.Vindex, sourc } // validateSourceTableAndGetVindexColumns validates input table and vindex consistency, and returns sourceVindexColumns. -func validateSourceTableAndGetVindexColumns(vInfo *vindexInfo, vindex *vschemapb.Vindex, keyspace string) (sourceVindexColumns []string, err error) { +func validateSourceTableAndGetVindexColumns(vInfo *vindexInfo, vindex *vschemapb.Vindex, keyspace string) ([]string, error) { if vInfo.sourceTable == nil || len(vInfo.sourceTable.ColumnVindexes) != 1 { return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "No ColumnVindex found for the owner table (%s) in the %s keyspace", vInfo.sourceTable, keyspace) @@ -485,20 +517,29 @@ func validateSourceTableAndGetVindexColumns(vInfo *vindexInfo, vindex *vschemapb return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "vindex owner (%s) must match table name (%s)", vindex.Owner, vInfo.sourceTableName) } - if len(vInfo.sourceTable.ColumnVindexes[0].Columns) != 0 { - sourceVindexColumns = vInfo.sourceTable.ColumnVindexes[0].Columns + + return getSourceVindexColumns(vInfo, vInfo.sourceTable.ColumnVindexes[0]) +} + +func getSourceVindexColumns(vInfo *vindexInfo, colVindex *vschemapb.ColumnVindex) (sourceVindexColumns []string, err error) { + if colVindex == nil { + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "column vindex name (%s) not found in table %s", + vInfo.name, vInfo.sourceTableName) + } + + if len(colVindex.Columns) != 0 { + sourceVindexColumns = colVindex.Columns } else { - if vInfo.sourceTable.ColumnVindexes[0].Column == "" { + if colVindex.Column == "" { return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "at least one column must be specified in ColumnVindexes for the %s table", vInfo.sourceTableName) } - sourceVindexColumns = []string{vInfo.sourceTable.ColumnVindexes[0].Column} + sourceVindexColumns = []string{colVindex.Column} } if len(sourceVindexColumns) != len(vInfo.fromCols) { return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "length of table columns (%d) differs from length of vindex columns (%d)", len(sourceVindexColumns), len(vInfo.fromCols)) } - return sourceVindexColumns, nil } @@ -547,6 +588,36 @@ func generateColDef(lines []string, sourceVindexCol, vindexFromCol string) (stri return "", fmt.Errorf("column %s not found in schema %v", sourceVindexCol, lines) } +// getTargetVindex returns the targetVindex. We choose a primary vindex type +// for the lookup table based on the source definition if one was not explicitly specified. +func getTargetVindex(sourceTableDefinition *tabletmanagerdatapb.TableDefinition, sourceVindexColumn string, targetTable *vschemapb.Table) ( + targetVindex *vschemapb.Vindex, err error) { + var targetVindexType string + for _, field := range sourceTableDefinition.Fields { + if sourceVindexColumn == field.Name { + if targetTable != nil && len(targetTable.ColumnVindexes) > 0 { + targetVindexType = targetTable.ColumnVindexes[0].Name + } + if targetVindexType == "" { + targetVindexType, err = vindexes.ChooseVindexForType(field.Type) + if err != nil { + return + } + } + targetVindex = &vschemapb.Vindex{ + Type: targetVindexType, + } + break + } + } + if targetVindex == nil { + err = vterrors.Errorf(vtrpcpb.Code_INTERNAL, "column %s not found in target schema %s", + sourceVindexColumn, sourceTableDefinition.Schema) + return + } + return +} + // validateExternalizedVindex checks if a given vindex is externalized. // A vindex is considered externalized if it has an owner and is not in write-only mode. func (lv *lookupVindex) validateExternalizedVindex(vindex *vschemapb.Vindex) error { @@ -560,12 +631,14 @@ func (lv *lookupVindex) validateExternalizedVindex(vindex *vschemapb.Vindex) err return nil } -// validateExternalized checks if the vindex has been externalized +// validateExternalized checks if the vindexes have been externalized // and verifies the state of the VReplication workflow on the target shards. // It ensures that all streams in the workflow are frozen. -func (lv *lookupVindex) validateExternalized(ctx context.Context, vindex *vschemapb.Vindex, name string, targetShards []*topo.ShardInfo) error { - if err := lv.validateExternalizedVindex(vindex); err != nil { - return vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "vindex %s has not been externalized yet: %v", name, err) +func (lv *lookupVindex) validateExternalized(ctx context.Context, vindexByName map[string]*vschemapb.Vindex, workflowName string, targetShards []*topo.ShardInfo) error { + for vindexName, vindex := range vindexByName { + if err := lv.validateExternalizedVindex(vindex); err != nil { + return vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "vindex %s has not been externalized yet: %v", vindexName, err) + } } err := forAllShards(targetShards, func(targetShard *topo.ShardInfo) error { @@ -574,13 +647,13 @@ func (lv *lookupVindex) validateExternalized(ctx context.Context, vindex *vschem return err } res, err := lv.tmc.ReadVReplicationWorkflow(ctx, targetPrimary.Tablet, &tabletmanagerdatapb.ReadVReplicationWorkflowRequest{ - Workflow: name, + Workflow: workflowName, }) if err != nil { return err } if res == nil || res.Workflow == "" { - return vterrors.Errorf(vtrpcpb.Code_NOT_FOUND, "workflow %s not found on %v", name, topoproto.TabletAliasString(targetPrimary.Alias)) + return vterrors.Errorf(vtrpcpb.Code_NOT_FOUND, "workflow %s not found on %v", workflowName, topoproto.TabletAliasString(targetPrimary.Alias)) } for _, stream := range res.Streams { // All streams need to be frozen. @@ -595,3 +668,127 @@ func (lv *lookupVindex) validateExternalized(ctx context.Context, vindex *vschem } return nil } + +// validateInternalizedState ensures that the workflow is running if it +// backfills unowned vindex or we've requested that it shouldn't be stopped +// after copy phase completes, else it ensures that the workflow is stopped. +func (lv *lookupVindex) validateInternalizedState(ctx context.Context, workflowName string, isBackfillingOwned bool, targetShards []*topo.ShardInfo) error { + return forAllShards(targetShards, func(targetShard *topo.ShardInfo) error { + targetPrimary, err := lv.ts.GetTablet(ctx, targetShard.PrimaryAlias) + if err != nil { + return err + } + res, err := lv.tmc.ReadVReplicationWorkflow(ctx, targetPrimary.Tablet, &tabletmanagerdatapb.ReadVReplicationWorkflowRequest{ + Workflow: workflowName, + }) + if err != nil { + return err + } + if res == nil || res.Workflow == "" { + return vterrors.Errorf(vtrpcpb.Code_NOT_FOUND, "workflow %s not found on %v", workflowName, topoproto.TabletAliasString(targetPrimary.Alias)) + } + for _, stream := range res.Streams { + if stream.Bls.Filter == nil { + return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "invalid binlog source") + } + if !isBackfillingOwned || !stream.Bls.StopAfterCopy { + // If there's no owner or we've requested that the workflow NOT be stopped + // after the copy phase completes, then all streams need to be running. + if stream.State != binlogdatapb.VReplicationWorkflowState_Running { + return vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "stream %d for %v.%v is not in Running state: %v", stream.Id, targetShard.Keyspace(), targetShard.ShardName(), stream.State) + } + } else { + // If there is an owner, all streams need to be stopped after copy. + if stream.State != binlogdatapb.VReplicationWorkflowState_Stopped || !strings.Contains(stream.Message, "Stopped after copy") { + return vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "stream %d for %v.%v is not in Stopped after copy state: %v, %v", stream.Id, targetShard.Keyspace(), targetShard.ShardName(), stream.State, stream.Message) + } + } + } + return nil + }) +} + +// getVindexesFromWorkflowOptions reads workflow options from each target +// shard, and returns lookup vindex names found in workflow options. +func (lv *lookupVindex) getVindexesFromWorkflowOptions(ctx context.Context, workflowName string, targetShards []*topo.ShardInfo) ([]string, error) { + var ( + options string + mu sync.Mutex + ) + err := forAllShards(targetShards, func(si *topo.ShardInfo) error { + targetPrimary, err := lv.ts.GetTablet(ctx, si.PrimaryAlias) + if err != nil { + return err + } + res, err := lv.tmc.ReadVReplicationWorkflow(ctx, targetPrimary.Tablet, &tabletmanagerdatapb.ReadVReplicationWorkflowRequest{ + Workflow: workflowName, + }) + if err != nil { + return err + } + mu.Lock() + defer mu.Unlock() + if options != "" && options != res.Options { + return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "inconsistent workflow options on target shard %s/%s", + targetPrimary.Keyspace, targetPrimary.GetShard()) + } + options = res.GetOptions() + return nil + }) + if err != nil { + return nil, vterrors.Wrapf(err, "failed to read workflow options") + } + workflowOptions := &vtctldatapb.WorkflowOptions{} + if err := json.Unmarshal([]byte(options), workflowOptions); err != nil { + return nil, vterrors.Wrapf(err, "failed to parse workflow options") + } + return workflowOptions.GetLookupVindexes(), nil +} + +// getVindexAndVSchema gets the vindexes (from VSchema) and VSchema with the +// provided keyspace and workflow. Uses workflow options to retrieve lookup +// vindex names. +func (lv *lookupVindex) getVindexesAndVSchema(ctx context.Context, keyspace string, workflowName string, targetShards []*topo.ShardInfo) (map[string]*vschemapb.Vindex, *topo.KeyspaceVSchemaInfo, error) { + lookupVindexes, err := lv.getVindexesFromWorkflowOptions(ctx, workflowName, targetShards) + if err != nil { + return nil, nil, vterrors.Wrapf(err, "failed to retrieve lookup vindex names from workflow") + } + if len(lookupVindexes) == 0 { + // If lookup vindexes from workflow options were absent, we should + // assume the vindex name to be same as workflow name. This will allow + // us to support old behaviour. Even if this was a wrong assumption, + // we will still error out while retrieving vindex from vschema. + lookupVindexes = []string{workflowName} + } + + vschema, err := lv.ts.GetVSchema(ctx, keyspace) + if err != nil { + return nil, nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "failed to get vschema for the %s keyspace", keyspace) + } + vindexByName := make(map[string]*vschemapb.Vindex, len(lookupVindexes)) + for _, vindexName := range lookupVindexes { + vindex := vschema.Vindexes[vindexName] + if vindex == nil { + return nil, nil, vterrors.Errorf(vtrpcpb.Code_NOT_FOUND, "vindex %s not found in the %s keyspace", vindexName, keyspace) + } + vindexByName[vindexName] = vindex + } + return vindexByName, vschema, nil +} + +// IsBackfillingOwnedVindexes returns if the VReplication workflow is +// backfilling owned lookup vindexes. Also, returns error in case the +// workflow backfills a mix of owned and unowned vindexes. +func IsBackfillingOwnedVindexes(vindexByName map[string]*vschemapb.Vindex) (bool, error) { + isBackfillingOwned := false + for vindexName, vindex := range vindexByName { + if vindex.Owner != "" { + isBackfillingOwned = true + } else if isBackfillingOwned { + // We don't allow a workflow to backfill a mix of unowned + // and owned vindexes. + return false, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "workflow can't backfill mix of unowned and owned vindexes, vindex %s is unowned", vindexName) + } + } + return isBackfillingOwned, nil +} diff --git a/go/vt/vtctl/workflow/materializer.go b/go/vt/vtctl/workflow/materializer.go index 1cfec4278be..feef7757506 100644 --- a/go/vt/vtctl/workflow/materializer.go +++ b/go/vt/vtctl/workflow/materializer.go @@ -161,7 +161,7 @@ func (mz *materializer) createWorkflowStreams(req *tabletmanagerdatapb.CreateVRe // Each tablet needs its own copy of the request as it will have a unique // BinlogSource. tabletReq := req.CloneVT() - tabletReq.BinlogSource, err = mz.generateBinlogSources(mz.ctx, target, sourceShards, streamKeyRangesEqual) + tabletReq.BinlogSource, err = mz.generateBinlogSources(target, sourceShards, streamKeyRangesEqual) if err != nil { return err } @@ -175,7 +175,7 @@ func (mz *materializer) getTenantClause() (*sqlparser.Expr, error) { return getTenantClause(mz.ms.WorkflowOptions, mz.targetVSchema, mz.env.Parser()) } -func (mz *materializer) generateBinlogSources(ctx context.Context, targetShard *topo.ShardInfo, sourceShards []*topo.ShardInfo, keyRangesEqual bool) ([]*binlogdatapb.BinlogSource, error) { +func (mz *materializer) generateBinlogSources(targetShard *topo.ShardInfo, sourceShards []*topo.ShardInfo, keyRangesEqual bool) ([]*binlogdatapb.BinlogSource, error) { blses := make([]*binlogdatapb.BinlogSource, 0, len(mz.sourceShards)) for _, sourceShard := range sourceShards { bls := &binlogdatapb.BinlogSource{ @@ -199,69 +199,76 @@ func (mz *materializer) generateBinlogSources(ctx context.Context, targetShard * } for _, ts := range mz.ms.TableSettings { - rule := &binlogdatapb.Rule{ - Match: ts.TargetTable, + rule, err := mz.generateRule(ts, targetShard, tenantClause, keyRangesEqual) + if err != nil { + return nil, err } + bls.Filter.Rules = append(bls.Filter.Rules, rule) + } + blses = append(blses, bls) + } + return blses, nil +} - if ts.SourceExpression == "" { - bls.Filter.Rules = append(bls.Filter.Rules, rule) - continue - } +func (mz *materializer) generateRule(ts *vtctldatapb.TableMaterializeSettings, targetShard *topo.ShardInfo, tenantClause *sqlparser.Expr, keyRangesEqual bool) (*binlogdatapb.Rule, error) { + rule := &binlogdatapb.Rule{ + Match: ts.TargetTable, + } + + if ts.SourceExpression == "" { + return rule, nil + } - // Validate non-empty query. - stmt, err := mz.env.Parser().Parse(ts.SourceExpression) + // Validate non-empty query. + stmt, err := mz.env.Parser().Parse(ts.SourceExpression) + if err != nil { + return nil, err + } + sel, ok := stmt.(*sqlparser.Select) + if !ok { + return nil, fmt.Errorf("unrecognized statement: %s", ts.SourceExpression) + } + if !keyRangesEqual && mz.targetVSchema.Keyspace.Sharded && mz.targetVSchema.Tables[ts.TargetTable].Type != vindexes.TypeReference { + cv, err := vindexes.FindBestColVindex(mz.targetVSchema.Tables[ts.TargetTable]) + if err != nil { + return nil, err + } + mappedCols := make([]*sqlparser.ColName, 0, len(cv.Columns)) + for _, col := range cv.Columns { + colName, err := matchColInSelect(col, sel) if err != nil { return nil, err } - sel, ok := stmt.(*sqlparser.Select) - if !ok { - return nil, fmt.Errorf("unrecognized statement: %s", ts.SourceExpression) + mappedCols = append(mappedCols, colName) + } + subExprs := make([]sqlparser.Expr, 0, len(mappedCols)+2) + for _, mappedCol := range mappedCols { + subExprs = append(subExprs, mappedCol) + } + var vindexName string + if mz.workflowType == binlogdatapb.VReplicationWorkflowType_Migrate { + // For a Migrate, if the TargetKeyspace name is different from the SourceKeyspace name, we need to use the + // SourceKeyspace name to determine the vindex since the TargetKeyspace name is not known to the source. + // Note: it is expected that the source and target keyspaces have the same vindex name and data type. + keyspace := mz.ms.TargetKeyspace + if mz.ms.ExternalCluster != "" { + keyspace = mz.ms.SourceKeyspace } - if !keyRangesEqual && mz.targetVSchema.Keyspace.Sharded && mz.targetVSchema.Tables[ts.TargetTable].Type != vindexes.TypeReference { - cv, err := vindexes.FindBestColVindex(mz.targetVSchema.Tables[ts.TargetTable]) - if err != nil { - return nil, err - } - mappedCols := make([]*sqlparser.ColName, 0, len(cv.Columns)) - for _, col := range cv.Columns { - colName, err := matchColInSelect(col, sel) - if err != nil { - return nil, err - } - mappedCols = append(mappedCols, colName) - } - subExprs := make([]sqlparser.Expr, 0, len(mappedCols)+2) - for _, mappedCol := range mappedCols { - subExprs = append(subExprs, mappedCol) - } - var vindexName string - if mz.workflowType == binlogdatapb.VReplicationWorkflowType_Migrate { - // For a Migrate, if the TargetKeyspace name is different from the SourceKeyspace name, we need to use the - // SourceKeyspace name to determine the vindex since the TargetKeyspace name is not known to the source. - // Note: it is expected that the source and target keyspaces have the same vindex name and data type. - keyspace := mz.ms.TargetKeyspace - if mz.ms.ExternalCluster != "" { - keyspace = mz.ms.SourceKeyspace - } - vindexName = fmt.Sprintf("%s.%s", keyspace, cv.Name) - } else { - vindexName = fmt.Sprintf("%s.%s", mz.ms.TargetKeyspace, cv.Name) - } - - subExprs = append(subExprs, sqlparser.NewStrLiteral(vindexName)) - subExprs = append(subExprs, sqlparser.NewStrLiteral(key.KeyRangeString(targetShard.KeyRange))) - inKeyRange := sqlparser.NewFuncExpr("in_keyrange", subExprs...) - addFilter(sel, inKeyRange) - } - if tenantClause != nil { - addFilter(sel, *tenantClause) - } - rule.Filter = sqlparser.String(sel) - bls.Filter.Rules = append(bls.Filter.Rules, rule) + vindexName = fmt.Sprintf("%s.%s", keyspace, cv.Name) + } else { + vindexName = fmt.Sprintf("%s.%s", mz.ms.TargetKeyspace, cv.Name) } - blses = append(blses, bls) + + subExprs = append(subExprs, sqlparser.NewStrLiteral(vindexName)) + subExprs = append(subExprs, sqlparser.NewStrLiteral(key.KeyRangeString(targetShard.KeyRange))) + inKeyRange := sqlparser.NewFuncExpr("in_keyrange", subExprs...) + addFilter(sel, inKeyRange) } - return blses, nil + if tenantClause != nil { + addFilter(sel, *tenantClause) + } + rule.Filter = sqlparser.String(sel) + return rule, nil } func (mz *materializer) deploySchema() error { @@ -795,3 +802,41 @@ func (mz *materializer) IsMultiTenantMigration() bool { } return false } + +// Add tables to _vt.copy_state table. +func (mz *materializer) insertTablesInCopyStateTable(ctx context.Context, streamsByTargetShard map[string][]*tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream) error { + var mu sync.Mutex + return forAllShards(mz.targetShards, func(si *topo.ShardInfo) error { + tablet, err := mz.ts.GetTablet(ctx, si.PrimaryAlias) + if err != nil { + return err + } + + var streams []*tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream + func() { + mu.Lock() + defer mu.Unlock() + streams = streamsByTargetShard[tablet.Shard] + }() + if len(streams) == 0 { + return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "failed to read workflow %s on shard %s/%s", mz.ms.Workflow, tablet.Keyspace, tablet.Shard) + } + + var buf strings.Builder + buf.WriteString("insert into _vt.copy_state(vrepl_id, table_name) values ") + prefix := "" + for _, stream := range streams { + for _, ts := range mz.ms.TableSettings { + fmt.Fprintf(&buf, "%s(%d, %s)", prefix, stream.Id, encodeString(ts.TargetTable)) + prefix = ", " + } + } + _, err = mz.tmc.ExecuteFetchAsAllPrivs(ctx, tablet.Tablet, &tabletmanagerdatapb.ExecuteFetchAsAllPrivsRequest{ + Query: []byte(buf.String()), + }) + if err != nil { + return vterrors.Wrapf(err, "failed to insert tables copy state for workflow %s on shard %s/%s", mz.ms.Workflow, tablet.Keyspace, tablet.Shard) + } + return nil + }) +} diff --git a/go/vt/vtctl/workflow/materializer_test.go b/go/vt/vtctl/workflow/materializer_test.go index c28beb933e8..c5766971bd1 100644 --- a/go/vt/vtctl/workflow/materializer_test.go +++ b/go/vt/vtctl/workflow/materializer_test.go @@ -1157,6 +1157,203 @@ func TestCreateLookupVindexFull(t *testing.T) { utils.MustMatch(t, wantvschema, vschema.Keyspace) } +func TestCreateLookupVindexMultipleCreate(t *testing.T) { + ms := &vtctldatapb.MaterializeSettings{ + Workflow: "lookup", + SourceKeyspace: "sourceks", + TargetKeyspace: "targetks", + } + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + env := newTestMaterializerEnv(t, ctx, ms, []string{"0"}, []string{"0"}) + defer env.close() + + specs := &vschemapb.Keyspace{ + Vindexes: map[string]*vschemapb.Vindex{ + "v1": { + Type: "lookup_unique", + Params: map[string]string{ + "table": "targetks.lookup", + "from": "col2", + "to": "keyspace_id", + }, + Owner: "t1", + }, + "v2": { + Type: "lookup_unique", + Params: map[string]string{ + "table": "targetks.lookup", + "from": "col4", + "to": "keyspace_id", + }, + Owner: "t2", + }, + }, + Tables: map[string]*vschemapb.Table{ + "t1": { + ColumnVindexes: []*vschemapb.ColumnVindex{{ + Name: "v1", + Column: "col2", + }}, + }, + "t2": { + ColumnVindexes: []*vschemapb.ColumnVindex{{ + Name: "v2", + Column: "col4", + }}, + }, + }, + } + // Dummy sourceSchema + sourceSchema1 := "CREATE TABLE `t1` (\n" + + " `col1` int(11) NOT NULL AUTO_INCREMENT,\n" + + " `col2` int(11) DEFAULT NULL,\n" + + " PRIMARY KEY (`id`)\n" + + ") ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1" + + sourceSchema2 := "CREATE TABLE `t2` (\n" + + " `col3` int(11) NOT NULL AUTO_INCREMENT,\n" + + " `col4` int(11) DEFAULT NULL,\n" + + " PRIMARY KEY (`id`)\n" + + ") ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1" + + sourceVSchema := &vschemapb.Keyspace{ + Sharded: true, + Vindexes: map[string]*vschemapb.Vindex{ + "xxhash": { + Type: "xxhash", + }, + }, + Tables: map[string]*vschemapb.Table{ + "t1": { + ColumnVindexes: []*vschemapb.ColumnVindex{{ + Name: "xxhash", + Column: "col1", + }}, + }, + "t2": {}, + }, + } + env.tmc.schema[ms.SourceKeyspace+".t1"] = &tabletmanagerdatapb.SchemaDefinition{ + TableDefinitions: []*tabletmanagerdatapb.TableDefinition{{ + Fields: []*querypb.Field{{ + Name: "col1", + Type: querypb.Type_INT64, + }, { + Name: "col2", + Type: querypb.Type_INT64, + }}, + Schema: sourceSchema1, + }}, + } + env.tmc.schema[ms.SourceKeyspace+".t2"] = &tabletmanagerdatapb.SchemaDefinition{ + TableDefinitions: []*tabletmanagerdatapb.TableDefinition{{ + Fields: []*querypb.Field{{ + Name: "col3", + Type: querypb.Type_INT64, + }, { + Name: "col4", + Type: querypb.Type_INT64, + }}, + Schema: sourceSchema2, + }}, + } + if err := env.topoServ.SaveVSchema(ctx, &topo.KeyspaceVSchemaInfo{ + Name: ms.TargetKeyspace, + Keyspace: &vschemapb.Keyspace{}, + }); err != nil { + t.Fatal(err) + } + if err := env.topoServ.SaveVSchema(ctx, &topo.KeyspaceVSchemaInfo{ + Name: ms.SourceKeyspace, + Keyspace: sourceVSchema, + }); err != nil { + t.Fatal(err) + } + + env.tmc.expectVRQuery(100, mzCheckJournal, &sqltypes.Result{}) + env.tmc.expectFetchAsAllPrivsQuery(200, "select 1 from `lookup` limit 1", &sqltypes.Result{}) + + // Expect this query twice for 2 vindexes. + env.tmc.expectVRQuery(200, "/CREATE TABLE `lookup`", &sqltypes.Result{}) + env.tmc.expectVRQuery(200, "/CREATE TABLE `lookup`", &sqltypes.Result{}) + + env.tmc.expectVRQuery(200, mzGetCopyState, &sqltypes.Result{}) + env.tmc.expectVRQuery(200, mzGetLatestCopyState, &sqltypes.Result{}) + env.tmc.expectVRQuery(200, insertPrefix, &sqltypes.Result{}) + env.tmc.expectVRQuery(200, "update _vt.vreplication set state='Running' where db_name='vt_targetks' and workflow='lookup'", &sqltypes.Result{}) + + req := &vtctldatapb.LookupVindexCreateRequest{ + Workflow: ms.Workflow, + Keyspace: ms.SourceKeyspace, + Cells: []string{"cell"}, + TabletTypes: []topodatapb.TabletType{topodatapb.TabletType_PRIMARY}, + Vindex: specs, + } + + _, err := env.ws.LookupVindexCreate(ctx, req) + require.NoError(t, err) + + wantvschema := &vschemapb.Keyspace{ + Sharded: true, + Vindexes: map[string]*vschemapb.Vindex{ + "xxhash": { + Type: "xxhash", + }, + "v1": { + Type: "lookup_unique", + Params: map[string]string{ + "table": "targetks.lookup", + "from": "col2", + "to": "keyspace_id", + "write_only": "true", + }, + Owner: "t1", + }, + "v2": { + Type: "lookup_unique", + Params: map[string]string{ + "table": "targetks.lookup", + "from": "col4", + "to": "keyspace_id", + "write_only": "true", + }, + Owner: "t2", + }, + }, + Tables: map[string]*vschemapb.Table{ + "t1": { + ColumnVindexes: []*vschemapb.ColumnVindex{{ + Name: "xxhash", + Column: "col1", + }, { + Name: "v1", + Column: "col2", + }}, + }, + "t2": { + ColumnVindexes: []*vschemapb.ColumnVindex{{ + Name: "v2", + Column: "col4", + }}, + }, + }, + } + vschema, err := env.topoServ.GetVSchema(ctx, ms.SourceKeyspace) + require.NoError(t, err) + utils.MustMatch(t, wantvschema, vschema.Keyspace) + + wantvschema = &vschemapb.Keyspace{ + Tables: map[string]*vschemapb.Table{ + "lookup": {}, + }, + } + vschema, err = env.topoServ.GetVSchema(ctx, ms.TargetKeyspace) + require.NoError(t, err) + utils.MustMatch(t, wantvschema, vschema.Keyspace) +} + func TestCreateLookupVindexCreateDDL(t *testing.T) { ms := &vtctldatapb.MaterializeSettings{ SourceKeyspace: "sourceks", @@ -2592,20 +2789,6 @@ func TestCreateLookupVindexFailures(t *testing.T) { schemaAdditions []*tabletmanagerdatapb.TableDefinition err string }{ - { - description: "dup vindex", - input: &vschemapb.Keyspace{ - Vindexes: map[string]*vschemapb.Vindex{ - "v1": { - Type: "xxhash", - }, - "v2": { - Type: "xxhash", - }, - }, - }, - err: "only one vindex must be specified", - }, { description: "not a lookup", input: &vschemapb.Keyspace{ @@ -2684,7 +2867,7 @@ func TestCreateLookupVindexFailures(t *testing.T) { input: &vschemapb.Keyspace{ Vindexes: unique, }, - err: "one or two tables must be specified", + err: "at least one table must be specified", }, { description: "too many tables", @@ -2769,7 +2952,7 @@ func TestCreateLookupVindexFailures(t *testing.T) { }, }, }, - err: "vindex owner (otherTable) must match table name (t1)", + err: "table owner not found for vindex v", }, { description: "owner must match", diff --git a/go/vt/vtctl/workflow/sequences.go b/go/vt/vtctl/workflow/sequences.go index 2ef83013e94..dd4e7d7a6bf 100644 --- a/go/vt/vtctl/workflow/sequences.go +++ b/go/vt/vtctl/workflow/sequences.go @@ -25,10 +25,8 @@ import ( "golang.org/x/exp/maps" "golang.org/x/sync/errgroup" - "vitess.io/vitess/go/mysql/sqlerror" "vitess.io/vitess/go/sqlescape" "vitess.io/vitess/go/sqltypes" - "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/mysqlctl/tmutils" "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/topo" @@ -44,10 +42,8 @@ import ( ) const ( - sqlInitSequenceTable = "insert into %a.%a (id, next_id, cache) values (0, %d, 1000) on duplicate key update next_id = if(next_id < %d, %d, next_id)" sqlCreateSequenceTable = "create table if not exists %a (id int, next_id bigint, cache bigint, primary key(id)) comment 'vitess_sequence'" sqlGetCurrentSequenceVal = "select next_id from %a.%a where id = 0" - sqlGetMaxSequenceVal = "select max(%a) as maxval from %a.%a" ) // sequenceMetadata contains all of the relevant metadata for a sequence that @@ -115,75 +111,48 @@ func (sm *sequenceMetadata) escapeValues() error { } func (ts *trafficSwitcher) getMaxSequenceValues(ctx context.Context, sequences map[string]*sequenceMetadata) (map[string]int64, error) { - maxValues := make(map[string]int64, len(sequences)) - mu := sync.Mutex{} - initGroup, gctx := errgroup.WithContext(ctx) - for _, sm := range sequences { - initGroup.Go(func() error { - maxId, err := ts.getMaxSequenceValue(gctx, sm) - if err != nil { - return err - } - mu.Lock() - defer mu.Unlock() - maxValues[sm.backingTableName] = maxId - return nil + var sequencesMetadata []*tabletmanagerdatapb.GetMaxValueForSequencesRequest_SequenceMetadata + for _, seq := range sequences { + if err := seq.escapeValues(); err != nil { + return nil, err + } + sequencesMetadata = append(sequencesMetadata, &tabletmanagerdatapb.GetMaxValueForSequencesRequest_SequenceMetadata{ + BackingTableName: seq.backingTableName, + UsingColEscaped: seq.usingCol, + UsingTableNameEscaped: seq.usingTable, + UsingTableDbNameEscaped: seq.usingDB, }) } - errs := initGroup.Wait() - if errs != nil { - return nil, errs - } - return maxValues, nil -} -func (ts *trafficSwitcher) getMaxSequenceValue(ctx context.Context, seq *sequenceMetadata) (int64, error) { - var maxSequenceValue int64 var mu sync.Mutex - setMaxSequenceValue := func(id int64) { + maxValuesByBackingTable := make(map[string]int64, len(sequences)) + setMaxSequenceValue := func(maxValues map[string]int64) { mu.Lock() defer mu.Unlock() - if id > maxSequenceValue { - maxSequenceValue = id + for _, sm := range sequences { + if maxValuesByBackingTable[sm.backingTableName] < maxValues[sm.backingTableName] { + maxValuesByBackingTable[sm.backingTableName] = maxValues[sm.backingTableName] + } } } - if err := seq.escapeValues(); err != nil { - return 0, err - } errs := ts.ForAllTargets(func(target *MigrationTarget) error { primary := target.GetPrimary() if primary == nil || primary.GetAlias() == nil { return vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "no primary tablet found for target shard %s/%s", ts.targetKeyspace, target.GetShard().ShardName()) } - - query := sqlparser.BuildParsedQuery(sqlGetMaxSequenceVal, - seq.usingCol, - seq.usingDB, - seq.usingTable, - ) - qr, terr := ts.ws.tmc.ExecuteFetchAsApp(ctx, primary.Tablet, true, &tabletmanagerdatapb.ExecuteFetchAsAppRequest{ - Query: []byte(query.Query), - MaxRows: 1, + resp, terr := ts.ws.tmc.GetMaxValueForSequences(ctx, primary.Tablet, &tabletmanagerdatapb.GetMaxValueForSequencesRequest{ + Sequences: sequencesMetadata, }) - if terr != nil || len(qr.Rows) != 1 { + if terr != nil { return vterrors.Errorf(vtrpcpb.Code_INTERNAL, - "failed to get the max used sequence value for target table %s.%s on tablet %s in order to initialize the backing sequence table: %v", - ts.targetKeyspace, seq.usingTableName, topoproto.TabletAliasString(primary.Alias), terr) - } - rawVal := sqltypes.Proto3ToResult(qr).Rows[0][0] - maxID := int64(0) - if !rawVal.IsNull() { // If it's NULL then there are no rows and 0 remains the max - maxID, terr = rawVal.ToInt64() - if terr != nil { - return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "failed to get the max used sequence value for target table %s.%s on tablet %s in order to initialize the backing sequence table: %v", - ts.targetKeyspace, seq.usingTableName, topoproto.TabletAliasString(primary.Alias), terr) - } + "failed to get the max used sequence values on tablet %s in order to initialize the backing sequence table: %v", + topoproto.TabletAliasString(primary.Alias), terr) } - setMaxSequenceValue(maxID) + setMaxSequenceValue(resp.MaxValuesBySequenceTable) return nil }) - return maxSequenceValue, errs + return maxValuesByBackingTable, errs } func (ts *trafficSwitcher) getCurrentSequenceValues(ctx context.Context, sequences map[string]*sequenceMetadata) (map[string]int64, error) { @@ -250,70 +219,44 @@ func (ts *trafficSwitcher) getCurrentSequenceValue(ctx context.Context, seq *seq return currentVal, nil } -func (ts *trafficSwitcher) updateSequenceValue(ctx context.Context, seq *sequenceMetadata, currentMaxValue int64) error { - if err := seq.escapeValues(); err != nil { - return err - } - nextVal := currentMaxValue + 1 - log.Infof("Updating sequence %s.%s to %d", seq.backingTableDBName, seq.backingTableName, nextVal) - - // Now we need to update the sequence table, if needed, in order to - // ensure that the next value it provides is > the current max. - sequenceShard, ierr := ts.TopoServer().GetOnlyShard(ctx, seq.backingTableKeyspace) - if ierr != nil || sequenceShard == nil || sequenceShard.PrimaryAlias == nil { - return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "failed to get the primary tablet for keyspace %s: %v", - seq.backingTableKeyspace, ierr) - } - sequenceTablet, ierr := ts.TopoServer().GetTablet(ctx, sequenceShard.PrimaryAlias) - if ierr != nil || sequenceTablet == nil { - return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "failed to get the primary tablet for keyspace %s: %v", - seq.backingTableKeyspace, ierr) - } - if sequenceTablet.DbNameOverride != "" { - seq.backingTableDBName = sequenceTablet.DbNameOverride - } - initQuery := sqlparser.BuildParsedQuery(sqlInitSequenceTable, - seq.backingTableDBName, - seq.backingTableName, - nextVal, - nextVal, - nextVal, - ) - - const maxTries = 2 - var err error - - for i := 0; i < maxTries; i++ { - // Attempt to initialize the sequence. - _, err = ts.ws.tmc.ExecuteFetchAsApp(ctx, sequenceTablet.Tablet, true, &tabletmanagerdatapb.ExecuteFetchAsAppRequest{ - Query: []byte(initQuery.Query), - MaxRows: 1, +func (ts *trafficSwitcher) updateSequenceValues(ctx context.Context, sequences []*sequenceMetadata, maxValues map[string]int64) error { + sequencesByShard := map[string][]*tabletmanagerdatapb.UpdateSequenceTablesRequest_SequenceMetadata{} + for _, seq := range sequences { + maxValue := maxValues[seq.backingTableName] + if maxValue == 0 { + continue + } + sequenceShard, ierr := ts.TopoServer().GetOnlyShard(ctx, seq.backingTableKeyspace) + if ierr != nil || sequenceShard == nil || sequenceShard.PrimaryAlias == nil { + return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "failed to get the primary tablet for keyspace %s: %v", + seq.backingTableKeyspace, ierr) + } + tabletAliasStr := topoproto.TabletAliasString(sequenceShard.PrimaryAlias) + sequencesByShard[tabletAliasStr] = append(sequencesByShard[tabletAliasStr], &tabletmanagerdatapb.UpdateSequenceTablesRequest_SequenceMetadata{ + BackingTableName: seq.backingTableName, + BackingTableDbName: seq.backingTableDBName, + MaxValue: maxValue, }) - if err == nil { - return nil + } + for tabletAliasStr, sequencesMetadata := range sequencesByShard { + tabletAlias, err := topoproto.ParseTabletAlias(tabletAliasStr) + if err != nil { + // This should be impossible. + return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "failed to get the parse tablet alias %s: %v", tabletAlias, err) } - - // If the table doesn't exist, try creating it. - sqlErr, ok := sqlerror.NewSQLErrorFromError(err).(*sqlerror.SQLError) - if !ok || (sqlErr.Num != sqlerror.ERNoSuchTable && sqlErr.Num != sqlerror.ERBadTable) { - return vterrors.Errorf( - vtrpcpb.Code_INTERNAL, - "failed to initialize the backing sequence table %s.%s: %v", - seq.backingTableDBName, seq.backingTableName, err, - ) + sequenceTablet, ierr := ts.TopoServer().GetTablet(ctx, tabletAlias) + if ierr != nil || sequenceTablet == nil { + return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "failed to get the primary tablet for keyspace %s: %v", + sequenceTablet.Keyspace, ierr) } - - if err := ts.createSequenceTable(ctx, seq.backingTable, sequenceTablet); err != nil { - return vterrors.Errorf(vtrpcpb.Code_INTERNAL, - "failed to create the backing sequence table %s in the global-keyspace %s: %v", - seq.backingTable, sequenceShard.Keyspace(), err) + _, err = ts.TabletManagerClient().UpdateSequenceTables(ctx, sequenceTablet.Tablet, &tabletmanagerdatapb.UpdateSequenceTablesRequest{ + Sequences: sequencesMetadata, + }) + if err != nil { + return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "failed to initialize the backing sequence tables on tablet %s: %v", topoproto.TabletAliasString(tabletAlias), err) } - // Table has been created, so we fall through and try again on the next loop iteration. } - - return vterrors.Errorf( - vtrpcpb.Code_INTERNAL, "failed to initialize the backing sequence table %s.%s after retries. Last error: %v", - seq.backingTableDBName, seq.backingTableName, err) + return nil } // initializeTargetSequences initializes the backing sequence tables @@ -334,14 +277,9 @@ func (ts *trafficSwitcher) initializeTargetSequences(ctx context.Context, sequen if err != nil { return err } - for _, sm := range sequencesByBackingTable { - maxValue := maxValues[sm.backingTableName] - if maxValue == 0 { - continue - } - if err := ts.updateSequenceValue(ctx, sm, maxValue); err != nil { - return err - } + sequences := maps.Values(sequencesByBackingTable) + if err := ts.updateSequenceValues(ctx, sequences, maxValues); err != nil { + return err } return nil } diff --git a/go/vt/vtctl/workflow/sequences_test.go b/go/vt/vtctl/workflow/sequences_test.go index 61b020c1e2a..1717a3b38b3 100644 --- a/go/vt/vtctl/workflow/sequences_test.go +++ b/go/vt/vtctl/workflow/sequences_test.go @@ -42,6 +42,7 @@ func TestInitializeTargetSequences(t *testing.T) { workflowName := "wf1" tableName := "t1" + tableName2 := "t2" sourceKeyspaceName := "sourceks" targetKeyspaceName := "targetks" @@ -54,6 +55,14 @@ func TestInitializeTargetSequences(t *testing.T) { }, }, }, + tableName2: { + TableDefinitions: []*tabletmanagerdatapb.TableDefinition{ + { + Name: tableName2, + Schema: fmt.Sprintf("CREATE TABLE %s (id BIGINT, name VARCHAR(64), PRIMARY KEY (id))", tableName2), + }, + }, + }, } sourceKeyspace := &testKeyspace{ @@ -87,18 +96,66 @@ func TestInitializeTargetSequences(t *testing.T) { }, }, }, + "my-seq2": { + backingTableName: "my-seq2", + backingTableKeyspace: sourceKeyspaceName, + backingTableDBName: fmt.Sprintf("vt_%s", sourceKeyspaceName), + usingTableName: tableName2, + usingTableDBName: "vt_targetks", + usingTableDefinition: &vschema.Table{ + AutoIncrement: &vschema.AutoIncrement{ + Column: "my-col-2", + Sequence: fmt.Sprintf("%s.my-seq2", sourceKeyspace.KeyspaceName), + }, + }, + }, } - env.tmc.expectVRQuery(200, "/select max.*", sqltypes.MakeTestResult(sqltypes.MakeTestFields("maxval", "int64"), "34")) - // Expect the insert query to be executed with 35 as a params, since we provide a maxID of 34 in the last query - env.tmc.expectVRQuery(100, "/insert into.*35.*", &sqltypes.Result{RowsAffected: 1}) + env.tmc.expectGetMaxValueForSequencesRequest(200, &getMaxValueForSequencesRequestResponse{ + req: &tabletmanagerdatapb.GetMaxValueForSequencesRequest{ + Sequences: []*tabletmanagerdatapb.GetMaxValueForSequencesRequest_SequenceMetadata{ + { + BackingTableName: "my-seq1", + UsingColEscaped: "`my-col`", + UsingTableNameEscaped: fmt.Sprintf("`%s`", tableName), + UsingTableDbNameEscaped: "`vt_targetks`", + }, + { + BackingTableName: "my-seq2", + UsingColEscaped: "`my-col-2`", + UsingTableNameEscaped: fmt.Sprintf("`%s`", tableName2), + UsingTableDbNameEscaped: "`vt_targetks`", + }, + }, + }, + res: &tabletmanagerdatapb.GetMaxValueForSequencesResponse{ + MaxValuesBySequenceTable: map[string]int64{ + "my-seq1": 34, + "my-seq2": 10, + }, + }, + }) + env.tmc.expectUpdateSequenceTablesRequest(100, &tabletmanagerdatapb.UpdateSequenceTablesRequest{ + Sequences: []*tabletmanagerdatapb.UpdateSequenceTablesRequest_SequenceMetadata{ + { + BackingTableName: "my-seq1", + BackingTableDbName: fmt.Sprintf("vt_%s", sourceKeyspaceName), + MaxValue: 34, + }, + { + BackingTableName: "my-seq2", + BackingTableDbName: fmt.Sprintf("vt_%s", sourceKeyspaceName), + MaxValue: 10, + }, + }, + }) err = sw.initializeTargetSequences(ctx, sequencesByBackingTable) assert.NoError(t, err) - // Expect the queries to be cleared - assert.Emptyf(t, env.tmc.vrQueries[100], "expected no queries to be executed, found: %q", env.tmc.vrQueries[100]) - assert.Empty(t, env.tmc.vrQueries[200], "expected no queries to be executed, found: %q", env.tmc.vrQueries[200]) + // Expect the requests to be cleared + assert.Emptyf(t, env.tmc.updateSequenceTablesRequests, "expected no remaining UpdateSequenceTables requests") + assert.Emptyf(t, env.tmc.getMaxValueForSequencesRequests, "expected no remaining GetMaxValueForSequences requests") } func TestGetTargetSequenceMetadata(t *testing.T) { diff --git a/go/vt/vtctl/workflow/server.go b/go/vt/vtctl/workflow/server.go index e37a6bf1504..7cf572cd805 100644 --- a/go/vt/vtctl/workflow/server.go +++ b/go/vt/vtctl/workflow/server.go @@ -27,6 +27,7 @@ import ( "text/template" "time" + "golang.org/x/exp/maps" "golang.org/x/sync/errgroup" "golang.org/x/sync/semaphore" "google.golang.org/grpc/codes" @@ -36,6 +37,7 @@ import ( "vitess.io/vitess/go/constants/sidecar" "vitess.io/vitess/go/protoutil" "vitess.io/vitess/go/ptr" + "vitess.io/vitess/go/sets" "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/trace" "vitess.io/vitess/go/vt/concurrency" @@ -545,18 +547,18 @@ func (s *Server) LookupVindexComplete(ctx context.Context, req *vtctldatapb.Look span.Annotate("name", req.Name) span.Annotate("table_keyspace", req.TableKeyspace) - vindex, _, err := getVindexAndVSchema(ctx, s.ts, req.Keyspace, req.Name) + targetShards, err := s.ts.GetServingShards(ctx, req.TableKeyspace) if err != nil { return nil, err } - targetShards, err := s.ts.GetServingShards(ctx, req.TableKeyspace) + lv := newLookupVindex(s) + vindexByName, _, err := lv.getVindexesAndVSchema(ctx, req.Keyspace, req.Name, targetShards) if err != nil { return nil, err } - lv := newLookupVindex(s) - if err = lv.validateExternalized(ctx, vindex, req.Name, targetShards); err != nil { + if err = lv.validateExternalized(ctx, vindexByName, req.Name, targetShards); err != nil { return nil, err } @@ -592,6 +594,17 @@ func (s *Server) LookupVindexCreate(ctx context.Context, req *vtctldatapb.Lookup return nil, err } + // We are including lookup vindexes names in the workflow options so that + // this can be used later in externalize, internalize or complete to fetch + // lookup vindexes names that the workflow is backfilling. + if ms.WorkflowOptions == nil { + ms.WorkflowOptions = &vtctldatapb.WorkflowOptions{ + LookupVindexes: maps.Keys(req.Vindex.Vindexes), + } + } else { + ms.WorkflowOptions.LookupVindexes = maps.Keys(req.Vindex.Vindexes) + } + if err := s.ts.SaveVSchema(ctx, targetVSchema); err != nil { return nil, vterrors.Wrapf(err, "failed to save updated vschema '%v' in the %s keyspace", targetVSchema, ms.TargetKeyspace) @@ -633,56 +646,28 @@ func (s *Server) LookupVindexExternalize(ctx context.Context, req *vtctldatapb.L span.Annotate("table_keyspace", req.TableKeyspace) span.Annotate("delete_workflow", req.DeleteWorkflow) - vindex, sourceKsVS, err := getVindexAndVSchema(ctx, s.ts, req.Keyspace, req.Name) + targetShards, err := s.ts.GetServingShards(ctx, req.TableKeyspace) if err != nil { return nil, err } - targetShards, err := s.ts.GetServingShards(ctx, req.TableKeyspace) + lv := newLookupVindex(s) + vindexByName, sourceKsVS, err := lv.getVindexesAndVSchema(ctx, req.Keyspace, req.Name, targetShards) if err != nil { return nil, err } - err = forAllShards(targetShards, func(targetShard *topo.ShardInfo) error { - targetPrimary, err := s.ts.GetTablet(ctx, targetShard.PrimaryAlias) - if err != nil { - return err - } - res, err := s.tmc.ReadVReplicationWorkflow(ctx, targetPrimary.Tablet, &tabletmanagerdatapb.ReadVReplicationWorkflowRequest{ - Workflow: req.Name, - }) - if err != nil { - return err - } - if res == nil || res.Workflow == "" { - return vterrors.Errorf(vtrpcpb.Code_NOT_FOUND, "workflow %s not found on %v", req.Name, topoproto.TabletAliasString(targetPrimary.Alias)) - } - for _, stream := range res.Streams { - if stream.Bls.Filter == nil || len(stream.Bls.Filter.Rules) != 1 { - return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "invalid binlog source") - } - if vindex.Owner == "" || !stream.Bls.StopAfterCopy { - // If there's no owner or we've requested that the workflow NOT be stopped - // after the copy phase completes, then all streams need to be running. - if stream.State != binlogdatapb.VReplicationWorkflowState_Running { - return vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "stream %d for %v.%v is not in Running state: %v", stream.Id, targetShard.Keyspace(), targetShard.ShardName(), stream.State) - } - } else { - // If there is an owner, all streams need to be stopped after copy. - if stream.State != binlogdatapb.VReplicationWorkflowState_Stopped || !strings.Contains(stream.Message, "Stopped after copy") { - return vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "stream %d for %v.%v is not in Stopped after copy state: %v, %v", stream.Id, targetShard.Keyspace(), targetShard.ShardName(), stream.State, stream.Message) - } - } - } - return nil - }) + isBackfillingOwned, err := IsBackfillingOwnedVindexes(vindexByName) if err != nil { return nil, err } - resp := &vtctldatapb.LookupVindexExternalizeResponse{} + if err := lv.validateInternalizedState(ctx, req.Name, isBackfillingOwned, targetShards); err != nil { + return nil, err + } - if vindex.Owner != "" { + resp := &vtctldatapb.LookupVindexExternalizeResponse{} + if isBackfillingOwned { // If there is an owner, we have to stop/delete the streams. Once we // externalize it the VTGate will now be responsible for keeping the // lookup table up to date with the owner table. @@ -721,8 +706,12 @@ func (s *Server) LookupVindexExternalize(ctx context.Context, req *vtctldatapb.L } } - // Remove the write_only param and save the source vschema. - delete(vindex.Params, "write_only") + for _, vindex := range vindexByName { + // Remove the write_only param from each vindex. + delete(vindex.Params, "write_only") + } + + // Save the source vschema. if err := s.ts.SaveVSchema(ctx, sourceKsVS); err != nil { return nil, err } @@ -738,23 +727,25 @@ func (s *Server) LookupVindexInternalize(ctx context.Context, req *vtctldatapb.L span.Annotate("name", req.Name) span.Annotate("table_keyspace", req.TableKeyspace) - vindex, sourceKsVS, err := getVindexAndVSchema(ctx, s.ts, req.Keyspace, req.Name) + targetShards, err := s.ts.GetServingShards(ctx, req.TableKeyspace) if err != nil { return nil, err } - targetShards, err := s.ts.GetServingShards(ctx, req.TableKeyspace) + lv := newLookupVindex(s) + vindexByName, sourceKsVS, err := lv.getVindexesAndVSchema(ctx, req.Keyspace, req.Name, targetShards) if err != nil { return nil, err } - lv := newLookupVindex(s) - if err = lv.validateExternalized(ctx, vindex, req.Name, targetShards); err != nil { + if err = lv.validateExternalized(ctx, vindexByName, req.Name, targetShards); err != nil { return nil, err } - // Make the vindex back to write_only and save the source vschema. - vindex.Params["write_only"] = "true" + // Make the vindexes back to write_only and save the source vschema. + for _, vindex := range vindexByName { + vindex.Params["write_only"] = "true" + } if err := s.ts.SaveVSchema(ctx, sourceKsVS); err != nil { return nil, err } @@ -832,6 +823,196 @@ func (s *Server) Materialize(ctx context.Context, ms *vtctldatapb.MaterializeSet return mz.startStreams(ctx) } +// WorkflowAddTables adds specified tables to the existing workflow. +func (s *Server) WorkflowAddTables(ctx context.Context, req *vtctldatapb.WorkflowAddTablesRequest) error { + if len(req.TableSettings) == 0 { + return vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "no tables found in the request") + } + + targetShardInfos, err := s.ts.GetServingShards(ctx, req.Keyspace) + if err != nil { + return err + } + + lockName := fmt.Sprintf("%s/%s", req.Keyspace, req.Workflow) + ctx, workflowUnlock, lockErr := s.ts.LockName(ctx, lockName, "MaterializeAddTables") + if lockErr != nil { + return vterrors.Wrapf(lockErr, "failed to lock the %s workflow", lockName) + } + defer workflowUnlock(&err) + + ctx, targetUnlock, lockErr := s.ts.LockKeyspace(ctx, req.Keyspace, "MaterializeAddTables") + if lockErr != nil { + return vterrors.Wrapf(lockErr, "failed to lock the %s keyspace", req.Keyspace) + } + defer targetUnlock(&err) + + streamsByTargetShard, sourceKeyspace, workflowType, err := s.validateAndGetStreamsAndSourceKeyspace(ctx, targetShardInfos, req.TableSettings, req.Workflow) + if err != nil { + return err + } + if sourceKeyspace == "" { + return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "source keyspace not found for workflow %s", req.Workflow) + } + + // We only allow adding tables for MoveTables and Materialize workflows. + if workflowType != binlogdatapb.VReplicationWorkflowType_Materialize && + workflowType != binlogdatapb.VReplicationWorkflowType_MoveTables { + return vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "cannot add tables for workflow type %s", workflowType) + } + + // Stop the streams + err = forAllShards(targetShardInfos, func(target *topo.ShardInfo) error { + tablet, err := s.ts.GetTablet(ctx, target.PrimaryAlias) + if err != nil { + return vterrors.Wrapf(err, "GetTablet(%v) failed", target.PrimaryAlias) + } + if _, err := s.tmc.UpdateVReplicationWorkflow(ctx, tablet.Tablet, &tabletmanagerdatapb.UpdateVReplicationWorkflowRequest{ + Workflow: req.Workflow, + State: ptr.Of(binlogdatapb.VReplicationWorkflowState_Stopped), + }); err != nil { + return vterrors.Wrapf(err, "failed to stop workflow %s on shard %s/%s", req.Workflow, req.Keyspace, tablet.Shard) + } + return nil + }) + if err != nil { + return err + } + + if req.MaterializationIntent == vtctldatapb.MaterializationIntent_REFERENCE { + // If SourceExpression is empty or CreateDdl is empty we set it to + // values corresponding to a reference table. + for _, ts := range req.TableSettings { + if ts.SourceExpression == "" { + ts.SourceExpression = fmt.Sprintf("select * from %s", ts.TargetTable) + } + if ts.CreateDdl == "" { + ts.CreateDdl = createDDLAsCopyDropForeignKeys + } + } + } + + materializationIntent := vtctldatapb.MaterializationIntent_CUSTOM + if workflowType == binlogdatapb.VReplicationWorkflowType_MoveTables { + materializationIntent = vtctldatapb.MaterializationIntent_MOVETABLES + } + + ms := &vtctldatapb.MaterializeSettings{ + Workflow: req.Workflow, + MaterializationIntent: materializationIntent, + TargetKeyspace: req.Keyspace, + SourceKeyspace: sourceKeyspace, + TableSettings: req.TableSettings, + } + mz := &materializer{ + ctx: ctx, + ts: s.ts, + sourceTs: s.ts, + tmc: s.tmc, + env: s.env, + ms: ms, + workflowType: workflowType, + } + if err := mz.buildMaterializer(); err != nil { + return err + } + if err := mz.deploySchema(); err != nil { + // If there was an error while deploying schema, we should restart the + // streams before returning the error. + if startStreamsErr := mz.startStreams(ctx); startStreamsErr != nil { + return vterrors.Wrapf(startStreamsErr, "unable to restart workflow %s and failed to deploy schema: %v", req.Workflow, err) + } + return vterrors.Wrapf(err, "failed to deploy schema") + } + + if err := mz.insertTablesInCopyStateTable(ctx, streamsByTargetShard); err != nil { + return err + } + + // Generate the rules using TableSettings, append the binglogsource filter + // rules and start the streams. + return forAllShards(targetShardInfos, func(target *topo.ShardInfo) error { + tablet, err := s.ts.GetTablet(ctx, target.PrimaryAlias) + if err != nil { + return vterrors.Wrapf(err, "GetTablet(%v) failed", target.PrimaryAlias) + } + + // This is similar to what we follow while creating workflow streams. + sourceShards := mz.filterSourceShards(target) + streamKeyRangesEqual := len(sourceShards) == 1 && key.KeyRangeEqual(sourceShards[0].KeyRange, target.KeyRange) + + var rules []*binlogdatapb.Rule + for _, ts := range req.TableSettings { + rule, err := mz.generateRule(ts, target, nil, streamKeyRangesEqual) + if err != nil { + return err + } + rules = append(rules, rule) + } + + if _, err := s.tmc.UpdateVReplicationWorkflow(ctx, tablet.Tablet, &tabletmanagerdatapb.UpdateVReplicationWorkflowRequest{ + Workflow: req.Workflow, + FilterRules: rules, + State: ptr.Of(binlogdatapb.VReplicationWorkflowState_Running), + }); err != nil { + return vterrors.Wrapf(err, "failed to update workflow %s on shard %s/%s", req.Workflow, req.Keyspace, tablet.Shard) + } + return nil + }) +} + +// validateAndGetStreamsAndSourceKeyspace validates that there are no duplicate +// tables, and returns streamsByTargetShard, source keyspace and workflow type. +func (s *Server) validateAndGetStreamsAndSourceKeyspace(ctx context.Context, targetShardInfos []*topo.ShardInfo, tableSettings []*vtctldatapb.TableMaterializeSettings, workflowName string, +) (map[string][]*tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream, string, binlogdatapb.VReplicationWorkflowType, error) { + tableSet := sets.New[string]() + for _, ts := range tableSettings { + tableSet.Insert(ts.TargetTable) + } + + streamsByTargetShard := make(map[string][]*tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream) + + var ( + mu sync.Mutex + sourceKeyspace string + workflowType binlogdatapb.VReplicationWorkflowType + ) + + // Validation for duplicate tables. + err := forAllShards(targetShardInfos, func(si *topo.ShardInfo) error { + tablet, err := s.ts.GetTablet(ctx, si.PrimaryAlias) + if err != nil { + return err + } + res, err := s.tmc.ReadVReplicationWorkflow(ctx, tablet.Tablet, &tabletmanagerdatapb.ReadVReplicationWorkflowRequest{ + Workflow: workflowName, + }) + if err != nil { + return vterrors.Wrapf(err, "failed to read workflow %s on shard %s/%s", workflowName, tablet.Keyspace, tablet.Shard) + } + + func() { + mu.Lock() + defer mu.Unlock() + if len(res.Streams) > 0 && sourceKeyspace == "" { + sourceKeyspace = res.Streams[0].Bls.Keyspace + } + workflowType = res.WorkflowType + streamsByTargetShard[tablet.Shard] = res.Streams + }() + + for _, stream := range res.Streams { + for _, rule := range stream.Bls.Filter.Rules { + if tableSet.Has(rule.Match) { + return vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "rule for table %s already exists", rule.Match) + } + } + } + return nil + }) + return streamsByTargetShard, sourceKeyspace, workflowType, err +} + func validateMaterializeSettings(ms *vtctldatapb.MaterializeSettings) error { switch { case len(ms.ReferenceTables) == 0 && len(ms.TableSettings) == 0: diff --git a/go/vt/vtctl/workflow/server_test.go b/go/vt/vtctl/workflow/server_test.go index a836df13123..f0249802342 100644 --- a/go/vt/vtctl/workflow/server_test.go +++ b/go/vt/vtctl/workflow/server_test.go @@ -33,8 +33,10 @@ import ( "google.golang.org/grpc/status" "google.golang.org/protobuf/encoding/prototext" + "vitess.io/vitess/go/ptr" "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/test/utils" + "vitess.io/vitess/go/textutil" "vitess.io/vitess/go/vt/logutil" "vitess.io/vitess/go/vt/mysqlctl/tmutils" "vitess.io/vitess/go/vt/topo" @@ -2704,3 +2706,169 @@ func TestFinalizeMigrateWorkflow(t *testing.T) { }) } } + +func TestMaterializeAddTables(t *testing.T) { + ctx := context.Background() + + sourceKeyspace := &testKeyspace{"source_keyspace", []string{"-"}} + targetKeyspace := &testKeyspace{"target_keyspace", []string{"-80", "80-"}} + + te := newTestEnv(t, ctx, defaultCellName, sourceKeyspace, targetKeyspace) + defer te.close() + + tableName1 := "t1" + tableName2 := "t2" + schema := map[string]*tabletmanagerdatapb.SchemaDefinition{ + tableName1: { + TableDefinitions: []*tabletmanagerdatapb.TableDefinition{ + { + Name: tableName1, + Schema: fmt.Sprintf("CREATE TABLE %s (id BIGINT, name VARCHAR(64), PRIMARY KEY (id))", tableName1), + }, + }, + }, + // This will be used in deploySchema(). + fmt.Sprintf("%s.%s", sourceKeyspace.KeyspaceName, tableName2): { + TableDefinitions: []*tabletmanagerdatapb.TableDefinition{ + { + Name: tableName2, + Schema: fmt.Sprintf("CREATE TABLE %s (id BIGINT, name VARCHAR(64), PRIMARY KEY (id))", tableName2), + }, + }, + }, + } + te.tmc.schema = schema + + testcases := []struct { + name string + request *vtctldatapb.WorkflowAddTablesRequest + expectApplySchemaRequest bool + addUpdateVReplicationWorkflowRequestResponses []*updateVReplicationWorkflowRequestResponse + expectedErrContains string + }{ + { + name: "success", + request: &vtctldatapb.WorkflowAddTablesRequest{ + Workflow: "wf", + Keyspace: targetKeyspace.KeyspaceName, + TableSettings: []*vtctldatapb.TableMaterializeSettings{ + { + TargetTable: "t2", + }, + }, + MaterializationIntent: vtctldatapb.MaterializationIntent_REFERENCE, + }, + addUpdateVReplicationWorkflowRequestResponses: []*updateVReplicationWorkflowRequestResponse{ + { + req: &tabletmanagerdatapb.UpdateVReplicationWorkflowRequest{ + Workflow: "wf", + State: ptr.Of(binlogdatapb.VReplicationWorkflowState_Stopped), + }, + }, + { + req: &tabletmanagerdatapb.UpdateVReplicationWorkflowRequest{ + Workflow: "wf", + State: ptr.Of(binlogdatapb.VReplicationWorkflowState_Running), + FilterRules: []*binlogdatapb.Rule{ + { + Match: "t2", + Filter: "select * from t2", + }, + }, + }, + }, + }, + expectApplySchemaRequest: true, + }, + { + name: "rule already exists error", + request: &vtctldatapb.WorkflowAddTablesRequest{ + Workflow: "wf", + Keyspace: targetKeyspace.KeyspaceName, + TableSettings: []*vtctldatapb.TableMaterializeSettings{ + { + TargetTable: "t1", + }, + }, + MaterializationIntent: vtctldatapb.MaterializationIntent_REFERENCE, + }, + expectedErrContains: "rule for table t1 already exists", + }, + { + name: "source table doesn't exist error", + request: &vtctldatapb.WorkflowAddTablesRequest{ + Workflow: "wf", + Keyspace: targetKeyspace.KeyspaceName, + TableSettings: []*vtctldatapb.TableMaterializeSettings{ + { + TargetTable: "t3", + }, + }, + MaterializationIntent: vtctldatapb.MaterializationIntent_REFERENCE, + }, + addUpdateVReplicationWorkflowRequestResponses: []*updateVReplicationWorkflowRequestResponse{ + { + req: &tabletmanagerdatapb.UpdateVReplicationWorkflowRequest{ + Workflow: "wf", + State: ptr.Of(binlogdatapb.VReplicationWorkflowState_Stopped), + }, + }, + { + req: &tabletmanagerdatapb.UpdateVReplicationWorkflowRequest{ + Workflow: "wf", + State: ptr.Of(binlogdatapb.VReplicationWorkflowState_Running), + // Don't change anything else, so pass simulated NULLs. + Cells: textutil.SimulatedNullStringSlice, + TabletTypes: textutil.SimulatedNullTabletTypeSlice, + }, + }, + }, + expectedErrContains: "source table t3", + }, + } + + for _, tc := range testcases { + t.Run(tc.name, func(t *testing.T) { + if tc.expectApplySchemaRequest { + te.tmc.expectApplySchemaRequest(200, &applySchemaRequestResponse{ + change: &tmutils.SchemaChange{ + SQL: "/create table t2", + Force: false, + AllowReplication: true, + SQLMode: vreplication.SQLMode, + DisableForeignKeyChecks: true, + }, + matchSqlOnly: true, + }) + te.tmc.expectApplySchemaRequest(210, &applySchemaRequestResponse{ + change: &tmutils.SchemaChange{ + SQL: "/create table t2", + Force: false, + AllowReplication: true, + SQLMode: vreplication.SQLMode, + DisableForeignKeyChecks: true, + }, + matchSqlOnly: true, + }) + } + for _, reqres := range tc.addUpdateVReplicationWorkflowRequestResponses { + te.tmc.AddUpdateVReplicationWorkflowRequestResponse(200, reqres) + te.tmc.AddUpdateVReplicationWorkflowRequestResponse(210, reqres) + } + err := te.ws.WorkflowAddTables(ctx, tc.request) + if tc.expectedErrContains == "" { + assert.NoError(t, err) + assert.Empty(t, te.tmc.applySchemaRequests[200]) + assert.Empty(t, te.tmc.applySchemaRequests[210]) + assert.Empty(t, te.tmc.updateVReplicationWorklowRequests[200]) + assert.Empty(t, te.tmc.updateVReplicationWorklowRequests[210]) + return + } + assert.ErrorContains(t, err, tc.expectedErrContains) + assert.Empty(t, te.tmc.applySchemaRequests[200]) + assert.Empty(t, te.tmc.applySchemaRequests[210]) + assert.Empty(t, te.tmc.updateVReplicationWorklowRequests[200]) + assert.Empty(t, te.tmc.updateVReplicationWorklowRequests[210]) + }) + } +} diff --git a/go/vt/vtctl/workflow/utils.go b/go/vt/vtctl/workflow/utils.go index 9e3723ec338..24060295749 100644 --- a/go/vt/vtctl/workflow/utils.go +++ b/go/vt/vtctl/workflow/utils.go @@ -50,7 +50,6 @@ import ( querypb "vitess.io/vitess/go/vt/proto/query" tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata" topodatapb "vitess.io/vitess/go/vt/proto/topodata" - vschemapb "vitess.io/vitess/go/vt/proto/vschema" vtctldatapb "vitess.io/vitess/go/vt/proto/vtctldata" vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" ) @@ -1050,20 +1049,6 @@ func validateSourceTablesExist(sourceKeyspace string, ksTables, tables []string) return nil } -// getVindexAndVSchema gets the vindex (from VSchema) and VSchema with the -// provided vindex name and keyspace. -func getVindexAndVSchema(ctx context.Context, ts *topo.Server, keyspace string, vindexName string) (*vschemapb.Vindex, *topo.KeyspaceVSchemaInfo, error) { - vschema, err := ts.GetVSchema(ctx, keyspace) - if err != nil { - return nil, nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "failed to get vschema for the %s keyspace", keyspace) - } - vindex := vschema.Vindexes[vindexName] - if vindex == nil { - return nil, nil, vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "vindex %s not found in the %s keyspace", vindexName, keyspace) - } - return vindex, vschema, nil -} - func processWorkflowActionOptions(opts []WorkflowActionOption) workflowActionOptions { var options workflowActionOptions for _, o := range opts { diff --git a/go/vt/vtctld/api.go b/go/vt/vtctld/api.go index 0452fce3c3d..dc03470200a 100644 --- a/go/vt/vtctld/api.go +++ b/go/vt/vtctld/api.go @@ -39,6 +39,7 @@ import ( "vitess.io/vitess/go/vt/servenv" "vitess.io/vitess/go/vt/topo" "vitess.io/vitess/go/vt/topo/topoproto" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtctl" "vitess.io/vitess/go/vt/vttablet/tmclient" "vitess.io/vitess/go/vt/wrangler" @@ -84,7 +85,7 @@ func init() { func registerVtctldAPIFlags(fs *pflag.FlagSet) { fs.StringVar(&localCell, "cell", localCell, "cell to use") - fs.BoolVar(&proxyTablets, "proxy_tablets", proxyTablets, "Setting this true will make vtctld proxy the tablet status instead of redirecting to them") + utils.SetFlagBoolVar(fs, &proxyTablets, "proxy-tablets", proxyTablets, "Setting this true will make vtctld proxy the tablet status instead of redirecting to them") } func newTabletWithURL(t *topodatapb.Tablet) *TabletWithURL { diff --git a/go/vt/vtctld/tablet_data.go b/go/vt/vtctld/tablet_data.go index f9482849bee..88162bcbf69 100644 --- a/go/vt/vtctld/tablet_data.go +++ b/go/vt/vtctld/tablet_data.go @@ -29,6 +29,7 @@ import ( "vitess.io/vitess/go/vt/servenv" "vitess.io/vitess/go/vt/topo" "vitess.io/vitess/go/vt/topo/topoproto" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vttablet/tabletconn" querypb "vitess.io/vitess/go/vt/proto/query" @@ -66,7 +67,7 @@ func init() { } func registerVtctlTabletFlags(fs *pflag.FlagSet) { - fs.DurationVar(&tabletHealthKeepAlive, "tablet_health_keep_alive", tabletHealthKeepAlive, "close streaming tablet health connection if there are no requests for this long") + utils.SetFlagDurationVar(fs, &tabletHealthKeepAlive, "tablet-health-keep-alive", tabletHealthKeepAlive, "close streaming tablet health connection if there are no requests for this long") } func newTabletHealth() *tabletHealth { diff --git a/go/vt/vtctld/vtctld.go b/go/vt/vtctld/vtctld.go index 5ca3908c053..c380b1f1ed2 100644 --- a/go/vt/vtctld/vtctld.go +++ b/go/vt/vtctld/vtctld.go @@ -23,6 +23,7 @@ import ( "github.com/spf13/pflag" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtenv" "vitess.io/vitess/go/vt/servenv" @@ -46,7 +47,7 @@ func init() { } func registerVtctldFlags(fs *pflag.FlagSet) { - fs.BoolVar(&sanitizeLogMessages, "vtctld_sanitize_log_messages", sanitizeLogMessages, "When true, vtctld sanitizes logging.") + utils.SetFlagBoolVar(fs, &sanitizeLogMessages, "vtctld-sanitize-log-messages", sanitizeLogMessages, "When true, vtctld sanitizes logging.") } // InitVtctld initializes all the vtctld functionality. diff --git a/go/vt/vterrors/vterrors.go b/go/vt/vterrors/vterrors.go index c97a7c8e45f..0124f43fb2e 100644 --- a/go/vt/vterrors/vterrors.go +++ b/go/vt/vterrors/vterrors.go @@ -96,6 +96,7 @@ import ( "github.com/spf13/pflag" vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" + "vitess.io/vitess/go/vt/utils" ) // logErrStacks controls whether printing errors includes the @@ -120,7 +121,7 @@ func setLogErrStacks(val bool) { func RegisterFlags(fs *pflag.FlagSet) { muLogErrStacks.Lock() defer muLogErrStacks.Unlock() - fs.BoolVar(&logErrStacks, "log_err_stacks", false, "log stack traces for errors") + utils.SetFlagBoolVar(fs, &logErrStacks, "log-err-stacks", false, "log stack traces for errors") } // New returns an error with the supplied message. diff --git a/go/vt/vtexplain/vtexplain_vtgate.go b/go/vt/vtexplain/vtexplain_vtgate.go index 7d25758a30e..7c838da4330 100644 --- a/go/vt/vtexplain/vtexplain_vtgate.go +++ b/go/vt/vtexplain/vtexplain_vtgate.go @@ -33,6 +33,10 @@ import ( "vitess.io/vitess/go/vt/discovery" "vitess.io/vitess/go/vt/key" "vitess.io/vitess/go/vt/log" + querypb "vitess.io/vitess/go/vt/proto/query" + topodatapb "vitess.io/vitess/go/vt/proto/topodata" + vschemapb "vitess.io/vitess/go/vt/proto/vschema" + vtgatepb "vitess.io/vitess/go/vt/proto/vtgate" "vitess.io/vitess/go/vt/srvtopo" "vitess.io/vitess/go/vt/topo" "vitess.io/vitess/go/vt/vterrors" @@ -42,11 +46,6 @@ import ( "vitess.io/vitess/go/vt/vtgate/logstats" "vitess.io/vitess/go/vt/vtgate/vindexes" "vitess.io/vitess/go/vt/vttablet/queryservice" - - querypb "vitess.io/vitess/go/vt/proto/query" - topodatapb "vitess.io/vitess/go/vt/proto/topodata" - vschemapb "vitess.io/vitess/go/vt/proto/vschema" - vtgatepb "vitess.io/vitess/go/vt/proto/vtgate" ) func (vte *VTExplain) initVtgateExecutor(ctx context.Context, ts *topo.Server, vSchemaStr, ksShardMapStr string, opts *Options, srvTopoCounts *stats.CountersWithSingleLabel) error { @@ -75,6 +74,7 @@ func (vte *VTExplain) initVtgateExecutor(ctx context.Context, ts *topo.Server, v queryLogBufferSize := 10 plans := theine.NewStore[vtgate.PlanCacheKey, *engine.Plan](4*1024*1024, false) eConfig := vtgate.ExecutorConfig{ + Name: "TestExecutor", Normalize: opts.Normalize, StreamSize: streamSize, AllowScatter: true, diff --git a/go/vt/vtgate/buffer/buffer.go b/go/vt/vtgate/buffer/buffer.go index eb937a6361c..35dd573556b 100644 --- a/go/vt/vtgate/buffer/buffer.go +++ b/go/vt/vtgate/buffer/buffer.go @@ -147,7 +147,7 @@ type Buffer struct { config *Config // bufferSizeSema limits how many requests can be buffered - // ("-buffer_size") and is shared by all shardBuffer instances. + // ("-buffer-size") and is shared by all shardBuffer instances. bufferSizeSema *semaphore.Weighted bufferSize int @@ -156,7 +156,7 @@ type Buffer struct { // - 1. Requests which may buffer (RLock, can be run in parallel) // - 2. Request which starts buffering (based on the seen error) // - 3. HealthCheck subscriber ("StatsUpdate") which stops buffering - // - 4. Timer which may stop buffering after -buffer_max_failover_duration + // - 4. Timer which may stop buffering after -buffer-max-failover-duration mu sync.RWMutex // buffers holds a shardBuffer object per shard, even if no failover is in // progress. diff --git a/go/vt/vtgate/buffer/buffer_test.go b/go/vt/vtgate/buffer/buffer_test.go index fc326ce0ce5..77006afc7d3 100644 --- a/go/vt/vtgate/buffer/buffer_test.go +++ b/go/vt/vtgate/buffer/buffer_test.go @@ -195,7 +195,7 @@ func testBuffering1WithOptions(t *testing.T, fail failover, concurrency int) { // Second failover: Buffering is skipped because last failover is too recent. if retryDone, err := b.WaitForFailoverEnd(context.Background(), keyspace, shard, nil, failoverErr); err != nil || retryDone != nil { - t.Fatalf("subsequent failovers must be skipped due to -buffer_min_time_between_failovers setting. err: %v retryDone: %v", err, retryDone) + t.Fatalf("subsequent failovers must be skipped due to -buffer-min-time-between-failovers setting. err: %v retryDone: %v", err, retryDone) } if got, want := requestsSkipped.Counts()[statsKeyJoinedLastFailoverTooRecent], int64(1); got != want { t.Fatalf("skipped request was not tracked: got = %v, want = %v", got, want) @@ -377,7 +377,7 @@ func testLastReparentTooRecentBuffering1(t *testing.T, fail failover) { now = now.Add(1 * time.Second) fail(b, newPrimary, keyspace, shard, now) - // After we're past the --buffer_min_time_between_failovers threshold, go + // After we're past the --buffer-min-time-between-failovers threshold, go // through a failover with non-zero QPS. now = now.Add(cfg.MinTimeBetweenFailovers) // We're seeing errors first. diff --git a/go/vt/vtgate/buffer/flags.go b/go/vt/vtgate/buffer/flags.go index 01a3c33e869..77ab1e8f22a 100644 --- a/go/vt/vtgate/buffer/flags.go +++ b/go/vt/vtgate/buffer/flags.go @@ -27,6 +27,7 @@ import ( "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/servenv" "vitess.io/vitess/go/vt/topo/topoproto" + "vitess.io/vitess/go/vt/utils" ) var ( @@ -44,15 +45,15 @@ var ( func registerFlags(fs *pflag.FlagSet) { fs.BoolVar(&bufferEnabled, "enable_buffer", false, "Enable buffering (stalling) of primary traffic during failovers.") - fs.BoolVar(&bufferEnabledDryRun, "enable_buffer_dry_run", false, "Detect and log failover events, but do not actually buffer requests.") + utils.SetFlagBoolVar(fs, &bufferEnabledDryRun, "enable-buffer-dry-run", false, "Detect and log failover events, but do not actually buffer requests.") - fs.DurationVar(&bufferWindow, "buffer_window", 10*time.Second, "Duration for how long a request should be buffered at most.") - fs.IntVar(&bufferSize, "buffer_size", 1000, "Maximum number of buffered requests in flight (across all ongoing failovers).") - fs.DurationVar(&bufferMaxFailoverDuration, "buffer_max_failover_duration", 20*time.Second, "Stop buffering completely if a failover takes longer than this duration.") - fs.DurationVar(&bufferMinTimeBetweenFailovers, "buffer_min_time_between_failovers", 1*time.Minute, "Minimum time between the end of a failover and the start of the next one (tracked per shard). Faster consecutive failovers will not trigger buffering.") + utils.SetFlagDurationVar(fs, &bufferWindow, "buffer-window", 10*time.Second, "Duration for how long a request should be buffered at most.") + utils.SetFlagIntVar(fs, &bufferSize, "buffer-size", 1000, "Maximum number of buffered requests in flight (across all ongoing failovers).") + utils.SetFlagDurationVar(fs, &bufferMaxFailoverDuration, "buffer-max-failover-duration", 20*time.Second, "Stop buffering completely if a failover takes longer than this duration.") + utils.SetFlagDurationVar(fs, &bufferMinTimeBetweenFailovers, "buffer-min-time-between-failovers", 1*time.Minute, "Minimum time between the end of a failover and the start of the next one (tracked per shard). Faster consecutive failovers will not trigger buffering.") - fs.IntVar(&bufferDrainConcurrency, "buffer_drain_concurrency", 1, "Maximum number of requests retried simultaneously. More concurrency will increase the load on the PRIMARY vttablet when draining the buffer.") - fs.StringVar(&bufferKeyspaceShards, "buffer_keyspace_shards", "", "If not empty, limit buffering to these entries (comma separated). Entry format: keyspace or keyspace/shard. Requires --enable_buffer=true.") + utils.SetFlagIntVar(fs, &bufferDrainConcurrency, "buffer-drain-concurrency", 1, "Maximum number of requests retried simultaneously. More concurrency will increase the load on the PRIMARY vttablet when draining the buffer.") + utils.SetFlagStringVar(fs, &bufferKeyspaceShards, "buffer-keyspace-shards", "", "If not empty, limit buffering to these entries (comma separated). Entry format: keyspace or keyspace/shard. Requires --enable_buffer=true.") } func init() { @@ -62,27 +63,27 @@ func init() { func verifyFlags() error { if bufferWindow < 1*time.Second { - return fmt.Errorf("--buffer_window must be >= 1s (specified value: %v)", bufferWindow) + return fmt.Errorf("--buffer-window must be >= 1s (specified value: %v)", bufferWindow) } if bufferWindow > bufferMaxFailoverDuration { - return fmt.Errorf("--buffer_window must be <= --buffer_max_failover_duration: %v vs. %v", bufferWindow, bufferMaxFailoverDuration) + return fmt.Errorf("--buffer-window must be <= --buffer-max-failover-duration: %v vs. %v", bufferWindow, bufferMaxFailoverDuration) } if bufferSize < 1 { - return fmt.Errorf("--buffer_size must be >= 1 (specified value: %d)", bufferSize) + return fmt.Errorf("--buffer-size must be >= 1 (specified value: %d)", bufferSize) } if bufferMinTimeBetweenFailovers < 1*time.Second { - return fmt.Errorf("--buffer_min_time_between_failovers must be >= 1s (specified value: %v)", bufferMinTimeBetweenFailovers) + return fmt.Errorf("--buffer-min-time-between-failovers must be >= 1s (specified value: %v)", bufferMinTimeBetweenFailovers) } if bufferDrainConcurrency < 1 { - return fmt.Errorf("--buffer_drain_concurrency must be >= 1 (specified value: %d)", bufferDrainConcurrency) + return fmt.Errorf("--buffer-drain-concurrency must be >= 1 (specified value: %d)", bufferDrainConcurrency) } if bufferKeyspaceShards != "" && !bufferEnabled { - return fmt.Errorf("--buffer_keyspace_shards=%v also requires that --enable_buffer is set", bufferKeyspaceShards) + return fmt.Errorf("--buffer-keyspace-shards=%v also requires that --enable_buffer is set", bufferKeyspaceShards) } if bufferEnabled && bufferEnabledDryRun && bufferKeyspaceShards == "" { - return errors.New("both the dry-run mode and actual buffering is enabled. To avoid ambiguity, keyspaces and shards for actual buffering must be explicitly listed in --buffer_keyspace_shards") + return errors.New("both the dry-run mode and actual buffering is enabled. To avoid ambiguity, keyspaces and shards for actual buffering must be explicitly listed in --buffer-keyspace-shards") } keyspaces, shards := keyspaceShardsToSets(bufferKeyspaceShards) @@ -92,7 +93,7 @@ func verifyFlags() error { return err } if keyspaces[keyspace] { - return fmt.Errorf("--buffer_keyspace_shards has overlapping entries (keyspace only vs. keyspace/shard): %v vs. %v Please remove one or the other", keyspace, s) + return fmt.Errorf("--buffer-keyspace-shards has overlapping entries (keyspace only vs. keyspace/shard): %v vs. %v Please remove one or the other", keyspace, s) } } diff --git a/go/vt/vtgate/buffer/flags_test.go b/go/vt/vtgate/buffer/flags_test.go index 98c9b2ddfbf..488cf326860 100644 --- a/go/vt/vtgate/buffer/flags_test.go +++ b/go/vt/vtgate/buffer/flags_test.go @@ -21,6 +21,8 @@ import ( "testing" "github.com/spf13/pflag" + + "vitess.io/vitess/go/vt/utils" ) func TestVerifyFlags(t *testing.T) { @@ -40,7 +42,7 @@ func TestVerifyFlags(t *testing.T) { // Verify that the non-allowed (non-trivial) flag combinations are caught. defer resetFlagsForTesting() - parse([]string{"--buffer_keyspace_shards", "ks1/0"}) + parse([]string{utils.GetFlagVariantForTests("--buffer-keyspace-shards"), "ks1/0"}) if err := verifyFlags(); err == nil || !strings.Contains(err.Error(), "also requires that") { t.Fatalf("List of shards requires --enable_buffer. err: %v", err) } @@ -49,7 +51,7 @@ func TestVerifyFlags(t *testing.T) { parse([]string{ "--enable_buffer", - "--enable_buffer_dry_run", + utils.GetFlagVariantForTests("--enable-buffer-dry-run"), }) if err := verifyFlags(); err == nil || !strings.Contains(err.Error(), "To avoid ambiguity") { t.Fatalf("Dry-run and non-dry-run mode together require an explicit list of shards for actual buffering. err: %v", err) @@ -59,7 +61,7 @@ func TestVerifyFlags(t *testing.T) { parse([]string{ "--enable_buffer", - "--buffer_keyspace_shards", "ks1//0", + utils.GetFlagVariantForTests("--buffer-keyspace-shards"), "ks1//0", }) if err := verifyFlags(); err == nil || !strings.Contains(err.Error(), "invalid shard path") { t.Fatalf("Invalid shard names are not allowed. err: %v", err) @@ -69,7 +71,7 @@ func TestVerifyFlags(t *testing.T) { parse([]string{ "--enable_buffer", - "--buffer_keyspace_shards", "ks1,ks1/0", + utils.GetFlagVariantForTests("--buffer-keyspace-shards"), "ks1,ks1/0", }) if err := verifyFlags(); err == nil || !strings.Contains(err.Error(), "has overlapping entries") { t.Fatalf("Listed keyspaces and shards must not overlap. err: %v", err) diff --git a/go/vt/vtgate/buffer/timeout_thread.go b/go/vt/vtgate/buffer/timeout_thread.go index 1f02a393919..377a4bf0954 100644 --- a/go/vt/vtgate/buffer/timeout_thread.go +++ b/go/vt/vtgate/buffer/timeout_thread.go @@ -28,7 +28,7 @@ import ( type timeoutThread struct { sb *shardBuffer // maxDuration enforces that a failover stops after - // -buffer_max_failover_duration at most. + // -buffer-max-failover-duration at most. maxDuration *time.Timer // stopChan will be closed when the thread should stop e.g. before the drain. stopChan chan struct{} diff --git a/go/vt/vtgate/buffer/variables_test.go b/go/vt/vtgate/buffer/variables_test.go index 30d2426c639..a54e80c4071 100644 --- a/go/vt/vtgate/buffer/variables_test.go +++ b/go/vt/vtgate/buffer/variables_test.go @@ -34,9 +34,9 @@ func TestVariables(t *testing.T) { t.Errorf("failed to parse with default values: %v", err) } - fs.Set("buffer_size", "23") + fs.Set("buffer-size", "23") defer func() { - fs.Set("buffer_size", "1") + fs.Set("buffer-size", "1") }() // Create new buffer which will the flags. diff --git a/go/vt/vtgate/endtoend/vstream_test.go b/go/vt/vtgate/endtoend/vstream_test.go index 8fed95f5d51..ae55dfe8f96 100644 --- a/go/vt/vtgate/endtoend/vstream_test.go +++ b/go/vt/vtgate/endtoend/vstream_test.go @@ -775,7 +775,7 @@ recvLoop: // The last response, when the vstream copy completes, does not // typically contain ROW events. if beginEventSeen || commitEventSeen { - require.True(t, (beginEventSeen && commitEventSeen), "did not receive both BEGIN and COMMIT events in the final ROW event set") + require.True(t, beginEventSeen && commitEventSeen, "did not receive both BEGIN and COMMIT events in the final ROW event set") } } diff --git a/go/vt/vtgate/engine/cached_size.go b/go/vt/vtgate/engine/cached_size.go index 840f221b1fd..bdbef299999 100644 --- a/go/vt/vtgate/engine/cached_size.go +++ b/go/vt/vtgate/engine/cached_size.go @@ -967,12 +967,10 @@ func (cached *Route) CachedSize(alloc bool) int64 { } size := int64(0) if alloc { - size += int64(112) + size += int64(96) } // field Query string size += hack.RuntimeAllocSize(int64(len(cached.Query))) - // field TableName string - size += hack.RuntimeAllocSize(int64(len(cached.TableName))) // field FieldQuery string size += hack.RuntimeAllocSize(int64(len(cached.FieldQuery))) // field OrderBy vitess.io/vitess/go/vt/vtgate/evalengine.Comparison diff --git a/go/vt/vtgate/engine/concatenate.go b/go/vt/vtgate/engine/concatenate.go index eb93711eed2..e74d47df6a6 100644 --- a/go/vt/vtgate/engine/concatenate.go +++ b/go/vt/vtgate/engine/concatenate.go @@ -56,36 +56,6 @@ func NewConcatenate(Sources []Primitive, ignoreCols []int) *Concatenate { } } -// RouteType returns a description of the query routing type used by the primitive -func (c *Concatenate) RouteType() string { - return "Concatenate" -} - -// GetKeyspaceName specifies the Keyspace that this primitive routes to -func (c *Concatenate) GetKeyspaceName() string { - res := c.Sources[0].GetKeyspaceName() - for i := 1; i < len(c.Sources); i++ { - res = formatTwoOptionsNicely(res, c.Sources[i].GetKeyspaceName()) - } - return res -} - -// GetTableName specifies the table that this primitive routes to. -func (c *Concatenate) GetTableName() string { - res := c.Sources[0].GetTableName() - for i := 1; i < len(c.Sources); i++ { - res = formatTwoOptionsNicely(res, c.Sources[i].GetTableName()) - } - return res -} - -func formatTwoOptionsNicely(a, b string) string { - if a == b { - return a - } - return a + "_" + b -} - // errWrongNumberOfColumnsInSelect is an error var errWrongNumberOfColumnsInSelect = vterrors.NewErrorf(vtrpcpb.Code_FAILED_PRECONDITION, vterrors.WrongNumberOfColumnsInSelect, "The used SELECT statements have a different number of columns") @@ -480,5 +450,5 @@ func (c *Concatenate) Inputs() ([]Primitive, []map[string]any) { } func (c *Concatenate) description() PrimitiveDescription { - return PrimitiveDescription{OperatorType: c.RouteType()} + return PrimitiveDescription{OperatorType: "Concatenate"} } diff --git a/go/vt/vtgate/engine/dbddl.go b/go/vt/vtgate/engine/dbddl.go index 27ae6c6a254..4417e1d3dba 100644 --- a/go/vt/vtgate/engine/dbddl.go +++ b/go/vt/vtgate/engine/dbddl.go @@ -78,24 +78,13 @@ func NewDBDDL(dbName string, create bool, timeout int) *DBDDL { } } -// RouteType implements the Primitive interface -func (c *DBDDL) RouteType() string { +func (c *DBDDL) routeType() string { if c.create { return "CreateDB" } return "DropDB" } -// GetKeyspaceName implements the Primitive interface -func (c *DBDDL) GetKeyspaceName() string { - return c.name -} - -// GetTableName implements the Primitive interface -func (c *DBDDL) GetTableName() string { - return "" -} - // TryExecute implements the Primitive interface func (c *DBDDL) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { name := vcursor.GetDBDDLPluginName() @@ -199,7 +188,7 @@ func (c *DBDDL) GetFields(context.Context, VCursor, map[string]*querypb.BindVari // description implements the Primitive interface func (c *DBDDL) description() PrimitiveDescription { return PrimitiveDescription{ - OperatorType: strings.ToUpper(c.RouteType()), + OperatorType: strings.ToUpper(c.routeType()), Keyspace: &vindexes.Keyspace{Name: c.name}, } } diff --git a/go/vt/vtgate/engine/ddl.go b/go/vt/vtgate/engine/ddl.go index 0eecbe50cdb..46f5490fdc6 100644 --- a/go/vt/vtgate/engine/ddl.go +++ b/go/vt/vtgate/engine/ddl.go @@ -62,21 +62,6 @@ func (ddl *DDL) description() PrimitiveDescription { } } -// RouteType implements the Primitive interface -func (ddl *DDL) RouteType() string { - return "DDL" -} - -// GetKeyspaceName implements the Primitive interface -func (ddl *DDL) GetKeyspaceName() string { - return ddl.Keyspace.Name -} - -// GetTableName implements the Primitive interface -func (ddl *DDL) GetTableName() string { - return ddl.DDL.GetTable().Name.String() -} - // IsOnlineSchemaDDL returns true if the query is an online schema change DDL func (ddl *DDL) isOnlineSchemaDDL() bool { switch ddl.DDL.GetAction() { diff --git a/go/vt/vtgate/engine/delete.go b/go/vt/vtgate/engine/delete.go index f20f70ba187..32566c56d6c 100644 --- a/go/vt/vtgate/engine/delete.go +++ b/go/vt/vtgate/engine/delete.go @@ -121,7 +121,6 @@ func (del *Delete) isVindexModified() bool { func (del *Delete) description() PrimitiveDescription { other := map[string]any{ "Query": del.Query, - "Table": del.GetTableName(), "OwnedVindexQuery": del.OwnedVindexQuery, "MultiShardAutocommit": del.MultiShardAutocommit, "QueryTimeout": del.QueryTimeout, diff --git a/go/vt/vtgate/engine/distinct.go b/go/vt/vtgate/engine/distinct.go index 189440611c3..4ba4231db66 100644 --- a/go/vt/vtgate/engine/distinct.go +++ b/go/vt/vtgate/engine/distinct.go @@ -156,21 +156,6 @@ func (d *Distinct) TryStreamExecute(ctx context.Context, vcursor VCursor, bindVa return err } -// RouteType implements the Primitive interface -func (d *Distinct) RouteType() string { - return d.Source.RouteType() -} - -// GetKeyspaceName implements the Primitive interface -func (d *Distinct) GetKeyspaceName() string { - return d.Source.GetKeyspaceName() -} - -// GetTableName implements the Primitive interface -func (d *Distinct) GetTableName() string { - return d.Source.GetTableName() -} - // GetFields implements the Primitive interface func (d *Distinct) GetFields(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable) (*sqltypes.Result, error) { return d.Source.GetFields(ctx, vcursor, bindVars) diff --git a/go/vt/vtgate/engine/dml.go b/go/vt/vtgate/engine/dml.go index 31fc1a2d88e..a52e075f08a 100644 --- a/go/vt/vtgate/engine/dml.go +++ b/go/vt/vtgate/engine/dml.go @@ -19,8 +19,6 @@ package engine import ( "context" "fmt" - "sort" - "strings" "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/vt/key" @@ -99,30 +97,6 @@ func (dml *DML) execMultiDestination(ctx context.Context, primitive Primitive, v return dml.execMultiShard(ctx, primitive, vcursor, rss, queries) } -// RouteType returns a description of the query routing type used by the primitive -func (dml *DML) RouteType() string { - return dml.Opcode.String() -} - -// GetKeyspaceName specifies the Keyspace that this primitive routes to. -func (dml *DML) GetKeyspaceName() string { - return dml.Keyspace.Name -} - -// GetTableName specifies the table that this primitive routes to. -func (dml *DML) GetTableName() string { - sort.Strings(dml.TableNames) - var tableNames []string - var previousTbl string - for _, name := range dml.TableNames { - if name != previousTbl { - tableNames = append(tableNames, name) - previousTbl = name - } - } - return strings.Join(tableNames, ", ") -} - func allowOnlyPrimary(rss ...*srvtopo.ResolvedShard) error { for _, rs := range rss { if rs != nil && rs.Target.TabletType != topodatapb.TabletType_PRIMARY { diff --git a/go/vt/vtgate/engine/dml_with_input.go b/go/vt/vtgate/engine/dml_with_input.go index 0128841526e..588879c7be6 100644 --- a/go/vt/vtgate/engine/dml_with_input.go +++ b/go/vt/vtgate/engine/dml_with_input.go @@ -40,18 +40,6 @@ type DMLWithInput struct { BVList []map[string]int } -func (dml *DMLWithInput) RouteType() string { - return "DMLWithInput" -} - -func (dml *DMLWithInput) GetKeyspaceName() string { - return dml.Input.GetKeyspaceName() -} - -func (dml *DMLWithInput) GetTableName() string { - return dml.Input.GetTableName() -} - func (dml *DMLWithInput) Inputs() ([]Primitive, []map[string]any) { return append([]Primitive{dml.Input}, dml.DMLs...), nil } diff --git a/go/vt/vtgate/engine/exec_prepared_statement.go b/go/vt/vtgate/engine/exec_prepared_statement.go index 1874350f7db..a6a2bb68b16 100644 --- a/go/vt/vtgate/engine/exec_prepared_statement.go +++ b/go/vt/vtgate/engine/exec_prepared_statement.go @@ -37,18 +37,6 @@ func (e *ExecStmt) NeedsTransaction() bool { return e.Input.NeedsTransaction() } -func (e *ExecStmt) RouteType() string { - return "EXECUTE" -} - -func (e *ExecStmt) GetKeyspaceName() string { - return e.Input.GetKeyspaceName() -} - -func (e *ExecStmt) GetTableName() string { - return e.Input.GetTableName() -} - func (e *ExecStmt) GetFields(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable) (*sqltypes.Result, error) { return nil, vterrors.VT12001("prepare command on execute statement") } @@ -73,7 +61,7 @@ func (e *ExecStmt) description() PrimitiveDescription { params = append(params, p.Name.Lowered()) } return PrimitiveDescription{ - OperatorType: e.RouteType(), + OperatorType: "EXECUTE", Other: map[string]any{ "Parameters": params, }, diff --git a/go/vt/vtgate/engine/fake_primitive_test.go b/go/vt/vtgate/engine/fake_primitive_test.go index bddbca87664..465dd78ccf6 100644 --- a/go/vt/vtgate/engine/fake_primitive_test.go +++ b/go/vt/vtgate/engine/fake_primitive_test.go @@ -61,18 +61,6 @@ func (f *fakePrimitive) rewind() { f.log = nil } -func (f *fakePrimitive) RouteType() string { - return "Fake" -} - -func (f *fakePrimitive) GetKeyspaceName() string { - return "fakeKs" -} - -func (f *fakePrimitive) GetTableName() string { - return "fakeTable" -} - func (f *fakePrimitive) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { if f.useNewPrintBindVars { f.log = append(f.log, fmt.Sprintf("Execute %v %v", printBindVars(bindVars), wantfields)) diff --git a/go/vt/vtgate/engine/fake_vcursor_test.go b/go/vt/vtgate/engine/fake_vcursor_test.go index df7093a773f..5ff6b5f04c8 100644 --- a/go/vt/vtgate/engine/fake_vcursor_test.go +++ b/go/vt/vtgate/engine/fake_vcursor_test.go @@ -61,6 +61,10 @@ type noopVCursor struct { inTx bool } +func (t *noopVCursor) GetExecutionMetrics() *Metrics { + panic("implement me") +} + func (t *noopVCursor) SetExecQueryTimeout(timeout *int) { panic("implement me") } @@ -467,6 +471,12 @@ type loggingVCursor struct { onExecuteMultiShardFn func(context.Context, Primitive, []*srvtopo.ResolvedShard, []*querypb.BoundQuery, bool, bool) onStreamExecuteMultiFn func(context.Context, Primitive, string, []*srvtopo.ResolvedShard, []map[string]*querypb.BindVariable, bool, bool, func(*sqltypes.Result) error) onRecordMirrorStatsFn func(time.Duration, time.Duration, error) + + metrics *Metrics +} + +func (f *loggingVCursor) GetExecutionMetrics() *Metrics { + return f.metrics } func (f *loggingVCursor) HasCreatedTempTable() { diff --git a/go/vt/vtgate/engine/filter.go b/go/vt/vtgate/engine/filter.go index dc7af1acfeb..d0139ef2119 100644 --- a/go/vt/vtgate/engine/filter.go +++ b/go/vt/vtgate/engine/filter.go @@ -39,21 +39,6 @@ type Filter struct { Truncate int } -// RouteType returns a description of the query routing type used by the primitive -func (f *Filter) RouteType() string { - return f.Input.RouteType() -} - -// GetKeyspaceName specifies the Keyspace that this primitive routes to. -func (f *Filter) GetKeyspaceName() string { - return f.Input.GetKeyspaceName() -} - -// GetTableName specifies the table that this primitive routes to. -func (f *Filter) GetTableName() string { - return f.Input.GetTableName() -} - // TryExecute satisfies the Primitive interface. func (f *Filter) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { result, err := vcursor.ExecutePrimitive(ctx, f.Input, bindVars, wantfields) diff --git a/go/vt/vtgate/engine/fk_cascade.go b/go/vt/vtgate/engine/fk_cascade.go index b73ab15546b..7e580bac67c 100644 --- a/go/vt/vtgate/engine/fk_cascade.go +++ b/go/vt/vtgate/engine/fk_cascade.go @@ -62,21 +62,6 @@ type FkCascade struct { Parent Primitive } -// RouteType implements the Primitive interface. -func (fkc *FkCascade) RouteType() string { - return "FkCascade" -} - -// GetKeyspaceName implements the Primitive interface. -func (fkc *FkCascade) GetKeyspaceName() string { - return fkc.Parent.GetKeyspaceName() -} - -// GetTableName implements the Primitive interface. -func (fkc *FkCascade) GetTableName() string { - return fkc.Parent.GetTableName() -} - // TryExecute implements the Primitive interface. func (fkc *FkCascade) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { // Execute the Selection primitive to find the rows that are going to modified. @@ -226,7 +211,7 @@ func (fkc *FkCascade) Inputs() ([]Primitive, []map[string]any) { } func (fkc *FkCascade) description() PrimitiveDescription { - return PrimitiveDescription{OperatorType: fkc.RouteType()} + return PrimitiveDescription{OperatorType: "FkCascade"} } var _ Primitive = (*FkCascade)(nil) diff --git a/go/vt/vtgate/engine/fk_verify.go b/go/vt/vtgate/engine/fk_verify.go index da850f7a366..d5b64e00a5f 100644 --- a/go/vt/vtgate/engine/fk_verify.go +++ b/go/vt/vtgate/engine/fk_verify.go @@ -48,21 +48,6 @@ const ( ChildVerify = "VerifyChild" ) -// RouteType implements the Primitive interface -func (f *FkVerify) RouteType() string { - return "FKVerify" -} - -// GetKeyspaceName implements the Primitive interface -func (f *FkVerify) GetKeyspaceName() string { - return f.Exec.GetKeyspaceName() -} - -// GetTableName implements the Primitive interface -func (f *FkVerify) GetTableName() string { - return f.Exec.GetTableName() -} - // TryExecute implements the Primitive interface func (f *FkVerify) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { for _, v := range f.Verify { @@ -105,7 +90,7 @@ func (f *FkVerify) Inputs() ([]Primitive, []map[string]any) { } func (f *FkVerify) description() PrimitiveDescription { - return PrimitiveDescription{OperatorType: f.RouteType()} + return PrimitiveDescription{OperatorType: "FKVerify"} } var _ Primitive = (*FkVerify)(nil) diff --git a/go/vt/vtgate/engine/hash_join.go b/go/vt/vtgate/engine/hash_join.go index 6b9425a35d1..0b74eea16ba 100644 --- a/go/vt/vtgate/engine/hash_join.go +++ b/go/vt/vtgate/engine/hash_join.go @@ -201,24 +201,6 @@ func (hj *HashJoin) TryStreamExecute(ctx context.Context, vcursor VCursor, bindV return nil } -// RouteType implements the Primitive interface -func (hj *HashJoin) RouteType() string { - return "HashJoin" -} - -// GetKeyspaceName implements the Primitive interface -func (hj *HashJoin) GetKeyspaceName() string { - if hj.Left.GetKeyspaceName() == hj.Right.GetKeyspaceName() { - return hj.Left.GetKeyspaceName() - } - return hj.Left.GetKeyspaceName() + "_" + hj.Right.GetKeyspaceName() -} - -// GetTableName implements the Primitive interface -func (hj *HashJoin) GetTableName() string { - return hj.Left.GetTableName() + "_" + hj.Right.GetTableName() -} - // GetFields implements the Primitive interface func (hj *HashJoin) GetFields(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable) (*sqltypes.Result, error) { joinVars := make(map[string]*querypb.BindVariable) @@ -248,7 +230,6 @@ func (hj *HashJoin) Inputs() ([]Primitive, []map[string]any) { // description implements the Primitive interface func (hj *HashJoin) description() PrimitiveDescription { other := map[string]any{ - "TableName": hj.GetTableName(), "JoinColumnIndexes": strings.Trim(strings.Join(strings.Fields(fmt.Sprint(hj.Cols)), ","), "[]"), "Predicate": sqlparser.String(hj.ASTPred), "ComparisonType": hj.ComparisonType.String(), diff --git a/go/vt/vtgate/engine/insert.go b/go/vt/vtgate/engine/insert.go index 74b0e954fe9..1688152c01d 100644 --- a/go/vt/vtgate/engine/insert.go +++ b/go/vt/vtgate/engine/insert.go @@ -104,11 +104,6 @@ func newInsert( return ins } -// RouteType returns a description of the query routing type used by the primitive -func (ins *Insert) RouteType() string { - return insName[ins.Opcode] -} - // TryExecute performs a non-streaming exec. func (ins *Insert) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, _ bool) (*sqltypes.Result, error) { switch ins.Opcode { @@ -347,7 +342,6 @@ func (ins *Insert) buildVindexRowsValues(ctx context.Context, vcursor VCursor, b func (ins *Insert) description() PrimitiveDescription { other := ins.commonDesc() other["Query"] = ins.Query - other["TableName"] = ins.GetTableName() if len(ins.VindexValues) > 0 { valuesOffsets := map[string]string{} diff --git a/go/vt/vtgate/engine/insert_common.go b/go/vt/vtgate/engine/insert_common.go index e325ab7b6cc..e9852b5d6fe 100644 --- a/go/vt/vtgate/engine/insert_common.go +++ b/go/vt/vtgate/engine/insert_common.go @@ -134,16 +134,6 @@ func (code InsertOpcode) MarshalJSON() ([]byte, error) { return json.Marshal(insName[code]) } -// GetKeyspaceName specifies the Keyspace that this primitive routes to. -func (ic *InsertCommon) GetKeyspaceName() string { - return ic.Keyspace.Name -} - -// GetTableName specifies the table that this primitive routes to. -func (ic *InsertCommon) GetTableName() string { - return ic.TableName -} - func (ins *InsertCommon) executeUnshardedTableQuery(ctx context.Context, vcursor VCursor, loggingPrimitive Primitive, bindVars map[string]*querypb.BindVariable, query string, insertID uint64) (*sqltypes.Result, error) { rss, _, err := vcursor.ResolveDestinations(ctx, ins.Keyspace.Name, nil, []key.ShardDestination{key.DestinationAllShards{}}) if err != nil { @@ -228,14 +218,26 @@ func (ic *InsertCommon) processOwned(ctx context.Context, vcursor VCursor, vinde var createIndexes []int var createKeys []sqltypes.Row var createKsids []ksID + var vindexNull []bool for rowNum, rowColumnKeys := range vindexColumnsKeys { if ksids[rowNum] == nil { continue } + keyContainsNull := false + for _, columnKey := range rowColumnKeys { + if columnKey.IsNull() { + // if any of the keys contains a null, we know the vindex will ignore this row, + // so it's safe to + keyContainsNull = true + break + } + } + createIndexes = append(createIndexes, rowNum) createKeys = append(createKeys, rowColumnKeys) createKsids = append(createKsids, ksids[rowNum]) + vindexNull = append(vindexNull, keyContainsNull) } if createKeys == nil { return nil @@ -252,7 +254,7 @@ func (ic *InsertCommon) processOwned(ctx context.Context, vcursor VCursor, vinde return err } for i, v := range verified { - if !v { + if !v && !vindexNull[i] { ksids[createIndexes[i]] = nil } } diff --git a/go/vt/vtgate/engine/insert_select.go b/go/vt/vtgate/engine/insert_select.go index 4ccbb5cc071..4a0feddfa7b 100644 --- a/go/vt/vtgate/engine/insert_select.go +++ b/go/vt/vtgate/engine/insert_select.go @@ -86,11 +86,6 @@ func (ins *InsertSelect) Inputs() ([]Primitive, []map[string]any) { return []Primitive{ins.Input}, nil } -// RouteType returns a description of the query routing type used by the primitive -func (ins *InsertSelect) RouteType() string { - return "InsertSelect" -} - // TryExecute performs a non-streaming exec. func (ins *InsertSelect) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, _ bool) (*sqltypes.Result, error) { if ins.Keyspace.Sharded { @@ -319,7 +314,6 @@ func (ins *InsertSelect) execInsertSharded(ctx context.Context, vcursor VCursor, func (ins *InsertSelect) description() PrimitiveDescription { other := ins.commonDesc() - other["TableName"] = ins.GetTableName() if len(ins.VindexValueOffset) > 0 { valuesOffsets := map[string]string{} diff --git a/go/vt/vtgate/engine/join.go b/go/vt/vtgate/engine/join.go index 91900330be3..9599b987a67 100644 --- a/go/vt/vtgate/engine/join.go +++ b/go/vt/vtgate/engine/join.go @@ -273,24 +273,6 @@ func (code JoinOpcode) MarshalJSON() ([]byte, error) { return ([]byte)(fmt.Sprintf("\"%s\"", code.String())), nil } -// RouteType returns a description of the query routing type used by the primitive -func (jn *Join) RouteType() string { - return "Join" -} - -// GetKeyspaceName specifies the Keyspace that this primitive routes to. -func (jn *Join) GetKeyspaceName() string { - if jn.Left.GetKeyspaceName() == jn.Right.GetKeyspaceName() { - return jn.Left.GetKeyspaceName() - } - return jn.Left.GetKeyspaceName() + "_" + jn.Right.GetKeyspaceName() -} - -// GetTableName specifies the table that this primitive routes to. -func (jn *Join) GetTableName() string { - return jn.Left.GetTableName() + "_" + jn.Right.GetTableName() -} - // NeedsTransaction implements the Primitive interface func (jn *Join) NeedsTransaction() bool { return jn.Right.NeedsTransaction() || jn.Left.NeedsTransaction() @@ -309,7 +291,6 @@ func combineVars(bv1, bv2 map[string]*querypb.BindVariable) map[string]*querypb. func (jn *Join) description() PrimitiveDescription { other := map[string]any{ - "TableName": jn.GetTableName(), "JoinColumnIndexes": jn.joinColsDescription(), } if len(jn.Vars) > 0 { diff --git a/go/vt/vtgate/engine/join_values.go b/go/vt/vtgate/engine/join_values.go index 7b4fc19e908..bf09c14d74c 100644 --- a/go/vt/vtgate/engine/join_values.go +++ b/go/vt/vtgate/engine/join_values.go @@ -115,24 +115,6 @@ func (jv *ValuesJoin) Inputs() ([]Primitive, []map[string]any) { return []Primitive{jv.Left, jv.Right}, nil } -// RouteType returns a description of the query routing type used by the primitive -func (jv *ValuesJoin) RouteType() string { - return "ValuesJoin" -} - -// GetKeyspaceName specifies the Keyspace that this primitive routes to. -func (jv *ValuesJoin) GetKeyspaceName() string { - if jv.Left.GetKeyspaceName() == jv.Right.GetKeyspaceName() { - return jv.Left.GetKeyspaceName() - } - return jv.Left.GetKeyspaceName() + "_" + jv.Right.GetKeyspaceName() -} - -// GetTableName specifies the table that this primitive routes to. -func (jv *ValuesJoin) GetTableName() string { - return jv.Left.GetTableName() + "_" + jv.Right.GetTableName() -} - // NeedsTransaction implements the Primitive interface func (jv *ValuesJoin) NeedsTransaction() bool { return jv.Right.NeedsTransaction() || jv.Left.NeedsTransaction() diff --git a/go/vt/vtgate/engine/limit.go b/go/vt/vtgate/engine/limit.go index d50a0d4adde..97ffef70691 100644 --- a/go/vt/vtgate/engine/limit.go +++ b/go/vt/vtgate/engine/limit.go @@ -53,21 +53,6 @@ type Limit struct { var UpperLimitStr = "__upper_limit" -// RouteType returns a description of the query routing type used by the primitive -func (l *Limit) RouteType() string { - return l.Input.RouteType() -} - -// GetKeyspaceName specifies the Keyspace that this primitive routes to. -func (l *Limit) GetKeyspaceName() string { - return l.Input.GetKeyspaceName() -} - -// GetTableName specifies the table that this primitive routes to. -func (l *Limit) GetTableName() string { - return l.Input.GetTableName() -} - // TryExecute satisfies the Primitive interface. func (l *Limit) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { count, offset, err := l.getCountAndOffset(ctx, vcursor, bindVars) diff --git a/go/vt/vtgate/engine/lock.go b/go/vt/vtgate/engine/lock.go index 2b962a76345..1bb7c7d8733 100644 --- a/go/vt/vtgate/engine/lock.go +++ b/go/vt/vtgate/engine/lock.go @@ -57,21 +57,6 @@ type LockFunc struct { Name evalengine.Expr } -// RouteType is part of the Primitive interface -func (l *Lock) RouteType() string { - return "lock" -} - -// GetKeyspaceName is part of the Primitive interface -func (l *Lock) GetKeyspaceName() string { - return l.Keyspace.Name -} - -// GetTableName is part of the Primitive interface -func (l *Lock) GetTableName() string { - return "dual" -} - // TryExecute is part of the Primitive interface func (l *Lock) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { return l.execLock(ctx, vcursor, bindVars) diff --git a/go/vt/vtgate/engine/memory_sort.go b/go/vt/vtgate/engine/memory_sort.go index 03e66d0d033..d15f97c0b18 100644 --- a/go/vt/vtgate/engine/memory_sort.go +++ b/go/vt/vtgate/engine/memory_sort.go @@ -44,21 +44,6 @@ type MemorySort struct { TruncateColumnCount int } -// RouteType returns a description of the query routing type used by the primitive. -func (ms *MemorySort) RouteType() string { - return ms.Input.RouteType() -} - -// GetKeyspaceName specifies the Keyspace that this primitive routes to. -func (ms *MemorySort) GetKeyspaceName() string { - return ms.Input.GetKeyspaceName() -} - -// GetTableName specifies the table that this primitive routes to. -func (ms *MemorySort) GetTableName() string { - return ms.Input.GetTableName() -} - // TryExecute satisfies the Primitive interface. func (ms *MemorySort) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { count, err := ms.fetchCount(ctx, vcursor, bindVars) diff --git a/go/vt/vtgate/engine/merge_sort.go b/go/vt/vtgate/engine/merge_sort.go index abf2a65f311..adc894c2f7d 100644 --- a/go/vt/vtgate/engine/merge_sort.go +++ b/go/vt/vtgate/engine/merge_sort.go @@ -55,15 +55,6 @@ type MergeSort struct { FetchLastInsertID bool } -// RouteType satisfies Primitive. -func (ms *MergeSort) RouteType() string { return "MergeSort" } - -// GetKeyspaceName satisfies Primitive. -func (ms *MergeSort) GetKeyspaceName() string { return "" } - -// GetTableName satisfies Primitive. -func (ms *MergeSort) GetTableName() string { return "" } - // TryExecute is not supported. func (ms *MergeSort) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "[BUG] Execute is not reachable") diff --git a/go/vt/vtgate/engine/metrics.go b/go/vt/vtgate/engine/metrics.go new file mode 100644 index 00000000000..57dfce41926 --- /dev/null +++ b/go/vt/vtgate/engine/metrics.go @@ -0,0 +1,32 @@ +/* +Copyright 2025 The Vitess Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package engine + +import ( + "vitess.io/vitess/go/stats" + "vitess.io/vitess/go/vt/servenv" +) + +type Metrics struct { + optimizedQueryExec *stats.CountersWithSingleLabel +} + +func InitMetrics(exporter *servenv.Exporter) *Metrics { + return &Metrics{ + optimizedQueryExec: exporter.NewCountersWithSingleLabel("OptimizedQueryExecutions", "Counts optimized queries executed at VTGate by plan type.", "Plan"), + } +} diff --git a/go/vt/vtgate/engine/mirror.go b/go/vt/vtgate/engine/mirror.go index 6396e4b33ec..5616db7a17b 100644 --- a/go/vt/vtgate/engine/mirror.go +++ b/go/vt/vtgate/engine/mirror.go @@ -58,18 +58,6 @@ func NewPercentBasedMirror(percentage float32, primitive Primitive, target Primi return &percentBasedMirror{percent: percentage, primitive: primitive, target: target} } -func (m *percentBasedMirror) RouteType() string { - return "Mirror" -} - -func (m *percentBasedMirror) GetKeyspaceName() string { - return m.primitive.GetKeyspaceName() -} - -func (m *percentBasedMirror) GetTableName() string { - return m.primitive.GetTableName() -} - func (m *percentBasedMirror) GetFields(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable) (*sqltypes.Result, error) { return m.primitive.GetFields(ctx, vcursor, bindVars) } diff --git a/go/vt/vtgate/engine/mstream.go b/go/vt/vtgate/engine/mstream.go index a5b1eba05e6..ac0ea546fc0 100644 --- a/go/vt/vtgate/engine/mstream.go +++ b/go/vt/vtgate/engine/mstream.go @@ -43,21 +43,6 @@ type MStream struct { TableName string } -// RouteType implements the Primitive interface -func (m *MStream) RouteType() string { - return "MStream" -} - -// GetKeyspaceName implements the Primitive interface -func (m *MStream) GetKeyspaceName() string { - return m.Keyspace.Name -} - -// GetTableName implements the Primitive interface -func (m *MStream) GetTableName() string { - return m.TableName -} - // TryExecute implements the Primitive interface func (m *MStream) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { return nil, vterrors.VT13001("TryExecute is not supported for MStream") diff --git a/go/vt/vtgate/engine/online_ddl.go b/go/vt/vtgate/engine/online_ddl.go index 4bcbcc16c5c..6bcf56a481e 100644 --- a/go/vt/vtgate/engine/online_ddl.go +++ b/go/vt/vtgate/engine/online_ddl.go @@ -55,21 +55,6 @@ func (v *OnlineDDL) description() PrimitiveDescription { } } -// RouteType implements the Primitive interface -func (v *OnlineDDL) RouteType() string { - return "OnlineDDL" -} - -// GetKeyspaceName implements the Primitive interface -func (v *OnlineDDL) GetKeyspaceName() string { - return v.Keyspace.Name -} - -// GetTableName implements the Primitive interface -func (v *OnlineDDL) GetTableName() string { - return v.DDL.GetTable().Name.String() -} - // TryExecute implements the Primitive interface func (v *OnlineDDL) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (result *sqltypes.Result, err error) { result = &sqltypes.Result{ @@ -87,7 +72,7 @@ func (v *OnlineDDL) TryExecute(ctx context.Context, vcursor VCursor, bindVars ma // default to @@session_uuid migrationContext = fmt.Sprintf("vtgate:%s", vcursor.Session().GetSessionUUID()) } - onlineDDLs, err := schema.NewOnlineDDLs(v.GetKeyspaceName(), v.SQL, v.DDL, + onlineDDLs, err := schema.NewOnlineDDLs(v.Keyspace.Name, v.SQL, v.DDL, v.DDLStrategySetting, migrationContext, "", vcursor.Environment().Parser(), ) if err != nil { diff --git a/go/vt/vtgate/engine/ordered_aggregate.go b/go/vt/vtgate/engine/ordered_aggregate.go index 324e531c4dd..d5a51e8a70e 100644 --- a/go/vt/vtgate/engine/ordered_aggregate.go +++ b/go/vt/vtgate/engine/ordered_aggregate.go @@ -79,21 +79,6 @@ func (gbp GroupByParams) String() string { return out } -// RouteType returns a description of the query routing type used by the primitive -func (oa *OrderedAggregate) RouteType() string { - return oa.Input.RouteType() -} - -// GetKeyspaceName specifies the Keyspace that this primitive routes to. -func (oa *OrderedAggregate) GetKeyspaceName() string { - return oa.Input.GetKeyspaceName() -} - -// GetTableName specifies the table that this primitive routes to. -func (oa *OrderedAggregate) GetTableName() string { - return oa.Input.GetTableName() -} - // TryExecute is a Primitive function. func (oa *OrderedAggregate) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, _ bool) (*sqltypes.Result, error) { qr, err := oa.execute(ctx, vcursor, bindVars) diff --git a/go/vt/vtgate/engine/plan.go b/go/vt/vtgate/engine/plan.go index eb0be06b7fe..c0a1b011f21 100644 --- a/go/vt/vtgate/engine/plan.go +++ b/go/vt/vtgate/engine/plan.go @@ -27,6 +27,7 @@ import ( "vitess.io/vitess/go/mysql/collations" "vitess.io/vitess/go/vt/key" "vitess.io/vitess/go/vt/proto/query" + topodatapb "vitess.io/vitess/go/vt/proto/topodata" "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/vthash" ) @@ -61,11 +62,12 @@ type ( // PlanKey identifies a plan uniquely based on keyspace, destination, query, // SET_VAR comment, and collation. It is primarily used as a cache key. PlanKey struct { - CurrentKeyspace string // CurrentKeyspace is the name of the keyspace associated with the plan. - Destination string // Destination specifies the shard or routing destination for the plan. - Query string // Query is the original or normalized SQL statement used to build the plan. - SetVarComment string // SetVarComment holds any embedded SET_VAR hints within the query. - Collation collations.ID // Collation is the character collation ID that governs string comparison. + CurrentKeyspace string // CurrentKeyspace is the name of the keyspace associated with the plan. + TabletType topodatapb.TabletType // TabletType is the type of tablet (primary, replica, etc.) for the plan. + Destination string // Destination specifies the shard or routing destination for the plan. + Query string // Query is the original or normalized SQL statement used to build the plan. + SetVarComment string // SetVarComment holds any embedded SET_VAR hints within the query. + Collation collations.ID // Collation is the character collation ID that governs string comparison. } ) @@ -253,12 +255,13 @@ func getPlanTypeForUpsert(prim *Upsert) PlanType { } func (pk PlanKey) DebugString() string { - return fmt.Sprintf("CurrentKeyspace: %s, Destination: %s, Query: %s, SetVarComment: %s, Collation: %d", pk.CurrentKeyspace, pk.Destination, pk.Query, pk.SetVarComment, pk.Collation) + return fmt.Sprintf("CurrentKeyspace: %s, TabletType: %s, Destination: %s, Query: %s, SetVarComment: %s, Collation: %d", pk.CurrentKeyspace, pk.TabletType.String(), pk.Destination, pk.Query, pk.SetVarComment, pk.Collation) } func (pk PlanKey) Hash() theine.HashKey256 { hasher := vthash.New256() _, _ = hasher.WriteUint16(uint16(pk.Collation)) + _, _ = hasher.WriteUint16(uint16(pk.TabletType)) _, _ = hasher.WriteString(pk.CurrentKeyspace) _, _ = hasher.WriteString(pk.Destination) _, _ = hasher.WriteString(pk.SetVarComment) diff --git a/go/vt/vtgate/engine/plan_description_test.go b/go/vt/vtgate/engine/plan_description_test.go index 9f20e37976a..61d69b0848a 100644 --- a/go/vt/vtgate/engine/plan_description_test.go +++ b/go/vt/vtgate/engine/plan_description_test.go @@ -40,7 +40,6 @@ func TestCreateRoutePlanDescription(t *testing.T) { TargetDestination: key.DestinationAllShards{}, Other: map[string]any{ "Query": route.Query, - "Table": route.GetTableName(), "FieldQuery": route.FieldQuery, "Vindex": route.Vindex.String(), }, @@ -60,7 +59,6 @@ func createRoute() *Route { Vindex: hash.(*vindexes.Hash), }, Query: "select all the things", - TableName: "tableName", FieldQuery: "more query", } } @@ -98,7 +96,6 @@ func getDescriptionFor(route *Route) PrimitiveDescription { TargetDestination: key.DestinationAllShards{}, Other: map[string]any{ "Query": route.Query, - "Table": route.GetTableName(), "FieldQuery": route.FieldQuery, "Vindex": route.Vindex.String(), }, diff --git a/go/vt/vtgate/engine/specialized.go b/go/vt/vtgate/engine/plan_switcher.go similarity index 89% rename from go/vt/vtgate/engine/specialized.go rename to go/vt/vtgate/engine/plan_switcher.go index 6c89b39bca1..05a97f1e390 100644 --- a/go/vt/vtgate/engine/specialized.go +++ b/go/vt/vtgate/engine/plan_switcher.go @@ -22,7 +22,6 @@ import ( "strings" "vitess.io/vitess/go/slice" - "vitess.io/vitess/go/sqltypes" querypb "vitess.io/vitess/go/vt/proto/query" ) @@ -44,24 +43,6 @@ type PlanSwitcher struct { Optimized Primitive } -func (s *PlanSwitcher) RouteType() string { - return "PlanSwitcher" -} - -func (s *PlanSwitcher) GetKeyspaceName() string { - if s.Baseline != nil { - return s.Baseline.GetKeyspaceName() - } - return s.Optimized.GetKeyspaceName() -} - -func (s *PlanSwitcher) GetTableName() string { - if s.Baseline != nil { - return s.Baseline.GetKeyspaceName() - } - return s.Optimized.GetKeyspaceName() -} - func (s *PlanSwitcher) GetFields( ctx context.Context, vcursor VCursor, @@ -83,6 +64,7 @@ func (s *PlanSwitcher) TryExecute( wantfields bool, ) (*sqltypes.Result, error) { if s.metCondition(bindVars) { + s.addOptimizedExecStats(vcursor) return s.Optimized.TryExecute(ctx, vcursor, bindVars, wantfields) } if s.Baseline == nil { @@ -99,6 +81,7 @@ func (s *PlanSwitcher) TryStreamExecute( callback func(*sqltypes.Result) error, ) error { if s.metCondition(bindVars) { + s.addOptimizedExecStats(vcursor) return s.Optimized.TryStreamExecute(ctx, vcursor, bindVars, wantfields, callback) } if s.Baseline == nil { @@ -130,7 +113,7 @@ func (s *PlanSwitcher) description() PrimitiveDescription { other["BaselineErr"] = s.BaselineErr.Error() } return PrimitiveDescription{ - OperatorType: s.RouteType(), + OperatorType: "PlanSwitcher", Other: other, } } @@ -152,4 +135,9 @@ func (s *PlanSwitcher) metCondition(bindVars map[string]*querypb.BindVariable) b return true } +func (s *PlanSwitcher) addOptimizedExecStats(vcursor VCursor) { + planType := getPlanType(s.Optimized) + vcursor.GetExecutionMetrics().optimizedQueryExec.Add(planType.String(), 1) +} + var _ Primitive = (*PlanSwitcher)(nil) diff --git a/go/vt/vtgate/engine/plan_switcher_test.go b/go/vt/vtgate/engine/plan_switcher_test.go new file mode 100644 index 00000000000..10c23464bab --- /dev/null +++ b/go/vt/vtgate/engine/plan_switcher_test.go @@ -0,0 +1,42 @@ +/* +Copyright 2025 The Vitess Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package engine + +import ( + "context" + "testing" + + "github.com/stretchr/testify/require" + + "vitess.io/vitess/go/vt/servenv" +) + +// TestPlanSwitcherMetrics tests that the PlanSwitcher increments the correct metric +func TestPlanSwitcherMetrics(t *testing.T) { + p := &PlanSwitcher{ + Optimized: &TransactionStatus{}, + } + + vc := &loggingVCursor{ + metrics: InitMetrics(servenv.NewExporter("PlanTest", "")), + } + initial := vc.metrics.optimizedQueryExec.Counts() + _, err := p.TryExecute(context.Background(), vc, nil, false) + require.NoError(t, err) + after := vc.metrics.optimizedQueryExec.Counts() + require.EqualValues(t, 1, after["MultiShard"]-initial["MultiShard"]) +} diff --git a/go/vt/vtgate/engine/primitive.go b/go/vt/vtgate/engine/primitive.go index be65bcde831..ce77769d38b 100644 --- a/go/vt/vtgate/engine/primitive.go +++ b/go/vt/vtgate/engine/primitive.go @@ -149,6 +149,8 @@ type ( RecordMirrorStats(time.Duration, time.Duration, error) SetLastInsertID(uint64) + + GetExecutionMetrics() *Metrics } // SessionActions gives primitives ability to interact with the session state @@ -244,9 +246,6 @@ type ( // During execution, the Primitive's pass Result objects up the tree structure, until reaching the root, // and its result is passed to the client. Primitive interface { - RouteType() string - GetKeyspaceName() string - GetTableName() string GetFields(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable) (*sqltypes.Result, error) NeedsTransaction() bool @@ -290,6 +289,15 @@ func Find(isMatch Match, start Primitive) Primitive { return nil } +// Visit will traverse the Primitive tree structure, calling the visitor function on each node. +func Visit(start Primitive, visitor func(node Primitive)) { + visitor(start) + inputs, _ := start.Inputs() + for _, input := range inputs { + Visit(input, visitor) + } +} + // Exists traverses recursively down the Primitive tree structure, and returns true when Match returns true func Exists(m Match, p Primitive) bool { return Find(m, p) != nil diff --git a/go/vt/vtgate/engine/projection.go b/go/vt/vtgate/engine/projection.go index 6fb75bdf800..d18608393f3 100644 --- a/go/vt/vtgate/engine/projection.go +++ b/go/vt/vtgate/engine/projection.go @@ -39,21 +39,6 @@ type Projection struct { Input Primitive } -// RouteType implements the Primitive interface -func (p *Projection) RouteType() string { - return p.Input.RouteType() -} - -// GetKeyspaceName implements the Primitive interface -func (p *Projection) GetKeyspaceName() string { - return p.Input.GetKeyspaceName() -} - -// GetTableName implements the Primitive interface -func (p *Projection) GetTableName() string { - return p.Input.GetTableName() -} - // TryExecute implements the Primitive interface func (p *Projection) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { result, err := vcursor.ExecutePrimitive(ctx, p.Input, bindVars, wantfields) diff --git a/go/vt/vtgate/engine/recurse_cte.go b/go/vt/vtgate/engine/recurse_cte.go index f523883d280..8a636f7f632 100644 --- a/go/vt/vtgate/engine/recurse_cte.go +++ b/go/vt/vtgate/engine/recurse_cte.go @@ -115,21 +115,6 @@ func (r *RecurseCTE) recurse(ctx context.Context, vcursor VCursor, bindvars map[ return nil } -func (r *RecurseCTE) RouteType() string { - return "RecurseCTE" -} - -func (r *RecurseCTE) GetKeyspaceName() string { - if r.Seed.GetKeyspaceName() == r.Term.GetKeyspaceName() { - return r.Seed.GetKeyspaceName() - } - return r.Seed.GetKeyspaceName() + "_" + r.Term.GetKeyspaceName() -} - -func (r *RecurseCTE) GetTableName() string { - return r.Seed.GetTableName() -} - func (r *RecurseCTE) GetFields(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable) (*sqltypes.Result, error) { return r.Seed.GetFields(ctx, vcursor, bindVars) } diff --git a/go/vt/vtgate/engine/rename_fields.go b/go/vt/vtgate/engine/rename_fields.go index 3fdab364468..959ebd5bd31 100644 --- a/go/vt/vtgate/engine/rename_fields.go +++ b/go/vt/vtgate/engine/rename_fields.go @@ -47,21 +47,6 @@ func NewRenameField(cols []string, indices []int, input Primitive) (*RenameField }, nil } -// RouteType implements the primitive interface -func (r *RenameFields) RouteType() string { - return r.Input.RouteType() -} - -// GetKeyspaceName implements the primitive interface -func (r *RenameFields) GetKeyspaceName() string { - return r.Input.GetKeyspaceName() -} - -// GetTableName implements the primitive interface -func (r *RenameFields) GetTableName() string { - return r.Input.GetTableName() -} - // TryExecute implements the Primitive interface func (r *RenameFields) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { qr, err := vcursor.ExecutePrimitive(ctx, r.Input, bindVars, wantfields) diff --git a/go/vt/vtgate/engine/replace_variables.go b/go/vt/vtgate/engine/replace_variables.go index d3184d8756b..b0d9cf6f296 100644 --- a/go/vt/vtgate/engine/replace_variables.go +++ b/go/vt/vtgate/engine/replace_variables.go @@ -36,21 +36,6 @@ func NewReplaceVariables(input Primitive) *ReplaceVariables { return &ReplaceVariables{Input: input} } -// RouteType implements the Primitive interface -func (r *ReplaceVariables) RouteType() string { - return r.Input.RouteType() -} - -// GetKeyspaceName implements the Primitive interface -func (r *ReplaceVariables) GetKeyspaceName() string { - return r.Input.GetKeyspaceName() -} - -// GetTableName implements the Primitive interface -func (r *ReplaceVariables) GetTableName() string { - return r.Input.GetTableName() -} - // TryExecute implements the Primitive interface func (r *ReplaceVariables) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { qr, err := vcursor.ExecutePrimitive(ctx, r.Input, bindVars, wantfields) diff --git a/go/vt/vtgate/engine/revert_migration.go b/go/vt/vtgate/engine/revert_migration.go index 7d43056fad5..e6660140349 100644 --- a/go/vt/vtgate/engine/revert_migration.go +++ b/go/vt/vtgate/engine/revert_migration.go @@ -53,21 +53,6 @@ func (v *RevertMigration) description() PrimitiveDescription { } } -// RouteType implements the Primitive interface -func (v *RevertMigration) RouteType() string { - return "RevertMigration" -} - -// GetKeyspaceName implements the Primitive interface -func (v *RevertMigration) GetKeyspaceName() string { - return v.Keyspace.Name -} - -// GetTableName implements the Primitive interface -func (v *RevertMigration) GetTableName() string { - return "" -} - // TryExecute implements the Primitive interface func (v *RevertMigration) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (result *sqltypes.Result, err error) { result = &sqltypes.Result{ @@ -85,7 +70,7 @@ func (v *RevertMigration) TryExecute(ctx context.Context, vcursor VCursor, bindV return nil, err } ddlStrategySetting.Strategy = schema.DDLStrategyOnline // and we keep the options as they were - onlineDDL, err := schema.NewOnlineDDL(v.GetKeyspaceName(), "", v.Query, ddlStrategySetting, fmt.Sprintf("vtgate:%s", vcursor.Session().GetSessionUUID()), "", vcursor.Environment().Parser()) + onlineDDL, err := schema.NewOnlineDDL(v.Keyspace.Name, "", v.Query, ddlStrategySetting, fmt.Sprintf("vtgate:%s", vcursor.Session().GetSessionUUID()), "", vcursor.Environment().Parser()) if err != nil { return result, err } diff --git a/go/vt/vtgate/engine/route.go b/go/vt/vtgate/engine/route.go index a43299961e6..fd206590d9a 100644 --- a/go/vt/vtgate/engine/route.go +++ b/go/vt/vtgate/engine/route.go @@ -60,9 +60,6 @@ type Route struct { // Query specifies the query to be executed. Query string - // TableName specifies the tables to send the query to. - TableName string - // FieldQuery specifies the query to be executed for a GetFieldInfo request. FieldQuery string @@ -110,21 +107,6 @@ var ( partialSuccessScatterQueries = stats.NewCounter("PartialSuccessScatterQueries", "Count of partially successful scatter queries") ) -// RouteType returns a description of the query routing type used by the primitive -func (route *Route) RouteType() string { - return route.Opcode.String() -} - -// GetKeyspaceName specifies the Keyspace that this primitive routes to. -func (route *Route) GetKeyspaceName() string { - return route.Keyspace.Name -} - -// GetTableName specifies the table that this primitive routes to. -func (route *Route) GetTableName() string { - return route.TableName -} - // TryExecute performs a non-streaming exec. func (route *Route) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { rss, bvs, err := route.findRoute(ctx, vcursor, bindVars) @@ -380,7 +362,6 @@ func (route *Route) sort(in *sqltypes.Result) (*sqltypes.Result, error) { func (route *Route) description() PrimitiveDescription { other := map[string]any{ "Query": route.Query, - "Table": route.GetTableName(), "FieldQuery": route.FieldQuery, } if route.FetchLastInsertID { diff --git a/go/vt/vtgate/engine/rows.go b/go/vt/vtgate/engine/rows.go index 424d5585a36..82fd995a3da 100644 --- a/go/vt/vtgate/engine/rows.go +++ b/go/vt/vtgate/engine/rows.go @@ -39,21 +39,6 @@ func NewRowsPrimitive(rows [][]sqltypes.Value, fields []*querypb.Field) Primitiv return &Rows{rows: rows, fields: fields} } -// RouteType implements the Primitive interface -func (r *Rows) RouteType() string { - return "Rows" -} - -// GetKeyspaceName implements the Primitive interface -func (r *Rows) GetKeyspaceName() string { - return "" -} - -// GetTableName implements the Primitive interface -func (r *Rows) GetTableName() string { - return "" -} - // TryExecute implements the Primitive interface func (r *Rows) TryExecute(context.Context, VCursor, map[string]*querypb.BindVariable, bool) (*sqltypes.Result, error) { return &sqltypes.Result{ diff --git a/go/vt/vtgate/engine/scalar_aggregation.go b/go/vt/vtgate/engine/scalar_aggregation.go index e33204f5c58..2bd1f2c6003 100644 --- a/go/vt/vtgate/engine/scalar_aggregation.go +++ b/go/vt/vtgate/engine/scalar_aggregation.go @@ -41,22 +41,6 @@ type ScalarAggregate struct { Input Primitive } -// RouteType implements the Primitive interface -func (sa *ScalarAggregate) RouteType() string { - return sa.Input.RouteType() -} - -// GetKeyspaceName implements the Primitive interface -func (sa *ScalarAggregate) GetKeyspaceName() string { - return sa.Input.GetKeyspaceName() - -} - -// GetTableName implements the Primitive interface -func (sa *ScalarAggregate) GetTableName() string { - return sa.Input.GetTableName() -} - // GetFields implements the Primitive interface func (sa *ScalarAggregate) GetFields(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable) (*sqltypes.Result, error) { qr, err := sa.Input.GetFields(ctx, vcursor, bindVars) diff --git a/go/vt/vtgate/engine/semi_join.go b/go/vt/vtgate/engine/semi_join.go index b5bc74a5941..78141cb6b81 100644 --- a/go/vt/vtgate/engine/semi_join.go +++ b/go/vt/vtgate/engine/semi_join.go @@ -103,33 +103,13 @@ func (jn *SemiJoin) Inputs() ([]Primitive, []map[string]any) { }} } -// RouteType returns a description of the query routing type used by the primitive -func (jn *SemiJoin) RouteType() string { - return "SemiJoin" -} - -// GetKeyspaceName specifies the Keyspace that this primitive routes to. -func (jn *SemiJoin) GetKeyspaceName() string { - if jn.Left.GetKeyspaceName() == jn.Right.GetKeyspaceName() { - return jn.Left.GetKeyspaceName() - } - return jn.Left.GetKeyspaceName() + "_" + jn.Right.GetKeyspaceName() -} - -// GetTableName specifies the table that this primitive routes to. -func (jn *SemiJoin) GetTableName() string { - return jn.Left.GetTableName() + "_" + jn.Right.GetTableName() -} - // NeedsTransaction implements the Primitive interface func (jn *SemiJoin) NeedsTransaction() bool { return jn.Right.NeedsTransaction() || jn.Left.NeedsTransaction() } func (jn *SemiJoin) description() PrimitiveDescription { - other := map[string]any{ - "TableName": jn.GetTableName(), - } + other := map[string]any{} if len(jn.Vars) > 0 { other["JoinVars"] = orderedStringIntMap(jn.Vars) } diff --git a/go/vt/vtgate/engine/send.go b/go/vt/vtgate/engine/send.go index 01a87bd76b9..d80a7ebe6cd 100644 --- a/go/vt/vtgate/engine/send.go +++ b/go/vt/vtgate/engine/send.go @@ -72,25 +72,6 @@ func (s *Send) NeedsTransaction() bool { return s.IsDML } -// RouteType implements Primitive interface -func (s *Send) RouteType() string { - if s.IsDML { - return "SendDML" - } - - return "Send" -} - -// GetKeyspaceName implements Primitive interface -func (s *Send) GetKeyspaceName() string { - return s.Keyspace.Name -} - -// GetTableName implements Primitive interface -func (s *Send) GetTableName() string { - return "" -} - // TryExecute implements Primitive interface func (s *Send) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { if err := s.commitIfDDL(ctx, vcursor); err != nil { @@ -199,7 +180,6 @@ func (s *Send) GetFields(ctx context.Context, vcursor VCursor, bindVars map[stri func (s *Send) description() PrimitiveDescription { other := map[string]any{ "Query": s.Query, - "Table": s.GetTableName(), "IsDML": s.IsDML, "SingleShardOnly": s.SingleShardOnly, "ShardNameNeeded": s.ShardNameNeeded, diff --git a/go/vt/vtgate/engine/sequential.go b/go/vt/vtgate/engine/sequential.go index 56be78c12e1..0720d966827 100644 --- a/go/vt/vtgate/engine/sequential.go +++ b/go/vt/vtgate/engine/sequential.go @@ -41,29 +41,6 @@ func NewSequential(Sources []Primitive) *Sequential { } } -// RouteType returns a description of the query routing type used by the primitive -func (s *Sequential) RouteType() string { - return "Sequential" -} - -// GetKeyspaceName specifies the Keyspace that this primitive routes to -func (s *Sequential) GetKeyspaceName() string { - res := s.Sources[0].GetKeyspaceName() - for i := 1; i < len(s.Sources); i++ { - res = formatTwoOptionsNicely(res, s.Sources[i].GetKeyspaceName()) - } - return res -} - -// GetTableName specifies the table that this primitive routes to. -func (s *Sequential) GetTableName() string { - res := s.Sources[0].GetTableName() - for i := 1; i < len(s.Sources); i++ { - res = formatTwoOptionsNicely(res, s.Sources[i].GetTableName()) - } - return res -} - // TryExecute performs a non-streaming exec. func (s *Sequential) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantFields bool) (*sqltypes.Result, error) { finalRes := &sqltypes.Result{} @@ -98,5 +75,5 @@ func (s *Sequential) Inputs() ([]Primitive, []map[string]any) { } func (s *Sequential) description() PrimitiveDescription { - return PrimitiveDescription{OperatorType: s.RouteType()} + return PrimitiveDescription{OperatorType: "Sequential"} } diff --git a/go/vt/vtgate/engine/session_primitive.go b/go/vt/vtgate/engine/session_primitive.go index c9c39c39e2b..a0a303452b5 100644 --- a/go/vt/vtgate/engine/session_primitive.go +++ b/go/vt/vtgate/engine/session_primitive.go @@ -44,21 +44,6 @@ func NewSessionPrimitive(name string, action func(sa SessionActions) (*sqltypes. } } -// RouteType implements the Primitive interface -func (s *SessionPrimitive) RouteType() string { - return "SHOW" -} - -// GetKeyspaceName implements the Primitive interface -func (s *SessionPrimitive) GetKeyspaceName() string { - return "" -} - -// GetTableName implements the Primitive interface -func (s *SessionPrimitive) GetTableName() string { - return "" -} - // TryExecute implements the Primitive interface func (s *SessionPrimitive) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { return s.action(vcursor.Session()) diff --git a/go/vt/vtgate/engine/set.go b/go/vt/vtgate/engine/set.go index 32a297404f3..f2087000d49 100644 --- a/go/vt/vtgate/engine/set.go +++ b/go/vt/vtgate/engine/set.go @@ -99,21 +99,6 @@ var unsupportedSQLModes = []string{"ANSI_QUOTES", "NO_BACKSLASH_ESCAPES", "PIPES var _ Primitive = (*Set)(nil) -// RouteType implements the Primitive interface method. -func (s *Set) RouteType() string { - return "Set" -} - -// GetKeyspaceName implements the Primitive interface method. -func (s *Set) GetKeyspaceName() string { - return "" -} - -// GetTableName implements the Primitive interface method. -func (s *Set) GetTableName() string { - return "" -} - // TryExecute implements the Primitive interface method. func (s *Set) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { input, err := vcursor.ExecutePrimitive(ctx, s.Input, bindVars, false) diff --git a/go/vt/vtgate/engine/show_exec.go b/go/vt/vtgate/engine/show_exec.go index d09733d0ec1..af422cfcf13 100644 --- a/go/vt/vtgate/engine/show_exec.go +++ b/go/vt/vtgate/engine/show_exec.go @@ -35,18 +35,6 @@ type ShowExec struct { ShowFilter *sqlparser.ShowFilter } -func (s *ShowExec) RouteType() string { - return "ShowExec" -} - -func (s *ShowExec) GetKeyspaceName() string { - return "" -} - -func (s *ShowExec) GetTableName() string { - return "" -} - func (s *ShowExec) GetFields(ctx context.Context, vcursor VCursor, bindVars map[string]*query.BindVariable) (*sqltypes.Result, error) { qr, err := s.TryExecute(ctx, vcursor, bindVars, true) if err != nil { diff --git a/go/vt/vtgate/engine/simple_projection.go b/go/vt/vtgate/engine/simple_projection.go index 6edc5883be1..5649b3b22ad 100644 --- a/go/vt/vtgate/engine/simple_projection.go +++ b/go/vt/vtgate/engine/simple_projection.go @@ -46,21 +46,6 @@ func (sc *SimpleProjection) NeedsTransaction() bool { return sc.Input.NeedsTransaction() } -// RouteType returns a description of the query routing type used by the primitive -func (sc *SimpleProjection) RouteType() string { - return sc.Input.RouteType() -} - -// GetKeyspaceName specifies the Keyspace that this primitive routes to. -func (sc *SimpleProjection) GetKeyspaceName() string { - return sc.Input.GetKeyspaceName() -} - -// GetTableName specifies the table that this primitive routes to. -func (sc *SimpleProjection) GetTableName() string { - return sc.Input.GetTableName() -} - // TryExecute performs a non-streaming exec. func (sc *SimpleProjection) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { inner, err := vcursor.ExecutePrimitive(ctx, sc.Input, bindVars, wantfields) diff --git a/go/vt/vtgate/engine/singlerow.go b/go/vt/vtgate/engine/singlerow.go index 8a3fff2cacd..e8d325a296c 100644 --- a/go/vt/vtgate/engine/singlerow.go +++ b/go/vt/vtgate/engine/singlerow.go @@ -32,21 +32,6 @@ type SingleRow struct { noFields } -// RouteType returns a description of the query routing type used by the primitive -func (s *SingleRow) RouteType() string { - return "" -} - -// GetKeyspaceName specifies the Keyspace that this primitive routes to. -func (s *SingleRow) GetKeyspaceName() string { - return "" -} - -// GetTableName specifies the table that this primitive routes to. -func (s *SingleRow) GetTableName() string { - return "" -} - // TryExecute performs a non-streaming exec. func (s *SingleRow) TryExecute(context.Context, VCursor, map[string]*querypb.BindVariable, bool) (*sqltypes.Result, error) { result := sqltypes.Result{ diff --git a/go/vt/vtgate/engine/sql_calc_found_rows.go b/go/vt/vtgate/engine/sql_calc_found_rows.go index 64ec80f99c7..abf63a41b23 100644 --- a/go/vt/vtgate/engine/sql_calc_found_rows.go +++ b/go/vt/vtgate/engine/sql_calc_found_rows.go @@ -33,21 +33,6 @@ type SQLCalcFoundRows struct { CountPrimitive Primitive } -// RouteType implements the Primitive interface -func (s *SQLCalcFoundRows) RouteType() string { - return "SQLCalcFoundRows" -} - -// GetKeyspaceName implements the Primitive interface -func (s *SQLCalcFoundRows) GetKeyspaceName() string { - return s.LimitPrimitive.GetKeyspaceName() -} - -// GetTableName implements the Primitive interface -func (s *SQLCalcFoundRows) GetTableName() string { - return s.LimitPrimitive.GetTableName() -} - // TryExecute implements the Primitive interface func (s *SQLCalcFoundRows) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { limitQr, err := vcursor.ExecutePrimitive(ctx, s.LimitPrimitive, bindVars, wantfields) diff --git a/go/vt/vtgate/engine/throttle_app.go b/go/vt/vtgate/engine/throttle_app.go index 8b2370699cf..e50e4c1379e 100644 --- a/go/vt/vtgate/engine/throttle_app.go +++ b/go/vt/vtgate/engine/throttle_app.go @@ -50,21 +50,6 @@ func (v *ThrottleApp) description() PrimitiveDescription { } } -// RouteType implements the Primitive interface -func (v *ThrottleApp) RouteType() string { - return "ThrottleApp" -} - -// GetKeyspaceName implements the Primitive interface -func (v *ThrottleApp) GetKeyspaceName() string { - return v.Keyspace.Name -} - -// GetTableName implements the Primitive interface -func (v *ThrottleApp) GetTableName() string { - return "" -} - // TryExecute implements the Primitive interface func (v *ThrottleApp) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (result *sqltypes.Result, err error) { if err := vcursor.ThrottleApp(ctx, v.ThrottledAppRule); err != nil { diff --git a/go/vt/vtgate/engine/transaction_status.go b/go/vt/vtgate/engine/transaction_status.go index 9914031009f..056a8cda9c3 100644 --- a/go/vt/vtgate/engine/transaction_status.go +++ b/go/vt/vtgate/engine/transaction_status.go @@ -37,18 +37,6 @@ type TransactionStatus struct { TransactionID string } -func (t *TransactionStatus) RouteType() string { - return "TransactionStatus" -} - -func (t *TransactionStatus) GetKeyspaceName() string { - return "" -} - -func (t *TransactionStatus) GetTableName() string { - return "" -} - func (t *TransactionStatus) GetFields(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable) (*sqltypes.Result, error) { return &sqltypes.Result{ Fields: t.getFields(), diff --git a/go/vt/vtgate/engine/uncorrelated_subquery.go b/go/vt/vtgate/engine/uncorrelated_subquery.go index 0bedd02a5d3..aaa36c06f2b 100644 --- a/go/vt/vtgate/engine/uncorrelated_subquery.go +++ b/go/vt/vtgate/engine/uncorrelated_subquery.go @@ -50,21 +50,6 @@ func (ps *UncorrelatedSubquery) Inputs() ([]Primitive, []map[string]any) { }} } -// RouteType returns a description of the query routing type used by the primitive -func (ps *UncorrelatedSubquery) RouteType() string { - return ps.Opcode.String() -} - -// GetKeyspaceName specifies the Keyspace that this primitive routes to. -func (ps *UncorrelatedSubquery) GetKeyspaceName() string { - return ps.Outer.GetKeyspaceName() -} - -// GetTableName specifies the table that this primitive routes to. -func (ps *UncorrelatedSubquery) GetTableName() string { - return ps.Outer.GetTableName() -} - // TryExecute satisfies the Primitive interface. func (ps *UncorrelatedSubquery) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { combinedVars, err := ps.execSubquery(ctx, vcursor, bindVars) diff --git a/go/vt/vtgate/engine/unlock.go b/go/vt/vtgate/engine/unlock.go index 1047abb6ec5..76768cc8db5 100644 --- a/go/vt/vtgate/engine/unlock.go +++ b/go/vt/vtgate/engine/unlock.go @@ -34,18 +34,6 @@ type Unlock struct { const unlockTables = "unlock tables" -func (u *Unlock) RouteType() string { - return "UNLOCK" -} - -func (u *Unlock) GetKeyspaceName() string { - return "" -} - -func (u *Unlock) GetTableName() string { - return "" -} - func (u *Unlock) GetFields(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable) (*sqltypes.Result, error) { return nil, vterrors.VT13001("GetFields should not be called for unlock tables") } diff --git a/go/vt/vtgate/engine/update.go b/go/vt/vtgate/engine/update.go index 9e878ffce20..e705c251ead 100644 --- a/go/vt/vtgate/engine/update.go +++ b/go/vt/vtgate/engine/update.go @@ -194,7 +194,6 @@ func (upd *Update) isVindexModified() bool { func (upd *Update) description() PrimitiveDescription { other := map[string]any{ "Query": upd.Query, - "Table": upd.GetTableName(), "OwnedVindexQuery": upd.OwnedVindexQuery, "MultiShardAutocommit": upd.MultiShardAutocommit, "QueryTimeout": upd.QueryTimeout, diff --git a/go/vt/vtgate/engine/update_target.go b/go/vt/vtgate/engine/update_target.go index 9f47199079a..2c2925fdc30 100644 --- a/go/vt/vtgate/engine/update_target.go +++ b/go/vt/vtgate/engine/update_target.go @@ -44,21 +44,6 @@ func (updTarget *UpdateTarget) description() PrimitiveDescription { } } -// RouteType implements the Primitive interface -func (updTarget *UpdateTarget) RouteType() string { - return "UpdateTarget" -} - -// GetKeyspaceName implements the Primitive interface -func (updTarget *UpdateTarget) GetKeyspaceName() string { - return updTarget.Target -} - -// GetTableName implements the Primitive interface -func (updTarget *UpdateTarget) GetTableName() string { - return "" -} - // TryExecute implements the Primitive interface func (updTarget *UpdateTarget) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*query.BindVariable, wantfields bool) (*sqltypes.Result, error) { err := vcursor.Session().SetTarget(updTarget.Target) diff --git a/go/vt/vtgate/engine/upsert.go b/go/vt/vtgate/engine/upsert.go index 58d996b2b2b..9a57b2fa70c 100644 --- a/go/vt/vtgate/engine/upsert.go +++ b/go/vt/vtgate/engine/upsert.go @@ -50,27 +50,6 @@ func (u *Upsert) AddUpsert(ins, upd Primitive) { }) } -// RouteType implements Primitive interface type. -func (u *Upsert) RouteType() string { - return "UPSERT" -} - -// GetKeyspaceName implements Primitive interface type. -func (u *Upsert) GetKeyspaceName() string { - if len(u.Upserts) > 0 { - return u.Upserts[0].Insert.GetKeyspaceName() - } - return "" -} - -// GetTableName implements Primitive interface type. -func (u *Upsert) GetTableName() string { - if len(u.Upserts) > 0 { - return u.Upserts[0].Insert.GetTableName() - } - return "" -} - // TryExecute implements Primitive interface type. func (u *Upsert) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { result := &sqltypes.Result{} diff --git a/go/vt/vtgate/engine/vexplain.go b/go/vt/vtgate/engine/vexplain.go index 0785f4d25ce..19831ab96d9 100644 --- a/go/vt/vtgate/engine/vexplain.go +++ b/go/vt/vtgate/engine/vexplain.go @@ -55,21 +55,6 @@ type ( var _ Primitive = (*VExplain)(nil) -// RouteType implements the Primitive interface -func (v *VExplain) RouteType() string { - return v.Input.RouteType() -} - -// GetKeyspaceName implements the Primitive interface -func (v *VExplain) GetKeyspaceName() string { - return v.Input.GetKeyspaceName() -} - -// GetTableName implements the Primitive interface -func (v *VExplain) GetTableName() string { - return v.Input.GetTableName() -} - // GetFields implements the Primitive interface func (v *VExplain) GetFields(context.Context, VCursor, map[string]*querypb.BindVariable) (*sqltypes.Result, error) { var fields []*querypb.Field diff --git a/go/vt/vtgate/engine/vindex_func.go b/go/vt/vtgate/engine/vindex_func.go index 0c43449d4ca..13844b60db8 100644 --- a/go/vt/vtgate/engine/vindex_func.go +++ b/go/vt/vtgate/engine/vindex_func.go @@ -74,21 +74,6 @@ func (code VindexOpcode) MarshalJSON() ([]byte, error) { return json.Marshal(vindexOpcodeName[code]) } -// RouteType returns a description of the query routing type used by the primitive -func (vf *VindexFunc) RouteType() string { - return vindexOpcodeName[vf.Opcode] -} - -// GetKeyspaceName specifies the Keyspace that this primitive routes to. -func (vf *VindexFunc) GetKeyspaceName() string { - return "" -} - -// GetTableName specifies the table that this primitive routes to. -func (vf *VindexFunc) GetTableName() string { - return "" -} - // TryExecute performs a non-streaming exec. func (vf *VindexFunc) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { return vf.mapVindex(ctx, vcursor, bindVars) diff --git a/go/vt/vtgate/engine/vindex_lookup.go b/go/vt/vtgate/engine/vindex_lookup.go index f9b491ae878..7798903f2a0 100644 --- a/go/vt/vtgate/engine/vindex_lookup.go +++ b/go/vt/vtgate/engine/vindex_lookup.go @@ -55,21 +55,6 @@ type VindexLookup struct { SendTo *Route } -// RouteType implements the Primitive interface -func (vr *VindexLookup) RouteType() string { - return "VindexLookup" -} - -// GetKeyspaceName implements the Primitive interface -func (vr *VindexLookup) GetKeyspaceName() string { - return vr.SendTo.GetKeyspaceName() -} - -// GetTableName implements the Primitive interface -func (vr *VindexLookup) GetTableName() string { - return vr.SendTo.GetTableName() -} - // GetFields implements the Primitive interface func (vr *VindexLookup) GetFields(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable) (*sqltypes.Result, error) { return vr.SendTo.GetFields(ctx, vcursor, bindVars) diff --git a/go/vt/vtgate/engine/vschema_ddl.go b/go/vt/vtgate/engine/vschema_ddl.go index cb107eecb58..1eaff205ec0 100644 --- a/go/vt/vtgate/engine/vschema_ddl.go +++ b/go/vt/vtgate/engine/vschema_ddl.go @@ -47,21 +47,6 @@ func (v *AlterVSchema) description() PrimitiveDescription { } } -// RouteType implements the Primitive interface -func (v *AlterVSchema) RouteType() string { - return "AlterVSchema" -} - -// GetKeyspaceName implements the Primitive interface -func (v *AlterVSchema) GetKeyspaceName() string { - return v.Keyspace.Name -} - -// GetTableName implements the Primitive interface -func (v *AlterVSchema) GetTableName() string { - return v.AlterVschemaDDL.Table.Name.String() -} - // TryExecute implements the Primitive interface func (v *AlterVSchema) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*query.BindVariable, wantfields bool) (*sqltypes.Result, error) { err := vcursor.ExecuteVSchema(ctx, v.Keyspace.Name, v.AlterVschemaDDL) diff --git a/go/vt/vtgate/engine/vstream.go b/go/vt/vtgate/engine/vstream.go index aafc500aba0..e2d54ecfe84 100644 --- a/go/vt/vtgate/engine/vstream.go +++ b/go/vt/vtgate/engine/vstream.go @@ -45,21 +45,6 @@ type VStream struct { Limit int } -// RouteType implements the Primitive interface -func (v *VStream) RouteType() string { - return "VStream" -} - -// GetKeyspaceName implements the Primitive interface -func (v *VStream) GetKeyspaceName() string { - return v.Keyspace.Name -} - -// GetTableName implements the Primitive interface -func (v *VStream) GetTableName() string { - return v.TableName -} - // TryExecute implements the Primitive interface func (v *VStream) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { return nil, vterrors.VT13001("TryExecute is not supported for VStream") diff --git a/go/vt/vtgate/evalengine/compiler_test.go b/go/vt/vtgate/evalengine/compiler_test.go index 3a53fbfd4c8..272baa0bc4a 100644 --- a/go/vt/vtgate/evalengine/compiler_test.go +++ b/go/vt/vtgate/evalengine/compiler_test.go @@ -775,6 +775,32 @@ func TestCompilerSingle(t *testing.T) { // exercise the path to push sets onto the stack. result: `FLOAT64(1)`, }, + { + expression: `GREATEST(NULL, '2023-10-24')`, + result: `NULL`, + }, + { + expression: `GREATEST(NULL, 1)`, + result: `NULL`, + }, + { + expression: `GREATEST(NULL, 1.0)`, + result: `NULL`, + }, + { + expression: `GREATEST(NULL, 1.0e0)`, + result: `NULL`, + }, + { + expression: `GREATEST(column0, 1.0e0)`, + values: []sqltypes.Value{sqltypes.MakeTrusted(sqltypes.Enum, []byte("foo"))}, + // Enum and set are treated as strings in this case. + result: `VARCHAR("foo")`, + }, + { + expression: `GREATEST(JSON_OBJECT(), JSON_ARRAY())`, + result: `VARCHAR("{}")`, + }, } tz, _ := time.LoadLocation("Europe/Madrid") diff --git a/go/vt/vtgate/evalengine/fn_compare.go b/go/vt/vtgate/evalengine/fn_compare.go index 1084a240bd8..2a6505bbd68 100644 --- a/go/vt/vtgate/evalengine/fn_compare.go +++ b/go/vt/vtgate/evalengine/fn_compare.go @@ -108,6 +108,7 @@ func (call *builtinMultiComparison) getMultiComparisonFunc(args []eval) multiCom timestamp int date int time int + json int ) /* @@ -147,7 +148,15 @@ func (call *builtinMultiComparison) getMultiComparisonFunc(args []eval) multiCom if !arg.isHexOrBitLiteral() { call.prec = max(call.prec, datetime2.DefaultPrecision) } + case sqltypes.Geometry: + return func(_ *ExpressionEnv, _ []eval, _, _ int) (eval, error) { + return nil, vterrors.Errorf(vtrpc.Code_INTERNAL, "unsupported argument of geometry type for GREATEST/LEAST") + } } + case *evalSet: + text++ + case *evalEnum: + text++ case *evalTemporal: temporal++ call.prec = max(call.prec, int(arg.prec)) @@ -161,6 +170,8 @@ func (call *builtinMultiComparison) getMultiComparisonFunc(args []eval) multiCom case sqltypes.Time: time++ } + case *evalJSON: + json++ } } @@ -236,6 +247,9 @@ func (call *builtinMultiComparison) getMultiComparisonFunc(args []eval) multiCom if decimals > 0 { return compareAllDecimal } + if json > 0 { + return compareAllText + } } panic("unexpected argument type") } @@ -444,7 +458,7 @@ func (call *builtinMultiComparison) eval(env *ExpressionEnv) (eval, error) { return call.getMultiComparisonFunc(args)(env, args, call.cmp, call.prec) } -func (call *builtinMultiComparison) compile_c(c *compiler, args []ctype) (ctype, error) { +func (call *builtinMultiComparison) compile_c(c *compiler, args []ctype, jumps []*jump) (ctype, error) { var ca collationAggregation var f typeFlag for _, arg := range args { @@ -456,10 +470,11 @@ func (call *builtinMultiComparison) compile_c(c *compiler, args []ctype) (ctype, tc := ca.result() c.asm.Fn_MULTICMP_c(len(args), call.cmp < 0, tc) + c.asm.jumpDestination(jumps...) return ctype{Type: sqltypes.VarChar, Flag: f, Col: tc}, nil } -func (call *builtinMultiComparison) compile_d(c *compiler, args []ctype) (ctype, error) { +func (call *builtinMultiComparison) compile_d(c *compiler, args []ctype, jumps []*jump) (ctype, error) { var f typeFlag var size int32 var scale int32 @@ -470,6 +485,7 @@ func (call *builtinMultiComparison) compile_d(c *compiler, args []ctype) (ctype, c.compileToDecimal(tt, len(args)-i) } c.asm.Fn_MULTICMP_d(len(args), call.cmp < 0) + c.asm.jumpDestination(jumps...) return ctype{Type: sqltypes.Decimal, Flag: f, Col: collationNumeric, Size: size, Scale: scale}, nil } @@ -486,6 +502,7 @@ func (call *builtinMultiComparison) compile(c *compiler) (ctype, error) { time int text int binary int + json int args []ctype nullable bool prec int @@ -500,12 +517,17 @@ func (call *builtinMultiComparison) compile(c *compiler) (ctype, error) { In all other cases, the arguments are compared as binary strings. */ - for _, expr := range call.Arguments { + jumps := make([]*jump, 0, len(call.Arguments)) + for i, expr := range call.Arguments { tt, err := expr.compile(c) if err != nil { return ctype{}, err } + if tt.nullable() { + jumps = append(jumps, c.compileNullCheckArg(tt, i)) + } + args = append(args, tt) nullable = nullable || tt.nullable() @@ -544,6 +566,12 @@ func (call *builtinMultiComparison) compile(c *compiler) (ctype, error) { temporal++ time++ prec = max(prec, int(tt.Size)) + case sqltypes.Set, sqltypes.Enum: + text++ + case sqltypes.TypeJSON: + json++ + case sqltypes.Geometry: + return ctype{}, vterrors.Errorf(vtrpc.Code_INTERNAL, "unsupported argument of geometry type for GREATEST/LEAST") case sqltypes.Null: nullable = true default: @@ -579,6 +607,7 @@ func (call *builtinMultiComparison) compile(c *compiler) (ctype, error) { } } c.asm.Fn_MULTICMP_temporal(len(args), call.cmp < 0) + c.asm.jumpDestination(jumps...) return ctype{Type: typ, Flag: f, Col: collationBinary}, nil } else if temporal > 0 { var ca collationAggregation @@ -608,24 +637,28 @@ func (call *builtinMultiComparison) compile(c *compiler) (ctype, error) { case time > 0: c.asm.Fn_MULTICMP_temporal_fallback(compareAllTemporalAsString(nil), len(args), call.cmp, prec) } + c.asm.jumpDestination(jumps...) return ctype{Type: sqltypes.VarChar, Flag: f, Col: tc}, nil } if signed+unsigned == len(args) { if signed == len(args) { c.asm.Fn_MULTICMP_i(len(args), call.cmp < 0) + c.asm.jumpDestination(jumps...) return ctype{Type: sqltypes.Int64, Flag: f, Col: collationNumeric}, nil } if unsigned == len(args) { c.asm.Fn_MULTICMP_u(len(args), call.cmp < 0) + c.asm.jumpDestination(jumps...) return ctype{Type: sqltypes.Uint64, Flag: f, Col: collationNumeric}, nil } - return call.compile_d(c, args) + return call.compile_d(c, args, jumps) } if binary > 0 || text > 0 { if text > 0 { - return call.compile_c(c, args) + return call.compile_c(c, args, jumps) } c.asm.Fn_MULTICMP_b(len(args), call.cmp < 0) + c.asm.jumpDestination(jumps...) return ctype{Type: sqltypes.VarBinary, Flag: f, Col: collationBinary}, nil } else { if floats > 0 { @@ -633,10 +666,25 @@ func (call *builtinMultiComparison) compile(c *compiler) (ctype, error) { c.compileToFloat(tt, len(args)-i) } c.asm.Fn_MULTICMP_f(len(args), call.cmp < 0) + c.asm.jumpDestination(jumps...) return ctype{Type: sqltypes.Float64, Flag: f, Col: collationNumeric}, nil } if decimals > 0 { - return call.compile_d(c, args) + return call.compile_d(c, args, jumps) + } + if json > 0 { + c.asm.Fn_MULTICMP_c(len(args), call.cmp < 0, collationJSON) + c.asm.jumpDestination(jumps...) + return ctype{Type: sqltypes.Text, Flag: f, Col: collationJSON}, nil + } + + // The next case only gets hit if we already know at least one of the inputs + // is a static NULL typed value. That means we already have removed all items + // from the stack at this point and the top is a NULL to return. + if nullable { + c.asm.adjustStack(-len(args) + 1) + c.asm.jumpDestination(jumps...) + return ctype{Type: sqltypes.Null, Flag: f, Col: collationBinary}, nil } } return ctype{}, vterrors.Errorf(vtrpc.Code_INTERNAL, "unexpected argument for GREATEST/LEAST") diff --git a/go/vt/vtgate/evalengine/testcases/cases.go b/go/vt/vtgate/evalengine/testcases/cases.go index 5469873b10e..1f34e6bfe0c 100644 --- a/go/vt/vtgate/evalengine/testcases/cases.go +++ b/go/vt/vtgate/evalengine/testcases/cases.go @@ -1156,7 +1156,7 @@ func StrcmpComparison(yield Query) { func MultiComparisons(yield Query) { var numbers = []string{ - `0`, `-1`, `1`, `0.0`, `1.0`, `-1.0`, `1.0E0`, `-1.0E0`, `0.0E0`, + `NULL`, `0`, `-1`, `1`, `0.0`, `1.0`, `-1.0`, `1.0E0`, `-1.0E0`, `0.0E0`, strconv.FormatUint(math.MaxUint64, 10), strconv.FormatUint(math.MaxInt64, 10), strconv.FormatInt(math.MinInt64, 10), diff --git a/go/vt/vtgate/evalengine/translate_simplify.go b/go/vt/vtgate/evalengine/translate_simplify.go index 6af7f7646a0..18be4841de5 100644 --- a/go/vt/vtgate/evalengine/translate_simplify.go +++ b/go/vt/vtgate/evalengine/translate_simplify.go @@ -138,10 +138,24 @@ func simplifyExpr(env *ExpressionEnv, e IR) (IR, error) { if err != nil { return nil, err } - return &Literal{inner: simplified}, nil + return evalToIR(simplified), nil } if err := e.simplify(env); err != nil { return nil, err } return e, nil } + +// evalToIR turns an internal eval result into an IR: +// - if it’s an evalTuple, it recurses into a TupleExpr +// - otherwise it wraps the single value in a Literal +func evalToIR(simplified eval) IR { + if tuple, isTuple := simplified.(*evalTuple); isTuple { + te := make(TupleExpr, len(tuple.t)) + for i, t := range tuple.t { + te[i] = evalToIR(t) + } + return te + } + return &Literal{inner: simplified} +} diff --git a/go/vt/vtgate/executor.go b/go/vt/vtgate/executor.go index caa7fa9c6e5..1680f4e9235 100644 --- a/go/vt/vtgate/executor.go +++ b/go/vt/vtgate/executor.go @@ -72,15 +72,10 @@ import ( var ( defaultTabletType = topodatapb.TabletType_PRIMARY - // TODO: @harshit/@systay - Remove these deprecated stats once we have a replacement in a released version. - queriesProcessed = stats.NewCountersWithSingleLabel("QueriesProcessed", "Deprecated: Queries processed at vtgate by plan type", "Plan") - queriesRouted = stats.NewCountersWithSingleLabel("QueriesRouted", "Deprecated: Queries routed from vtgate to vttablet by plan type", "Plan") - queriesProcessedByTable = stats.NewCountersWithMultiLabels("QueriesProcessedByTable", "Deprecated: Queries processed at vtgate by plan type, keyspace and table", []string{"Plan", "Keyspace", "Table"}) - queriesRoutedByTable = stats.NewCountersWithMultiLabels("QueriesRoutedByTable", "Deprecated: Queries routed from vtgate to vttablet by plan type, keyspace and table", []string{"Plan", "Keyspace", "Table"}) - queryExecutions = stats.NewCountersWithMultiLabels("QueryExecutions", "Counts queries executed at VTGate by query type, plan type, and tablet type.", []string{"Query", "Plan", "Tablet"}) queryRoutes = stats.NewCountersWithMultiLabels("QueryRoutes", "Counts queries routed from VTGate to VTTablet by query type, plan type, and tablet type.", []string{"Query", "Plan", "Tablet"}) queryExecutionsByTable = stats.NewCountersWithMultiLabels("QueryExecutionsByTable", "Counts queries executed at VTGate per table by query type and table.", []string{"Query", "Table"}) + txProcessed = stats.NewCountersWithMultiLabels("TransactionsProcessed", "Counts transactions processed at VTGate by shard distribution (single or cross), transaction type (read write or read only)", []string{"Shard", "Type"}) // commitMode records the timing of the commit phase of a transaction. // It also tracks between different transaction mode i.e. Single, Multi and TwoPC @@ -111,6 +106,7 @@ func init() { // the abilities of the underlying vttablets. type ( ExecutorConfig struct { + Name string Normalize bool StreamSize int // AllowScatter will fail planning if set to false and a plan contains any scatter queries @@ -120,7 +116,8 @@ type ( } Executor struct { - config ExecutorConfig + config ExecutorConfig + exporter *servenv.Exporter env *vtenv.Environment serv srvtopo.Server @@ -128,6 +125,7 @@ type ( resolver *Resolver scatterConn *ScatterConn txConn *TxConn + metrics econtext.Metrics mu sync.Mutex vschema *vindexes.VSchema @@ -147,6 +145,10 @@ type ( vConfig econtext.VCursorConfig ddlConfig dynamicconfig.DDL } + + Metrics struct { + engineMetrics *engine.Metrics + } ) var executorOnce sync.Once @@ -180,6 +182,7 @@ func NewExecutor( ) *Executor { e := &Executor{ config: eConfig, + exporter: servenv.NewExporter(eConfig.Name, ""), env: env, serv: serv, cell: cell, @@ -194,6 +197,9 @@ func NewExecutor( } // setting the vcursor config. e.initVConfig(warnOnShardedOnly, pv) + e.metrics = &Metrics{ + engineMetrics: engine.InitMetrics(e.exporter), + } // we subscribe to update from the VSchemaManager e.vm = &VSchemaManager{ @@ -386,7 +392,6 @@ func (e *Executor) StreamExecute( logStats.ExecuteTime = time.Since(execStart) logStats.ActiveKeyspace = vc.GetKeyspace() - e.updateQueryCounts(plan.Instructions.RouteType(), plan.Instructions.GetKeyspaceName(), plan.Instructions.GetTableName(), int64(logStats.ShardQueries)) e.updateQueryStats(plan.QueryType.String(), plan.Type.String(), vc.TabletType().String(), int64(logStats.ShardQueries), plan.TablesUsed) return err @@ -603,7 +608,6 @@ func ifReadAfterWriteExist(session *econtext.SafeSession, f func(*vtgatepb.ReadA func (e *Executor) handleBegin(ctx context.Context, vcursor *econtext.VCursorImpl, safeSession *econtext.SafeSession, logStats *logstats.LogStats, stmt sqlparser.Statement) (*sqltypes.Result, error) { execStart := time.Now() logStats.PlanTime = execStart.Sub(logStats.StartTime) - e.updateQueryCounts(sqlparser.StmtBegin.String(), "", "", 0) e.updateQueryStats(sqlparser.StmtBegin.String(), engine.PlanTransaction.String(), vcursor.TabletType().String(), 0, nil) begin := stmt.(*sqlparser.Begin) @@ -616,7 +620,6 @@ func (e *Executor) handleCommit(ctx context.Context, vcursor *econtext.VCursorIm execStart := time.Now() logStats.PlanTime = execStart.Sub(logStats.StartTime) logStats.ShardQueries = uint64(len(safeSession.ShardSessions)) - e.updateQueryCounts(sqlparser.StmtCommit.String(), "", "", int64(logStats.ShardQueries)) e.updateQueryStats(sqlparser.StmtCommit.String(), engine.PlanTransaction.String(), vcursor.TabletType().String(), int64(logStats.ShardQueries), nil) err := e.txConn.Commit(ctx, safeSession) @@ -633,7 +636,6 @@ func (e *Executor) handleRollback(ctx context.Context, vcursor *econtext.VCursor execStart := time.Now() logStats.PlanTime = execStart.Sub(logStats.StartTime) logStats.ShardQueries = uint64(len(safeSession.ShardSessions)) - e.updateQueryCounts(sqlparser.StmtRollback.String(), "", "", int64(logStats.ShardQueries)) e.updateQueryStats(sqlparser.StmtRollback.String(), engine.PlanTransaction.String(), vcursor.TabletType().String(), int64(logStats.ShardQueries), nil) err := e.txConn.Rollback(ctx, safeSession) @@ -645,7 +647,6 @@ func (e *Executor) handleSavepoint(ctx context.Context, vcursor *econtext.VCurso execStart := time.Now() logStats.PlanTime = execStart.Sub(logStats.StartTime) logStats.ShardQueries = uint64(len(safeSession.ShardSessions)) - e.updateQueryCounts(queryType, "", "", int64(logStats.ShardQueries)) e.updateQueryStats(queryType, engine.PlanTransaction.String(), vcursor.TabletType().String(), int64(logStats.ShardQueries), nil) defer func() { @@ -708,7 +709,6 @@ func (e *Executor) executeSPInAllSessions(ctx context.Context, safeSession *econ func (e *Executor) handleKill(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, vcursor *econtext.VCursorImpl, stmt sqlparser.Statement, logStats *logstats.LogStats) (result *sqltypes.Result, err error) { execStart := time.Now() logStats.PlanTime = execStart.Sub(logStats.StartTime) - e.updateQueryCounts("Kill", "", "", 0) e.updateQueryStats("Kill", engine.PlanLocal.String(), vcursor.TabletType().String(), 0, nil) defer func() { @@ -1117,7 +1117,7 @@ func (e *Executor) fetchOrCreatePlan( } query, comments := sqlparser.SplitMarginComments(queryString) - vcursor, _ = econtext.NewVCursorImpl(safeSession, comments, e, logStats, e.vm, e.VSchema(), e.resolver.resolver, e.serv, nullResultsObserver{}, e.vConfig) + vcursor, _ = e.newVCursor(safeSession, comments, logStats) var setVarComment string if e.vConfig.SetVarEnabled { @@ -1138,7 +1138,7 @@ func (e *Executor) fetchOrCreatePlan( } } if err != nil { - return nil, nil, nil, err + return nil, nil, stmt, err } if shouldOptimizePlan(preparedPlan, isExecutePath, plan) { @@ -1163,6 +1163,10 @@ func (e *Executor) fetchOrCreatePlan( return plan, vcursor, stmt, nil } +func (e *Executor) newVCursor(safeSession *econtext.SafeSession, comments sqlparser.MarginComments, logStats *logstats.LogStats) (*econtext.VCursorImpl, error) { + return econtext.NewVCursorImpl(safeSession, comments, e, logStats, e.vm, e.VSchema(), e.resolver.resolver, e.serv, nullResultsObserver{}, e.vConfig, e.metrics) +} + func (e *Executor) tryOptimizedPlan( ctx context.Context, vcursor *econtext.VCursorImpl, @@ -1293,6 +1297,7 @@ func buildPlanKey(ctx context.Context, vcursor *econtext.VCursorImpl, query stri return engine.PlanKey{ CurrentKeyspace: vcursor.GetKeyspace(), + TabletType: vcursor.TabletType(), Destination: strings.Join(allDest, ","), Query: query, SetVarComment: setVarComment, @@ -1405,15 +1410,6 @@ func (e *Executor) ClearPlans() { e.epoch.Add(1) } -func (e *Executor) updateQueryCounts(planType, keyspace, tableName string, shardQueries int64) { - queriesProcessed.Add(planType, 1) - queriesRouted.Add(planType, shardQueries) - if tableName != "" { - queriesProcessedByTable.Add([]string{planType, keyspace, tableName}, 1) - queriesRoutedByTable.Add([]string{planType, keyspace, tableName}, shardQueries) - } -} - func (e *Executor) updateQueryStats(queryType, planType, tabletType string, shards int64, tables []string) { queryExecutions.Add([]string{queryType, planType, tabletType}, 1) queryRoutes.Add([]string{queryType, planType, tabletType}, shards) @@ -1576,11 +1572,20 @@ func prepareBindVars(paramsCount uint16) map[string]*querypb.BindVariable { } func (e *Executor) handlePrepare(ctx context.Context, safeSession *econtext.SafeSession, sql string, logStats *logstats.LogStats) ([]*querypb.Field, uint16, error) { - plan, vcursor, _, err := e.fetchOrCreatePlan(ctx, safeSession, sql, nil, false, true, logStats, false) + plan, vcursor, stmt, err := e.fetchOrCreatePlan(ctx, safeSession, sql, nil, false, true, logStats, false) execStart := time.Now() logStats.PlanTime = execStart.Sub(logStats.StartTime) if err != nil { + if stmt != nil { + // Attempt to build NULL field types for the statement in case planning fails, + // allowing the client to proceed with preparing the statement even without a valid execution plan. + // Hoping that an optimized plan can be built later when parameter values are available. + flds, paramCount, success := buildNullFieldTypes(stmt) + if success { + return flds, paramCount, nil + } + } logStats.Error = err return nil, 0, err } @@ -1607,6 +1612,27 @@ func (e *Executor) handlePrepare(ctx context.Context, safeSession *econtext.Safe return qr.Fields, plan.ParamsCount, err } +// buildNullFieldTypes builds a list of NULL field types for the given statement. +func buildNullFieldTypes(stmt sqlparser.Statement) ([]*querypb.Field, uint16, bool) { + sel, ok := stmt.(sqlparser.SelectStatement) + if !ok { + return nil, countArguments(stmt), true + } + var fields []*querypb.Field + for _, expr := range sel.GetColumns() { + // *sqlparser.StarExpr is not supported in this context. + if ae, ok := expr.(*sqlparser.AliasedExpr); ok { + fields = append(fields, &querypb.Field{ + Name: ae.ColumnName(), + Type: querypb.Type_NULL_TYPE, + }) + continue + } + return nil, 0, false + } + return fields, countArguments(stmt), true +} + func parseAndValidateQuery(query string, parser *sqlparser.Parser) (sqlparser.Statement, *sqlparser.ReservedVars, error) { stmt, reserved, err := parser.Parse2(query) if err != nil { @@ -1697,7 +1723,7 @@ func (e *Executor) checkThatPlanIsValid(stmt sqlparser.Statement, plan *engine.P return nil } - return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "plan includes scatter, which is disallowed using the `no_scatter` command line argument") + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "plan includes scatter, which is disallowed using the `no-scatter` command line argument") } // getTabletThrottlerStatus uses HTTP to get the throttler status @@ -1801,3 +1827,7 @@ func fkMode(foreignkey string) vschemapb.Keyspace_ForeignKeyMode { } return vschemapb.Keyspace_unspecified } + +func (m *Metrics) GetExecutionMetrics() *engine.Metrics { + return m.engineMetrics +} diff --git a/go/vt/vtgate/executor_framework_test.go b/go/vt/vtgate/executor_framework_test.go index 88455e8331f..e65a5264841 100644 --- a/go/vt/vtgate/executor_framework_test.go +++ b/go/vt/vtgate/executor_framework_test.go @@ -28,8 +28,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - econtext "vitess.io/vitess/go/vt/vtgate/executorcontext" - "vitess.io/vitess/go/cache/theine" "vitess.io/vitess/go/constants/sidecar" "vitess.io/vitess/go/sqltypes" @@ -45,6 +43,7 @@ import ( "vitess.io/vitess/go/vt/srvtopo" "vitess.io/vitess/go/vt/vtenv" "vitess.io/vitess/go/vt/vtgate/engine" + econtext "vitess.io/vitess/go/vt/vtgate/executorcontext" "vitess.io/vitess/go/vt/vtgate/logstats" "vitess.io/vitess/go/vt/vtgate/vindexes" "vitess.io/vitess/go/vt/vttablet/sandboxconn" @@ -245,6 +244,7 @@ func createCustomExecutor(t testing.TB, vschema string, mysqlVersion string) (ex func createExecutorConfig() ExecutorConfig { return ExecutorConfig{ + Name: "TestExecutor", StreamSize: 10, AllowScatter: true, } @@ -252,6 +252,7 @@ func createExecutorConfig() ExecutorConfig { func createExecutorConfigWithNormalizer() ExecutorConfig { return ExecutorConfig{ + Name: "TestExecutor", StreamSize: 10, AllowScatter: true, Normalize: true, diff --git a/go/vt/vtgate/executor_plan_test.go b/go/vt/vtgate/executor_plan_test.go index d04c6d64c35..744cf7ef4d8 100644 --- a/go/vt/vtgate/executor_plan_test.go +++ b/go/vt/vtgate/executor_plan_test.go @@ -119,9 +119,7 @@ func TestDeferredOptimization(t *testing.T) { resolver := newTestResolver(ctx, nil, nil, "") executor := Executor{ - config: ExecutorConfig{ - AllowScatter: true, - }, + config: createExecutorConfig(), env: env, resolver: resolver, vschema: vindexes.BuildVSchema(result, parser), diff --git a/go/vt/vtgate/executor_scatter_stats.go b/go/vt/vtgate/executor_scatter_stats.go index beaa60d7012..6a8fb7d9cca 100644 --- a/go/vt/vtgate/executor_scatter_stats.go +++ b/go/vt/vtgate/executor_scatter_stats.go @@ -19,6 +19,7 @@ package vtgate import ( "fmt" "net/http" + "strings" "sync/atomic" "time" @@ -26,8 +27,6 @@ import ( "vitess.io/vitess/go/vt/logz" - "vitess.io/vitess/go/vt/proto/vtrpc" - "vitess.io/vitess/go/vt/vterrors" "vitess.io/vitess/go/vt/vtgate/engine" ) @@ -58,9 +57,7 @@ func (e *Executor) gatherScatterStats() (statsResults, error) { totalExecTime := time.Duration(0) totalCount := uint64(0) - var err error plans := make([]*engine.Plan, 0) - routes := make([]*engine.Route, 0) // First we go over all plans and collect statistics and all query plans for scatter queries e.ForEachPlan(func(plan *engine.Plan) bool { scatter := engine.Find(findScatter, plan.Instructions) @@ -68,13 +65,7 @@ func (e *Executor) gatherScatterStats() (statsResults, error) { isScatter := scatter != nil if isScatter { - route, isRoute := scatter.(*engine.Route) - if !isRoute { - err = vterrors.Errorf(vtrpc.Code_INTERNAL, "expected a route, but found a %v", scatter) - return false - } plans = append(plans, plan) - routes = append(routes, route) scatterExecTime += time.Duration(atomic.LoadUint64(&plan.ExecTime)) scatterCount += atomic.LoadUint64(&plan.ExecCount) } @@ -87,14 +78,10 @@ func (e *Executor) gatherScatterStats() (statsResults, error) { totalCount += atomic.LoadUint64(&plan.ExecCount) return true }) - if err != nil { - return statsResults{}, err - } // Now we'll go over all scatter queries we've found and produce result items for each resultItems := make([]*statsResultItem, len(plans)) for i, plan := range plans { - route := routes[i] execCount := atomic.LoadUint64(&plan.ExecCount) execTime := time.Duration(atomic.LoadUint64(&plan.ExecTime)) @@ -102,6 +89,7 @@ func (e *Executor) gatherScatterStats() (statsResults, error) { if execCount != 0 { avgTimePerQuery = execTime.Nanoseconds() / int64(execCount) } + resultItems[i] = &statsResultItem{ Query: plan.Original, AvgTimePerQuery: time.Duration(avgTimePerQuery), @@ -109,7 +97,7 @@ func (e *Executor) gatherScatterStats() (statsResults, error) { PercentTimeOfScatters: 100 * float64(execTime) / float64(scatterExecTime), PercentCountOfReads: 100 * float64(execCount) / float64(readOnlyCount), PercentCountOfScatters: 100 * float64(execCount) / float64(scatterCount), - From: route.Keyspace.Name + "." + route.GetTableName(), + From: strings.Join(plan.TablesUsed, ","), Count: execCount, } } diff --git a/go/vt/vtgate/executor_select_test.go b/go/vt/vtgate/executor_select_test.go index b9139556f8c..4310e7c98eb 100644 --- a/go/vt/vtgate/executor_select_test.go +++ b/go/vt/vtgate/executor_select_test.go @@ -3290,6 +3290,28 @@ func TestOnlyOptimizedPlan(t *testing.T) { require.ErrorContains(t, sp.BaselineErr, "VT12001: unsupported: subquery with aggregation in order by") } +// TestPrepareWithUnsupportedQuery tests that the fields returned by the query on unsupported query. +func TestPrepareWithUnsupportedQuery(t *testing.T) { + executor, _, _, _, ctx := createExecutorEnvWithConfig(t, createExecutorConfigWithNormalizer()) + + sql := "select a, b, c, row_number() over (partition by x) from user where c1 = ? and c2 = ?" + session := econtext.NewAutocommitSession(&vtgatepb.Session{}) + fields, paramsCount, err := executorPrepare(ctx, executor, session.Session, sql) + require.NoError(t, err) + assert.EqualValues(t, 2, paramsCount) + wantFields := []*querypb.Field{ + {Name: "a", Type: querypb.Type_NULL_TYPE}, + {Name: "b", Type: querypb.Type_NULL_TYPE}, + {Name: "c", Type: querypb.Type_NULL_TYPE}, + {Name: "row_number() over ( partition by x)", Type: querypb.Type_NULL_TYPE}, + } + require.Equal(t, wantFields, fields) + + sql = "select row_number over" // this is a syntax error. It should return an error. + _, _, err = executorPrepare(ctx, executor, session.Session, sql) + require.ErrorContains(t, err, "syntax error") +} + func TestSelectDatabasePrepare(t *testing.T) { executor, _, _, _, ctx := createExecutorEnvWithConfig(t, createExecutorConfigWithNormalizer()) logChan := executor.queryLogger.Subscribe("Test") @@ -3311,33 +3333,17 @@ func TestSelectWithUnionAll(t *testing.T) { bv1, _ := sqltypes.BuildBindVariable([]int64{1, 2}) bv2, _ := sqltypes.BuildBindVariable([]int64{3}) sbc1WantQueries := []*querypb.BoundQuery{{ - Sql: "select id from `user` where id in ::__vals", - BindVariables: map[string]*querypb.BindVariable{ - "__vals": bv1, - "vtg1": bv, - "vtg2": bv, - }, - }, { - Sql: "select id from `user` where id in ::__vals", + Sql: "select id from `user` where id in ::__vals union all select id from `user` where id in ::vtg1", BindVariables: map[string]*querypb.BindVariable{ "__vals": bv1, "vtg1": bv, - "vtg2": bv, }, }} sbc2WantQueries := []*querypb.BoundQuery{{ - Sql: "select id from `user` where id in ::__vals", - BindVariables: map[string]*querypb.BindVariable{ - "__vals": bv2, - "vtg1": bv, - "vtg2": bv, - }, - }, { - Sql: "select id from `user` where id in ::__vals", + Sql: "select id from `user` where id in ::__vals union all select id from `user` where id in ::vtg1", BindVariables: map[string]*querypb.BindVariable{ "__vals": bv2, "vtg1": bv, - "vtg2": bv, }, }} session := &vtgatepb.Session{ diff --git a/go/vt/vtgate/executor_test.go b/go/vt/vtgate/executor_test.go index e30e8ff8055..c47b585ef18 100644 --- a/go/vt/vtgate/executor_test.go +++ b/go/vt/vtgate/executor_test.go @@ -104,22 +104,22 @@ func TestPlanKey(t *testing.T) { tests := []testCase{{ targetString: "", - expectedPlanPrefixKey: "CurrentKeyspace: ks1, Destination: , Query: SELECT 1, SetVarComment: , Collation: 255", + expectedPlanPrefixKey: "CurrentKeyspace: ks1, TabletType: PRIMARY, Destination: , Query: SELECT 1, SetVarComment: , Collation: 255", }, { setVarComment: "sEtVaRcOmMeNt", - expectedPlanPrefixKey: "CurrentKeyspace: ks1, Destination: , Query: SELECT 1, SetVarComment: sEtVaRcOmMeNt, Collation: 255", + expectedPlanPrefixKey: "CurrentKeyspace: ks1, TabletType: PRIMARY, Destination: , Query: SELECT 1, SetVarComment: sEtVaRcOmMeNt, Collation: 255", }, { targetString: "ks1@replica", - expectedPlanPrefixKey: "CurrentKeyspace: ks1, Destination: , Query: SELECT 1, SetVarComment: , Collation: 255", + expectedPlanPrefixKey: "CurrentKeyspace: ks1, TabletType: REPLICA, Destination: , Query: SELECT 1, SetVarComment: , Collation: 255", }, { targetString: "ks1:-80", - expectedPlanPrefixKey: "CurrentKeyspace: ks1, Destination: DestinationShard(-80), Query: SELECT 1, SetVarComment: , Collation: 255", + expectedPlanPrefixKey: "CurrentKeyspace: ks1, TabletType: PRIMARY, Destination: DestinationShard(-80), Query: SELECT 1, SetVarComment: , Collation: 255", }, { targetString: "ks1[deadbeef]", resolvedShard: []*srvtopo.ResolvedShard{ {Target: &querypb.Target{Keyspace: "ks1", Shard: "-66"}}, {Target: &querypb.Target{Keyspace: "ks1", Shard: "66-"}}}, - expectedPlanPrefixKey: "CurrentKeyspace: ks1, Destination: -66,66-, Query: SELECT 1, SetVarComment: , Collation: 255", + expectedPlanPrefixKey: "CurrentKeyspace: ks1, TabletType: PRIMARY, Destination: -66,66-, Query: SELECT 1, SetVarComment: , Collation: 255", }} cfg := econtext.VCursorConfig{ Collation: collations.CollationUtf8mb4ID, @@ -132,7 +132,7 @@ func TestPlanKey(t *testing.T) { t.Run(fmt.Sprintf("%d#%s", i, tc.targetString), func(t *testing.T) { ss := econtext.NewSafeSession(&vtgatepb.Session{TargetString: tc.targetString}) resolver := &fakeResolver{resolveShards: tc.resolvedShard} - vc, _ := econtext.NewVCursorImpl(ss, makeComments(""), e, nil, e.vm, e.VSchema(), resolver, nil, nullResultsObserver{}, cfg) + vc, _ := econtext.NewVCursorImpl(ss, makeComments(""), e, nil, e.vm, e.VSchema(), resolver, nil, nullResultsObserver{}, cfg, nil) key := buildPlanKey(ctx, vc, "SELECT 1", tc.setVarComment) require.Equal(t, tc.expectedPlanPrefixKey, key.DebugString(), "test case %d", i) }) @@ -1616,8 +1616,9 @@ var pv = querypb.ExecuteOptions_Gen4 func TestGetPlanUnnormalized(t *testing.T) { r, _, _, _, ctx := createExecutorEnv(t) - emptyvc, _ := econtext.NewVCursorImpl(econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@unknown"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, r.vConfig) - unshardedvc, _ := econtext.NewVCursorImpl(econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "@unknown"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, r.vConfig) + + emptyvc, _ := r.newVCursor(econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@unknown"}), makeComments(""), nil) + unshardedvc, _ := r.newVCursor(econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "@unknown"}), makeComments(""), nil) query1 := "select * from music_user_map where id = 1" plan1, logStats := getPlanCached(t, ctx, r, emptyvc.SafeSession, query1, makeComments(" /* comment */"), map[string]*querypb.BindVariable{}, false) @@ -1683,7 +1684,7 @@ func TestGetPlanCacheUnnormalized(t *testing.T) { t.Run("Cache", func(t *testing.T) { r, _, _, _, ctx := createExecutorEnv(t) - emptyvc, _ := econtext.NewVCursorImpl(econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@unknown"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, r.vConfig) + emptyvc, _ := r.newVCursor(econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@unknown"}), makeComments(""), nil) query1 := "select * from music_user_map where id = 1" _, logStats1 := getPlanCached(t, ctx, r, emptyvc.SafeSession, query1, makeComments(" /* comment */"), map[string]*querypb.BindVariable{}, true) @@ -1702,7 +1703,7 @@ func TestGetPlanCacheUnnormalized(t *testing.T) { t.Run("Skip Cache", func(t *testing.T) { r, _, _, _, ctx := createExecutorEnv(t) - unshardedvc, _ := econtext.NewVCursorImpl(econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "@unknown"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, r.vConfig) + unshardedvc, _ := r.newVCursor(econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "@unknown"}), makeComments(""), nil) // Skip cache using directive query1 := "insert /*vt+ SKIP_QUERY_PLAN_CACHE=1 */ into user(id) values (1), (2)" @@ -1715,12 +1716,12 @@ func TestGetPlanCacheUnnormalized(t *testing.T) { assertCacheSize(t, r.plans, 1) // the target string will be resolved and become part of the plan cache key, which adds a new entry - ksIDVc1, _ := econtext.NewVCursorImpl(econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "[deadbeef]"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, r.vConfig) + ksIDVc1, _ := r.newVCursor(econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "[deadbeef]"}), makeComments(""), nil) getPlanCached(t, ctx, r, ksIDVc1.SafeSession, query1, makeComments(" /* comment */"), map[string]*querypb.BindVariable{}, false) assertCacheSize(t, r.plans, 2) // the target string will be resolved and become part of the plan cache key, as it's an unsharded ks, it will be the same entry as above - ksIDVc2, _ := econtext.NewVCursorImpl(econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "[beefdead]"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, r.vConfig) + ksIDVc2, _ := r.newVCursor(econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "[beefdead]"}), makeComments(""), nil) getPlanCached(t, ctx, r, ksIDVc2.SafeSession, query1, makeComments(" /* comment */"), map[string]*querypb.BindVariable{}, false) assertCacheSize(t, r.plans, 2) }) @@ -1729,7 +1730,7 @@ func TestGetPlanCacheUnnormalized(t *testing.T) { func TestGetPlanCacheNormalized(t *testing.T) { t.Run("Cache", func(t *testing.T) { r, _, _, _, ctx := createExecutorEnvWithConfig(t, createExecutorConfigWithNormalizer()) - emptyvc, _ := econtext.NewVCursorImpl(econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@unknown"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, r.vConfig) + emptyvc, _ := r.newVCursor(econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@unknown"}), makeComments(""), nil) query1 := "select * from music_user_map where id = 1" _, logStats1 := getPlanCached(t, ctx, r, emptyvc.SafeSession, query1, makeComments(" /* comment */"), map[string]*querypb.BindVariable{}, true /* skipQueryPlanCache */) @@ -1745,7 +1746,7 @@ func TestGetPlanCacheNormalized(t *testing.T) { t.Run("Skip Cache", func(t *testing.T) { // Skip cache using directive r, _, _, _, ctx := createExecutorEnvWithConfig(t, createExecutorConfigWithNormalizer()) - unshardedvc, _ := econtext.NewVCursorImpl(econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "@unknown"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, r.vConfig) + unshardedvc, _ := r.newVCursor(econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "@unknown"}), makeComments(""), nil) query1 := "insert /*vt+ SKIP_QUERY_PLAN_CACHE=1 */ into user(id) values (1), (2)" getPlanCached(t, ctx, r, unshardedvc.SafeSession, query1, makeComments(" /* comment */"), map[string]*querypb.BindVariable{}, false) @@ -1756,12 +1757,12 @@ func TestGetPlanCacheNormalized(t *testing.T) { assertCacheSize(t, r.plans, 1) // the target string will be resolved and become part of the plan cache key, which adds a new entry - ksIDVc1, _ := econtext.NewVCursorImpl(econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "[deadbeef]"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, r.vConfig) + ksIDVc1, _ := r.newVCursor(econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "[deadbeef]"}), makeComments(""), nil) getPlanCached(t, ctx, r, ksIDVc1.SafeSession, query1, makeComments(" /* comment */"), map[string]*querypb.BindVariable{}, false) assertCacheSize(t, r.plans, 2) // the target string will be resolved and become part of the plan cache key, as it's an unsharded ks, it will be the same entry as above - ksIDVc2, _ := econtext.NewVCursorImpl(econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "[beefdead]"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, r.vConfig) + ksIDVc2, _ := r.newVCursor(econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "[beefdead]"}), makeComments(""), nil) getPlanCached(t, ctx, r, ksIDVc2.SafeSession, query1, makeComments(" /* comment */"), map[string]*querypb.BindVariable{}, false) assertCacheSize(t, r.plans, 2) }) @@ -1770,8 +1771,8 @@ func TestGetPlanCacheNormalized(t *testing.T) { func TestGetPlanNormalized(t *testing.T) { r, _, _, _, ctx := createExecutorEnvWithConfig(t, createExecutorConfigWithNormalizer()) - emptyvc, _ := econtext.NewVCursorImpl(econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@unknown"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, r.vConfig) - unshardedvc, _ := econtext.NewVCursorImpl(econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "@unknown"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, r.vConfig) + emptyvc, _ := r.newVCursor(econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@unknown"}), makeComments(""), nil) + unshardedvc, _ := r.newVCursor(econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "@unknown"}), makeComments(""), nil) query1 := "select * from music_user_map where id = 1" // 163 -- 80 query2 := "select * from music_user_map where id = 2" @@ -2339,7 +2340,7 @@ func TestExecutorVExplain(t *testing.T) { require.NoError(t, err) require.Equal(t, - `[[VARCHAR("{\n\t\"OperatorType\": \"Route\",\n\t\"Variant\": \"Scatter\",\n\t\"Keyspace\": {\n\t\t\"Name\": \"TestExecutor\",\n\t\t\"Sharded\": true\n\t},\n\t\"FieldQuery\": \"select * from `+"`user`"+` where 1 != 1\",\n\t\"Query\": \"select * from `+"`user`"+`\",\n\t\"Table\": \"`+"`user`"+`\"\n}")]]`, + `[[VARCHAR("{\n\t\"OperatorType\": \"Route\",\n\t\"Variant\": \"Scatter\",\n\t\"Keyspace\": {\n\t\t\"Name\": \"TestExecutor\",\n\t\t\"Sharded\": true\n\t},\n\t\"FieldQuery\": \"select * from `+"`user`"+` where 1 != 1\",\n\t\"Query\": \"select * from `+"`user`"+`\"\n}")]]`, fmt.Sprintf("%v", result.Rows)) result, err = executorExec(ctx, executor, session, "vexplain plan select 42", bindVars) diff --git a/go/vt/vtgate/executor_vexplain_test.go b/go/vt/vtgate/executor_vexplain_test.go index 0e929a76291..0f26b7da035 100644 --- a/go/vt/vtgate/executor_vexplain_test.go +++ b/go/vt/vtgate/executor_vexplain_test.go @@ -109,8 +109,7 @@ func TestSimpleVexplainTrace(t *testing.T) { "ShardsQueried": 8, "FieldQuery": "select count(*), col2, weight_string(col2) from music where 1 != 1 group by col2, weight_string(col2)", "OrderBy": "(1|2) ASC", - "Query": "select count(*), col2, weight_string(col2) from music group by col2, weight_string(col2) order by col2 asc", - "Table": "music" + "Query": "select count(*), col2, weight_string(col2) from music group by col2, weight_string(col2) order by col2 asc" } ] }` diff --git a/go/vt/vtgate/executorcontext/vcursor_impl.go b/go/vt/vtgate/executorcontext/vcursor_impl.go index 0b3ab09b8cc..99b6036a05a 100644 --- a/go/vt/vtgate/executorcontext/vcursor_impl.go +++ b/go/vt/vtgate/executorcontext/vcursor_impl.go @@ -28,8 +28,6 @@ import ( "github.com/google/uuid" "golang.org/x/exp/maps" - "vitess.io/vitess/go/vt/sysvars" - "vitess.io/vitess/go/mysql/collations" "vitess.io/vitess/go/mysql/config" "vitess.io/vitess/go/mysql/sqlerror" @@ -47,6 +45,7 @@ import ( vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/srvtopo" + "vitess.io/vitess/go/vt/sysvars" "vitess.io/vitess/go/vt/topo" topoprotopb "vitess.io/vitess/go/vt/topo/topoproto" "vitess.io/vitess/go/vt/topotools" @@ -145,6 +144,10 @@ type ( ) ([]*srvtopo.ResolvedShard, [][][]sqltypes.Value, error) } + Metrics interface { + GetExecutionMetrics() *engine.Metrics + } + // VCursorImpl implements the VCursor functionality used by dependent // packages to call back into VTGate. VCursorImpl struct { @@ -158,6 +161,7 @@ type ( resolver Resolver topoServer *topo.Server logStats *logstats.LogStats + metrics Metrics // fkChecksState stores the state of foreign key checks variable. // This state is meant to be the final fk checks state after consulting the @@ -201,6 +205,7 @@ func NewVCursorImpl( serv srvtopo.Server, observer ResultsObserver, cfg VCursorConfig, + metrics Metrics, ) (*VCursorImpl, error) { keyspace, tabletType, destination, err := ParseDestinationTarget(safeSession.TargetString, cfg.DefaultTabletType, vschema) if err != nil { @@ -226,12 +231,13 @@ func NewVCursorImpl( marginComments: marginComments, executor: executor, logStats: logStats, - resolver: resolver, - vschema: vschema, - vm: vm, - topoServer: ts, + metrics: metrics, - observer: observer, + resolver: resolver, + vschema: vschema, + vm: vm, + topoServer: ts, + observer: observer, }, nil } @@ -262,16 +268,18 @@ func (vc *VCursorImpl) CloneForMirroring(ctx context.Context) engine.VCursor { clonedCtx := callerid.NewContext(ctx, callerId, immediateCallerId) v := &VCursorImpl{ - config: vc.config, - SafeSession: NewAutocommitSession(vc.SafeSession.Session), - keyspace: vc.keyspace, - tabletType: vc.tabletType, - destination: vc.destination, - marginComments: vc.marginComments, - executor: vc.executor, - resolver: vc.resolver, - topoServer: vc.topoServer, - logStats: &logstats.LogStats{Ctx: clonedCtx}, + config: vc.config, + SafeSession: NewAutocommitSession(vc.SafeSession.Session), + keyspace: vc.keyspace, + tabletType: vc.tabletType, + destination: vc.destination, + marginComments: vc.marginComments, + executor: vc.executor, + resolver: vc.resolver, + topoServer: vc.topoServer, + logStats: &logstats.LogStats{Ctx: clonedCtx}, + metrics: vc.metrics, + ignoreMaxMemoryRows: vc.ignoreMaxMemoryRows, vschema: vc.vschema, vm: vc.vm, @@ -303,6 +311,7 @@ func (vc *VCursorImpl) CloneForReplicaWarming(ctx context.Context) engine.VCurso resolver: vc.resolver, topoServer: vc.topoServer, logStats: &logstats.LogStats{Ctx: clonedCtx}, + metrics: vc.metrics, ignoreMaxMemoryRows: vc.ignoreMaxMemoryRows, vschema: vc.vschema, @@ -328,14 +337,21 @@ func (vc *VCursorImpl) cloneWithAutocommitSession() *VCursorImpl { marginComments: vc.marginComments, executor: vc.executor, logStats: vc.logStats, - resolver: vc.resolver, - vschema: vc.vschema, - vm: vc.vm, - topoServer: vc.topoServer, - observer: vc.observer, + metrics: vc.metrics, + + resolver: vc.resolver, + vschema: vc.vschema, + vm: vc.vm, + topoServer: vc.topoServer, + observer: vc.observer, } } +// GetExecutionMetrics provides the execution metrics object. +func (vc *VCursorImpl) GetExecutionMetrics() *engine.Metrics { + return vc.metrics.GetExecutionMetrics() +} + // HasSystemVariables returns whether the session has set system variables or not func (vc *VCursorImpl) HasSystemVariables() bool { return vc.SafeSession.HasSystemVariables() diff --git a/go/vt/vtgate/executorcontext/vcursor_impl_test.go b/go/vt/vtgate/executorcontext/vcursor_impl_test.go index 57069afdb45..ed7654a58d4 100644 --- a/go/vt/vtgate/executorcontext/vcursor_impl_test.go +++ b/go/vt/vtgate/executorcontext/vcursor_impl_test.go @@ -174,7 +174,7 @@ func TestDestinationKeyspace(t *testing.T) { &fakeVSchemaOperator{vschema: tc.vschema}, tc.vschema, nil, nil, fakeObserver{}, VCursorConfig{ DefaultTabletType: topodatapb.TabletType_PRIMARY, - }) + }, nil) impl.vschema = tc.vschema dest, keyspace, tabletType, err := impl.TargetDestination(tc.qualifier) if tc.expectedError == "" { @@ -232,7 +232,7 @@ func TestSetTarget(t *testing.T) { for i, tc := range tests { t.Run(fmt.Sprintf("%d#%s", i, tc.targetString), func(t *testing.T) { cfg := VCursorConfig{DefaultTabletType: topodatapb.TabletType_PRIMARY} - vc, _ := NewVCursorImpl(NewSafeSession(&vtgatepb.Session{InTransaction: true}), sqlparser.MarginComments{}, nil, nil, &fakeVSchemaOperator{vschema: tc.vschema}, tc.vschema, nil, nil, fakeObserver{}, cfg) + vc, _ := NewVCursorImpl(NewSafeSession(&vtgatepb.Session{InTransaction: true}), sqlparser.MarginComments{}, nil, nil, &fakeVSchemaOperator{vschema: tc.vschema}, tc.vschema, nil, nil, fakeObserver{}, cfg, nil) vc.vschema = tc.vschema err := vc.SetTarget(tc.targetString) if tc.expectedError == "" { @@ -257,7 +257,7 @@ func TestFirstSortedKeyspace(t *testing.T) { }, } - vc, err := NewVCursorImpl(NewSafeSession(nil), sqlparser.MarginComments{}, nil, nil, &fakeVSchemaOperator{vschema: vschemaWith2KS}, vschemaWith2KS, srvtopo.NewResolver(&FakeTopoServer{}, nil, ""), nil, fakeObserver{}, VCursorConfig{}) + vc, err := NewVCursorImpl(NewSafeSession(nil), sqlparser.MarginComments{}, nil, nil, &fakeVSchemaOperator{vschema: vschemaWith2KS}, vschemaWith2KS, srvtopo.NewResolver(&FakeTopoServer{}, nil, ""), nil, fakeObserver{}, VCursorConfig{}, nil) require.NoError(t, err) ks, err := vc.FirstSortedKeyspace() require.NoError(t, err) @@ -271,7 +271,7 @@ func TestSetExecQueryTimeout(t *testing.T) { vc, err := NewVCursorImpl(safeSession, sqlparser.MarginComments{}, nil, nil, nil, &vindexes.VSchema{}, nil, nil, fakeObserver{}, VCursorConfig{ // flag timeout QueryTimeout: 20, - }) + }, nil) require.NoError(t, err) vc.SetExecQueryTimeout(nil) @@ -312,7 +312,7 @@ func TestSetExecQueryTimeout(t *testing.T) { func TestRecordMirrorStats(t *testing.T) { safeSession := NewSafeSession(nil) logStats := logstats.NewLogStats(context.Background(), t.Name(), "select 1", "", nil, streamlog.NewQueryLogConfigForTest()) - vc, err := NewVCursorImpl(safeSession, sqlparser.MarginComments{}, nil, logStats, nil, &vindexes.VSchema{}, nil, nil, fakeObserver{}, VCursorConfig{}) + vc, err := NewVCursorImpl(safeSession, sqlparser.MarginComments{}, nil, logStats, nil, &vindexes.VSchema{}, nil, nil, fakeObserver{}, VCursorConfig{}, nil) require.NoError(t, err) require.Zero(t, logStats.MirrorSourceExecuteTime) diff --git a/go/vt/vtgate/fakerpcvtgateconn/conn.go b/go/vt/vtgate/fakerpcvtgateconn/conn.go index 894ac5e2193..259b68e06ba 100644 --- a/go/vt/vtgate/fakerpcvtgateconn/conn.go +++ b/go/vt/vtgate/fakerpcvtgateconn/conn.go @@ -115,6 +115,16 @@ func (conn *FakeVTGateConn) ExecuteBatch(ctx context.Context, session *vtgatepb. panic("not implemented") } +// ExecuteMulti please see vtgateconn.Impl.ExecuteBatch +func (conn *FakeVTGateConn) ExecuteMulti(ctx context.Context, session *vtgatepb.Session, sqlString string) (*vtgatepb.Session, []*sqltypes.Result, error) { + panic("not implemented") +} + +// StreamExecuteMulti please see vtgateconn.Impl.ExecuteBatch. +func (conn *FakeVTGateConn) StreamExecuteMulti(ctx context.Context, session *vtgatepb.Session, sqlString string, processResponse func(response *vtgatepb.StreamExecuteMultiResponse)) (sqltypes.MultiResultStream, error) { + panic("not implemented") +} + // StreamExecute please see vtgateconn.Impl.StreamExecute func (conn *FakeVTGateConn) StreamExecute(ctx context.Context, session *vtgatepb.Session, sql string, bindVars map[string]*querypb.BindVariable, _ func(response *vtgatepb.StreamExecuteResponse)) (sqltypes.ResultStream, error) { response, ok := conn.execMap[sql] diff --git a/go/vt/vtgate/grpcvtgateconn/conn.go b/go/vt/vtgate/grpcvtgateconn/conn.go index f37f61fd9cc..794f1b34a0b 100644 --- a/go/vt/vtgate/grpcvtgateconn/conn.go +++ b/go/vt/vtgate/grpcvtgateconn/conn.go @@ -27,6 +27,7 @@ import ( "vitess.io/vitess/go/vt/callerid" "vitess.io/vitess/go/vt/grpcclient" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vterrors" "vitess.io/vitess/go/vt/vtgate/vtgateconn" @@ -60,11 +61,11 @@ func init() { } func registerFlags(fs *pflag.FlagSet) { - fs.StringVar(&cert, "vtgate_grpc_cert", "", "the cert to use to connect") - fs.StringVar(&key, "vtgate_grpc_key", "", "the key to use to connect") - fs.StringVar(&ca, "vtgate_grpc_ca", "", "the server ca to use to validate servers when connecting") - fs.StringVar(&crl, "vtgate_grpc_crl", "", "the server crl to use to validate server certificates when connecting") - fs.StringVar(&name, "vtgate_grpc_server_name", "", "the server name to use to validate server certificate") + utils.SetFlagStringVar(fs, &cert, "vtgate-grpc-cert", "", "the cert to use to connect") + utils.SetFlagStringVar(fs, &key, "vtgate-grpc-key", "", "the key to use to connect") + utils.SetFlagStringVar(fs, &ca, "vtgate-grpc-ca", "", "the server ca to use to validate servers when connecting") + utils.SetFlagStringVar(fs, &crl, "vtgate-grpc-crl", "", "the server crl to use to validate server certificates when connecting") + utils.SetFlagStringVar(fs, &name, "vtgate-grpc-server-name", "", "the server name to use to validate server certificate") } type vtgateConn struct { @@ -207,6 +208,69 @@ func (conn *vtgateConn) StreamExecute(ctx context.Context, session *vtgatepb.Ses }, nil } +// ExecuteMulti executes multiple non-streaming queries. +func (conn *vtgateConn) ExecuteMulti(ctx context.Context, session *vtgatepb.Session, sqlString string) (newSession *vtgatepb.Session, qrs []*sqltypes.Result, err error) { + request := &vtgatepb.ExecuteMultiRequest{ + CallerId: callerid.EffectiveCallerIDFromContext(ctx), + Session: session, + Sql: sqlString, + } + response, err := conn.c.ExecuteMulti(ctx, request) + if err != nil { + return session, nil, vterrors.FromGRPC(err) + } + return response.Session, sqltypes.Proto3ToResults(response.Results), vterrors.FromVTRPC(response.Error) +} + +type streamExecuteMultiAdapter struct { + recv func() (*querypb.QueryResult, bool, error) + fields []*querypb.Field +} + +func (a *streamExecuteMultiAdapter) Recv() (*sqltypes.Result, bool, error) { + var qr *querypb.QueryResult + var err error + var newResult bool + for { + qr, newResult, err = a.recv() + if qr != nil || err != nil { + break + } + // we reach here, only when it is the last packet. + // as in the last packet we receive the session and there is no result + } + if err != nil { + return nil, newResult, err + } + if qr != nil && qr.Fields != nil { + a.fields = qr.Fields + } + return sqltypes.CustomProto3ToResult(a.fields, qr), newResult, nil +} + +// StreamExecuteMulti executes multiple streaming queries. +func (conn *vtgateConn) StreamExecuteMulti(ctx context.Context, session *vtgatepb.Session, sqlString string, processResponse func(response *vtgatepb.StreamExecuteMultiResponse)) (sqltypes.MultiResultStream, error) { + req := &vtgatepb.StreamExecuteMultiRequest{ + CallerId: callerid.EffectiveCallerIDFromContext(ctx), + Sql: sqlString, + Session: session, + } + stream, err := conn.c.StreamExecuteMulti(ctx, req) + if err != nil { + return nil, vterrors.FromGRPC(err) + } + return &streamExecuteMultiAdapter{ + recv: func() (*querypb.QueryResult, bool, error) { + ser, err := stream.Recv() + if err != nil { + return nil, false, vterrors.FromGRPC(err) + } + processResponse(ser) + return ser.Result.GetResult(), ser.NewResult, vterrors.FromVTRPC(ser.Result.GetError()) + }, + }, nil +} + func (conn *vtgateConn) Prepare(ctx context.Context, session *vtgatepb.Session, query string) (*vtgatepb.Session, []*querypb.Field, uint16, error) { request := &vtgatepb.PrepareRequest{ CallerId: callerid.EffectiveCallerIDFromContext(ctx), diff --git a/go/vt/vtgate/grpcvtgateconn/conn_rpc_test.go b/go/vt/vtgate/grpcvtgateconn/conn_rpc_test.go index 4cd52d0f5a0..ab440edfd65 100644 --- a/go/vt/vtgate/grpcvtgateconn/conn_rpc_test.go +++ b/go/vt/vtgate/grpcvtgateconn/conn_rpc_test.go @@ -29,6 +29,7 @@ import ( "vitess.io/vitess/go/vt/grpcclient" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtgate/grpcvtgateservice" "vitess.io/vitess/go/vt/vtgate/vtgateconn" ) @@ -101,11 +102,15 @@ func TestGRPCVTGateConnAuth(t *testing.T) { grpcclient.RegisterFlags(fs) grpcclient.ResetStaticAuth() + authStaticClientCredsFlag := utils.GetFlagVariantForTests("--grpc-auth-static-client-creds") + + // Parse the flag using the chosen variant err = fs.Parse([]string{ - "--grpc_auth_static_client_creds", + authStaticClientCredsFlag, f.Name(), }) - require.NoError(t, err, "failed to set `--grpc_auth_static_client_creds=%s`", f.Name()) + + require.NoError(t, err, "failed to set `%s=%s`", authStaticClientCredsFlag, f.Name()) client, err := dial(ctx, listener.Addr().String()) require.NoError(t, err) RegisterTestDialProtocol(client) @@ -135,11 +140,14 @@ func TestGRPCVTGateConnAuth(t *testing.T) { grpcclient.RegisterFlags(fs) grpcclient.ResetStaticAuth() + authStaticClientCredsFlag = utils.GetFlagVariantForTests("--grpc-auth-static-client-creds") err = fs.Parse([]string{ - "--grpc_auth_static_client_creds", + authStaticClientCredsFlag, f.Name(), }) - require.NoError(t, err, "failed to set `--grpc_auth_static_client_creds=%s`", f.Name()) + + require.NoError(t, err, "failed to set `%s=%s`", authStaticClientCredsFlag, f.Name()) + client, err = dial(ctx, listener.Addr().String()) if err != nil { t.Fatalf("dial failed: %v", err) diff --git a/go/vt/vtgate/grpcvtgateconn/fuzz_flaky_test.go b/go/vt/vtgate/grpcvtgateconn/fuzz_flaky_test.go index fd3202d12ae..202bf82fb4f 100644 --- a/go/vt/vtgate/grpcvtgateconn/fuzz_flaky_test.go +++ b/go/vt/vtgate/grpcvtgateconn/fuzz_flaky_test.go @@ -96,10 +96,10 @@ func Fuzz(data []byte) int { grpcclient.RegisterFlags(fs) err = fs.Parse([]string{ - "--grpc_auth_static_client_creds", + "--grpc-auth-static-client-creds", f.Name(), }) - require.NoError(t, err, "failed to set `--grpc_auth_static_client_creds=%s`", f.Name()) + require.NoError(t, err, "failed to set `--grpc-auth-static-client-creds=%s`", f.Name()) client, err := dial(ctx, listener.Addr().String()) if err != nil { fmt.Println("dial failed") diff --git a/go/vt/vtgate/grpcvtgateconn/suite_test.go b/go/vt/vtgate/grpcvtgateconn/suite_test.go index 4ae478a78c0..064d11021cc 100644 --- a/go/vt/vtgate/grpcvtgateconn/suite_test.go +++ b/go/vt/vtgate/grpcvtgateconn/suite_test.go @@ -39,6 +39,7 @@ import ( topodatapb "vitess.io/vitess/go/vt/proto/topodata" vtgatepb "vitess.io/vitess/go/vt/proto/vtgate" vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" + "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/vterrors" "vitess.io/vitess/go/vt/vtgate/vtgateconn" "vitess.io/vitess/go/vt/vtgate/vtgateservice" @@ -106,6 +107,7 @@ func (f *fakeVTGateService) Execute( panic(fmt.Errorf("test forced panic")) } f.checkCallerID(ctx, "Execute") + sql = strings.TrimSpace(sql) execCase, ok := execMap[sql] if !ok { return session, nil, fmt.Errorf("no match for: %s", sql) @@ -163,6 +165,7 @@ func (f *fakeVTGateService) StreamExecute(ctx context.Context, mysqlCtx vtgatese if f.panics { panic(fmt.Errorf("test forced panic")) } + sql = strings.TrimSpace(sql) execCase, ok := execMap[sql] if !ok { return session, fmt.Errorf("no match for: %s", sql) @@ -200,9 +203,49 @@ func (f *fakeVTGateService) StreamExecute(ctx context.Context, mysqlCtx vtgatese } } } + if execCase.outSession == nil { + return session, nil + } return execCase.outSession, nil } +// ExecuteMulti is part of the VTGateService interface +func (f *fakeVTGateService) ExecuteMulti(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sqlString string) (newSession *vtgatepb.Session, qrs []*sqltypes.Result, err error) { + queries, err := sqlparser.NewTestParser().SplitStatementToPieces(sqlString) + if err != nil { + return session, nil, err + } + var result *sqltypes.Result + for _, query := range queries { + session, result, err = f.Execute(ctx, mysqlCtx, session, query, nil, false) + if err != nil { + return session, qrs, err + } + qrs = append(qrs, result) + } + return session, qrs, nil +} + +// StreamExecuteMulti is part of the VTGateService interface +func (f *fakeVTGateService) StreamExecuteMulti(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sqlString string, callback func(qr sqltypes.QueryResponse, more bool, firstPacket bool) error) (*vtgatepb.Session, error) { + queries, err := sqlparser.NewTestParser().SplitStatementToPieces(sqlString) + if err != nil { + return session, err + } + for idx, query := range queries { + firstPacket := true + session, err = f.StreamExecute(ctx, mysqlCtx, session, query, nil, func(result *sqltypes.Result) error { + err = callback(sqltypes.QueryResponse{QueryResult: result}, idx < len(queries)-1, firstPacket) + firstPacket = false + return err + }) + if err != nil { + return session, err + } + } + return session, nil +} + // Prepare is part of the VTGateService interface func (f *fakeVTGateService) Prepare(ctx context.Context, session *vtgatepb.Session, sql string) (*vtgatepb.Session, []*querypb.Field, uint16, error) { if f.hasError { @@ -279,15 +322,19 @@ func RunTests(t *testing.T, impl vtgateconn.Impl, fakeServer vtgateservice.VTGat fs := fakeServer.(*fakeVTGateService) testExecute(t, session) + testExecuteMulti(t, session) testStreamExecute(t, session) + testStreamExecuteMulti(t, session) testExecuteBatch(t, session) testPrepare(t, session) // force a panic at every call, then test that works fs.panics = true testExecutePanic(t, session) + testExecuteMultiPanic(t, session) testExecuteBatchPanic(t, session) testStreamExecutePanic(t, session) + testStreamExecuteMultiPanic(t, session) testPreparePanic(t, session) fs.panics = false } @@ -360,6 +407,27 @@ func testExecute(t *testing.T, session *vtgateconn.VTGateSession) { } } +func testExecuteMulti(t *testing.T, session *vtgateconn.VTGateSession) { + ctx := newContext() + execCase := execMap["request1"] + multiQuery := fmt.Sprintf("%s; %s", execCase.execQuery.SQL, execCase.execQuery.SQL) + qrs, err := session.ExecuteMulti(ctx, multiQuery) + require.NoError(t, err) + require.Len(t, qrs, 2) + require.True(t, qrs[0].Equal(execCase.result)) + require.True(t, qrs[1].Equal(execCase.result)) + + qrs, err = session.ExecuteMulti(ctx, "none; request1") + require.ErrorContains(t, err, "no match for: none") + require.Nil(t, qrs) + + // Check that we get a single result if we have an error in the second query + qrs, err = session.ExecuteMulti(ctx, "request1; none") + require.ErrorContains(t, err, "no match for: none") + require.Len(t, qrs, 1) + require.True(t, qrs[0].Equal(execCase.result)) +} + func testExecuteError(t *testing.T, session *vtgateconn.VTGateSession, fake *fakeVTGateService) { ctx := newContext() execCase := execMap["errorRequst"] @@ -375,6 +443,14 @@ func testExecutePanic(t *testing.T, session *vtgateconn.VTGateSession) { expectPanic(t, err) } +func testExecuteMultiPanic(t *testing.T, session *vtgateconn.VTGateSession) { + ctx := newContext() + execCase := execMap["request1"] + multiQuery := fmt.Sprintf("%s; %s", execCase.execQuery.SQL, execCase.execQuery.SQL) + _, err := session.ExecuteMulti(ctx, multiQuery) + expectPanic(t, err) +} + func testExecuteBatch(t *testing.T, session *vtgateconn.VTGateSession) { ctx := newContext() execCase := execMap["request1"] @@ -448,6 +524,73 @@ func testStreamExecute(t *testing.T, session *vtgateconn.VTGateSession) { } } +func testStreamExecuteMulti(t *testing.T, session *vtgateconn.VTGateSession) { + ctx := newContext() + execCase := execMap["request1"] + multiQuery := fmt.Sprintf("%s; %s", execCase.execQuery.SQL, execCase.execQuery.SQL) + stream, err := session.StreamExecuteMulti(ctx, multiQuery) + require.NoError(t, err) + var qr *sqltypes.Result + var qrs []*sqltypes.Result + for { + packet, newRes, err := stream.Recv() + if err != nil { + if err != io.EOF { + t.Error(err) + } + break + } + if newRes { + if qr != nil { + qrs = append(qrs, qr) + } + qr = &sqltypes.Result{} + } + if len(packet.Fields) != 0 { + qr.Fields = packet.Fields + } + if len(packet.Rows) != 0 { + qr.Rows = append(qr.Rows, packet.Rows...) + } + } + if qr != nil { + qrs = append(qrs, qr) + } + wantResult := execCase.result.Copy() + wantResult.RowsAffected = 0 + wantResult.InsertID = 0 + wantResult.InsertIDChanged = false + require.NoError(t, err) + require.Len(t, qrs, 2) + require.True(t, qrs[0].Equal(wantResult)) + require.True(t, qrs[1].Equal(wantResult)) + + stream, err = session.StreamExecuteMulti(ctx, "none; request1") + require.NoError(t, err) + qr, _, err = stream.Recv() + require.ErrorContains(t, err, "no match for: none") + require.Nil(t, qr) + + stream, err = session.StreamExecuteMulti(ctx, "request1; none") + require.NoError(t, err) + var packet *sqltypes.Result + qr = &sqltypes.Result{} + for { + packet, _, err = stream.Recv() + if err != nil { + break + } + if len(packet.Fields) != 0 { + qr.Fields = packet.Fields + } + if len(packet.Rows) != 0 { + qr.Rows = append(qr.Rows, packet.Rows...) + } + } + require.ErrorContains(t, err, "no match for: none") + require.True(t, qr.Equal(wantResult)) +} + func testStreamExecuteError(t *testing.T, session *vtgateconn.VTGateSession, fake *fakeVTGateService) { ctx := newContext() execCase := execMap["request1"] @@ -487,6 +630,17 @@ func testStreamExecutePanic(t *testing.T, session *vtgateconn.VTGateSession) { expectPanic(t, err) } +func testStreamExecuteMultiPanic(t *testing.T, session *vtgateconn.VTGateSession) { + ctx := newContext() + execCase := execMap["request1"] + multiQuery := fmt.Sprintf("%s; %s", execCase.execQuery.SQL, execCase.execQuery.SQL) + stream, err := session.StreamExecuteMulti(ctx, multiQuery) + require.NoError(t, err) + _, _, err = stream.Recv() + require.Error(t, err) + expectPanic(t, err) +} + func testPrepare(t *testing.T, session *vtgateconn.VTGateSession) { ctx := newContext() execCase := execMap["request1"] diff --git a/go/vt/vtgate/grpcvtgateservice/server.go b/go/vt/vtgate/grpcvtgateservice/server.go index 46c0bc8f242..b17d92acabe 100644 --- a/go/vt/vtgate/grpcvtgateservice/server.go +++ b/go/vt/vtgate/grpcvtgateservice/server.go @@ -28,6 +28,7 @@ import ( "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/vt/callerid" "vitess.io/vitess/go/vt/callinfo" + "vitess.io/vitess/go/vt/log" binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" querypb "vitess.io/vitess/go/vt/proto/query" topodatapb "vitess.io/vitess/go/vt/proto/topodata" @@ -35,6 +36,7 @@ import ( vtgateservicepb "vitess.io/vitess/go/vt/proto/vtgateservice" vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vterrors" "vitess.io/vitess/go/vt/vtgate" "vitess.io/vitess/go/vt/vtgate/vtgateservice" @@ -53,10 +55,10 @@ var ( ) func registerFlags(fs *pflag.FlagSet) { - fs.BoolVar(&useEffective, "grpc_use_effective_callerid", false, "If set, and SSL is not used, will set the immediate caller id from the effective caller id's principal.") - fs.BoolVar(&useEffectiveGroups, "grpc-use-effective-groups", false, "If set, and SSL is not used, will set the immediate caller's security groups from the effective caller id's groups.") - fs.BoolVar(&useStaticAuthenticationIdentity, "grpc-use-static-authentication-callerid", false, "If set, will set the immediate caller id to the username authenticated by the static auth plugin.") - fs.BoolVar(&sendSessionInStreaming, "grpc-send-session-in-streaming", true, "If set, will send the session as last packet in streaming api to support transactions in streaming") + utils.SetFlagBoolVar(fs, &useEffective, "grpc-use-effective-callerid", false, "If set, and SSL is not used, will set the immediate caller id from the effective caller id's principal.") + utils.SetFlagBoolVar(fs, &useEffectiveGroups, "grpc-use-effective-groups", false, "If set, and SSL is not used, will set the immediate caller's security groups from the effective caller id's groups.") + utils.SetFlagBoolVar(fs, &useStaticAuthenticationIdentity, "grpc-use-static-authentication-callerid", false, "If set, will set the immediate caller id to the username authenticated by the static auth plugin.") + utils.SetFlagBoolVar(fs, &sendSessionInStreaming, "grpc-send-session-in-streaming", true, "If set, will send the session as last packet in streaming api to support transactions in streaming") _ = fs.MarkDeprecated("grpc-send-session-in-streaming", "This option is deprecated and will be deleted in a future release") } @@ -115,7 +117,7 @@ func withCallerIDContext(ctx context.Context, effectiveCallerID *vtrpcpb.CallerI // The client cert common name (if using mTLS) immediate, securityGroups := immediateCallerIDFromCert(ctx) - // The effective caller id (if --grpc_use_effective_callerid=true) + // The effective caller id (if --grpc-use-effective-callerid=true) if immediate == "" && useEffective && effectiveCallerID != nil { immediate = effectiveCallerID.Principal if useEffectiveGroups && len(effectiveCallerID.Groups) > 0 { @@ -154,6 +156,62 @@ func (vtg *VTGate) Execute(ctx context.Context, request *vtgatepb.ExecuteRequest }, nil } +// ExecuteMulti is the RPC version of vtgateservice.VTGateService method +func (vtg *VTGate) ExecuteMulti(ctx context.Context, request *vtgatepb.ExecuteMultiRequest) (response *vtgatepb.ExecuteMultiResponse, err error) { + defer vtg.server.HandlePanic(&err) + ctx = withCallerIDContext(ctx, request.CallerId) + + // Handle backward compatibility. + session := request.Session + if session == nil { + session = &vtgatepb.Session{Autocommit: true} + } + newSession, qrs, err := vtg.server.ExecuteMulti(ctx, nil, session, request.Sql) + return &vtgatepb.ExecuteMultiResponse{ + Results: sqltypes.ResultsToProto3(qrs), + Session: newSession, + Error: vterrors.ToVTRPC(err), + }, nil +} + +func (vtg *VTGate) StreamExecuteMulti(request *vtgatepb.StreamExecuteMultiRequest, stream vtgateservicepb.Vitess_StreamExecuteMultiServer) (err error) { + defer vtg.server.HandlePanic(&err) + ctx := withCallerIDContext(stream.Context(), request.CallerId) + + session := request.Session + if session == nil { + session = &vtgatepb.Session{Autocommit: true} + } + + session, vtgErr := vtg.server.StreamExecuteMulti(ctx, nil, session, request.Sql, func(qr sqltypes.QueryResponse, more bool, firstPacket bool) error { + // Send is not safe to call concurrently, but vtgate + // guarantees that it's not. + return stream.Send(&vtgatepb.StreamExecuteMultiResponse{ + Result: sqltypes.QueryResponseToProto3(qr), + MoreResults: more, + NewResult: firstPacket, + }) + }) + + var errs []error + if vtgErr != nil { + errs = append(errs, vtgErr) + } + + if sendSessionInStreaming { + // even if there is an error, session could have been modified. + // So, this needs to be sent back to the client. Session is sent in the last stream response. + lastErr := stream.Send(&vtgatepb.StreamExecuteMultiResponse{ + Session: session, + }) + if lastErr != nil { + errs = append(errs, lastErr) + } + } + + return vterrors.ToGRPC(vterrors.Aggregate(errs)) +} + // ExecuteBatch is the RPC version of vtgateservice.VTGateService method func (vtg *VTGate) ExecuteBatch(ctx context.Context, request *vtgatepb.ExecuteBatchRequest) (response *vtgatepb.ExecuteBatchResponse, err error) { defer vtg.server.HandlePanic(&err) @@ -270,6 +328,9 @@ func (vtg *VTGate) VStream(request *vtgatepb.VStreamRequest, stream vtgateservic Events: events, }) }) + if vtgErr != nil { + log.Infof("VStream grpc error: %v", vtgErr) + } return vterrors.ToGRPC(vtgErr) } diff --git a/go/vt/vtgate/plan_execute.go b/go/vt/vtgate/plan_execute.go index 6e0672d845b..df950e679b0 100644 --- a/go/vt/vtgate/plan_execute.go +++ b/go/vt/vtgate/plan_execute.go @@ -415,7 +415,6 @@ func (e *Executor) setLogStats(logStats *logstats.LogStats, plan *engine.Plan, v func (e *Executor) logExecutionEnd(logStats *logstats.LogStats, execStart time.Time, plan *engine.Plan, vcursor *econtext.VCursorImpl, err error, qr *sqltypes.Result) uint64 { logStats.ExecuteTime = time.Since(execStart) - e.updateQueryCounts(plan.Instructions.RouteType(), plan.Instructions.GetKeyspaceName(), plan.Instructions.GetTableName(), int64(logStats.ShardQueries)) e.updateQueryStats(plan.QueryType.String(), plan.Type.String(), vcursor.TabletType().String(), int64(logStats.ShardQueries), plan.TablesUsed) var errCount uint64 diff --git a/go/vt/vtgate/planbuilder/ddl.go b/go/vt/vtgate/planbuilder/ddl.go index 4804011f240..dd135154f9f 100644 --- a/go/vt/vtgate/planbuilder/ddl.go +++ b/go/vt/vtgate/planbuilder/ddl.go @@ -224,11 +224,11 @@ func buildCreateViewCommon( vschema plancontext.VSchema, reservedVars *sqlparser.ReservedVars, cfg dynamicconfig.DDL, - ddlSelect sqlparser.TableStatement, + sel sqlparser.TableStatement, ddl sqlparser.DDLStatement, ) (key.ShardDestination, *vindexes.Keyspace, error) { if vschema.IsViewsEnabled() { - return createViewEnabled(vschema, reservedVars, ddlSelect, ddl) + return createViewEnabled(vschema, reservedVars, sel, ddl) } // For Create View, we require that the keyspace exist and the select query can be satisfied within the keyspace itself @@ -238,22 +238,33 @@ func buildCreateViewCommon( return nil, nil, err } - // because we don't trust the schema tracker to have up-to-date info, we don't want to expand any SELECT * here + // views definition with `select *` should not be expanded as schema tracker might not be up-to-date + // We copy the expressions and restore them after the planning context is created var expressions []*sqlparser.SelectExprs - _ = sqlparser.VisitAllSelects(ddlSelect, func(p *sqlparser.Select, idx int) error { + _ = sqlparser.VisitAllSelects(sel, func(p *sqlparser.Select, idx int) error { expressions = append(expressions, sqlparser.Clone(p.SelectExprs)) return nil }) - selectPlan, err := createInstructionFor(ctx, sqlparser.String(ddlSelect), ddlSelect, reservedVars, vschema, cfg) + selectPlan, err := createInstructionFor(ctx, sqlparser.String(sel), sel, reservedVars, vschema, cfg) if err != nil { return nil, nil, err } - selPlanKs := selectPlan.primitive.GetKeyspaceName() - if keyspace.Name != selPlanKs { + + diffKs := false + engine.Visit(selectPlan.primitive, func(node engine.Primitive) { + if route, ok := node.(*engine.Route); ok { + if route.Keyspace.Name != keyspace.Name { + diffKs = true + } + } + }) + + if diffKs { return nil, nil, vterrors.VT12001(ViewDifferentKeyspace) } - _ = sqlparser.VisitAllSelects(ddlSelect, func(p *sqlparser.Select, idx int) error { + // We need to restore the original select expressions + _ = sqlparser.VisitAllSelects(sel, func(p *sqlparser.Select, idx int) error { p.SelectExprs = expressions[idx] return nil }) @@ -309,6 +320,7 @@ func createViewEnabled(vschema plancontext.VSchema, reservedVars *sqlparser.Rese return nil, nil, vterrors.VT12001(ViewDifferentKeyspace) } + // We need to restore the original select expressions _ = sqlparser.VisitAllSelects(ddlSelect, func(p *sqlparser.Select, idx int) error { p.SelectExprs = expressions[idx] return nil diff --git a/go/vt/vtgate/planbuilder/operator_transformers.go b/go/vt/vtgate/planbuilder/operator_transformers.go index fcd4f64fc2f..d13b31a9185 100644 --- a/go/vt/vtgate/planbuilder/operator_transformers.go +++ b/go/vt/vtgate/planbuilder/operator_transformers.go @@ -537,16 +537,10 @@ func transformApplyJoinPlan(ctx *plancontext.PlanningContext, n *operators.Apply } func routeToEngineRoute(ctx *plancontext.PlanningContext, op *operators.Route, hints *queryHints) (*engine.Route, error) { - tableNames, err := getAllTableNames(op) - if err != nil { - return nil, err - } - rp := newRoutingParams(ctx, op.Routing.OpCode()) op.Routing.UpdateRoutingParams(ctx, rp) e := &engine.Route{ - TableName: strings.Join(tableNames, ", "), RoutingParameters: rp, TruncateColumnCount: op.ResultColumns, FetchLastInsertID: ctx.SemTable.ShouldFetchLastInsertID(), diff --git a/go/vt/vtgate/planbuilder/operators/plan_query.go b/go/vt/vtgate/planbuilder/operators/plan_query.go index 9990a146253..b647304f338 100644 --- a/go/vt/vtgate/planbuilder/operators/plan_query.go +++ b/go/vt/vtgate/planbuilder/operators/plan_query.go @@ -82,14 +82,21 @@ func PlanQuery(ctx *plancontext.PlanningContext, stmt sqlparser.Statement) (resu // checkSingleRouteError checks if the query has a NotSingleRouteErr and more than one route, and returns an error if it does func checkSingleRouteError(ctx *plancontext.PlanningContext, op Operator) error { - if ctx.SemTable.NotSingleRouteErr == nil { + if ctx.SemTable.NotSingleRouteErr == nil && ctx.SemTable.NotSingleShardErr == nil { return nil } + err := ctx.SemTable.NotSingleRouteErr + if err == nil { + err = ctx.SemTable.NotSingleShardErr + } routes := 0 + var singleShard bool visitF := func(op Operator, _ semantics.TableSet, _ bool) (Operator, *ApplyResult) { - switch op.(type) { + switch op := op.(type) { case *Route: + routes++ + singleShard = op.IsSingleShard() } return op, NoRewrite } @@ -97,11 +104,14 @@ func checkSingleRouteError(ctx *plancontext.PlanningContext, op Operator) error // we'll walk the tree and count the number of routes TopDown(op, TableID, visitF, stopAtRoute) - if routes <= 1 { - return nil + if routes > 1 { + return err } - return ctx.SemTable.NotSingleRouteErr + if ctx.SemTable.NotSingleShardErr != nil && !singleShard { + return ctx.SemTable.NotSingleShardErr + } + return nil } func PanicHandler(err *error) { diff --git a/go/vt/vtgate/planbuilder/operators/route_planning.go b/go/vt/vtgate/planbuilder/operators/route_planning.go index 8a91ad4031e..b49c5b1003c 100644 --- a/go/vt/vtgate/planbuilder/operators/route_planning.go +++ b/go/vt/vtgate/planbuilder/operators/route_planning.go @@ -342,8 +342,8 @@ func canMergeOnFilter(ctx *plancontext.PlanningContext, a, b *Route, predicate s if comparison.Operator != sqlparser.EqualOp { return false } - left := comparison.Left - right := comparison.Right + left := getColName(comparison.Left) + right := getColName(comparison.Right) lVindex := findColumnVindex(ctx, a, left) if lVindex == nil { @@ -478,14 +478,26 @@ func gen4ValuesEqual(ctx *plancontext.PlanningContext, a, b []sqlparser.Expr) (b return false, nil } if c != nil { - conditions = append(conditions, *c) + conditions = append(conditions, c...) } } return true, conditions } -func gen4ValEqual(ctx *plancontext.PlanningContext, a, b sqlparser.Expr) (bool, *engine.Condition) { +func gen4ValEqual(ctx *plancontext.PlanningContext, a, b sqlparser.Expr) (bool, []engine.Condition) { switch a := a.(type) { + case sqlparser.ValTuple: + if b, ok := b.(sqlparser.ValTuple); ok { + return gen4ValuesEqual(ctx, a, b) + } + + return false, nil + + case sqlparser.ListArg: + if b, ok := b.(sqlparser.ListArg); ok { + return a == b, nil + } + case *sqlparser.ColName: if b, ok := b.(*sqlparser.ColName); ok { if !a.Name.Equal(b.Name) { @@ -518,7 +530,7 @@ func gen4ValEqual(ctx *plancontext.PlanningContext, a, b sqlparser.Expr) (bool, } return aVal.Type == bVal.Type && bytes.Equal(aVal.Value, bVal.Value), - &engine.Condition{A: a.Name, B: b.Name} + []engine.Condition{{A: a.Name, B: b.Name}} case *sqlparser.Literal: b, ok := b.(*sqlparser.Literal) diff --git a/go/vt/vtgate/planbuilder/operators/union_merging.go b/go/vt/vtgate/planbuilder/operators/union_merging.go index 9a2f6a86c9c..6fafdb4fe4d 100644 --- a/go/vt/vtgate/planbuilder/operators/union_merging.go +++ b/go/vt/vtgate/planbuilder/operators/union_merging.go @@ -146,8 +146,6 @@ func tryMergeUnionShardedRouting( scatterA := tblA.RouteOpCode == engine.Scatter scatterB := tblB.RouteOpCode == engine.Scatter - uniqueA := tblA.RouteOpCode == engine.EqualUnique - uniqueB := tblB.RouteOpCode == engine.EqualUnique switch { case scatterA: @@ -156,7 +154,11 @@ func tryMergeUnionShardedRouting( case scatterB: return createMergedUnion(ctx, routeA, routeB, exprsA, exprsB, distinct, tblB, nil) - case uniqueA && uniqueB: + case tblA.RouteOpCode == engine.EqualUnique && tblB.RouteOpCode == engine.EqualUnique: + fallthrough + case tblA.RouteOpCode == engine.Equal && tblB.RouteOpCode == engine.Equal: + fallthrough + case tblA.RouteOpCode == engine.IN && tblB.RouteOpCode == engine.IN: aVdx := tblA.SelectedVindex() bVdx := tblB.SelectedVindex() aExpr := tblA.VindexExpressions() diff --git a/go/vt/vtgate/planbuilder/single_sharded_shortcut.go b/go/vt/vtgate/planbuilder/single_sharded_shortcut.go index 5d877cd341d..9188ff13552 100644 --- a/go/vt/vtgate/planbuilder/single_sharded_shortcut.go +++ b/go/vt/vtgate/planbuilder/single_sharded_shortcut.go @@ -18,7 +18,6 @@ package planbuilder import ( "sort" - "strings" "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/vtgate/engine" @@ -51,7 +50,6 @@ func selectUnshardedShortcut(ctx *plancontext.PlanningContext, stmt sqlparser.Se Opcode: engine.Unsharded, Keyspace: ks, }, - TableName: strings.Join(escapedTableNames(tableNames), ", "), } prim, err := WireupRoute(ctx, eroute, stmt) if err != nil { @@ -60,14 +58,6 @@ func selectUnshardedShortcut(ctx *plancontext.PlanningContext, stmt sqlparser.Se return prim, operators.QualifiedTableNames(ks, tableNames), nil } -func escapedTableNames(tableNames []sqlparser.TableName) []string { - escaped := make([]string, len(tableNames)) - for i, tableName := range tableNames { - escaped[i] = sqlparser.String(tableName) - } - return escaped -} - func getTableNames(semTable *semantics.SemTable) ([]sqlparser.TableName, error) { tableNameMap := make(map[string]sqlparser.TableName) diff --git a/go/vt/vtgate/planbuilder/testdata/aggr_cases.json b/go/vt/vtgate/planbuilder/testdata/aggr_cases.json index a1b53981128..8986358baaa 100644 --- a/go/vt/vtgate/planbuilder/testdata/aggr_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/aggr_cases.json @@ -24,7 +24,6 @@ "JoinVars": { "user_foo": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -34,8 +33,7 @@ "Sharded": true }, "FieldQuery": "select count(*), `user`.foo from `user` where 1 != 1 group by `user`.foo", - "Query": "select count(*), `user`.foo from `user` group by `user`.foo", - "Table": "`user`" + "Query": "select count(*), `user`.foo from `user` group by `user`.foo" }, { "OperatorType": "Route", @@ -45,8 +43,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from user_extra where 1 != 1 group by .0", - "Query": "select count(*) from user_extra where user_extra.bar = :user_foo group by .0", - "Table": "user_extra" + "Query": "select count(*) from user_extra where user_extra.bar = :user_foo group by .0" } ] } @@ -85,7 +82,6 @@ "JoinVars": { "user_foo": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -95,8 +91,7 @@ "Sharded": true }, "FieldQuery": "select sum(`user`.col), `user`.foo from `user` where 1 != 1 group by `user`.foo", - "Query": "select sum(`user`.col), `user`.foo from `user` group by `user`.foo", - "Table": "`user`" + "Query": "select sum(`user`.col), `user`.foo from `user` group by `user`.foo" }, { "OperatorType": "Route", @@ -106,8 +101,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from user_extra where 1 != 1 group by .0", - "Query": "select count(*) from user_extra where user_extra.bar = :user_foo group by .0", - "Table": "user_extra" + "Query": "select count(*) from user_extra where user_extra.bar = :user_foo group by .0" } ] } @@ -146,7 +140,6 @@ "JoinVars": { "user_foo": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -156,8 +149,7 @@ "Sharded": true }, "FieldQuery": "select count(`user`.col), `user`.foo from `user` where 1 != 1 group by `user`.foo", - "Query": "select count(`user`.col), `user`.foo from `user` group by `user`.foo", - "Table": "`user`" + "Query": "select count(`user`.col), `user`.foo from `user` group by `user`.foo" }, { "OperatorType": "Route", @@ -167,8 +159,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from user_extra where 1 != 1 group by .0", - "Query": "select count(*) from user_extra where user_extra.bar = :user_foo group by .0", - "Table": "user_extra" + "Query": "select count(*) from user_extra where user_extra.bar = :user_foo group by .0" } ] } @@ -201,7 +192,6 @@ "JoinVars": { "user_foo": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -211,8 +201,7 @@ "Sharded": true }, "FieldQuery": "select max(`user`.col), `user`.foo from `user` where 1 != 1 group by `user`.foo", - "Query": "select max(`user`.col), `user`.foo from `user` group by `user`.foo", - "Table": "`user`" + "Query": "select max(`user`.col), `user`.foo from `user` group by `user`.foo" }, { "OperatorType": "Route", @@ -222,8 +211,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1 group by .0", - "Query": "select 1 from user_extra where user_extra.bar = :user_foo group by .0", - "Table": "user_extra" + "Query": "select 1 from user_extra where user_extra.bar = :user_foo group by .0" } ] } @@ -254,7 +242,6 @@ "JoinVars": { "user_foo": 0 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -264,8 +251,7 @@ "Sharded": true }, "FieldQuery": "select `user`.foo from `user` where 1 != 1 group by `user`.foo", - "Query": "select `user`.foo from `user` group by `user`.foo", - "Table": "`user`" + "Query": "select `user`.foo from `user` group by `user`.foo" }, { "OperatorType": "Route", @@ -275,8 +261,7 @@ "Sharded": true }, "FieldQuery": "select min(user_extra.col) from user_extra where 1 != 1 group by .0", - "Query": "select min(user_extra.col) from user_extra where user_extra.bar = :user_foo group by .0", - "Table": "user_extra" + "Query": "select min(user_extra.col) from user_extra where user_extra.bar = :user_foo group by .0" } ] } @@ -303,8 +288,7 @@ "Sharded": true }, "FieldQuery": "select id, count(*) as c from `user` where 1 != 1 group by id", - "Query": "select id, count(*) as c from `user` group by id having max(col) > 10", - "Table": "`user`" + "Query": "select id, count(*) as c from `user` group by id having max(col) > 10" }, "TablesUsed": [ "user.user" @@ -331,8 +315,7 @@ "Sharded": true }, "FieldQuery": "select count(*) as a from `user` where 1 != 1", - "Query": "select count(*) as a from `user`", - "Table": "`user`" + "Query": "select count(*) as a from `user`" } ] }, @@ -361,8 +344,7 @@ "Sharded": true }, "FieldQuery": "select id, count(*) from `user` where 1 != 1", - "Query": "select id, count(*) from `user`", - "Table": "`user`" + "Query": "select id, count(*) from `user`" } ] }, @@ -392,8 +374,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select distinct col from `user`", - "Table": "`user`" + "Query": "select distinct col from `user`" } ] }, @@ -423,8 +404,7 @@ }, "FieldQuery": "select col from `user` where 1 != 1 group by col", "OrderBy": "0 ASC", - "Query": "select col from `user` group by col order by col asc", - "Table": "`user`" + "Query": "select col from `user` group by col order by col asc" } ] }, @@ -448,8 +428,7 @@ "Sharded": true }, "FieldQuery": "select id, count(distinct col) from `user` where 1 != 1 group by id", - "Query": "select id, count(distinct col) from `user` group by id", - "Table": "`user`" + "Query": "select id, count(distinct col) from `user` group by id" }, "TablesUsed": [ "user.user" @@ -478,8 +457,7 @@ }, "FieldQuery": "select col, count(distinct id), sum(distinct id) from `user` where 1 != 1 group by col", "OrderBy": "0 ASC", - "Query": "select col, count(distinct id), sum(distinct id) from `user` group by col order by col asc", - "Table": "`user`" + "Query": "select col, count(distinct id), sum(distinct id) from `user` group by col order by col asc" } ] }, @@ -511,8 +489,7 @@ }, "FieldQuery": "select col1, col2, weight_string(col1), weight_string(col2) from `user` where 1 != 1 group by col1, col2, weight_string(col1), weight_string(col2)", "OrderBy": "(0|2) ASC, (1|3) ASC", - "Query": "select col1, col2, weight_string(col1), weight_string(col2) from `user` group by col1, col2, weight_string(col1), weight_string(col2) order by col1 asc, col2 asc", - "Table": "`user`" + "Query": "select col1, col2, weight_string(col1), weight_string(col2) from `user` group by col1, col2, weight_string(col1), weight_string(col2) order by col1 asc, col2 asc" } ] }, @@ -543,8 +520,7 @@ }, "FieldQuery": "select col2, weight_string(col2) from `user` where 1 != 1 group by col2, weight_string(col2)", "OrderBy": "(0|1) ASC", - "Query": "select col2, weight_string(col2) from `user` group by col2, weight_string(col2) order by col2 asc", - "Table": "`user`" + "Query": "select col2, weight_string(col2) from `user` group by col2, weight_string(col2) order by col2 asc" } ] }, @@ -568,8 +544,7 @@ "Sharded": false }, "FieldQuery": "select a, b, count(*) from unsharded where 1 != 1 group by a, b with rollup", - "Query": "select a, b, count(*) from unsharded group by a, b with rollup", - "Table": "unsharded" + "Query": "select a, b, count(*) from unsharded group by a, b with rollup" }, "TablesUsed": [ "main.unsharded" @@ -591,8 +566,7 @@ "Sharded": true }, "FieldQuery": "select id, user_id, count(*) from music where 1 != 1 group by id, user_id with rollup", - "Query": "select id, user_id, count(*) from music group by id, user_id with rollup", - "Table": "music" + "Query": "select id, user_id, count(*) from music group by id, user_id with rollup" }, "TablesUsed": [ "user.music" @@ -622,8 +596,7 @@ }, "FieldQuery": "select col1, col2, weight_string(col1), weight_string(col2) from `user` where 1 != 1 group by col1, col2, weight_string(col1), weight_string(col2)", "OrderBy": "(0|2) ASC, (1|3) ASC", - "Query": "select col1, col2, weight_string(col1), weight_string(col2) from `user` group by col1, col2, weight_string(col1), weight_string(col2) order by col1 asc, col2 asc", - "Table": "`user`" + "Query": "select col1, col2, weight_string(col1), weight_string(col2) from `user` group by col1, col2, weight_string(col1), weight_string(col2) order by col1 asc, col2 asc" } ] }, @@ -652,8 +625,7 @@ "Sharded": true }, "FieldQuery": "select id from (select id, count(`user`.id) = 2 from `user` where 1 != 1 group by id) as subquery_for_limit where 1 != 1", - "Query": "select id from (select id, count(`user`.id) = 2 from `user` group by id having count(`user`.id) = 2) as subquery_for_limit limit 2", - "Table": "`user`" + "Query": "select id from (select id, count(`user`.id) = 2 from `user` group by id having count(`user`.id) = 2) as subquery_for_limit limit 2" } ] }, @@ -685,8 +657,7 @@ }, "FieldQuery": "select col1, col2, weight_string(col1), weight_string(col2) from `user` where 1 != 1 group by col1, col2, weight_string(col1), weight_string(col2)", "OrderBy": "(0|2) ASC, (1|3) ASC", - "Query": "select col1, col2, weight_string(col1), weight_string(col2) from `user` group by col1, col2, weight_string(col1), weight_string(col2) order by col1 asc, col2 asc", - "Table": "`user`" + "Query": "select col1, col2, weight_string(col1), weight_string(col2) from `user` group by col1, col2, weight_string(col1), weight_string(col2) order by col1 asc, col2 asc" } ] }, @@ -718,8 +689,7 @@ }, "FieldQuery": "select col1, min(col2) as `min(distinct col2)`, weight_string(col1), weight_string(min(col2)) from `user` where 1 != 1 group by col1, weight_string(col1)", "OrderBy": "(0|2) ASC", - "Query": "select col1, min(col2) as `min(distinct col2)`, weight_string(col1), weight_string(min(col2)) from `user` group by col1, weight_string(col1) order by col1 asc", - "Table": "`user`" + "Query": "select col1, min(col2) as `min(distinct col2)`, weight_string(col1), weight_string(min(col2)) from `user` group by col1, weight_string(col1) order by col1 asc" } ] }, @@ -756,8 +726,7 @@ }, "FieldQuery": "select col1, col2, weight_string(col1), weight_string(col2) from `user` where 1 != 1 group by col1, col2, weight_string(col1), weight_string(col2)", "OrderBy": "(0|2) ASC, (1|3) ASC", - "Query": "select col1, col2, weight_string(col1), weight_string(col2) from `user` group by col1, col2, weight_string(col1), weight_string(col2) order by col1 asc, col2 asc", - "Table": "`user`" + "Query": "select col1, col2, weight_string(col1), weight_string(col2) from `user` group by col1, col2, weight_string(col1), weight_string(col2) order by col1 asc, col2 asc" } ] } @@ -801,8 +770,7 @@ }, "FieldQuery": "select a, b, count(*), weight_string(a), weight_string(b) from `user` where 1 != 1 group by a, b, weight_string(a), weight_string(b)", "OrderBy": "(0|3) ASC, (1|4) ASC", - "Query": "select a, b, count(*), weight_string(a), weight_string(b) from `user` group by a, b, weight_string(a), weight_string(b) order by a asc, b asc", - "Table": "`user`" + "Query": "select a, b, count(*), weight_string(a), weight_string(b) from `user` group by a, b, weight_string(a), weight_string(b) order by a asc, b asc" } ] }, @@ -825,7 +793,6 @@ "JoinVars": { "t_id": 1 }, - "TableName": "`user`_unsharded", "Inputs": [ { "OperatorType": "Limit", @@ -840,8 +807,7 @@ }, "FieldQuery": "select t.num_segments, t.id from (select id, count(*) as num_segments from `user` where 1 != 1 group by id) as t where 1 != 1", "OrderBy": "0 DESC", - "Query": "select t.num_segments, t.id from (select id, count(*) as num_segments from `user` group by id) as t order by t.num_segments desc limit 20", - "Table": "`user`" + "Query": "select t.num_segments, t.id from (select id, count(*) as num_segments from `user` group by id) as t order by t.num_segments desc limit 20" } ] }, @@ -853,8 +819,7 @@ "Sharded": false }, "FieldQuery": "select u.id, u.`name` from unsharded as u where 1 != 1", - "Query": "select u.id, u.`name` from unsharded as u where u.id = :t_id", - "Table": "unsharded" + "Query": "select u.id, u.`name` from unsharded as u where u.id = :t_id" } ] }, @@ -887,8 +852,7 @@ }, "FieldQuery": "select a, b, count(*), weight_string(b), weight_string(a) from `user` where 1 != 1 group by b, a, weight_string(b), weight_string(a)", "OrderBy": "(1|3) ASC, (0|4) ASC", - "Query": "select a, b, count(*), weight_string(b), weight_string(a) from `user` group by b, a, weight_string(b), weight_string(a) order by b asc, a asc", - "Table": "`user`" + "Query": "select a, b, count(*), weight_string(b), weight_string(a) from `user` group by b, a, weight_string(b), weight_string(a) order by b asc, a asc" } ] }, @@ -920,8 +884,7 @@ }, "FieldQuery": "select a, b, count(*), weight_string(b), weight_string(a) from `user` where 1 != 1 group by b, a, weight_string(b), weight_string(a)", "OrderBy": "(1|3) ASC, (0|4) ASC", - "Query": "select a, b, count(*), weight_string(b), weight_string(a) from `user` group by b, a, weight_string(b), weight_string(a) order by b asc, a asc", - "Table": "`user`" + "Query": "select a, b, count(*), weight_string(b), weight_string(a) from `user` group by b, a, weight_string(b), weight_string(a) order by b asc, a asc" } ] }, @@ -951,7 +914,6 @@ "JoinVars": { "user_id": 0 }, - "TableName": "`user`, user_extra_music", "Inputs": [ { "OperatorType": "Route", @@ -962,8 +924,7 @@ }, "FieldQuery": "select `user`.id, weight_string(`user`.id) from `user`, user_extra where 1 != 1", "OrderBy": "(0|1) ASC", - "Query": "select `user`.id, weight_string(`user`.id) from `user`, user_extra where `user`.id = user_extra.user_id order by `user`.id asc", - "Table": "`user`, user_extra" + "Query": "select `user`.id, weight_string(`user`.id) from `user`, user_extra where `user`.id = user_extra.user_id order by `user`.id asc" }, { "OperatorType": "VindexLookup", @@ -986,7 +947,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -1000,8 +960,7 @@ "Sharded": true }, "FieldQuery": "select music.`name` from music where 1 != 1", - "Query": "select music.`name` from music where music.id = :user_id", - "Table": "music" + "Query": "select music.`name` from music where music.id = :user_id" } ] } @@ -1037,8 +996,7 @@ }, "FieldQuery": "select col from `user` where 1 != 1 group by col", "OrderBy": "0 ASC", - "Query": "select col from `user` group by col order by col asc", - "Table": "`user`" + "Query": "select col from `user` group by col order by col asc" } ] }, @@ -1072,8 +1030,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from `user` where 1 != 1", - "Query": "select count(*) from `user`", - "Table": "`user`" + "Query": "select count(*) from `user`" } ] }, @@ -1105,8 +1062,7 @@ }, "FieldQuery": "select a, b, c, d, count(*), weight_string(a), weight_string(b), weight_string(c) from `user` where 1 != 1 group by a, b, c, weight_string(a), weight_string(b), weight_string(c)", "OrderBy": "(0|5) ASC, (1|6) ASC, (2|7) ASC", - "Query": "select a, b, c, d, count(*), weight_string(a), weight_string(b), weight_string(c) from `user` group by a, b, c, weight_string(a), weight_string(b), weight_string(c) order by a asc, b asc, c asc", - "Table": "`user`" + "Query": "select a, b, c, d, count(*), weight_string(a), weight_string(b), weight_string(c) from `user` group by a, b, c, weight_string(a), weight_string(b), weight_string(c) order by a asc, b asc, c asc" } ] }, @@ -1138,8 +1094,7 @@ }, "FieldQuery": "select a, b, c, d, count(*), weight_string(a), weight_string(b), weight_string(c) from `user` where 1 != 1 group by a, b, c, weight_string(a), weight_string(b), weight_string(c)", "OrderBy": "(0|5) ASC, (1|6) ASC, (2|7) ASC", - "Query": "select a, b, c, d, count(*), weight_string(a), weight_string(b), weight_string(c) from `user` group by a, b, c, weight_string(a), weight_string(b), weight_string(c) order by `user`.a asc, `user`.b asc, `user`.c asc", - "Table": "`user`" + "Query": "select a, b, c, d, count(*), weight_string(a), weight_string(b), weight_string(c) from `user` group by a, b, c, weight_string(a), weight_string(b), weight_string(c) order by `user`.a asc, `user`.b asc, `user`.c asc" } ] }, @@ -1171,8 +1126,7 @@ }, "FieldQuery": "select a, b, c, d, count(*), weight_string(d), weight_string(b), weight_string(a), weight_string(c) from `user` where 1 != 1 group by a, b, c, d, weight_string(d), weight_string(b), weight_string(a), weight_string(c)", "OrderBy": "(3|5) ASC, (1|6) ASC, (0|7) ASC, (2|8) ASC", - "Query": "select a, b, c, d, count(*), weight_string(d), weight_string(b), weight_string(a), weight_string(c) from `user` group by a, b, c, d, weight_string(d), weight_string(b), weight_string(a), weight_string(c) order by `user`.d asc, `user`.b asc, `user`.a asc, `user`.c asc", - "Table": "`user`" + "Query": "select a, b, c, d, count(*), weight_string(d), weight_string(b), weight_string(a), weight_string(c) from `user` group by a, b, c, d, weight_string(d), weight_string(b), weight_string(a), weight_string(c) order by `user`.d asc, `user`.b asc, `user`.a asc, `user`.c asc" } ] }, @@ -1204,8 +1158,7 @@ }, "FieldQuery": "select a, b, c, d, count(*), weight_string(d), weight_string(b), weight_string(a), weight_string(c) from `user` where 1 != 1 group by c, b, a, d, weight_string(d), weight_string(b), weight_string(a), weight_string(c)", "OrderBy": "(3|5) ASC, (1|6) ASC, (0|7) ASC, (2|8) ASC", - "Query": "select a, b, c, d, count(*), weight_string(d), weight_string(b), weight_string(a), weight_string(c) from `user` group by c, b, a, d, weight_string(d), weight_string(b), weight_string(a), weight_string(c) order by `user`.d asc, `user`.b asc, `user`.a asc, `user`.c asc", - "Table": "`user`" + "Query": "select a, b, c, d, count(*), weight_string(d), weight_string(b), weight_string(a), weight_string(c) from `user` group by c, b, a, d, weight_string(d), weight_string(b), weight_string(a), weight_string(c) order by `user`.d asc, `user`.b asc, `user`.a asc, `user`.c asc" } ] }, @@ -1237,8 +1190,7 @@ }, "FieldQuery": "select a, b, c, count(*), weight_string(a), weight_string(c), weight_string(b) from `user` where 1 != 1 group by c, b, a, weight_string(a), weight_string(c), weight_string(b)", "OrderBy": "(0|4) DESC, (2|5) DESC, (1|6) ASC", - "Query": "select a, b, c, count(*), weight_string(a), weight_string(c), weight_string(b) from `user` group by c, b, a, weight_string(a), weight_string(c), weight_string(b) order by a desc, c desc, `user`.b asc", - "Table": "`user`" + "Query": "select a, b, c, count(*), weight_string(a), weight_string(c), weight_string(b) from `user` group by c, b, a, weight_string(a), weight_string(c), weight_string(b) order by a desc, c desc, `user`.b asc" } ] }, @@ -1278,8 +1230,7 @@ }, "FieldQuery": "select col, count(*) from `user` where 1 != 1 group by col", "OrderBy": "0 ASC", - "Query": "select col, count(*) from `user` group by col order by col asc", - "Table": "`user`" + "Query": "select col, count(*) from `user` group by col order by col asc" } ] } @@ -1305,8 +1256,7 @@ "Sharded": false }, "FieldQuery": "select id, count(*) from unsharded as route2 where 1 != 1 group by id", - "Query": "select id, count(*) from unsharded as route2 group by id", - "Table": "unsharded" + "Query": "select id, count(*) from unsharded as route2 group by id" }, "TablesUsed": [ "main.unsharded" @@ -1328,8 +1278,7 @@ "Sharded": true }, "FieldQuery": "select col from ref where 1 != 1", - "Query": "select col from ref order by ref.col asc", - "Table": "ref" + "Query": "select col from ref order by ref.col asc" }, "TablesUsed": [ "user.ref" @@ -1356,8 +1305,7 @@ "Sharded": true }, "FieldQuery": "select a, count(*) from `user` where 1 != 1", - "Query": "select a, count(*) from `user`", - "Table": "`user`" + "Query": "select a, count(*) from `user`" } ] }, @@ -1389,8 +1337,7 @@ }, "FieldQuery": "select a, count(*), weight_string(a) from `user` where 1 != 1 group by a, weight_string(a)", "OrderBy": "(0|2) ASC", - "Query": "select a, count(*), weight_string(a) from `user` group by a, weight_string(a) order by a asc", - "Table": "`user`" + "Query": "select a, count(*), weight_string(a) from `user` group by a, weight_string(a) order by a asc" } ] }, @@ -1422,8 +1369,7 @@ }, "FieldQuery": "select id, 1.1 from `user` where 1 != 1 group by 1.1", "OrderBy": "1 ASC", - "Query": "select id, 1.1 from `user` group by 1.1 order by 1.1 asc", - "Table": "`user`" + "Query": "select id, 1.1 from `user` group by 1.1 order by 1.1 asc" } ] }, @@ -1457,8 +1403,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from (select `user`.col, user_extra.extra from `user`, user_extra where 1 != 1) as a where 1 != 1", - "Query": "select count(*) from (select `user`.col, user_extra.extra from `user`, user_extra where `user`.id = user_extra.user_id) as a", - "Table": "`user`, user_extra" + "Query": "select count(*) from (select `user`.col, user_extra.extra from `user`, user_extra where `user`.id = user_extra.user_id) as a" } ] }, @@ -1483,8 +1428,7 @@ "Sharded": true }, "FieldQuery": "select col from (select `user`.col, user_extra.extra from `user`, user_extra where 1 != 1) as a where 1 != 1", - "Query": "select col from (select `user`.col, user_extra.extra from `user`, user_extra where `user`.id = user_extra.user_id) as a", - "Table": "`user`, user_extra" + "Query": "select col from (select `user`.col, user_extra.extra from `user`, user_extra where `user`.id = user_extra.user_id) as a" }, "TablesUsed": [ "user.user", @@ -1514,8 +1458,7 @@ }, "FieldQuery": "select col, count(*) from (select `user`.col, user_extra.extra from `user`, user_extra where 1 != 1) as a where 1 != 1 group by col", "OrderBy": "0 ASC", - "Query": "select col, count(*) from (select `user`.col, user_extra.extra from `user`, user_extra where `user`.id = user_extra.user_id) as a group by col order by col asc", - "Table": "`user`, user_extra" + "Query": "select col, count(*) from (select `user`.col, user_extra.extra from `user`, user_extra where `user`.id = user_extra.user_id) as a group by col order by col asc" } ] }, @@ -1548,8 +1491,7 @@ "Sharded": true }, "FieldQuery": "select col1, col2, weight_string(col1), weight_string(col2) from `user` where 1 != 1", - "Query": "select distinct col1, col2, weight_string(col1), weight_string(col2) from `user`", - "Table": "`user`" + "Query": "select distinct col1, col2, weight_string(col1), weight_string(col2) from `user`" } ] }, @@ -1578,8 +1520,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from `user` where 1 != 1", - "Query": "select count(*) from `user`", - "Table": "`user`" + "Query": "select count(*) from `user`" } ] }, @@ -1605,7 +1546,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,L:1", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1616,8 +1556,7 @@ }, "FieldQuery": "select `user`.a, weight_string(`user`.a) from `user` where 1 != 1 group by `user`.a, weight_string(`user`.a)", "OrderBy": "(0|1) ASC", - "Query": "select `user`.a, weight_string(`user`.a) from `user` group by `user`.a, weight_string(`user`.a) order by `user`.a asc", - "Table": "`user`" + "Query": "select `user`.a, weight_string(`user`.a) from `user` group by `user`.a, weight_string(`user`.a) order by `user`.a asc" }, { "OperatorType": "Route", @@ -1627,8 +1566,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1 group by .0", - "Query": "select 1 from user_extra group by .0", - "Table": "user_extra" + "Query": "select 1 from user_extra group by .0" } ] } @@ -1663,8 +1601,7 @@ }, "FieldQuery": "select col1, col2, col2, weight_string(col1), weight_string(col2) from `user` where 1 != 1 group by col1, col2, weight_string(col1), weight_string(col2)", "OrderBy": "(0|3) ASC, (1|4) ASC", - "Query": "select col1, col2, col2, weight_string(col1), weight_string(col2) from `user` group by col1, col2, weight_string(col1), weight_string(col2) order by col1 asc, col2 asc", - "Table": "`user`" + "Query": "select col1, col2, col2, weight_string(col1), weight_string(col2) from `user` group by col1, col2, weight_string(col1), weight_string(col2) order by col1 asc, col2 asc" } ] }, @@ -1700,8 +1637,7 @@ }, "FieldQuery": "select col, count(*) as k from `user` where 1 != 1 group by col", "OrderBy": "0 ASC", - "Query": "select col, count(*) as k from `user` group by col order by col asc", - "Table": "`user`" + "Query": "select col, count(*) as k from `user` group by col order by col asc" } ] } @@ -1734,8 +1670,7 @@ }, "FieldQuery": "select col, count(*) as k from `user` where 1 != 1 group by col", "OrderBy": "0 ASC", - "Query": "select col, count(*) as k from `user` group by col order by col asc", - "Table": "`user`" + "Query": "select col, count(*) as k from `user` group by col order by col asc" } ] }, @@ -1759,8 +1694,7 @@ "Sharded": true }, "FieldQuery": "select `user`.id, count(*) as c from `user`, user_extra where 1 != 1 group by `user`.id", - "Query": "select `user`.id, count(*) as c from `user`, user_extra where `user`.id = user_extra.user_id group by `user`.id having max(`user`.col) > 10", - "Table": "`user`, user_extra" + "Query": "select `user`.id, count(*) as c from `user`, user_extra where `user`.id = user_extra.user_id group by `user`.id having max(`user`.col) > 10" }, "TablesUsed": [ "user.user", @@ -1788,8 +1722,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from `user` where 1 != 1", - "Query": "select count(*) from `user` where exists (select 1 from user_extra where user_id = `user`.id group by user_id having max(col) > 10)", - "Table": "`user`" + "Query": "select count(*) from `user` where exists (select 1 from user_extra where user_id = `user`.id group by user_id having max(col) > 10)" } ] }, @@ -1814,8 +1747,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1 group by id", - "Query": "select id from `user` group by id having count(id) = 10", - "Table": "`user`" + "Query": "select id from `user` group by id having count(id) = 10" }, "TablesUsed": [ "user.user" @@ -1844,8 +1776,7 @@ }, "FieldQuery": "select lower(col1) as v, count(*) from authoritative where 1 != 1 group by lower(col1)", "OrderBy": "0 ASC COLLATE latin1_swedish_ci", - "Query": "select lower(col1) as v, count(*) from authoritative group by lower(col1) order by lower(col1) asc", - "Table": "authoritative" + "Query": "select lower(col1) as v, count(*) from authoritative group by lower(col1) order by lower(col1) asc" } ] }, @@ -1876,8 +1807,7 @@ }, "FieldQuery": "select char_length(col1) as a, count(*) from authoritative where 1 != 1 group by char_length(col1)", "OrderBy": "0 ASC", - "Query": "select char_length(col1) as a, count(*) from authoritative group by char_length(col1) order by char_length(authoritative.col1) asc", - "Table": "authoritative" + "Query": "select char_length(col1) as a, count(*) from authoritative group by char_length(col1) order by char_length(authoritative.col1) asc" } ] }, @@ -1907,8 +1837,7 @@ "FieldQuery": "select id, weight_string(id) from `user` where 1 != 1", "OrderBy": "(0|1) ASC", "Query": "select id, weight_string(id) from `user` order by id asc limit 2", - "ResultColumns": 1, - "Table": "`user`" + "ResultColumns": 1 } ] }, @@ -1929,7 +1858,6 @@ "JoinVars": { "user_id": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "InputName": "Outer", @@ -1942,8 +1870,7 @@ "FieldQuery": "select col, id, weight_string(id) from `user` where 1 != 1", "OrderBy": "(1|2) ASC", "Query": "select col, id, weight_string(id) from `user` order by `user`.id asc", - "ResultColumns": 2, - "Table": "`user`" + "ResultColumns": 2 }, { "InputName": "SubQuery", @@ -1955,7 +1882,6 @@ }, "FieldQuery": "select 1 from user_extra where 1 != 1", "Query": "select 1 from user_extra where user_id = 3 and user_id < :user_id limit 1", - "Table": "user_extra", "Values": [ "3" ], @@ -1993,8 +1919,7 @@ "Sharded": true }, "FieldQuery": "select count(*) as a from `user` where 1 != 1", - "Query": "select count(*) as a from `user`", - "Table": "`user`" + "Query": "select count(*) as a from `user`" } ] } @@ -2029,8 +1954,7 @@ "Sharded": true }, "FieldQuery": "select count(*) as a from `user` where 1 != 1", - "Query": "select count(*) as a from `user`", - "Table": "`user`" + "Query": "select count(*) as a from `user`" } ] } @@ -2065,8 +1989,7 @@ "Sharded": true }, "FieldQuery": "select count(*) as a from `user` where 1 != 1", - "Query": "select count(*) as a from `user`", - "Table": "`user`" + "Query": "select count(*) as a from `user`" } ] } @@ -2101,8 +2024,7 @@ "Sharded": true }, "FieldQuery": "select count(*) as a from `user` where 1 != 1", - "Query": "select count(*) as a from `user`", - "Table": "`user`" + "Query": "select count(*) as a from `user`" } ] } @@ -2137,8 +2059,7 @@ "Sharded": true }, "FieldQuery": "select count(*) as a from `user` where 1 != 1", - "Query": "select count(*) as a from `user`", - "Table": "`user`" + "Query": "select count(*) as a from `user`" } ] } @@ -2173,8 +2094,7 @@ "Sharded": true }, "FieldQuery": "select count(*) as a from `user` where 1 != 1", - "Query": "select count(*) as a from `user`", - "Table": "`user`" + "Query": "select count(*) as a from `user`" } ] } @@ -2209,8 +2129,7 @@ "Sharded": true }, "FieldQuery": "select count(*) as a from `user` where 1 != 1", - "Query": "select count(*) as a from `user`", - "Table": "`user`" + "Query": "select count(*) as a from `user`" } ] } @@ -2245,8 +2164,7 @@ "Sharded": true }, "FieldQuery": "select count(*) as a from `user` where 1 != 1", - "Query": "select count(*) as a from `user`", - "Table": "`user`" + "Query": "select count(*) as a from `user`" } ] } @@ -2284,8 +2202,7 @@ }, "FieldQuery": "select col1, count(*) as a, weight_string(col1) from `user` where 1 != 1 group by col1, weight_string(col1)", "OrderBy": "(0|2) ASC", - "Query": "select col1, count(*) as a, weight_string(col1) from `user` group by col1, weight_string(col1) order by col1 asc", - "Table": "`user`" + "Query": "select col1, count(*) as a, weight_string(col1) from `user` group by col1, weight_string(col1) order by col1 asc" } ] } @@ -2323,8 +2240,7 @@ }, "FieldQuery": "select count(*) as a, col2, weight_string(col2) from `user` where 1 != 1 group by col2, weight_string(col2)", "OrderBy": "(1|2) ASC", - "Query": "select count(*) as a, col2, weight_string(col2) from `user` group by col2, weight_string(col2) order by col2 asc", - "Table": "`user`" + "Query": "select count(*) as a, col2, weight_string(col2) from `user` group by col2, weight_string(col2) order by col2 asc" } ] } @@ -2351,7 +2267,6 @@ }, "FieldQuery": "select col1, udf_aggr(col2) as r from `user` where 1 != 1 group by col1", "Query": "select col1, udf_aggr(col2) as r from `user` where id = 1 group by col1 having udf_aggr(`user`.col2) >= 0.3", - "Table": "`user`", "Values": [ "1" ], @@ -2377,8 +2292,7 @@ "Sharded": true }, "FieldQuery": "select id, udf_aggr(col2) as r from `user` where 1 != 1 group by id", - "Query": "select id, udf_aggr(col2) as r from `user` group by id", - "Table": "`user`" + "Query": "select id, udf_aggr(col2) as r from `user` group by id" }, "TablesUsed": [ "user.user" @@ -2407,8 +2321,7 @@ }, "FieldQuery": "select col, textcol1 from `user` where 1 != 1 group by col, textcol1", "OrderBy": "0 ASC, 1 ASC COLLATE latin1_swedish_ci", - "Query": "select col, textcol1 from `user` group by col, textcol1 order by col asc, textcol1 asc", - "Table": "`user`" + "Query": "select col, textcol1 from `user` group by col, textcol1 order by col asc, textcol1 asc" } ] }, @@ -2455,7 +2368,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -2469,8 +2381,7 @@ "Sharded": true }, "FieldQuery": "select 1, count(id) from `user` where 1 != 1", - "Query": "select 1, count(id) from `user` where `name` = 'a'", - "Table": "`user`" + "Query": "select 1, count(id) from `user` where `name` = 'a'" } ] } @@ -2505,7 +2416,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -2515,8 +2425,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from `user` where 1 != 1", - "Query": "select count(*) from `user`", - "Table": "`user`" + "Query": "select count(*) from `user`" }, { "OperatorType": "Route", @@ -2526,8 +2435,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from user_extra where 1 != 1 group by .0", - "Query": "select count(*) from user_extra group by .0", - "Table": "user_extra" + "Query": "select count(*) from user_extra group by .0" } ] } @@ -2566,8 +2474,7 @@ "Sharded": true }, "FieldQuery": "select 1, count(id) from `user` where 1 != 1", - "Query": "select 1, count(id) from `user`", - "Table": "`user`" + "Query": "select 1, count(id) from `user`" } ] } @@ -2604,7 +2511,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0,L:1,L:2", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -2615,8 +2521,7 @@ }, "FieldQuery": "select count(*), `user`.a, weight_string(`user`.a) from `user` where 1 != 1 group by `user`.a, weight_string(`user`.a)", "OrderBy": "(1|2) ASC", - "Query": "select count(*), `user`.a, weight_string(`user`.a) from `user` group by `user`.a, weight_string(`user`.a) order by `user`.a asc", - "Table": "`user`" + "Query": "select count(*), `user`.a, weight_string(`user`.a) from `user` group by `user`.a, weight_string(`user`.a) order by `user`.a asc" }, { "OperatorType": "Route", @@ -2626,8 +2531,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from user_extra where 1 != 1 group by .0", - "Query": "select count(*) from user_extra group by .0", - "Table": "user_extra" + "Query": "select count(*) from user_extra group by .0" } ] } @@ -2667,7 +2571,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "R:0,L:0,L:1,L:2", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -2678,8 +2581,7 @@ }, "FieldQuery": "select count(*), `user`.a, weight_string(`user`.a) from `user` where 1 != 1 group by `user`.a, weight_string(`user`.a)", "OrderBy": "(1|2) ASC", - "Query": "select count(*), `user`.a, weight_string(`user`.a) from `user` group by `user`.a, weight_string(`user`.a) order by `user`.a asc", - "Table": "`user`" + "Query": "select count(*), `user`.a, weight_string(`user`.a) from `user` group by `user`.a, weight_string(`user`.a) order by `user`.a asc" }, { "OperatorType": "Route", @@ -2689,8 +2591,7 @@ "Sharded": true }, "FieldQuery": "select count(user_extra.a) from user_extra where 1 != 1 group by .0", - "Query": "select count(user_extra.a) from user_extra group by .0", - "Table": "user_extra" + "Query": "select count(user_extra.a) from user_extra group by .0" } ] } @@ -2739,7 +2640,6 @@ "JoinVars": { "u_foo": 2 }, - "TableName": "`user`_user_extra_unsharded", "Inputs": [ { "OperatorType": "Route", @@ -2749,8 +2649,7 @@ "Sharded": true }, "FieldQuery": "select count(u.textcol1), count(*), u.foo from `user` as u where 1 != 1 group by u.foo", - "Query": "select count(u.textcol1), count(*), u.foo from `user` as u group by u.foo", - "Table": "`user`" + "Query": "select count(u.textcol1), count(*), u.foo from `user` as u group by u.foo" }, { "OperatorType": "Projection", @@ -2768,7 +2667,6 @@ "JoinVars": { "ue_bar": 2 }, - "TableName": "user_extra_unsharded", "Inputs": [ { "OperatorType": "Route", @@ -2778,8 +2676,7 @@ "Sharded": true }, "FieldQuery": "select count(*), count(ue.foo), ue.bar from user_extra as ue where 1 != 1 group by ue.bar", - "Query": "select count(*), count(ue.foo), ue.bar from user_extra as ue where ue.bar = :u_foo group by ue.bar", - "Table": "user_extra" + "Query": "select count(*), count(ue.foo), ue.bar from user_extra as ue where ue.bar = :u_foo group by ue.bar" }, { "OperatorType": "Route", @@ -2789,8 +2686,7 @@ "Sharded": false }, "FieldQuery": "select count(*), us.bar, weight_string(us.bar) from unsharded as us where 1 != 1 group by us.bar, weight_string(us.bar)", - "Query": "select count(*), us.bar, weight_string(us.bar) from unsharded as us where us.baz = :ue_bar group by us.bar, weight_string(us.bar)", - "Table": "unsharded" + "Query": "select count(*), us.bar, weight_string(us.bar) from unsharded as us where us.baz = :ue_bar group by us.bar, weight_string(us.bar)" } ] } @@ -2834,8 +2730,7 @@ }, "FieldQuery": "select col1, min(id) as `min(distinct id)`, col3, weight_string(col1), weight_string(min(id)), weight_string(col3) from `user` where 1 != 1 group by col1, col3, weight_string(col1), weight_string(col3)", "OrderBy": "(0|3) ASC, (2|5) ASC", - "Query": "select col1, min(id) as `min(distinct id)`, col3, weight_string(col1), weight_string(min(id)), weight_string(col3) from `user` group by col1, col3, weight_string(col1), weight_string(col3) order by col1 asc, col3 asc", - "Table": "`user`" + "Query": "select col1, min(id) as `min(distinct id)`, col3, weight_string(col1), weight_string(min(id)), weight_string(col3) from `user` group by col1, col3, weight_string(col1), weight_string(col3) order by col1 asc, col3 asc" } ] }, @@ -2862,7 +2757,6 @@ "JoinVars": { "user_apa": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "InputName": "Outer", @@ -2873,8 +2767,7 @@ "Sharded": true }, "FieldQuery": "select count(*), `user`.apa from `user` where 1 != 1 group by `user`.apa", - "Query": "select count(*), `user`.apa from `user` group by `user`.apa", - "Table": "`user`" + "Query": "select count(*), `user`.apa from `user` group by `user`.apa" }, { "InputName": "SubQuery", @@ -2889,8 +2782,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra where user_extra.bar = :user_apa limit 1", - "Table": "user_extra" + "Query": "select 1 from user_extra where user_extra.bar = :user_apa limit 1" } ] } @@ -2927,8 +2819,7 @@ }, "FieldQuery": "select val2, val1, count(*), weight_string(val2), weight_string(val1) from `user` where 1 != 1 group by val2, val1, weight_string(val2), weight_string(val1)", "OrderBy": "(0|3) ASC, (1|4) ASC", - "Query": "select val2, val1, count(*), weight_string(val2), weight_string(val1) from `user` group by val2, val1, weight_string(val2), weight_string(val1) order by val2 asc, val1 asc", - "Table": "`user`" + "Query": "select val2, val1, count(*), weight_string(val2), weight_string(val1) from `user` group by val2, val1, weight_string(val2), weight_string(val1) order by val2 asc, val1 asc" } ] }, @@ -2960,8 +2851,7 @@ }, "FieldQuery": "select ascii(col2) as a, count(*), weight_string(ascii(col2)) from `user` where 1 != 1 group by ascii(col2), weight_string(ascii(col2))", "OrderBy": "(0|2) ASC", - "Query": "select ascii(col2) as a, count(*), weight_string(ascii(col2)) from `user` group by ascii(col2), weight_string(ascii(col2)) order by ascii(col2) asc", - "Table": "`user`" + "Query": "select ascii(col2) as a, count(*), weight_string(ascii(col2)) from `user` group by ascii(col2), weight_string(ascii(col2)) order by ascii(col2) asc" } ] }, @@ -2993,8 +2883,7 @@ }, "FieldQuery": "select tcol1, tcol2, tcol2, weight_string(tcol1), weight_string(tcol2) from `user` where 1 != 1 group by tcol1, tcol2, weight_string(tcol1), weight_string(tcol2)", "OrderBy": "(0|3) ASC, (1|4) ASC", - "Query": "select tcol1, tcol2, tcol2, weight_string(tcol1), weight_string(tcol2) from `user` group by tcol1, tcol2, weight_string(tcol1), weight_string(tcol2) order by tcol1 asc, tcol2 asc", - "Table": "`user`" + "Query": "select tcol1, tcol2, tcol2, weight_string(tcol1), weight_string(tcol2) from `user` group by tcol1, tcol2, weight_string(tcol1), weight_string(tcol2) order by tcol1 asc, tcol2 asc" } ] }, @@ -3026,8 +2915,7 @@ }, "FieldQuery": "select tcol2, tcol1, count(*), tcol2, weight_string(tcol1), weight_string(tcol2) from `user` where 1 != 1 group by tcol1, tcol2, weight_string(tcol1), weight_string(tcol2)", "OrderBy": "(1|4) ASC, (0|5) ASC", - "Query": "select tcol2, tcol1, count(*), tcol2, weight_string(tcol1), weight_string(tcol2) from `user` group by tcol1, tcol2, weight_string(tcol1), weight_string(tcol2) order by tcol1 asc, tcol2 asc", - "Table": "`user`" + "Query": "select tcol2, tcol1, count(*), tcol2, weight_string(tcol1), weight_string(tcol2) from `user` group by tcol1, tcol2, weight_string(tcol1), weight_string(tcol2) order by tcol1 asc, tcol2 asc" } ] }, @@ -3057,7 +2945,6 @@ "JoinVars": { "u2_val2": 2 }, - "TableName": "`user`_`user`_music", "Inputs": [ { "OperatorType": "Join", @@ -3066,7 +2953,6 @@ "JoinVars": { "u_val2": 1 }, - "TableName": "`user`_`user`", "Inputs": [ { "OperatorType": "Route", @@ -3077,8 +2963,7 @@ }, "FieldQuery": "select u.textcol1, u.val2, weight_string(u.val2) from `user` as u where 1 != 1", "OrderBy": "0 ASC COLLATE latin1_swedish_ci, (1|2) ASC", - "Query": "select u.textcol1, u.val2, weight_string(u.val2) from `user` as u order by u.textcol1 asc, u.val2 asc", - "Table": "`user`" + "Query": "select u.textcol1, u.val2, weight_string(u.val2) from `user` as u order by u.textcol1 asc, u.val2 asc" }, { "OperatorType": "Route", @@ -3089,7 +2974,6 @@ }, "FieldQuery": "select u2.val2 from `user` as u2 where 1 != 1", "Query": "select u2.val2 from `user` as u2 where u2.id = :u_val2", - "Table": "`user`", "Values": [ ":u_val2" ], @@ -3118,7 +3002,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -3132,8 +3015,7 @@ "Sharded": true }, "FieldQuery": "select 1 from music as m where 1 != 1", - "Query": "select 1 from music as m where m.id = :u2_val2", - "Table": "music" + "Query": "select 1 from music as m where m.id = :u2_val2" } ] } @@ -3162,8 +3044,7 @@ "Sharded": true }, "FieldQuery": "select group_concat(user_id order by `name` asc), id from `user` where 1 != 1 group by id", - "Query": "select group_concat(user_id order by `name` asc), id from `user` group by id", - "Table": "`user`" + "Query": "select group_concat(user_id order by `name` asc), id from `user` group by id" }, "TablesUsed": [ "user.user" @@ -3185,8 +3066,7 @@ "Sharded": false }, "FieldQuery": "select count(distinct user_id, `name`) from unsharded where 1 != 1", - "Query": "select count(distinct user_id, `name`) from unsharded", - "Table": "unsharded" + "Query": "select count(distinct user_id, `name`) from unsharded" }, "TablesUsed": [ "main.unsharded" @@ -3215,7 +3095,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -3225,8 +3104,7 @@ "Sharded": true }, "FieldQuery": "select sum(col) from (select `user`.col as col, 32 from `user` where 1 != 1) as t where 1 != 1", - "Query": "select sum(col) from (select `user`.col as col, 32 from `user`) as t", - "Table": "`user`" + "Query": "select sum(col) from (select `user`.col as col, 32 from `user`) as t" }, { "OperatorType": "Route", @@ -3236,8 +3114,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from user_extra where 1 != 1 group by .0", - "Query": "select count(*) from user_extra group by .0", - "Table": "user_extra" + "Query": "select count(*) from user_extra group by .0" } ] } @@ -3278,8 +3155,7 @@ }, "FieldQuery": "select foo, count(*), weight_string(foo) from `user` where 1 != 1 group by foo, weight_string(foo)", "OrderBy": "(0|2) ASC", - "Query": "select foo, count(*), weight_string(foo) from `user` group by foo, weight_string(foo) order by foo asc", - "Table": "`user`" + "Query": "select foo, count(*), weight_string(foo) from `user` group by foo, weight_string(foo) order by foo asc" } ] } @@ -3317,8 +3193,7 @@ }, "FieldQuery": "select foo, sum(foo), sum(bar), weight_string(foo) from `user` where 1 != 1 group by foo, weight_string(foo)", "OrderBy": "(0|3) ASC", - "Query": "select foo, sum(foo), sum(bar), weight_string(foo) from `user` group by foo, weight_string(foo) order by foo asc", - "Table": "`user`" + "Query": "select foo, sum(foo), sum(bar), weight_string(foo) from `user` group by foo, weight_string(foo) order by foo asc" } ] } @@ -3356,8 +3231,7 @@ }, "FieldQuery": "select foo, sum(foo) as fooSum, sum(bar) as barSum, weight_string(foo) from `user` where 1 != 1 group by foo, weight_string(foo)", "OrderBy": "(0|3) ASC", - "Query": "select foo, sum(foo) as fooSum, sum(bar) as barSum, weight_string(foo) from `user` group by foo, weight_string(foo) order by foo asc", - "Table": "`user`" + "Query": "select foo, sum(foo) as fooSum, sum(bar) as barSum, weight_string(foo) from `user` group by foo, weight_string(foo) order by foo asc" } ] } @@ -3395,8 +3269,7 @@ }, "FieldQuery": "select foo, count(*), weight_string(foo) from `user` where 1 != 1 group by foo, weight_string(foo)", "OrderBy": "(0|2) ASC", - "Query": "select foo, count(*), weight_string(foo) from `user` group by foo, weight_string(foo) order by foo asc", - "Table": "`user`" + "Query": "select foo, count(*), weight_string(foo) from `user` group by foo, weight_string(foo) order by foo asc" } ] } @@ -3445,7 +3318,6 @@ "JoinVars": { "ue_id": 1 }, - "TableName": "user_extra_`user`", "Inputs": [ { "OperatorType": "Route", @@ -3455,8 +3327,7 @@ "Sharded": true }, "FieldQuery": "select count(*), ue.id from user_extra as ue where 1 != 1 group by ue.id", - "Query": "select count(*), ue.id from user_extra as ue group by ue.id", - "Table": "user_extra" + "Query": "select count(*), ue.id from user_extra as ue group by ue.id" }, { "OperatorType": "Route", @@ -3467,7 +3338,6 @@ }, "FieldQuery": "select count(u.`name`), u.id, weight_string(u.id) from `user` as u where 1 != 1 group by u.id, weight_string(u.id)", "Query": "select count(u.`name`), u.id, weight_string(u.id) from `user` as u where u.id = :ue_id group by u.id, weight_string(u.id)", - "Table": "`user`", "Values": [ ":ue_id" ], @@ -3504,8 +3374,7 @@ "Sharded": true }, "FieldQuery": "select u.id from `user` as u, user_extra as ue where 1 != 1 group by u.id", - "Query": "select u.id from `user` as u, user_extra as ue where ue.user_id = u.id group by u.id having count(u.`name`) = 3", - "Table": "`user`, user_extra" + "Query": "select u.id from `user` as u, user_extra as ue where ue.user_id = u.id group by u.id having count(u.`name`) = 3" }, "TablesUsed": [ "user.user", @@ -3551,7 +3420,6 @@ "JoinVars": { "ue_id": 1 }, - "TableName": "user_extra_`user`", "Inputs": [ { "OperatorType": "Route", @@ -3561,8 +3429,7 @@ "Sharded": true }, "FieldQuery": "select count(*), ue.id from user_extra as ue where 1 != 1 group by ue.id", - "Query": "select count(*), ue.id from user_extra as ue group by ue.id", - "Table": "user_extra" + "Query": "select count(*), ue.id from user_extra as ue group by ue.id" }, { "OperatorType": "Route", @@ -3573,7 +3440,6 @@ }, "FieldQuery": "select count(*), u.id, weight_string(u.id) from `user` as u where 1 != 1 group by u.id, weight_string(u.id)", "Query": "select count(*), u.id, weight_string(u.id) from `user` as u where u.id = :ue_id group by u.id, weight_string(u.id)", - "Table": "`user`", "Values": [ ":ue_id" ], @@ -3616,7 +3482,6 @@ "JoinVars": { "user_col": 0 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -3627,8 +3492,7 @@ }, "FieldQuery": "select `user`.col, `user`.id, weight_string(`user`.id) from `user` where 1 != 1 group by `user`.id, `user`.col, weight_string(`user`.id)", "OrderBy": "(1|2) ASC", - "Query": "select `user`.col, `user`.id, weight_string(`user`.id) from `user` group by `user`.id, `user`.col, weight_string(`user`.id) order by `user`.id asc", - "Table": "`user`" + "Query": "select `user`.col, `user`.id, weight_string(`user`.id) from `user` group by `user`.id, `user`.col, weight_string(`user`.id) order by `user`.id asc" }, { "OperatorType": "Route", @@ -3638,8 +3502,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1 group by .0", - "Query": "select 1 from user_extra where user_extra.col = :user_col /* INT16 */ group by .0", - "Table": "user_extra" + "Query": "select 1 from user_extra where user_extra.col = :user_col /* INT16 */ group by .0" } ] } @@ -3676,8 +3539,7 @@ "Sharded": true }, "FieldQuery": "select id, count(*) from `user` where 1 != 1", - "Query": "select id, count(*) from `user`", - "Table": "`user`" + "Query": "select id, count(*) from `user`" } ] }, @@ -3703,7 +3565,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,L:1", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -3714,8 +3575,7 @@ }, "FieldQuery": "select `user`.id, weight_string(`user`.id) from `user` where 1 != 1 group by `user`.id, weight_string(`user`.id)", "OrderBy": "(0|1) ASC", - "Query": "select `user`.id, weight_string(`user`.id) from `user` group by `user`.id, weight_string(`user`.id) order by `user`.id asc", - "Table": "`user`" + "Query": "select `user`.id, weight_string(`user`.id) from `user` group by `user`.id, weight_string(`user`.id) order by `user`.id asc" }, { "OperatorType": "Route", @@ -3725,8 +3585,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1 group by .0", - "Query": "select 1 from user_extra group by .0", - "Table": "user_extra" + "Query": "select 1 from user_extra group by .0" } ] } @@ -3766,8 +3625,7 @@ "Sharded": true }, "FieldQuery": "select x.phone, x.id, x.city from (select phone, id, city from `user` where 1 != 1) as x where 1 != 1", - "Query": "select x.phone, x.id, x.city from (select phone, id, city from `user` where id > 12) as x limit 10", - "Table": "`user`" + "Query": "select x.phone, x.id, x.city from (select phone, id, city from `user` where id > 12) as x limit 10" } ] } @@ -3810,8 +3668,7 @@ "Sharded": true }, "FieldQuery": "select 1 from (select phone, id, city from `user` where 1 != 1) as x where 1 != 1", - "Query": "select 1 from (select phone, id, city from `user` where id > 12) as x limit 10", - "Table": "`user`" + "Query": "select 1 from (select phone, id, city from `user` where id > 12) as x limit 10" } ] } @@ -3847,7 +3704,6 @@ "JoinVars": { "user_id": 0 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Limit", @@ -3861,8 +3717,7 @@ "Sharded": true }, "FieldQuery": "select x.`user.id` from (select `user`.id as `user.id` from `user` where 1 != 1) as x where 1 != 1", - "Query": "select x.`user.id` from (select `user`.id as `user.id` from `user`) as x limit 10", - "Table": "`user`" + "Query": "select x.`user.id` from (select `user`.id as `user.id` from `user`) as x limit 10" } ] }, @@ -3878,8 +3733,7 @@ "Sharded": true }, "FieldQuery": "select x.col from (select user_extra.col as col from user_extra where 1 != 1) as x where 1 != 1", - "Query": "select x.col from (select user_extra.col as col from user_extra where user_extra.id = :user_id) as x limit 10", - "Table": "user_extra" + "Query": "select x.col from (select user_extra.col as col from user_extra where user_extra.id = :user_id) as x limit 10" } ] } @@ -3930,8 +3784,7 @@ }, "FieldQuery": "select x.id, x.val1, weight_string(x.val1) from (select id, val1 from `user` where 1 != 1) as x where 1 != 1", "OrderBy": "(1|2) ASC", - "Query": "select x.id, x.val1, weight_string(x.val1) from (select id, val1 from `user` where val2 < 4) as x order by x.val1 asc limit 2", - "Table": "`user`" + "Query": "select x.id, x.val1, weight_string(x.val1) from (select id, val1 from `user` where val2 < 4) as x order by x.val1 asc limit 2" } ] } @@ -3982,8 +3835,7 @@ "Sharded": true }, "FieldQuery": "select id, count(*), 1 from `user` where 1 != 1", - "Query": "select id, count(*), 1 from `user`", - "Table": "`user`" + "Query": "select id, count(*), 1 from `user`" } ] } @@ -4026,8 +3878,7 @@ }, "FieldQuery": "select `user`.intcol, count(`user`.intcol) from `user` where 1 != 1 group by `user`.intcol", "OrderBy": "0 ASC", - "Query": "select `user`.intcol, count(`user`.intcol) from `user` group by `user`.intcol order by `user`.intcol asc", - "Table": "`user`" + "Query": "select `user`.intcol, count(`user`.intcol) from `user` group by `user`.intcol order by `user`.intcol asc" } ] } @@ -4073,7 +3924,6 @@ "JoinVars": { "m_order": 1 }, - "TableName": "user_extra_`user`", "Inputs": [ { "OperatorType": "Route", @@ -4083,8 +3933,7 @@ "Sharded": true }, "FieldQuery": "select count(m.predef1), m.`order` from user_extra as m where 1 != 1 group by m.`order`", - "Query": "select count(m.predef1), m.`order` from user_extra as m group by m.`order`", - "Table": "user_extra" + "Query": "select count(m.predef1), m.`order` from user_extra as m group by m.`order`" }, { "OperatorType": "Route", @@ -4095,7 +3944,6 @@ }, "FieldQuery": "select u.`name`, count(*), u.id, weight_string(u.id) from `user` as u where 1 != 1 group by u.id, weight_string(u.id)", "Query": "select u.`name`, count(*), u.id, weight_string(u.id) from `user` as u where u.id = :m_order group by u.id, weight_string(u.id)", - "Table": "`user`", "Values": [ ":m_order" ], @@ -4140,7 +3988,6 @@ "JoinVars": { "u_col": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -4150,8 +3997,7 @@ "Sharded": true }, "FieldQuery": "select count(u.id), u.col from `user` as u where 1 != 1 group by u.col", - "Query": "select count(u.id), u.col from `user` as u group by u.col", - "Table": "`user`" + "Query": "select count(u.id), u.col from `user` as u group by u.col" }, { "OperatorType": "Route", @@ -4161,8 +4007,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from user_extra as ue where 1 != 1 group by .0", - "Query": "select count(*) from user_extra as ue where ue.col = :u_col /* INT16 */ group by .0", - "Table": "user_extra" + "Query": "select count(*) from user_extra as ue where ue.col = :u_col /* INT16 */ group by .0" } ] } @@ -4201,7 +4046,6 @@ "JoinVars": { "u_col": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -4211,8 +4055,7 @@ "Sharded": true }, "FieldQuery": "select count(*), u.col from `user` as u where 1 != 1 group by u.col", - "Query": "select count(*), u.col from `user` as u group by u.col", - "Table": "`user`" + "Query": "select count(*), u.col from `user` as u group by u.col" }, { "OperatorType": "Route", @@ -4222,8 +4065,7 @@ "Sharded": true }, "FieldQuery": "select count(ue.id) from user_extra as ue where 1 != 1 group by .0", - "Query": "select count(ue.id) from user_extra as ue where ue.col = :u_col /* INT16 */ group by .0", - "Table": "user_extra" + "Query": "select count(ue.id) from user_extra as ue where ue.col = :u_col /* INT16 */ group by .0" } ] } @@ -4265,8 +4107,7 @@ "Sharded": true }, "FieldQuery": "select sum(a) as a, sum(b) as b from `user` where 1 != 1", - "Query": "select sum(a) as a, sum(b) as b from `user`", - "Table": "`user`" + "Query": "select sum(a) as a, sum(b) as b from `user`" } ] } @@ -4292,8 +4133,7 @@ "Sharded": true }, "FieldQuery": "select t1.portalId, t1.flowId from (select portalId, flowId, count(*) as `count` from user_extra where 1 != 1 group by user_id, flowId) as t1 where 1 != 1", - "Query": "select t1.portalId, t1.flowId from (select portalId, flowId, count(*) as `count` from user_extra where localDate > :v1 group by user_id, flowId) as t1 where `count` >= :v2", - "Table": "user_extra" + "Query": "select t1.portalId, t1.flowId from (select portalId, flowId, count(*) as `count` from user_extra where localDate > :v1 group by user_id, flowId) as t1 where `count` >= :v2" }, "TablesUsed": [ "user.user_extra" @@ -4327,8 +4167,7 @@ }, "FieldQuery": "select foo, max(baz) as bazo, weight_string(foo), weight_string(max(baz)) from (select foo, baz from `user` where 1 != 1) as f where 1 != 1 group by foo, weight_string(foo)", "OrderBy": "(0|2) ASC", - "Query": "select foo, max(baz) as bazo, weight_string(foo), weight_string(max(baz)) from (select foo, baz from `user`) as f group by foo, weight_string(foo) order by foo asc", - "Table": "`user`" + "Query": "select foo, max(baz) as bazo, weight_string(foo), weight_string(max(baz)) from (select foo, baz from `user`) as f group by foo, weight_string(foo) order by foo asc" } ] } @@ -4366,8 +4205,7 @@ }, "FieldQuery": "select foo, count(baz) as bazo, weight_string(foo) from (select foo, baz from `user` where 1 != 1) as f where 1 != 1 group by foo, weight_string(foo)", "OrderBy": "(0|2) ASC", - "Query": "select foo, count(baz) as bazo, weight_string(foo) from (select foo, baz from `user`) as f group by foo, weight_string(foo) order by foo asc", - "Table": "`user`" + "Query": "select foo, count(baz) as bazo, weight_string(foo) from (select foo, baz from `user`) as f group by foo, weight_string(foo) order by foo asc" } ] } @@ -4406,8 +4244,7 @@ }, "FieldQuery": "select col, count(*), col + 1 from `user` where 1 != 1 group by col", "OrderBy": "0 ASC", - "Query": "select col, count(*), col + 1 from `user` group by col order by col asc", - "Table": "`user`" + "Query": "select col, count(*), col + 1 from `user` group by col order by col asc" } ] } @@ -4435,8 +4272,7 @@ "FieldQuery": "select id, id + 1, weight_string(id + 1) from `user` where 1 != 1 group by id", "OrderBy": "(1|2) ASC", "Query": "select id, id + 1, weight_string(id + 1) from `user` group by id order by id + 1 asc", - "ResultColumns": 1, - "Table": "`user`" + "ResultColumns": 1 }, "TablesUsed": [ "user.user" @@ -4466,8 +4302,7 @@ }, "FieldQuery": "select a, a + 1, weight_string(a + 1) from `user` where 1 != 1 group by a + 1, weight_string(a + 1)", "OrderBy": "(1|2) ASC", - "Query": "select a, a + 1, weight_string(a + 1) from `user` group by a + 1, weight_string(a + 1) order by a + 1 asc", - "Table": "`user`" + "Query": "select a, a + 1, weight_string(a + 1) from `user` group by a + 1, weight_string(a + 1) order by a + 1 asc" } ] }, @@ -4501,7 +4336,6 @@ "JoinVars": { "user_foo": 1 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -4511,8 +4345,7 @@ "Sharded": true }, "FieldQuery": "select count(*), `user`.foo from `user` where 1 != 1 group by `user`.foo", - "Query": "select count(*), `user`.foo from `user` group by `user`.foo", - "Table": "`user`" + "Query": "select count(*), `user`.foo from `user` group by `user`.foo" }, { "OperatorType": "Route", @@ -4522,8 +4355,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from music where 1 != 1 group by .0", - "Query": "select count(*) from music where music.bar = :user_foo group by .0", - "Table": "music" + "Query": "select count(*) from music where music.bar = :user_foo group by .0" } ] } @@ -4562,7 +4394,6 @@ "JoinVars": { "user_foo": 1 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -4572,8 +4403,7 @@ "Sharded": true }, "FieldQuery": "select count(*), `user`.foo from `user` where 1 != 1 group by `user`.foo", - "Query": "select count(*), `user`.foo from `user` group by `user`.foo", - "Table": "`user`" + "Query": "select count(*), `user`.foo from `user` group by `user`.foo" }, { "OperatorType": "Route", @@ -4583,8 +4413,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from music where 1 != 1 group by .0", - "Query": "select count(*) from music where music.bar = :user_foo group by .0", - "Table": "music" + "Query": "select count(*) from music where music.bar = :user_foo group by .0" } ] } @@ -4626,7 +4455,6 @@ "JoinVars": { "user_foo": 2 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -4637,8 +4465,7 @@ }, "FieldQuery": "select count(*), `user`.col, `user`.foo from `user` where 1 != 1 group by `user`.col, `user`.foo", "OrderBy": "1 ASC", - "Query": "select count(*), `user`.col, `user`.foo from `user` group by `user`.col, `user`.foo order by `user`.col asc", - "Table": "`user`" + "Query": "select count(*), `user`.col, `user`.foo from `user` group by `user`.col, `user`.foo order by `user`.col asc" }, { "OperatorType": "Route", @@ -4648,8 +4475,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from music where 1 != 1 group by .0", - "Query": "select count(*) from music where music.bar = :user_foo group by .0", - "Table": "music" + "Query": "select count(*) from music where music.bar = :user_foo group by .0" } ] } @@ -4697,7 +4523,6 @@ "JoinVars": { "user_foo": 1 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -4707,8 +4532,7 @@ "Sharded": true }, "FieldQuery": "select count(*), `user`.foo from `user` where 1 != 1 group by `user`.foo", - "Query": "select count(*), `user`.foo from `user` group by `user`.foo", - "Table": "`user`" + "Query": "select count(*), `user`.foo from `user` group by `user`.foo" }, { "OperatorType": "Route", @@ -4718,8 +4542,7 @@ "Sharded": true }, "FieldQuery": "select count(*), music.col, weight_string(music.col) from music where 1 != 1 group by music.col, weight_string(music.col)", - "Query": "select count(*), music.col, weight_string(music.col) from music where music.bar = :user_foo group by music.col, weight_string(music.col)", - "Table": "music" + "Query": "select count(*), music.col, weight_string(music.col) from music where music.bar = :user_foo group by music.col, weight_string(music.col)" } ] } @@ -4763,7 +4586,6 @@ "JoinVars": { "user_foo": 2 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -4774,8 +4596,7 @@ }, "FieldQuery": "select count(*), `user`.col, `user`.foo from `user` where 1 != 1 group by `user`.col, `user`.foo", "OrderBy": "1 ASC", - "Query": "select count(*), `user`.col, `user`.foo from `user` group by `user`.col, `user`.foo order by `user`.col asc", - "Table": "`user`" + "Query": "select count(*), `user`.col, `user`.foo from `user` group by `user`.col, `user`.foo order by `user`.col asc" }, { "OperatorType": "Route", @@ -4785,8 +4606,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from music where 1 != 1 group by .0", - "Query": "select count(*) from music where music.bar = :user_foo group by .0", - "Table": "music" + "Query": "select count(*) from music where music.bar = :user_foo group by .0" } ] } @@ -4834,7 +4654,6 @@ "JoinVars": { "user_foo": 1 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -4844,8 +4663,7 @@ "Sharded": true }, "FieldQuery": "select count(*), `user`.foo from `user` where 1 != 1 group by `user`.foo", - "Query": "select count(*), `user`.foo from `user` group by `user`.foo", - "Table": "`user`" + "Query": "select count(*), `user`.foo from `user` group by `user`.foo" }, { "OperatorType": "Route", @@ -4855,8 +4673,7 @@ "Sharded": true }, "FieldQuery": "select count(*), music.col, weight_string(music.col) from music where 1 != 1 group by music.col, weight_string(music.col)", - "Query": "select count(*), music.col, weight_string(music.col) from music where music.bar = :user_foo group by music.col, weight_string(music.col)", - "Table": "music" + "Query": "select count(*), music.col, weight_string(music.col) from music where music.bar = :user_foo group by music.col, weight_string(music.col)" } ] } @@ -4897,7 +4714,6 @@ "JoinVars": { "user_extra_baz": 1 }, - "TableName": "user_extra_`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -4907,8 +4723,7 @@ "Sharded": true }, "FieldQuery": "select count(*), user_extra.baz from user_extra where 1 != 1 group by user_extra.baz", - "Query": "select count(*), user_extra.baz from user_extra group by user_extra.baz", - "Table": "user_extra" + "Query": "select count(*), user_extra.baz from user_extra group by user_extra.baz" }, { "OperatorType": "Projection", @@ -4923,7 +4738,6 @@ "JoinVars": { "user_foo": 1 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -4933,8 +4747,7 @@ "Sharded": true }, "FieldQuery": "select count(*), `user`.foo from `user` where 1 != 1 group by `user`.foo", - "Query": "select count(*), `user`.foo from `user` where `user`.foo = :user_extra_baz group by `user`.foo", - "Table": "`user`" + "Query": "select count(*), `user`.foo from `user` where `user`.foo = :user_extra_baz group by `user`.foo" }, { "OperatorType": "Route", @@ -4944,8 +4757,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from music where 1 != 1 group by .0", - "Query": "select count(*) from music where music.bar = :user_foo group by .0", - "Table": "music" + "Query": "select count(*) from music where music.bar = :user_foo group by .0" } ] } @@ -4989,7 +4801,6 @@ "JoinVars": { "user_foo": 1 }, - "TableName": "`user`_music_user_extra", "Inputs": [ { "OperatorType": "Projection", @@ -5005,7 +4816,6 @@ "JoinVars": { "user_foo": 1 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -5015,8 +4825,7 @@ "Sharded": true }, "FieldQuery": "select count(*), `user`.foo from `user` where 1 != 1 group by `user`.foo", - "Query": "select count(*), `user`.foo from `user` group by `user`.foo", - "Table": "`user`" + "Query": "select count(*), `user`.foo from `user` group by `user`.foo" }, { "OperatorType": "Route", @@ -5026,8 +4835,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from music where 1 != 1 group by .0", - "Query": "select count(*) from music where music.bar = :user_foo group by .0", - "Table": "music" + "Query": "select count(*) from music where music.bar = :user_foo group by .0" } ] } @@ -5041,8 +4849,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from user_extra where 1 != 1 group by .0", - "Query": "select count(*) from user_extra where user_extra.baz = :user_foo group by .0", - "Table": "user_extra" + "Query": "select count(*) from user_extra where user_extra.baz = :user_foo group by .0" } ] } @@ -5082,7 +4889,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0,L:1,L:2", - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -5093,8 +4899,7 @@ }, "FieldQuery": "select count(*), u.col, u.intcol from `user` as u where 1 != 1 group by u.col, u.intcol", "OrderBy": "2 ASC, 1 ASC", - "Query": "select count(*), u.col, u.intcol from `user` as u group by u.col, u.intcol order by u.intcol asc, u.col asc", - "Table": "`user`" + "Query": "select count(*), u.col, u.intcol from `user` as u group by u.col, u.intcol order by u.intcol asc, u.col asc" }, { "OperatorType": "Route", @@ -5104,8 +4909,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from music where 1 != 1 group by .0", - "Query": "select count(*) from music group by .0", - "Table": "music" + "Query": "select count(*) from music group by .0" } ] } @@ -5134,8 +4938,7 @@ "Sharded": true }, "FieldQuery": "select col, val, id from `user` where 1 != 1 group by col, val, id", - "Query": "select col, val, id from `user` group by col, val, id", - "Table": "`user`" + "Query": "select col, val, id from `user` group by col, val, id" }, "TablesUsed": [ "user.user" @@ -5165,8 +4968,7 @@ "Sharded": true }, "FieldQuery": "select a, b as a, weight_string(a), weight_string(b) from `user` where 1 != 1", - "Query": "select distinct a, b as a, weight_string(a), weight_string(b) from `user`", - "Table": "`user`" + "Query": "select distinct a, b as a, weight_string(a), weight_string(b) from `user`" } ] }, @@ -5197,8 +4999,7 @@ "Sharded": true }, "FieldQuery": "select a + 1, weight_string(a + 1) from `user` where 1 != 1", - "Query": "select distinct a + 1, weight_string(a + 1) from `user`", - "Table": "`user`" + "Query": "select distinct a + 1, weight_string(a + 1) from `user`" } ] }, @@ -5236,8 +5037,7 @@ }, "FieldQuery": "select count(*), col from `user` where 1 != 1 group by col", "OrderBy": "1 ASC", - "Query": "select count(*), col from `user` group by col order by col asc", - "Table": "`user`" + "Query": "select count(*), col from `user` group by col order by col asc" } ] } @@ -5270,8 +5070,7 @@ }, "FieldQuery": "select min(textcol1), max(textcol2), textcol1, textcol1, weight_string(max(textcol2)) from `user` where 1 != 1 group by textcol1", "OrderBy": "2 ASC COLLATE latin1_swedish_ci", - "Query": "select min(textcol1), max(textcol2), textcol1, textcol1, weight_string(max(textcol2)) from `user` group by textcol1 order by textcol1 asc", - "Table": "`user`" + "Query": "select min(textcol1), max(textcol2), textcol1, textcol1, weight_string(max(textcol2)) from `user` group by textcol1 order by textcol1 asc" } ] }, @@ -5303,8 +5102,7 @@ }, "FieldQuery": "select col, min(textcol1), max(textcol2), textcol1, textcol1, weight_string(max(textcol2)) from `user` where 1 != 1 group by col, textcol1", "OrderBy": "0 ASC, 3 ASC COLLATE latin1_swedish_ci", - "Query": "select col, min(textcol1), max(textcol2), textcol1, textcol1, weight_string(max(textcol2)) from `user` group by col, textcol1 order by col asc, textcol1 asc", - "Table": "`user`" + "Query": "select col, min(textcol1), max(textcol2), textcol1, textcol1, weight_string(max(textcol2)) from `user` group by col, textcol1 order by col asc, textcol1 asc" } ] }, @@ -5335,8 +5133,7 @@ }, "FieldQuery": "select col, col, count(*) from `user` where 1 != 1 group by col", "OrderBy": "0 ASC", - "Query": "select col, col, count(*) from `user` group by col order by col asc", - "Table": "`user`" + "Query": "select col, col, count(*) from `user` group by col order by col asc" } ] }, @@ -5369,7 +5166,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0,R:1", - "TableName": "user_extra_`user`_`user`", "Inputs": [ { "OperatorType": "Route", @@ -5379,8 +5175,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from user_extra as ue where 1 != 1", - "Query": "select count(*) from user_extra as ue", - "Table": "user_extra" + "Query": "select count(*) from user_extra as ue" }, { "OperatorType": "Projection", @@ -5393,7 +5188,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0,L:1", - "TableName": "`user`_`user`", "Inputs": [ { "OperatorType": "Route", @@ -5403,8 +5197,7 @@ "Sharded": true }, "FieldQuery": "select count(*), count(u.col) from `user` as u where 1 != 1 group by .0", - "Query": "select count(*), count(u.col) from `user` as u group by .0", - "Table": "`user`" + "Query": "select count(*), count(u.col) from `user` as u group by .0" }, { "OperatorType": "Route", @@ -5414,8 +5207,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from `user` as u2 where 1 != 1 group by .0", - "Query": "select count(*) from `user` as u2 group by .0", - "Table": "`user`" + "Query": "select count(*) from `user` as u2 group by .0" } ] } @@ -5454,7 +5246,6 @@ "JoinVars": { "user_col": 0 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -5465,8 +5256,7 @@ }, "FieldQuery": "select `user`.col, `user`.bar, weight_string(`user`.bar) from `user` where 1 != 1 group by `user`.col, `user`.bar, weight_string(`user`.bar)", "OrderBy": "0 ASC, (1|2) ASC", - "Query": "select `user`.col, `user`.bar, weight_string(`user`.bar) from `user` group by `user`.col, `user`.bar, weight_string(`user`.bar) order by `user`.col asc, `user`.bar asc", - "Table": "`user`" + "Query": "select `user`.col, `user`.bar, weight_string(`user`.bar) from `user` group by `user`.col, `user`.bar, weight_string(`user`.bar) order by `user`.col asc, `user`.bar asc" }, { "OperatorType": "Route", @@ -5476,8 +5266,7 @@ "Sharded": true }, "FieldQuery": "select min(user_extra.foo), max(user_extra.bar), weight_string(user_extra.foo), weight_string(user_extra.bar) from user_extra where 1 != 1 group by .0, weight_string(user_extra.foo), weight_string(user_extra.bar)", - "Query": "select min(user_extra.foo), max(user_extra.bar), weight_string(user_extra.foo), weight_string(user_extra.bar) from user_extra where user_extra.bar = :user_col /* INT16 */ group by .0, weight_string(user_extra.foo), weight_string(user_extra.bar)", - "Table": "user_extra" + "Query": "select min(user_extra.foo), max(user_extra.bar), weight_string(user_extra.foo), weight_string(user_extra.bar) from user_extra where user_extra.bar = :user_col /* INT16 */ group by .0, weight_string(user_extra.foo), weight_string(user_extra.bar)" } ] } @@ -5509,7 +5298,6 @@ "JoinVars": { "u_foo": 0 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -5519,8 +5307,7 @@ "Sharded": true }, "FieldQuery": "select u.foo from `user` as u where 1 != 1", - "Query": "select u.foo from `user` as u", - "Table": "`user`" + "Query": "select u.foo from `user` as u" }, { "OperatorType": "Route", @@ -5530,8 +5317,7 @@ "Sharded": true }, "FieldQuery": "select :u_foo * ue.bar, weight_string(:u_foo * ue.bar) from user_extra as ue where 1 != 1", - "Query": "select :u_foo * ue.bar, weight_string(:u_foo * ue.bar) from user_extra as ue", - "Table": "user_extra" + "Query": "select :u_foo * ue.bar, weight_string(:u_foo * ue.bar) from user_extra as ue" } ] } @@ -5562,7 +5348,6 @@ "JoinVars": { "user_foo": 0 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -5572,8 +5357,7 @@ "Sharded": true }, "FieldQuery": "select `user`.foo from `user` where 1 != 1", - "Query": "select `user`.foo from `user`", - "Table": "`user`" + "Query": "select `user`.foo from `user`" }, { "OperatorType": "Route", @@ -5583,8 +5367,7 @@ "Sharded": true }, "FieldQuery": "select :user_foo + user_extra.bar from user_extra where 1 != 1", - "Query": "select :user_foo + user_extra.bar from user_extra", - "Table": "user_extra" + "Query": "select :user_foo + user_extra.bar from user_extra" } ] } @@ -5630,7 +5413,6 @@ "JoinVars": { "user_id": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -5640,8 +5422,7 @@ "Sharded": true }, "FieldQuery": "select count(*), `user`.id from `user` where 1 != 1 group by `user`.id", - "Query": "select count(*), `user`.id from `user` group by `user`.id", - "Table": "`user`" + "Query": "select count(*), `user`.id from `user` group by `user`.id" }, { "OperatorType": "Route", @@ -5651,8 +5432,7 @@ "Sharded": true }, "FieldQuery": "select count(*), :user_id + user_extra.id, weight_string(:user_id + user_extra.id) from user_extra where 1 != 1 group by :user_id + user_extra.id, weight_string(:user_id + user_extra.id)", - "Query": "select count(*), :user_id + user_extra.id, weight_string(:user_id + user_extra.id) from user_extra group by :user_id + user_extra.id, weight_string(:user_id + user_extra.id)", - "Table": "user_extra" + "Query": "select count(*), :user_id + user_extra.id, weight_string(:user_id + user_extra.id) from user_extra group by :user_id + user_extra.id, weight_string(:user_id + user_extra.id)" } ] } @@ -5694,8 +5474,7 @@ "Sharded": true }, "FieldQuery": "select 1, count(*) from `user` where 1 != 1", - "Query": "select 1, count(*) from `user`", - "Table": "`user`" + "Query": "select 1, count(*) from `user`" } ] } @@ -5738,7 +5517,6 @@ "JoinVars": { "user_col": 2 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -5748,8 +5526,7 @@ "Sharded": true }, "FieldQuery": "select sum(`user`.foo), count(*), `user`.col from `user` where 1 != 1 group by `user`.col", - "Query": "select sum(`user`.foo), count(*), `user`.col from `user` group by `user`.col", - "Table": "`user`" + "Query": "select sum(`user`.foo), count(*), `user`.col from `user` group by `user`.col" }, { "OperatorType": "Route", @@ -5759,8 +5536,7 @@ "Sharded": true }, "FieldQuery": "select count(*), sum(user_extra.bar) from user_extra where 1 != 1 group by .0", - "Query": "select count(*), sum(user_extra.bar) from user_extra where user_extra.col = :user_col /* INT16 */ group by .0", - "Table": "user_extra" + "Query": "select count(*), sum(user_extra.bar) from user_extra where user_extra.col = :user_col /* INT16 */ group by .0" } ] } @@ -5792,7 +5568,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -5802,8 +5577,7 @@ "Sharded": true }, "FieldQuery": "select `user`.a from `user` where 1 != 1", - "Query": "select `user`.a from `user`", - "Table": "`user`" + "Query": "select `user`.a from `user`" }, { "OperatorType": "Route", @@ -5813,8 +5587,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra", - "Table": "user_extra" + "Query": "select 1 from user_extra" } ] } @@ -5853,7 +5626,6 @@ "JoinVars": { "u_bar": 2 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -5863,8 +5635,7 @@ "Sharded": true }, "FieldQuery": "select count(*), any_value(u.`name`), u.bar from `user` as u where 1 != 1 group by u.bar", - "Query": "select count(*), any_value(u.`name`), u.bar from `user` as u group by u.bar", - "Table": "`user`" + "Query": "select count(*), any_value(u.`name`), u.bar from `user` as u group by u.bar" }, { "OperatorType": "Route", @@ -5874,8 +5645,7 @@ "Sharded": true }, "FieldQuery": "select count(*), any_value(ue.title) from user_extra as ue where 1 != 1 group by .0", - "Query": "select count(*), any_value(ue.title) from user_extra as ue where ue.foo = :u_bar group by .0", - "Table": "user_extra" + "Query": "select count(*), any_value(ue.title) from user_extra as ue where ue.foo = :u_bar group by .0" } ] } @@ -5908,7 +5678,6 @@ "JoinVars": { "d_id": 1 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Aggregate", @@ -5933,8 +5702,7 @@ }, "FieldQuery": "select dt.c0 as id, dt.c1 as a, weight_string(dt.c0), weight_string(dt.c0) from (select id, count(*) as a from `user` where 1 != 1) as dt(c0, c1) where 1 != 1", "OrderBy": "1 ASC, (0|3) ASC", - "Query": "select dt.c0 as id, dt.c1 as a, weight_string(dt.c0), weight_string(dt.c0) from (select id, count(*) as a from `user` order by count(*) asc, id asc) as dt(c0, c1)", - "Table": "`user`" + "Query": "select dt.c0 as id, dt.c1 as a, weight_string(dt.c0), weight_string(dt.c0) from (select id, count(*) as a from `user` order by count(*) asc, id asc) as dt(c0, c1)" } ] } @@ -5951,7 +5719,6 @@ }, "FieldQuery": "select 1 from music where 1 != 1 group by .0", "Query": "select 1 from music where music.user_id = :d_id group by .0", - "Table": "music", "Values": [ ":d_id" ], @@ -5993,7 +5760,6 @@ "JoinVars": { "music_foo": 0 }, - "TableName": "music_`user`", "Inputs": [ { "OperatorType": "Route", @@ -6003,8 +5769,7 @@ "Sharded": true }, "FieldQuery": "select music.foo from music where 1 != 1", - "Query": "select music.foo from music", - "Table": "music" + "Query": "select music.foo from music" }, { "OperatorType": "Route", @@ -6015,7 +5780,6 @@ }, "FieldQuery": "select `user`.id, `user`.bar, weight_string(`user`.bar) from `user` where 1 != 1", "Query": "select `user`.id, `user`.bar, weight_string(`user`.bar) from `user` where `user`.id = :music_foo", - "Table": "`user`", "Values": [ ":music_foo" ], @@ -6055,8 +5819,7 @@ }, "FieldQuery": "select intcol, group_concat(foo) from `user` where 1 != 1 group by intcol", "OrderBy": "0 ASC", - "Query": "select intcol, group_concat(foo) from `user` group by intcol order by intcol asc", - "Table": "`user`" + "Query": "select intcol, group_concat(foo) from `user` group by intcol order by intcol asc" } ] }, @@ -6091,7 +5854,6 @@ "JoinVars": { "u_col": 3 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -6102,8 +5864,7 @@ }, "FieldQuery": "select u.foo, u.bar, u.baz, u.col, weight_string(u.foo), weight_string(u.baz) from `user` as u where 1 != 1", "OrderBy": "(0|4) ASC", - "Query": "select u.foo, u.bar, u.baz, u.col, weight_string(u.foo), weight_string(u.baz) from `user` as u order by u.foo asc", - "Table": "`user`" + "Query": "select u.foo, u.bar, u.baz, u.col, weight_string(u.foo), weight_string(u.baz) from `user` as u order by u.foo asc" }, { "OperatorType": "Route", @@ -6113,8 +5874,7 @@ "Sharded": true }, "FieldQuery": "select 1 from music as m where 1 != 1", - "Query": "select 1 from music as m where m.col = :u_col /* INT16 */", - "Table": "music" + "Query": "select 1 from music as m where m.col = :u_col /* INT16 */" } ] } @@ -6146,7 +5906,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0,R:1,L:1", - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -6157,8 +5916,7 @@ }, "FieldQuery": "select u.col1, weight_string(u.col1) from `user` as u where 1 != 1 group by u.col1, weight_string(u.col1)", "OrderBy": "(0|1) ASC", - "Query": "select u.col1, weight_string(u.col1) from `user` as u group by u.col1, weight_string(u.col1) order by u.col1 asc", - "Table": "`user`" + "Query": "select u.col1, weight_string(u.col1) from `user` as u group by u.col1, weight_string(u.col1) order by u.col1 asc" }, { "OperatorType": "Route", @@ -6168,8 +5926,7 @@ "Sharded": true }, "FieldQuery": "select count(distinct m.user_id), sum(distinct m.user_id) from music as m where 1 != 1 group by .0", - "Query": "select count(distinct m.user_id), sum(distinct m.user_id) from music as m group by .0", - "Table": "music" + "Query": "select count(distinct m.user_id), sum(distinct m.user_id) from music as m group by .0" } ] } @@ -6204,8 +5961,7 @@ }, "FieldQuery": "select foo, min(bar) as `min(distinct bar)`, baz, baz, max(toto) as `max(distinct toto)`, weight_string(foo), weight_string(min(bar)), weight_string(baz), weight_string(max(toto)) from `user` where 1 != 1 group by foo, baz, weight_string(foo), weight_string(baz)", "OrderBy": "(0|5) ASC, (2|7) ASC", - "Query": "select foo, min(bar) as `min(distinct bar)`, baz, baz, max(toto) as `max(distinct toto)`, weight_string(foo), weight_string(min(bar)), weight_string(baz), weight_string(max(toto)) from `user` group by foo, baz, weight_string(foo), weight_string(baz) order by foo asc, baz asc", - "Table": "`user`" + "Query": "select foo, min(bar) as `min(distinct bar)`, baz, baz, max(toto) as `max(distinct toto)`, weight_string(foo), weight_string(min(bar)), weight_string(baz), weight_string(max(toto)) from `user` group by foo, baz, weight_string(foo), weight_string(baz) order by foo asc, baz asc" } ] }, @@ -6237,8 +5993,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user`", - "Table": "`user`" + "Query": "select col from `user`" }, { "OperatorType": "Route", @@ -6248,8 +6003,7 @@ "Sharded": false }, "FieldQuery": "select col from unsharded where 1 != 1", - "Query": "select col from unsharded", - "Table": "unsharded" + "Query": "select col from unsharded" } ] } @@ -6289,8 +6043,7 @@ "Sharded": true }, "FieldQuery": "select x.id, x.val2 from (select id, val2 from `user` where 1 != 1) as x where 1 != 1", - "Query": "select x.id, x.val2 from (select id, val2 from `user` where val2 is null) as x limit 2", - "Table": "`user`" + "Query": "select x.id, x.val2 from (select id, val2 from `user` where val2 is null) as x limit 2" } ] } @@ -6330,8 +6083,7 @@ }, "FetchLastInsertID": true, "FieldQuery": "select count(*) from `user` where 1 != 1", - "Query": "select count(*) from `user`", - "Table": "`user`" + "Query": "select count(*) from `user`" } ] } @@ -6364,7 +6116,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0", - "TableName": "`user`_`user`", "Inputs": [ { "OperatorType": "Route", @@ -6374,8 +6125,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from `user` where 1 != 1", - "Query": "select count(*) from `user`", - "Table": "`user`" + "Query": "select count(*) from `user`" }, { "OperatorType": "Aggregate", @@ -6404,8 +6154,7 @@ "Sharded": true }, "FieldQuery": "select count(*), .0 from `user` where 1 != 1 group by .0", - "Query": "select count(*), .0 from `user` group by .0", - "Table": "`user`" + "Query": "select count(*), .0 from `user` group by .0" } ] } @@ -6452,8 +6201,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from user_extra where 1 != 1", - "Query": "select count(*) from user_extra", - "Table": "user_extra" + "Query": "select count(*) from user_extra" } ] }, @@ -6479,8 +6227,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from `user` where 1 != 1", - "Query": "select count(*) from `user`", - "Table": "`user`" + "Query": "select count(*) from `user`" } ] }, @@ -6493,8 +6240,7 @@ "Sharded": false }, "FieldQuery": "select :__sq1 /* INT64 */ + :__sq2 /* INT64 */ as `(select count(*) from ``user``) + (select count(*) from user_extra)` from dual where 1 != 1", - "Query": "select :__sq1 /* INT64 */ + :__sq2 /* INT64 */ as `(select count(*) from ``user``) + (select count(*) from user_extra)` from dual", - "Table": "dual" + "Query": "select :__sq1 /* INT64 */ + :__sq2 /* INT64 */ as `(select count(*) from ``user``) + (select count(*) from user_extra)` from dual" } ] } @@ -6533,8 +6279,7 @@ "Sharded": true }, "FieldQuery": "select sum(id), count(id) from `user` where 1 != 1", - "Query": "select sum(id), count(id) from `user`", - "Table": "`user`" + "Query": "select sum(id), count(id) from `user`" } ] } @@ -6581,8 +6326,7 @@ }, "FieldQuery": "select bar, sum(id), count(foo), count(id), weight_string(bar) from `user` where 1 != 1 group by bar, weight_string(bar)", "OrderBy": "(0|4) ASC", - "Query": "select bar, sum(id), count(foo), count(id), weight_string(bar) from `user` group by bar, weight_string(bar) order by bar asc", - "Table": "`user`" + "Query": "select bar, sum(id), count(foo), count(id), weight_string(bar) from `user` group by bar, weight_string(bar) order by bar asc" } ] } @@ -6631,8 +6375,7 @@ }, "FieldQuery": "select bar, sum(id), count(foo), count(id), weight_string(bar) from `user` where 1 != 1 group by bar, weight_string(bar)", "OrderBy": "(0|4) ASC", - "Query": "select bar, sum(id), count(foo), count(id), weight_string(bar) from `user` group by bar, weight_string(bar) order by bar asc", - "Table": "`user`" + "Query": "select bar, sum(id), count(foo), count(id), weight_string(bar) from `user` group by bar, weight_string(bar) order by bar asc" } ] } @@ -6672,8 +6415,7 @@ "Sharded": true }, "FieldQuery": "select sum(foo), sum(bar), count(foo), count(bar) from `user` where 1 != 1", - "Query": "select sum(foo), sum(bar), count(foo), count(bar) from `user`", - "Table": "`user`" + "Query": "select sum(foo), sum(bar), count(foo), count(bar) from `user`" } ] } @@ -6711,8 +6453,7 @@ "Sharded": true }, "FieldQuery": "select sum(foo), count(foo), count(foo) from `user` where 1 != 1", - "Query": "select sum(foo), count(foo), count(foo) from `user`", - "Table": "`user`" + "Query": "select sum(foo), count(foo), count(foo) from `user`" } ] } @@ -6737,7 +6478,6 @@ "JoinVars": { "tables_table_name": 0 }, - "TableName": "`user`_`user`", "Inputs": [ { "OperatorType": "Route", @@ -6748,7 +6488,6 @@ }, "FieldQuery": "select `tables`.`table_name` from (select `table_name` from `user` where 1 != 1 group by `table_name`) as `tables` where 1 != 1", "Query": "select `tables`.`table_name` from (select `table_name` from `user` where id = 143 group by `table_name`) as `tables`", - "Table": "`user`", "Values": [ "143" ], @@ -6762,8 +6501,7 @@ "Sharded": true }, "FieldQuery": "select c.`column_name` from `user` as c where 1 != 1", - "Query": "select c.`column_name` from `user` as c where c.`table_name` = :tables_table_name", - "Table": "`user`" + "Query": "select c.`column_name` from `user` as c where c.`table_name` = :tables_table_name" } ] }, @@ -6797,7 +6535,6 @@ "JoinVars": { "foobars_min_id": 0 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Aggregate", @@ -6818,8 +6555,7 @@ }, "FieldQuery": "select min(bb.id) as min_id, max(bb.id) as max_id, weight_string(min(bb.id)), weight_string(max(bb.id)) from `user` as bb where 1 != 1", "OrderBy": "0 ASC COLLATE utf8mb4_0900_ai_ci", - "Query": "select min(bb.id) as min_id, max(bb.id) as max_id, weight_string(min(bb.id)), weight_string(max(bb.id)) from `user` as bb order by min(bb.id) asc", - "Table": "`user`" + "Query": "select min(bb.id) as min_id, max(bb.id) as max_id, weight_string(min(bb.id)), weight_string(max(bb.id)) from `user` as bb order by min(bb.id) asc" } ] } @@ -6833,8 +6569,7 @@ "Sharded": true }, "FieldQuery": "select b.col, weight_string(b.col) from music as b where 1 != 1 group by b.col, weight_string(b.col)", - "Query": "select b.col, weight_string(b.col) from music as b where b.id > :foobars_min_id group by b.col, weight_string(b.col)", - "Table": "music" + "Query": "select b.col, weight_string(b.col) from music as b where b.id > :foobars_min_id group by b.col, weight_string(b.col)" } ] } @@ -6881,7 +6616,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0,L:1,R:1,L:2,R:2", - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -6891,8 +6625,7 @@ "Sharded": true }, "FieldQuery": "select count(*), cast(`user`.foo as datetime) as f1, weight_string(cast(`user`.foo as datetime)) from `user` where 1 != 1 group by cast(`user`.foo as datetime), weight_string(cast(`user`.foo as datetime))", - "Query": "select count(*), cast(`user`.foo as datetime) as f1, weight_string(cast(`user`.foo as datetime)) from `user` group by cast(`user`.foo as datetime), weight_string(cast(`user`.foo as datetime))", - "Table": "`user`" + "Query": "select count(*), cast(`user`.foo as datetime) as f1, weight_string(cast(`user`.foo as datetime)) from `user` group by cast(`user`.foo as datetime), weight_string(cast(`user`.foo as datetime))" }, { "OperatorType": "Route", @@ -6902,8 +6635,7 @@ "Sharded": true }, "FieldQuery": "select count(*), cast(music.foo as datetime) as f2, weight_string(cast(music.foo as datetime)) from music where 1 != 1 group by cast(music.foo as datetime), weight_string(cast(music.foo as datetime))", - "Query": "select count(*), cast(music.foo as datetime) as f2, weight_string(cast(music.foo as datetime)) from music group by cast(music.foo as datetime), weight_string(cast(music.foo as datetime))", - "Table": "music" + "Query": "select count(*), cast(music.foo as datetime) as f2, weight_string(cast(music.foo as datetime)) from music group by cast(music.foo as datetime), weight_string(cast(music.foo as datetime))" } ] } @@ -6955,7 +6687,6 @@ "ComparisonType": "INT16", "JoinColumnIndexes": "-1,1,-2,2,-3,3,-3,4", "Predicate": "`user`.col = ue.col", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -6965,8 +6696,7 @@ "Sharded": true }, "FieldQuery": "select count(*), `user`.col, `user`.foo from `user` where 1 != 1 group by `user`.col, `user`.foo", - "Query": "select count(*), `user`.col, `user`.foo from `user` group by `user`.col, `user`.foo", - "Table": "`user`" + "Query": "select count(*), `user`.col, `user`.foo from `user` group by `user`.col, `user`.foo" }, { "OperatorType": "Aggregate", @@ -7000,8 +6730,7 @@ "Sharded": true }, "FieldQuery": "select ue.col, ue.bar, weight_string(ue.bar) from (select col, bar from user_extra where 1 != 1) as ue where 1 != 1", - "Query": "select ue.col, ue.bar, weight_string(ue.bar) from (select col, bar from user_extra) as ue limit 10", - "Table": "user_extra" + "Query": "select ue.col, ue.bar, weight_string(ue.bar) from (select col, bar from user_extra) as ue limit 10" } ] } @@ -7041,7 +6770,6 @@ }, "FieldQuery": "select max((select min(col) from `user` where 1 != 1)) from dual where 1 != 1", "Query": "select max((select min(col) from `user` where id = 1)) from dual", - "Table": "dual", "Values": [ "1" ], @@ -7082,8 +6810,7 @@ "Sharded": false }, "FieldQuery": "select min(col) from unsharded where 1 != 1", - "Query": "select min(col) from unsharded", - "Table": "unsharded" + "Query": "select min(col) from unsharded" }, { "InputName": "Outer", @@ -7095,7 +6822,6 @@ }, "FieldQuery": "select max(:__sq1), weight_string(:__sq1) from `user` where 1 != 1 group by weight_string(:__sq1)", "Query": "select max(:__sq1), weight_string(:__sq1) from `user` where id = 1 group by weight_string(:__sq1)", - "Table": "`user`", "Values": [ "1" ], @@ -7141,7 +6867,6 @@ }, "FieldQuery": "select min(col) from `user` where 1 != 1", "Query": "select min(col) from `user` where id = 1", - "Table": "`user`", "Values": [ "1" ], @@ -7157,7 +6882,6 @@ }, "FieldQuery": "select max(:__sq1 /* INT16 */), weight_string(:__sq1 /* INT16 */) from `user` where 1 != 1 group by weight_string(:__sq1 /* INT16 */)", "Query": "select max(:__sq1 /* INT16 */), weight_string(:__sq1 /* INT16 */) from `user` where id = 2 group by weight_string(:__sq1 /* INT16 */)", - "Table": "`user`", "Values": [ "2" ], @@ -7188,7 +6912,6 @@ }, "FieldQuery": "select max((select group_concat(col1, col2) from `user` where 1 != 1)) from dual where 1 != 1", "Query": "select max((select group_concat(col1, col2) from `user` where id = 1)) from dual", - "Table": "dual", "Values": [ "1" ], @@ -7216,7 +6939,6 @@ }, "FieldQuery": "select max((select group_concat(col1, col2) from `user` where 1 != 1)) from `user` where 1 != 1", "Query": "select max((select group_concat(col1, col2) from `user` where id = 1)) from `user` where id = 1", - "Table": "`user`", "Values": [ "1" ], @@ -7257,7 +6979,6 @@ }, "FieldQuery": "select group_concat(col1, col2) from `user` where 1 != 1", "Query": "select group_concat(col1, col2) from `user` where id = 1", - "Table": "`user`", "Values": [ "1" ], @@ -7272,8 +6993,7 @@ "Sharded": true }, "FieldQuery": "select max(:__sq1), weight_string(:__sq1) from `user` where 1 != 1 group by weight_string(:__sq1)", - "Query": "select max(:__sq1), weight_string(:__sq1) from `user` group by weight_string(:__sq1)", - "Table": "`user`" + "Query": "select max(:__sq1), weight_string(:__sq1) from `user` group by weight_string(:__sq1)" } ] } @@ -7305,8 +7025,7 @@ "Sharded": true }, "FieldQuery": "select max((select max(col2) from `user` as u1 where 1 != 1)), weight_string(max((select max(col2) from `user` as u1 where 1 != 1))) from `user` as u2 where 1 != 1", - "Query": "select max((select max(col2) from `user` as u1 where u1.id = u2.id)), weight_string(max((select max(col2) from `user` as u1 where u1.id = u2.id))) from `user` as u2", - "Table": "`user`" + "Query": "select max((select max(col2) from `user` as u1 where u1.id = u2.id)), weight_string(max((select max(col2) from `user` as u1 where u1.id = u2.id))) from `user` as u2" } ] }, @@ -7335,8 +7054,7 @@ "Sharded": true }, "FieldQuery": "select count(a, b) from `user` where 1 != 1", - "Query": "select count(a, b) from `user`", - "Table": "`user`" + "Query": "select count(a, b) from `user`" } ] }, @@ -7365,8 +7083,7 @@ "Sharded": true }, "FieldQuery": "select group_concat(col1, col2) from `user` where 1 != 1", - "Query": "select group_concat(col1, col2) from `user`", - "Table": "`user`" + "Query": "select group_concat(col1, col2) from `user`" } ] }, @@ -7395,8 +7112,7 @@ "Sharded": true }, "FieldQuery": "select count(distinct `name`, id) from `user` where 1 != 1", - "Query": "select count(distinct `name`, id) from `user`", - "Table": "`user`" + "Query": "select count(distinct `name`, id) from `user`" } ] }, @@ -7422,8 +7138,7 @@ "FieldQuery": "select id, from_unixtime(min(col)) as col, min(col) from `user` where 1 != 1 group by id", "OrderBy": "2 ASC COLLATE utf8mb4_0900_ai_ci", "Query": "select id, from_unixtime(min(col)) as col, min(col) from `user` group by id order by min(col) asc", - "ResultColumns": 2, - "Table": "`user`" + "ResultColumns": 2 }, "TablesUsed": [ "user.user" @@ -7454,8 +7169,7 @@ "Sharded": true }, "FieldQuery": "select sum(x) as col from `user` where 1 != 1", - "Query": "select sum(x) as col from `user` where x > 0", - "Table": "`user`" + "Query": "select sum(x) as col from `user` where x > 0" } ] } @@ -7491,8 +7205,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1 group by id", - "Query": "select id from `user` group by id having udf_aggr(foo) > 1", - "Table": "`user`" + "Query": "select id from `user` group by id having udf_aggr(foo) > 1" }, "TablesUsed": [ "user.user" @@ -7514,8 +7227,7 @@ "Sharded": false }, "FieldQuery": "select bar, udf_aggr(foo) from unsharded where 1 != 1 group by bar", - "Query": "select bar, udf_aggr(foo) from unsharded group by bar", - "Table": "unsharded" + "Query": "select bar, udf_aggr(foo) from unsharded group by bar" }, "TablesUsed": [ "main.unsharded" @@ -7538,7 +7250,6 @@ }, "FieldQuery": "select bar, udf_aggr(foo) from `user` where 1 != 1 group by bar", "Query": "select bar, udf_aggr(foo) from `user` where id = 17 group by bar", - "Table": "`user`", "Values": [ "17" ], @@ -7581,8 +7292,7 @@ }, "FieldQuery": "select subquery_for_count.one, subquery_for_count.id, weight_string(subquery_for_count.id) from (select 1 as one, id from `user` where 1 != 1) as subquery_for_count where 1 != 1", "OrderBy": "(1|2) DESC", - "Query": "select subquery_for_count.one, subquery_for_count.id, weight_string(subquery_for_count.id) from (select 1 as one, id from `user` where `user`.is_not_deleted = true) as subquery_for_count order by subquery_for_count.id desc limit 25", - "Table": "`user`" + "Query": "select subquery_for_count.one, subquery_for_count.id, weight_string(subquery_for_count.id) from (select 1 as one, id from `user` where `user`.is_not_deleted = true) as subquery_for_count order by subquery_for_count.id desc limit 25" } ] } @@ -7629,7 +7339,6 @@ "JoinVars": { "user_team_id": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -7639,8 +7348,7 @@ "Sharded": true }, "FieldQuery": "select sum(`user`.type), `user`.team_id from `user` where 1 != 1 group by `user`.team_id", - "Query": "select sum(`user`.type), `user`.team_id from `user` group by `user`.team_id", - "Table": "`user`" + "Query": "select sum(`user`.type), `user`.team_id from `user` group by `user`.team_id" }, { "OperatorType": "Route", @@ -7650,8 +7358,7 @@ "Sharded": true }, "FieldQuery": "select count(*), user_extra.id, weight_string(user_extra.id) from user_extra where 1 != 1 group by user_extra.id, weight_string(user_extra.id)", - "Query": "select count(*), user_extra.id, weight_string(user_extra.id) from user_extra where user_extra.id = :user_team_id group by user_extra.id, weight_string(user_extra.id)", - "Table": "user_extra" + "Query": "select count(*), user_extra.id, weight_string(user_extra.id) from user_extra where user_extra.id = :user_team_id group by user_extra.id, weight_string(user_extra.id)" } ] } diff --git a/go/vt/vtgate/planbuilder/testdata/cte_cases.json b/go/vt/vtgate/planbuilder/testdata/cte_cases.json index c226d6d357e..7d02e4c401a 100644 --- a/go/vt/vtgate/planbuilder/testdata/cte_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/cte_cases.json @@ -19,8 +19,7 @@ "Sharded": true }, "FieldQuery": "select count(*) as a from `user` where 1 != 1", - "Query": "select count(*) as a from `user`", - "Table": "`user`" + "Query": "select count(*) as a from `user`" } ] }, @@ -49,8 +48,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from (select `user`.col, user_extra.extra from `user`, user_extra where 1 != 1) as a where 1 != 1", - "Query": "select count(*) from (select `user`.col, user_extra.extra from `user`, user_extra where `user`.id = user_extra.user_id) as a", - "Table": "`user`, user_extra" + "Query": "select count(*) from (select `user`.col, user_extra.extra from `user`, user_extra where `user`.id = user_extra.user_id) as a" } ] }, @@ -75,8 +73,7 @@ "Sharded": true }, "FieldQuery": "select col from (select `user`.col, user_extra.extra from `user`, user_extra where 1 != 1) as a where 1 != 1", - "Query": "select col from (select `user`.col, user_extra.extra from `user`, user_extra where `user`.id = user_extra.user_id) as a", - "Table": "`user`, user_extra" + "Query": "select col from (select `user`.col, user_extra.extra from `user`, user_extra where `user`.id = user_extra.user_id) as a" }, "TablesUsed": [ "user.user", @@ -106,8 +103,7 @@ }, "FieldQuery": "select col, count(*) from (select `user`.col, user_extra.extra from `user`, user_extra where 1 != 1) as a where 1 != 1 group by col", "OrderBy": "0 ASC", - "Query": "select col, count(*) from (select `user`.col, user_extra.extra from `user`, user_extra where `user`.id = user_extra.user_id) as a group by col order by col asc", - "Table": "`user`, user_extra" + "Query": "select col, count(*) from (select `user`.col, user_extra.extra from `user`, user_extra where `user`.id = user_extra.user_id) as a group by col order by col asc" } ] }, @@ -139,7 +135,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -149,8 +144,7 @@ "Sharded": true }, "FieldQuery": "select sum(col) from (select `user`.col as col, 32 from `user` where 1 != 1) as t where 1 != 1", - "Query": "select sum(col) from (select `user`.col as col, 32 from `user`) as t", - "Table": "`user`" + "Query": "select sum(col) from (select `user`.col as col, 32 from `user`) as t" }, { "OperatorType": "Route", @@ -160,8 +154,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from user_extra where 1 != 1 group by .0", - "Query": "select count(*) from user_extra group by .0", - "Table": "user_extra" + "Query": "select count(*) from user_extra group by .0" } ] } @@ -203,8 +196,7 @@ "Sharded": true }, "FieldQuery": "select x.phone, x.id, x.city from (select phone, id, city from `user` where 1 != 1) as x where 1 != 1", - "Query": "select x.phone, x.id, x.city from (select phone, id, city from `user` where id > 12) as x limit 10", - "Table": "`user`" + "Query": "select x.phone, x.id, x.city from (select phone, id, city from `user` where id > 12) as x limit 10" } ] } @@ -247,8 +239,7 @@ "Sharded": true }, "FieldQuery": "select 1 from (select phone, id, city from `user` where 1 != 1) as x where 1 != 1", - "Query": "select 1 from (select phone, id, city from `user` where id > 12) as x limit 10", - "Table": "`user`" + "Query": "select 1 from (select phone, id, city from `user` where id > 12) as x limit 10" } ] } @@ -284,7 +275,6 @@ "JoinVars": { "user_id": 0 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Limit", @@ -298,8 +288,7 @@ "Sharded": true }, "FieldQuery": "select x.`user.id` from (select `user`.id as `user.id` from `user` where 1 != 1) as x where 1 != 1", - "Query": "select x.`user.id` from (select `user`.id as `user.id` from `user`) as x limit 10", - "Table": "`user`" + "Query": "select x.`user.id` from (select `user`.id as `user.id` from `user`) as x limit 10" } ] }, @@ -315,8 +304,7 @@ "Sharded": true }, "FieldQuery": "select x.col from (select user_extra.col as col from user_extra where 1 != 1) as x where 1 != 1", - "Query": "select x.col from (select user_extra.col as col from user_extra where user_extra.id = :user_id) as x limit 10", - "Table": "user_extra" + "Query": "select x.col from (select user_extra.col as col from user_extra where user_extra.id = :user_id) as x limit 10" } ] } @@ -367,8 +355,7 @@ }, "FieldQuery": "select x.id, x.val1, weight_string(x.val1) from (select id, val1 from `user` where 1 != 1) as x where 1 != 1", "OrderBy": "(1|2) ASC", - "Query": "select x.id, x.val1, weight_string(x.val1) from (select id, val1 from `user` where val2 < 4) as x order by x.val1 asc limit 2", - "Table": "`user`" + "Query": "select x.id, x.val1, weight_string(x.val1) from (select id, val1 from `user` where val2 < 4) as x order by x.val1 asc limit 2" } ] } @@ -419,8 +406,7 @@ "Sharded": true }, "FieldQuery": "select id, count(*), 1 from `user` where 1 != 1", - "Query": "select id, count(*), 1 from `user`", - "Table": "`user`" + "Query": "select id, count(*), 1 from `user`" } ] } @@ -463,8 +449,7 @@ "Sharded": true }, "FieldQuery": "select sum(a) as a, sum(b) as b from `user` where 1 != 1", - "Query": "select sum(a) as a, sum(b) as b from `user`", - "Table": "`user`" + "Query": "select sum(a) as a, sum(b) as b from `user`" } ] } @@ -490,8 +475,7 @@ "Sharded": true }, "FieldQuery": "select t1.portalId, t1.flowId from (select portalId, flowId, count(*) as `count` from user_extra where 1 != 1 group by user_id, flowId) as t1 where 1 != 1", - "Query": "select t1.portalId, t1.flowId from (select portalId, flowId, count(*) as `count` from user_extra where localDate > :v1 group by user_id, flowId) as t1 where `count` >= :v2", - "Table": "user_extra" + "Query": "select t1.portalId, t1.flowId from (select portalId, flowId, count(*) as `count` from user_extra where localDate > :v1 group by user_id, flowId) as t1 where `count` >= :v2" }, "TablesUsed": [ "user.user_extra" @@ -525,8 +509,7 @@ }, "FieldQuery": "select foo, max(baz) as bazo, weight_string(foo), weight_string(max(baz)) from (select foo, baz from `user` where 1 != 1) as f where 1 != 1 group by foo, weight_string(foo)", "OrderBy": "(0|2) ASC", - "Query": "select foo, max(baz) as bazo, weight_string(foo), weight_string(max(baz)) from (select foo, baz from `user`) as f group by foo, weight_string(foo) order by foo asc", - "Table": "`user`" + "Query": "select foo, max(baz) as bazo, weight_string(foo), weight_string(max(baz)) from (select foo, baz from `user`) as f group by foo, weight_string(foo) order by foo asc" } ] } @@ -564,8 +547,7 @@ }, "FieldQuery": "select foo, count(baz) as bazo, weight_string(foo) from (select foo, baz from `user` where 1 != 1) as f where 1 != 1 group by foo, weight_string(foo)", "OrderBy": "(0|2) ASC", - "Query": "select foo, count(baz) as bazo, weight_string(foo) from (select foo, baz from `user`) as f group by foo, weight_string(foo) order by foo asc", - "Table": "`user`" + "Query": "select foo, count(baz) as bazo, weight_string(foo) from (select foo, baz from `user`) as f group by foo, weight_string(foo) order by foo asc" } ] } @@ -595,7 +577,6 @@ "JoinVars": { "d_id": 1 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Aggregate", @@ -620,8 +601,7 @@ }, "FieldQuery": "select dt.c0 as id, dt.c1 as a, weight_string(dt.c0), weight_string(dt.c0) from (select id, count(*) as a from `user` where 1 != 1) as dt(c0, c1) where 1 != 1", "OrderBy": "1 ASC, (0|3) ASC", - "Query": "select dt.c0 as id, dt.c1 as a, weight_string(dt.c0), weight_string(dt.c0) from (select id, count(*) as a from `user` order by count(*) asc, id asc) as dt(c0, c1)", - "Table": "`user`" + "Query": "select dt.c0 as id, dt.c1 as a, weight_string(dt.c0), weight_string(dt.c0) from (select id, count(*) as a from `user` order by count(*) asc, id asc) as dt(c0, c1)" } ] } @@ -638,7 +618,6 @@ }, "FieldQuery": "select 1 from music where 1 != 1 group by .0", "Query": "select 1 from music where music.user_id = :d_id group by .0", - "Table": "music", "Values": [ ":d_id" ], @@ -677,8 +656,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user`", - "Table": "`user`" + "Query": "select col from `user`" }, { "OperatorType": "Route", @@ -688,8 +666,7 @@ "Sharded": false }, "FieldQuery": "select col from unsharded where 1 != 1", - "Query": "select col from unsharded", - "Table": "unsharded" + "Query": "select col from unsharded" } ] } @@ -729,8 +706,7 @@ "Sharded": true }, "FieldQuery": "select x.id, x.val2 from (select id, val2 from `user` where 1 != 1) as x where 1 != 1", - "Query": "select x.id, x.val2 from (select id, val2 from `user` where val2 is null) as x limit 2", - "Table": "`user`" + "Query": "select x.id, x.val2 from (select id, val2 from `user` where val2 is null) as x limit 2" } ] } @@ -774,8 +750,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from `user` where 1 != 1", - "Query": "select count(*) from `user`", - "Table": "`user`" + "Query": "select count(*) from `user`" } ] } @@ -804,7 +779,6 @@ }, "FieldQuery": "select id from (select id, col from `user` where 1 != 1) as t where 1 != 1", "Query": "select id from (select id, col from `user` where id = 5) as t", - "Table": "`user`", "Values": [ "5" ], @@ -831,7 +805,6 @@ }, "FieldQuery": "select t.id from (select id from `user` where 1 != 1) as t, user_extra where 1 != 1", "Query": "select t.id from (select id from `user` where id = 5) as t, user_extra where t.id = user_extra.user_id", - "Table": "`user`, user_extra", "Values": [ "5" ], @@ -859,7 +832,6 @@ }, "FieldQuery": "select t.id from (select `user`.id from `user` where 1 != 1) as t, user_extra where 1 != 1", "Query": "select t.id from (select `user`.id from `user` where `user`.id = 5) as t, user_extra where t.id = user_extra.user_id", - "Table": "`user`, user_extra", "Values": [ "5" ], @@ -887,7 +859,6 @@ }, "FieldQuery": "select t.id from (select id from `user` where 1 != 1) as t, user_extra where 1 != 1", "Query": "select t.id from (select id from `user` where id = 5) as t, user_extra where t.id = user_extra.user_id", - "Table": "`user`, user_extra", "Values": [ "5" ], @@ -913,7 +884,6 @@ "JoinVars": { "t_id": 0 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -924,7 +894,6 @@ }, "FieldQuery": "select t.id from (select id from `user` where 1 != 1) as t where 1 != 1", "Query": "select t.id from (select id from `user` where id = 5) as t", - "Table": "`user`", "Values": [ "5" ], @@ -938,8 +907,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra where user_extra.col = :t_id", - "Table": "user_extra" + "Query": "select 1 from user_extra where user_extra.col = :t_id" } ] }, @@ -965,7 +933,6 @@ }, "FieldQuery": "select id from (select id, col from `user` as route1 where 1 != 1) as t where 1 != 1", "Query": "select id from (select id, col from `user` as route1 where id = 5) as t", - "Table": "`user`", "Values": [ "5" ], @@ -992,7 +959,6 @@ }, "FieldQuery": "select id from (select id, col from `user` as route1 where 1 != 1) as t where 1 != 1", "Query": "select id from (select id, col from `user` as route1 where id = 5) as t", - "Table": "`user`", "Values": [ "5" ], @@ -1023,8 +989,7 @@ "Sharded": true }, "FieldQuery": "select t.id from (select id, textcol1 as baz from `user` as route1 where 1 != 1) as t, (select id, textcol1 + textcol1 as baz from `user` where 1 != 1) as s where 1 != 1", - "Query": "select t.id from (select id, textcol1 as baz from `user` as route1 where textcol1 = '3') as t, (select id, textcol1 + textcol1 as baz from `user` where textcol1 + textcol1 = '3') as s where t.id = s.id", - "Table": "`user`" + "Query": "select t.id from (select id, textcol1 as baz from `user` as route1 where textcol1 = '3') as t, (select id, textcol1 + textcol1 as baz from `user` where textcol1 + textcol1 = '3') as s where t.id = s.id" }, "TablesUsed": [ "user.user" @@ -1046,8 +1011,7 @@ "Sharded": true }, "FieldQuery": "select bar from (select foo + 4 as bar from (select colA + colB as foo from `user` where 1 != 1) as u where 1 != 1) as t where 1 != 1", - "Query": "select bar from (select foo + 4 as bar from (select colA + colB as foo from `user` where colA + colB + 4 = 5) as u) as t", - "Table": "`user`" + "Query": "select bar from (select foo + 4 as bar from (select colA + colB as foo from `user` where colA + colB + 4 = 5) as u) as t" }, "TablesUsed": [ "user.user" @@ -1070,7 +1034,6 @@ }, "FieldQuery": "select u.col, e.col from (select col from `user` where 1 != 1) as u, (select col from user_extra where 1 != 1) as e where 1 != 1", "Query": "select u.col, e.col from (select col from `user` where id = 5) as u, (select col from user_extra where user_id = 5) as e", - "Table": "`user`, user_extra", "Values": [ "5" ], @@ -1097,13 +1060,11 @@ "t_col1": 0, "t_id": 1 }, - "TableName": "`user`_user_extra_unsharded", "Inputs": [ { "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:1,L:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1113,8 +1074,7 @@ "Sharded": true }, "FieldQuery": "select t.id, t.col1 from (select `user`.id, `user`.col1 from `user` where 1 != 1) as t where 1 != 1", - "Query": "select t.id, t.col1 from (select `user`.id, `user`.col1 from `user`) as t", - "Table": "`user`" + "Query": "select t.id, t.col1 from (select `user`.id, `user`.col1 from `user`) as t" }, { "OperatorType": "Route", @@ -1124,8 +1084,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra", - "Table": "user_extra" + "Query": "select 1 from user_extra" } ] }, @@ -1137,8 +1096,7 @@ "Sharded": false }, "FieldQuery": "select 1 from unsharded where 1 != 1", - "Query": "select 1 from unsharded where unsharded.id = :t_id and unsharded.col1 = :t_col1", - "Table": "unsharded" + "Query": "select 1 from unsharded where unsharded.id = :t_id and unsharded.col1 = :t_col1" } ] }, @@ -1163,7 +1121,6 @@ "JoinVars": { "user_col": 2 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1173,8 +1130,7 @@ "Sharded": true }, "FieldQuery": "select t.id, t.col1, t.`user.col` from (select `user`.id, `user`.col1, `user`.col as `user.col` from `user` where 1 != 1) as t where 1 != 1", - "Query": "select t.id, t.col1, t.`user.col` from (select `user`.id, `user`.col1, `user`.col as `user.col` from `user`) as t", - "Table": "`user`" + "Query": "select t.id, t.col1, t.`user.col` from (select `user`.id, `user`.col1, `user`.col as `user.col` from `user`) as t" }, { "OperatorType": "Route", @@ -1184,8 +1140,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra where user_extra.col = :user_col /* INT16 */", - "Table": "user_extra" + "Query": "select 1 from user_extra where user_extra.col = :user_col /* INT16 */" } ] }, @@ -1206,7 +1161,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "R:0", - "TableName": "unsharded_a_`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1216,14 +1170,12 @@ "Sharded": false }, "FieldQuery": "select 1 from unsharded_a as ua where 1 != 1", - "Query": "select 1 from unsharded_a as ua", - "Table": "unsharded_a" + "Query": "select 1 from unsharded_a as ua" }, { "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:1", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1233,8 +1185,7 @@ "Sharded": true }, "FieldQuery": "select t.id, t.col1 from (select `user`.id, `user`.col1 from `user` where 1 != 1) as t where 1 != 1", - "Query": "select t.id, t.col1 from (select `user`.id, `user`.col1 from `user`) as t", - "Table": "`user`" + "Query": "select t.id, t.col1 from (select `user`.id, `user`.col1 from `user`) as t" }, { "OperatorType": "Route", @@ -1244,8 +1195,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra", - "Table": "user_extra" + "Query": "select 1 from user_extra" } ] } @@ -1272,7 +1222,6 @@ "JoinVars": { "ua_id": 0 }, - "TableName": "unsharded_a_`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1282,14 +1231,12 @@ "Sharded": false }, "FieldQuery": "select ua.id from unsharded_a as ua where 1 != 1", - "Query": "select ua.id from unsharded_a as ua", - "Table": "unsharded_a" + "Query": "select ua.id from unsharded_a as ua" }, { "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:1", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1300,7 +1247,6 @@ }, "FieldQuery": "select t.id, t.col1 from (select `user`.id, `user`.col1 from `user` where 1 != 1) as t where 1 != 1", "Query": "select t.id, t.col1 from (select `user`.id, `user`.col1 from `user` where `user`.id = :ua_id) as t", - "Table": "`user`", "Values": [ ":ua_id" ], @@ -1314,8 +1260,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra", - "Table": "user_extra" + "Query": "select 1 from user_extra" } ] } @@ -1339,7 +1284,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,L:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1349,8 +1293,7 @@ "Sharded": true }, "FieldQuery": "select t.id from (select `user`.id from `user` where 1 != 1) as t where 1 != 1", - "Query": "select t.id from (select `user`.id from `user`) as t", - "Table": "`user`" + "Query": "select t.id from (select `user`.id from `user`) as t" }, { "OperatorType": "Route", @@ -1360,8 +1303,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra", - "Table": "user_extra" + "Query": "select 1 from user_extra" } ] }, @@ -1397,8 +1339,7 @@ "Sharded": true }, "FieldQuery": "select count(*) as a from `user` where 1 != 1", - "Query": "select count(*) as a from `user`", - "Table": "`user`" + "Query": "select count(*) as a from `user`" } ] } @@ -1424,8 +1365,7 @@ "Sharded": false }, "FieldQuery": "with u as (select * from unsharded where 1 != 1) select u.* from u where 1 != 1", - "Query": "with u as (select * from unsharded) select u.* from u", - "Table": "unsharded" + "Query": "with u as (select * from unsharded) select u.* from u" }, "TablesUsed": [ "main.unsharded" @@ -1443,7 +1383,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1454,7 +1393,6 @@ }, "FieldQuery": "select t.id, t.col from (select `user`.id, `user`.col from `user` where 1 != 1) as t where 1 != 1", "Query": "select t.id, t.col from (select `user`.id, `user`.col from `user` where `user`.id = 5) as t", - "Table": "`user`", "Values": [ "5" ], @@ -1468,8 +1406,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra", - "Table": "user_extra" + "Query": "select 1 from user_extra" } ] }, @@ -1490,7 +1427,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1500,8 +1436,7 @@ "Sharded": true }, "FieldQuery": "select id + 1 from (select `user`.id, `user`.col from `user` where 1 != 1) as t where 1 != 1", - "Query": "select id + 1 from (select `user`.id, `user`.col from `user`) as t", - "Table": "`user`" + "Query": "select id + 1 from (select `user`.id, `user`.col from `user`) as t" }, { "OperatorType": "Route", @@ -1511,8 +1446,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra", - "Table": "user_extra" + "Query": "select 1 from user_extra" } ] }, @@ -1550,7 +1484,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -1564,8 +1497,7 @@ "Sharded": true }, "FieldQuery": "select u.a from (select id as b, `name` from `user` where 1 != 1) as u(a, n) where 1 != 1", - "Query": "select u.a from (select id as b, `name` from `user` where `name` = 1) as u(a, n)", - "Table": "`user`" + "Query": "select u.a from (select id as b, `name` from `user` where `name` = 1) as u(a, n)" } ] }, @@ -1602,7 +1534,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -1616,8 +1547,7 @@ "Sharded": true }, "FieldQuery": "select u.a from (select id as b, `name` from `user` where 1 != 1) as u(a, n) where 1 != 1", - "Query": "select u.a from (select id as b, `name` from `user` where b = 1 and `name` = 1) as u(a, n)", - "Table": "`user`" + "Query": "select u.a from (select id as b, `name` from `user` where b = 1 and `name` = 1) as u(a, n)" } ] }, @@ -1637,7 +1567,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1647,8 +1576,7 @@ "Sharded": true }, "FieldQuery": "select i + 1 from (select `user`.id from `user` where 1 != 1) as t(i) where 1 != 1", - "Query": "select i + 1 from (select `user`.id from `user`) as t(i)", - "Table": "`user`" + "Query": "select i + 1 from (select `user`.id from `user`) as t(i)" }, { "OperatorType": "Route", @@ -1658,8 +1586,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra", - "Table": "user_extra" + "Query": "select 1 from user_extra" } ] }, @@ -1683,13 +1610,11 @@ "JoinVars": { "t_col1": 1 }, - "TableName": "`user`_unsharded_unsharded", "Inputs": [ { "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,L:1", - "TableName": "`user`_unsharded", "Inputs": [ { "OperatorType": "Route", @@ -1699,8 +1624,7 @@ "Sharded": true }, "FieldQuery": "select 0, t.col1 from (select `user`.col1 from `user` where 1 != 1) as t where 1 != 1", - "Query": "select 0, t.col1 from (select `user`.col1 from `user`) as t", - "Table": "`user`" + "Query": "select 0, t.col1 from (select `user`.col1 from `user`) as t" }, { "OperatorType": "Route", @@ -1710,8 +1634,7 @@ "Sharded": false }, "FieldQuery": "select 1 from unsharded where 1 != 1", - "Query": "select 1 from unsharded", - "Table": "unsharded" + "Query": "select 1 from unsharded" } ] }, @@ -1723,8 +1646,7 @@ "Sharded": false }, "FieldQuery": "select 1 from unsharded where 1 != 1", - "Query": "select 1 from unsharded where unsharded.a = :t_col1 and unsharded.col1 = :t_col1", - "Table": "unsharded" + "Query": "select 1 from unsharded where unsharded.a = :t_col1 and unsharded.col1 = :t_col1" } ] }, @@ -1749,8 +1671,7 @@ "Sharded": true }, "FieldQuery": "select id2 from (select id from `user` where 1 != 1) as x(id2) where 1 != 1", - "Query": "select id2 from (select id from `user`) as x(id2)", - "Table": "`user`" + "Query": "select id2 from (select id from `user`) as x(id2)" }, "TablesUsed": [ "user.user" @@ -1772,8 +1693,7 @@ "Sharded": false }, "FieldQuery": "with u as (select col from unsharded join unsharded_b where 1 != 1) select col from u join unsharded_a as ua where 1 != 1", - "Query": "with u as (select col from unsharded join unsharded_b) select col from u join unsharded_a as ua limit 1", - "Table": "unsharded, unsharded_a, unsharded_b" + "Query": "with u as (select col from unsharded join unsharded_b) select col from u join unsharded_a as ua limit 1" }, "TablesUsed": [ "main.unsharded", @@ -1797,13 +1717,11 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_user_extra_user_extra", "Inputs": [ { "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1813,8 +1731,7 @@ "Sharded": true }, "FieldQuery": "select u.col from (select `user`.col from `user` where 1 != 1) as u where 1 != 1", - "Query": "select u.col from (select `user`.col from `user`) as u", - "Table": "`user`" + "Query": "select u.col from (select `user`.col from `user`) as u" }, { "OperatorType": "Route", @@ -1824,8 +1741,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra", - "Table": "user_extra" + "Query": "select 1 from user_extra" } ] }, @@ -1841,8 +1757,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra as ue where 1 != 1", - "Query": "select 1 from user_extra as ue limit 1", - "Table": "user_extra" + "Query": "select 1 from user_extra as ue limit 1" } ] } @@ -1871,8 +1786,7 @@ "Sharded": true }, "FieldQuery": "select * from (select * from `user` where 1 != 1) as x where 1 != 1", - "Query": "select * from (select * from `user`) as x", - "Table": "`user`" + "Query": "select * from (select * from `user`) as x" }, "TablesUsed": [ "user.user" @@ -1902,8 +1816,7 @@ "Sharded": true }, "FieldQuery": "select dt.c0 as id, dt.c1 as foo, weight_string(dt.c0), weight_string(dt.c1) from (select id, foo from (select id, foo from `user` where 1 != 1) as x where 1 != 1 union select id, foo from (select id, foo from `user` where 1 != 1) as x where 1 != 1) as dt(c0, c1) where 1 != 1", - "Query": "select dt.c0 as id, dt.c1 as foo, weight_string(dt.c0), weight_string(dt.c1) from (select id, foo from (select id, foo from `user`) as x union select id, foo from (select id, foo from `user`) as x) as dt(c0, c1)", - "Table": "`user`" + "Query": "select dt.c0 as id, dt.c1 as foo, weight_string(dt.c0), weight_string(dt.c1) from (select id, foo from (select id, foo from `user`) as x union select id, foo from (select id, foo from `user`) as x) as dt(c0, c1)" } ] }, @@ -1927,8 +1840,7 @@ "Sharded": false }, "FieldQuery": "with recursive cte(n) as (select 1 from dual where 1 != 1 union all select n + 1 from cte where 1 != 1) select cte.n from unsharded join cte on unsharded.id = cte.n where 1 != 1", - "Query": "with recursive cte(n) as (select 1 from dual union all select n + 1 from cte where n < 5) select cte.n from unsharded join cte on unsharded.id = cte.n", - "Table": "dual, unsharded" + "Query": "with recursive cte(n) as (select 1 from dual union all select n + 1 from cte where n < 5) select cte.n from unsharded join cte on unsharded.id = cte.n" }, "TablesUsed": [ "main.dual", @@ -1951,8 +1863,7 @@ "Sharded": false }, "FieldQuery": "select 'count_a' as tab, num from count_a where 1 != 1 union select 'count_b' as tab, num from count_b where 1 != 1", - "Query": "with count_a as (select count(id) as num from unsharded_a) , count_b as (select count(id) as num from unsharded_b) select 'count_a' as tab, num from count_a union select 'count_b' as tab, num from count_b", - "Table": "unsharded_a, unsharded_b" + "Query": "with count_a as (select count(id) as num from unsharded_a) , count_b as (select count(id) as num from unsharded_b) select 'count_a' as tab, num from count_a union select 'count_b' as tab, num from count_b" }, "TablesUsed": [ "main.unsharded_a", @@ -1997,8 +1908,7 @@ "Sharded": true }, "FieldQuery": "select count(user_id) as num from user_metadata where 1 != 1", - "Query": "select count(user_id) as num from user_metadata", - "Table": "user_metadata" + "Query": "select count(user_id) as num from user_metadata" } ] } @@ -2024,8 +1934,7 @@ "Sharded": true }, "FieldQuery": "select count(user_id) as num from user_extra where 1 != 1", - "Query": "select count(user_id) as num from user_extra", - "Table": "user_extra" + "Query": "select count(user_id) as num from user_extra" } ] } @@ -2107,8 +2016,7 @@ "Sharded": true }, "FieldQuery": "select 1 from (select `user`.id from `user` where 1 != 1) as t where 1 != 1", - "Query": "select 1 from (select `user`.id from `user` where `user`.textcol1 = 'open' and `user`.intcol = 1) as t limit :__upper_limit", - "Table": "`user`" + "Query": "select 1 from (select `user`.id from `user` where `user`.textcol1 = 'open' and `user`.intcol = 1) as t limit :__upper_limit" } ] } @@ -2145,8 +2053,7 @@ "Sharded": true }, "FieldQuery": "select 1 from (select `user`.id from `user` where 1 != 1) as t where 1 != 1", - "Query": "select 1 from (select `user`.id from `user` where `user`.textcol1 = 'closed' and `user`.intcol = 1) as t limit :__upper_limit", - "Table": "`user`" + "Query": "select 1 from (select `user`.id from `user` where `user`.textcol1 = 'closed' and `user`.intcol = 1) as t limit :__upper_limit" } ] } @@ -2201,8 +2108,7 @@ "Sharded": true }, "FieldQuery": "select `name`, id from `user` where 1 != 1", - "Query": "select `name`, id from `user` where manager_id is null", - "Table": "`user`" + "Query": "select `name`, id from `user` where manager_id is null" }, { "OperatorType": "Route", @@ -2212,8 +2118,7 @@ "Sharded": true }, "FieldQuery": "select e.`name`, e.id from `user` as e where 1 != 1", - "Query": "select e.`name`, e.id from `user` as e where e.manager_id = :cte_id", - "Table": "`user`, dual" + "Query": "select e.`name`, e.id from `user` as e where e.manager_id = :cte_id" } ] } @@ -2253,8 +2158,7 @@ "Sharded": true }, "FieldQuery": "select `name`, id from `user` where 1 != 1", - "Query": "select `name`, id from `user` where manager_id is null", - "Table": "`user`" + "Query": "select `name`, id from `user` where manager_id is null" }, { "OperatorType": "Route", @@ -2264,8 +2168,7 @@ "Sharded": true }, "FieldQuery": "select e.`name`, e.id from `user` as e where 1 != 1", - "Query": "select e.`name`, e.id from `user` as e where e.manager_id = :cte_id", - "Table": "`user`, dual" + "Query": "select e.`name`, e.id from `user` as e where e.manager_id = :cte_id" } ] } @@ -2292,8 +2195,7 @@ "Sharded": false }, "FieldQuery": "with recursive cte as (select 1 as n from dual where 1 != 1 union all select n + 1 from cte where 1 != 1) select n from cte where 1 != 1", - "Query": "with recursive cte as (select 1 as n from dual union all select n + 1 from cte where n < 5) select n from cte", - "Table": "dual" + "Query": "with recursive cte as (select 1 as n from dual union all select n + 1 from cte where n < 5) select n from cte" }, "TablesUsed": [ "main.dual" @@ -2315,8 +2217,7 @@ "Sharded": false }, "FieldQuery": "with recursive cte(n) as (select 1 from dual where 1 != 1 union all select n + 1 from cte where 1 != 1) select n from cte where 1 != 1", - "Query": "with recursive cte(n) as (select 1 from dual union all select n + 1 from cte where n < 5) select n from cte", - "Table": "dual" + "Query": "with recursive cte(n) as (select 1 from dual union all select n + 1 from cte where n < 5) select n from cte" }, "TablesUsed": [ "main.dual" @@ -2339,7 +2240,6 @@ }, "FieldQuery": "with recursive emp_cte as (select id, 1 as `level` from `user` where 1 != 1 union all select e.id, cte.`level` + 1 from cte as cte, `user` as e where 1 != 1) select id, `level` from emp_cte where 1 != 1", "Query": "with recursive emp_cte as (select id, 1 as `level` from `user` where manager_id is null and id = 6 union all select e.id, cte.`level` + 1 from cte as cte, `user` as e where e.manager_id = cte.id and e.id = 6) select id, `level` from emp_cte", - "Table": "`user`, dual", "Values": [ "6" ], @@ -2373,8 +2273,7 @@ "Sharded": true }, "FieldQuery": "select id, 1 as `level` from `user` where 1 != 1", - "Query": "select id, 1 as `level` from `user` where manager_id is null", - "Table": "`user`" + "Query": "select id, 1 as `level` from `user` where manager_id is null" }, { "OperatorType": "Route", @@ -2384,8 +2283,7 @@ "Sharded": true }, "FieldQuery": "select e.id, :cte_level + 1 as `cte.``level`` + 1` from `user` as e where 1 != 1", - "Query": "select e.id, :cte_level + 1 as `cte.``level`` + 1` from `user` as e where e.manager_id = :cte_id", - "Table": "`user`, dual" + "Query": "select e.id, :cte_level + 1 as `cte.``level`` + 1` from `user` as e where e.manager_id = :cte_id" } ] }, @@ -2409,7 +2307,6 @@ "JoinVars": { "l_id": 0 }, - "TableName": "dual_`user`", "Inputs": [ { "OperatorType": "Route", @@ -2418,9 +2315,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "with recursive literal_cte as (select 1 as id, 100 as value, 1 as manager_id from dual where 1 != 1 union all select id + 1, value * 2, id from literal_cte where 1 != 1) select l.id, l.value, l.manager_id from literal_cte as l where 1 != 1", - "Query": "with recursive literal_cte as (select 1 as id, 100 as value, 1 as manager_id from dual union all select id + 1, value * 2, id from literal_cte where id < 5) select l.id, l.value, l.manager_id from literal_cte as l", - "Table": "dual" + "FieldQuery": "with recursive literal_cte as (select 1 as id, 100 as `value`, 1 as manager_id from dual where 1 != 1 union all select id + 1, `value` * 2, id from literal_cte where 1 != 1) select l.id, l.`value`, l.manager_id from literal_cte as l where 1 != 1", + "Query": "with recursive literal_cte as (select 1 as id, 100 as `value`, 1 as manager_id from dual union all select id + 1, `value` * 2, id from literal_cte where id < 5) select l.id, l.`value`, l.manager_id from literal_cte as l" }, { "OperatorType": "Route", @@ -2431,7 +2327,6 @@ }, "FieldQuery": "select e.`name` as employee_name from `user` as e where 1 != 1", "Query": "select e.`name` as employee_name from `user` as e where e.id = :l_id", - "Table": "`user`", "Values": [ ":l_id" ], @@ -2486,8 +2381,7 @@ "Sharded": true }, "FieldQuery": "select dt.c0 as id, dt.c1 as `name`, dt.c2 as manager_id, weight_string(dt.c2) from (select id, `name`, manager_id from `user` where 1 != 1) as dt(c0, c1, c2) where 1 != 1", - "Query": "select dt.c0 as id, dt.c1 as `name`, dt.c2 as manager_id, weight_string(dt.c2) from (select id, `name`, manager_id from `user` where manager_id is null) as dt(c0, c1, c2)", - "Table": "`user`" + "Query": "select dt.c0 as id, dt.c1 as `name`, dt.c2 as manager_id, weight_string(dt.c2) from (select id, `name`, manager_id from `user` where manager_id is null) as dt(c0, c1, c2)" }, { "OperatorType": "Route", @@ -2497,8 +2391,7 @@ "Sharded": true }, "FieldQuery": "select e.id, e.`name`, e.manager_id, weight_string(e.manager_id) from `user` as e where 1 != 1", - "Query": "select e.id, e.`name`, e.manager_id, weight_string(e.manager_id) from `user` as e where e.manager_id = :cte_id", - "Table": "`user`, dual" + "Query": "select e.id, e.`name`, e.manager_id, weight_string(e.manager_id) from `user` as e where e.manager_id = :cte_id" } ] } @@ -2530,7 +2423,6 @@ }, "FieldQuery": "with recursive cte as (select id from `user` where 1 != 1 union all select id + 1 from cte where 1 != 1) select id from cte where 1 != 1", "Query": "with recursive cte as (select id from `user` where id = 72 union all select id + 1 from cte where id < 100) select id from cte", - "Table": "`user`, dual", "Values": [ "72" ], @@ -2557,8 +2449,7 @@ "Sharded": true }, "FieldQuery": "with recursive cte as (select ue.id, ue.foo from `user` as u, user_extra as ue where 1 != 1 union all select sr.id, sr.foo from ref_with_source as sr, ref as rr where 1 != 1) select id, foo from cte where 1 != 1", - "Query": "with recursive cte as (select ue.id, ue.foo from `user` as u, user_extra as ue where u.id = ue.user_id union all select sr.id, sr.foo from ref_with_source as sr, ref as rr where sr.foo = cte.foo and rr.bar = sr.bar) select id, foo from cte", - "Table": "`user`, ref, ref_with_source, user_extra" + "Query": "with recursive cte as (select ue.id, ue.foo from `user` as u, user_extra as ue where u.id = ue.user_id union all select sr.id, sr.foo from ref_with_source as sr, ref as rr where sr.foo = cte.foo and rr.bar = sr.bar) select id, foo from cte" }, "TablesUsed": [ "user.ref", @@ -2583,8 +2474,7 @@ "Sharded": true }, "FieldQuery": "with recursive cte as (select 1 from ref_with_source as sr, ref as rr where 1 != 1 union all select ue.id, ue.foo from cte, user_extra as ue, `user` as u where 1 != 1) select id, foo from cte where 1 != 1", - "Query": "with recursive cte as (select 1 from ref_with_source as sr, ref as rr where rr.bar = sr.bar union all select ue.id, ue.foo from cte, user_extra as ue, `user` as u where cte.foo = ue.foo and ue.user_id = u.id) select id, foo from cte", - "Table": "`user`, dual, ref, ref_with_source, user_extra" + "Query": "with recursive cte as (select 1 from ref_with_source as sr, ref as rr where rr.bar = sr.bar union all select ue.id, ue.foo from cte, user_extra as ue, `user` as u where cte.foo = ue.foo and ue.user_id = u.id) select id, foo from cte" }, "TablesUsed": [ "main.dual", @@ -2610,8 +2500,7 @@ "Sharded": true }, "FieldQuery": "with recursive hierarchy as (select id, `name`, manager_id from `user` where 1 != 1 union all select id, `name`, manager_id from `user` where 1 != 1 union select id * 2, `name`, manager_id from hierarchy where 1 != 1) select id, `name`, manager_id from hierarchy where 1 != 1", - "Query": "with recursive hierarchy as (select id, `name`, manager_id from `user` union all select id, `name`, manager_id from `user` union select id * 2, `name`, manager_id from hierarchy where id < 10) select id, `name`, manager_id from hierarchy", - "Table": "`user`, dual" + "Query": "with recursive hierarchy as (select id, `name`, manager_id from `user` union all select id, `name`, manager_id from `user` union select id * 2, `name`, manager_id from hierarchy where id < 10) select id, `name`, manager_id from hierarchy" }, "TablesUsed": [ "main.dual", @@ -2634,8 +2523,7 @@ "Sharded": false }, "FieldQuery": "select a from (select 1 from dual where 1 != 1 union all select 2 from dual where 1 != 1) as dt(a) where 1 != 1", - "Query": "select a from (select 1 from dual union all select 2 from dual) as dt(a) where exists (with recursive qn as (select a * 0 as b from dual union all select b + 1 from qn where b = 0) select 1 from qn where b = a)", - "Table": "dual" + "Query": "select a from (select 1 from dual union all select 2 from dual) as dt(a) where exists (with recursive qn as (select a * 0 as b from dual union all select b + 1 from qn where b = 0) select 1 from qn where b = a)" }, "TablesUsed": [ "main.dual" diff --git a/go/vt/vtgate/planbuilder/testdata/ddl_cases.json b/go/vt/vtgate/planbuilder/testdata/ddl_cases.json index 19da42db9b8..3b84004ca99 100644 --- a/go/vt/vtgate/planbuilder/testdata/ddl_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/ddl_cases.json @@ -139,6 +139,46 @@ ] } }, + { + "comment": "Create procedure with set statement", + "query": "create procedure main.t1 (in x BIGINT) begin declare y DECIMAL(14,2); set y = 4.2; end;", + "plan": { + "Type": "DirectDDL", + "QueryType": "DDL", + "Original": "create procedure main.t1 (in x BIGINT) begin declare y DECIMAL(14,2); set y = 4.2; end;", + "Instructions": { + "OperatorType": "DDL", + "Keyspace": { + "Name": "main", + "Sharded": false + }, + "Query": "create procedure t1 (in x BIGINT) begin declare y DECIMAL(14,2); set y = 4.2; end;" + }, + "TablesUsed": [ + "main.t1" + ] + } + }, + { + "comment": "Create procedure with a transaction inside", + "query": "create procedure main.t1 (in x BIGINT) begin start transaction; insert into unsharded_a values (1, 'a', 'a'); commit; end;", + "plan": { + "Type": "DirectDDL", + "QueryType": "DDL", + "Original": "create procedure main.t1 (in x BIGINT) begin start transaction; insert into unsharded_a values (1, 'a', 'a'); commit; end;", + "Instructions": { + "OperatorType": "DDL", + "Keyspace": { + "Name": "main", + "Sharded": false + }, + "Query": "create procedure t1 (in x BIGINT) begin start transaction; insert into unsharded_a values (1, 'a', 'a'); commit; end;" + }, + "TablesUsed": [ + "main.t1" + ] + } + }, { "comment": "DDL", "query": "create table a(id int)", diff --git a/go/vt/vtgate/planbuilder/testdata/dml_cases.json b/go/vt/vtgate/planbuilder/testdata/dml_cases.json index 53937fa739c..08e15c7fe53 100644 --- a/go/vt/vtgate/planbuilder/testdata/dml_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/dml_cases.json @@ -25,8 +25,7 @@ "Name": "main", "Sharded": false }, - "Query": "update m1 set val = 1", - "Table": "m1" + "Query": "update m1 set val = 1" }, "TablesUsed": [ "main.m1" @@ -48,8 +47,7 @@ "Name": "main", "Sharded": false }, - "Query": "update unsharded set val = 1", - "Table": "unsharded" + "Query": "update unsharded set val = 1" }, "TablesUsed": [ "main.unsharded" @@ -71,8 +69,7 @@ "Name": "main", "Sharded": false }, - "Query": "update unsharded set col = (select col from unsharded limit 1)", - "Table": "unsharded" + "Query": "update unsharded set col = (select col from unsharded limit 1)" }, "TablesUsed": [ "main.unsharded" @@ -94,8 +91,7 @@ "Name": "main", "Sharded": false }, - "Query": "update unsharded set col = (select id from unsharded union select id from unsharded)", - "Table": "unsharded" + "Query": "update unsharded set col = (select id from unsharded union select id from unsharded)" }, "TablesUsed": [ "main.unsharded" @@ -117,8 +113,7 @@ "Name": "main", "Sharded": false }, - "Query": "update unsharded set col = (select id from unsharded as a join unsharded as b on a.id = b.id)", - "Table": "unsharded" + "Query": "update unsharded set col = (select id from unsharded as a join unsharded as b on a.id = b.id)" }, "TablesUsed": [ "main.unsharded" @@ -140,8 +135,7 @@ "Name": "main", "Sharded": false }, - "Query": "update unsharded as foo left join (select id from unsharded where col is not null order by col desc limit 10) as keepers on foo.id = keepers.id set col1 = 'asdf' where keepers.id is null and foo.col is not null and foo.col < 1000", - "Table": "unsharded" + "Query": "update unsharded as foo left join (select id from unsharded where col is not null order by col desc limit 10) as keepers on foo.id = keepers.id set col1 = 'asdf' where keepers.id is null and foo.col is not null and foo.col < 1000" }, "TablesUsed": [ "main.unsharded" @@ -164,7 +158,6 @@ "Sharded": true }, "Query": "update `user` as route1 set a = 1 where id = 1", - "Table": "user", "Values": [ "1" ], @@ -190,8 +183,7 @@ "Name": "main", "Sharded": false }, - "Query": "update unsharded_a set a = (select a from unsharded as route2)", - "Table": "unsharded, unsharded_a" + "Query": "update unsharded_a set a = (select a from unsharded as route2)" }, "TablesUsed": [ "main.unsharded", @@ -214,8 +206,7 @@ "Name": "main", "Sharded": false }, - "Query": "delete from unsharded", - "Table": "unsharded" + "Query": "delete from unsharded" }, "TablesUsed": [ "main.unsharded" @@ -237,8 +228,7 @@ "Name": "main", "Sharded": false }, - "Query": "delete from seq", - "Table": "seq" + "Query": "delete from seq" }, "TablesUsed": [ "main.seq" @@ -260,8 +250,7 @@ "Name": "main", "Sharded": false }, - "Query": "delete from unsharded_ref", - "Table": "unsharded_ref" + "Query": "delete from unsharded_ref" }, "TablesUsed": [ "main.unsharded_ref" @@ -284,7 +273,6 @@ "Sharded": true }, "Query": "update `user` set val = 1 where id = 1", - "Table": "user", "Values": [ "1" ], @@ -311,7 +299,6 @@ "Sharded": true }, "Query": "update `user` as user_alias set val = 1 where user_alias.id = 1", - "Table": "user", "Values": [ "1" ], @@ -338,7 +325,6 @@ "Sharded": true }, "Query": "update `user` set val = 1 where id = 1", - "Table": "user", "Values": [ "1" ], @@ -365,7 +351,6 @@ "Sharded": true }, "Query": "update `user` set val = 1 where `name` = 'foo' and id = 1", - "Table": "user", "Values": [ "1" ], @@ -398,7 +383,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select user_id, email, address, non_planable, email = 'juan@vitess.io' from user_metadata where user_id = 1 for update", "Query": "update user_metadata set email = 'juan@vitess.io' where user_id = 1", - "Table": "user_metadata", "Values": [ "1" ], @@ -438,7 +422,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select user_id, email, address, non_planable, email = 'juan@vitess.io', address = '155 5th street' from user_metadata where user_id = 1 for update", "Query": "update user_metadata set email = 'juan@vitess.io', address = '155 5th street' where user_id = 1", - "Table": "user_metadata", "Values": [ "1" ], @@ -471,7 +454,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select user_id, email, address, non_planable, email = 'juan@vitess.io' from user_metadata where user_id = 1 order by user_id asc limit 10 for update", "Query": "update user_metadata set email = 'juan@vitess.io' where user_id = 1 order by user_id asc limit 10", - "Table": "user_metadata", "Values": [ "1" ], @@ -504,7 +486,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select user_id, music_id = 1 from music_extra where user_id = 1 for update", "Query": "update music_extra set music_id = 1 where user_id = 1", - "Table": "music_extra", "Values": [ "1" ], @@ -531,7 +512,6 @@ "Sharded": true }, "Query": "update `user` set val = 1 where id = id2 and id = 1", - "Table": "user", "Values": [ "1" ], @@ -558,7 +538,6 @@ "Sharded": true }, "Query": "update `user` set val = 1 where id = 18446744073709551616 and id = 1", - "Table": "user", "Values": [ "1" ], @@ -588,7 +567,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly from `user` where id = 1 for update", "Query": "delete from `user` where id = 1", - "Table": "user", "Values": [ "1" ], @@ -614,8 +592,7 @@ "Name": "main", "Sharded": false }, - "Query": "delete a from unsharded_a as a, unsharded_b as b where a.id = b.id and b.val = 1", - "Table": "unsharded_a, unsharded_b" + "Query": "delete a from unsharded_a as a, unsharded_b as b where a.id = b.id and b.val = 1" }, "TablesUsed": [ "main.unsharded_a", @@ -638,8 +615,7 @@ "Name": "main", "Sharded": false }, - "Query": "delete a from unsharded_a as a join unsharded_b as b on a.id = b.id where b.val = 1", - "Table": "unsharded_a, unsharded_b" + "Query": "delete a from unsharded_a as a join unsharded_b as b on a.id = b.id where b.val = 1" }, "TablesUsed": [ "main.unsharded_a", @@ -662,8 +638,7 @@ "Name": "main", "Sharded": false }, - "Query": "delete foo from unsharded as foo left join (select id from unsharded where col is not null order by col desc limit 10) as keepers on foo.id = keepers.id where keepers.id is null and foo.col is not null and foo.col < 1000", - "Table": "unsharded" + "Query": "delete foo from unsharded as foo left join (select id from unsharded where col is not null order by col desc limit 10) as keepers on foo.id = keepers.id where keepers.id is null and foo.col is not null and foo.col < 1000" }, "TablesUsed": [ "main.unsharded" @@ -689,7 +664,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly from `user` as route1 where id = 1 for update", "Query": "delete from `user` as route1 where id = 1", - "Table": "user", "Values": [ "1" ], @@ -715,8 +689,7 @@ "Name": "main", "Sharded": false }, - "Query": "delete from unsharded_a where a = (select a from unsharded as route2)", - "Table": "unsharded, unsharded_a" + "Query": "delete from unsharded_a where a = (select a from unsharded as route2)" }, "TablesUsed": [ "main.unsharded", @@ -740,7 +713,6 @@ "Sharded": true }, "Query": "update music set val = 1 where id = 1", - "Table": "music", "Values": [ "1" ], @@ -766,8 +738,7 @@ "Name": "main", "Sharded": false }, - "Query": "update unsharded_a as a join unsharded_b as b on a.id = b.id set a.val = 'foo' where b.val = 1", - "Table": "unsharded_a, unsharded_b" + "Query": "update unsharded_a as a join unsharded_b as b on a.id = b.id set a.val = 'foo' where b.val = 1" }, "TablesUsed": [ "main.unsharded_a", @@ -790,8 +761,7 @@ "Name": "main", "Sharded": false }, - "Query": "update unsharded_a as a, unsharded_b as b set a.val = 'foo' where a.id = b.id and b.val = 1", - "Table": "unsharded_a, unsharded_b" + "Query": "update unsharded_a as a, unsharded_b as b set a.val = 'foo' where a.id = b.id and b.val = 1" }, "TablesUsed": [ "main.unsharded_a", @@ -818,7 +788,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select user_id, id from music where id = 1 for update", "Query": "delete from music where id = 1", - "Table": "music", "Values": [ "1" ], @@ -845,7 +814,6 @@ "Sharded": true }, "Query": "delete from music_extra where user_id = 1", - "Table": "music_extra", "Values": [ "1" ], @@ -871,8 +839,7 @@ "Name": "main", "Sharded": false }, - "Query": "insert into unsharded values ()", - "TableName": "unsharded" + "Query": "insert into unsharded values ()" }, "TablesUsed": [ "main.unsharded" @@ -894,8 +861,7 @@ "Name": "main", "Sharded": false }, - "Query": "insert into unsharded values (1, 2)", - "TableName": "unsharded" + "Query": "insert into unsharded values (1, 2)" }, "TablesUsed": [ "main.unsharded" @@ -917,8 +883,7 @@ "Name": "main", "Sharded": false }, - "Query": "insert into unsharded values (1, 2) on duplicate key update x = 3", - "TableName": "unsharded" + "Query": "insert into unsharded values (1, 2) on duplicate key update x = 3" }, "TablesUsed": [ "main.unsharded" @@ -941,8 +906,7 @@ "Sharded": false }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(1)", - "Query": "insert into unsharded_authoritative(col1, col2) values (:__seq0, 1)", - "TableName": "unsharded_authoritative" + "Query": "insert into unsharded_authoritative(col1, col2) values (:__seq0, 1)" }, "TablesUsed": [ "main.unsharded_authoritative" @@ -966,7 +930,6 @@ }, "InsertIgnore": true, "Query": "insert into music(user_id, id) values (:_user_id_0, :_id_0) on duplicate key update user_id = values(user_id)", - "TableName": "music", "VindexValues": { "music_user_map": "2", "user_index": "1" @@ -994,7 +957,6 @@ }, "InsertIgnore": true, "Query": "insert into music(user_id, id) values (:_user_id_0, :_id_0), (:_user_id_1, :_id_1) on duplicate key update user_id = values(user_id)", - "TableName": "music", "VindexValues": { "music_user_map": "2, 4", "user_index": "1, 3" @@ -1020,8 +982,7 @@ "Name": "main", "Sharded": false }, - "Query": "insert into unsharded select id from unsharded_auto", - "TableName": "unsharded" + "Query": "insert into unsharded select id from unsharded_auto" }, "TablesUsed": [ "main.unsharded", @@ -1044,8 +1005,7 @@ "Name": "main", "Sharded": false }, - "Query": "insert into unsharded select id from unsharded join unsharded_auto", - "TableName": "unsharded" + "Query": "insert into unsharded select id from unsharded join unsharded_auto" }, "TablesUsed": [ "main.unsharded", @@ -1069,8 +1029,7 @@ "Sharded": false }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(18446744073709551616)", - "Query": "insert into unsharded_auto(id, val) values (:__seq0, 'aa')", - "TableName": "unsharded_auto" + "Query": "insert into unsharded_auto(id, val) values (:__seq0, 'aa')" }, "TablesUsed": [ "main.unsharded_auto" @@ -1093,8 +1052,7 @@ "Sharded": false }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(1)", - "Query": "insert into unsharded_auto(id, val) values (:__seq0, 'aa')", - "TableName": "unsharded_auto" + "Query": "insert into unsharded_auto(id, val) values (:__seq0, 'aa')" }, "TablesUsed": [ "main.unsharded_auto" @@ -1117,8 +1075,7 @@ "Sharded": false }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(null)", - "Query": "insert into unsharded_auto(val, id) values ('aa', :__seq0)", - "TableName": "unsharded_auto" + "Query": "insert into unsharded_auto(val, id) values ('aa', :__seq0)" }, "TablesUsed": [ "main.unsharded_auto" @@ -1141,8 +1098,7 @@ "Sharded": false }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(null)", - "Query": "insert into unsharded_auto(val, id) values (false, :__seq0)", - "TableName": "unsharded_auto" + "Query": "insert into unsharded_auto(val, id) values (false, :__seq0)" }, "TablesUsed": [ "main.unsharded_auto" @@ -1165,8 +1121,7 @@ "Sharded": false }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(1, null)", - "Query": "insert into unsharded_auto(id, val) values (:__seq0, 'aa'), (:__seq1, 'bb')", - "TableName": "unsharded_auto" + "Query": "insert into unsharded_auto(id, val) values (:__seq0, 'aa'), (:__seq1, 'bb')" }, "TablesUsed": [ "main.unsharded_auto" @@ -1188,8 +1143,7 @@ "Name": "main", "Sharded": false }, - "Query": "insert into unsharded values (1, 1)", - "TableName": "unsharded" + "Query": "insert into unsharded values (1, 1)" }, "TablesUsed": [ "main.unsharded" @@ -1213,7 +1167,6 @@ }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(1)", "Query": "insert into `user`(id, val, `Name`, Costly) values (:_Id_0, 1, :_Name_0, :_Costly_0)", - "TableName": "user", "VindexValues": { "costly_map": "null", "name_user_map": "null", @@ -1242,7 +1195,6 @@ }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(1)", "Query": "insert into `user`(id, `Name`, Costly) values (:_Id_0, :_Name_0, :_Costly_0)", - "TableName": "user", "VindexValues": { "costly_map": "null", "name_user_map": "null", @@ -1276,7 +1228,6 @@ "Sharded": true }, "Query": "insert into authoritative(user_id, col1, col2) values (:_user_id_0, 2, 3)", - "TableName": "authoritative", "VindexValues": { "user_index": "1" } @@ -1303,7 +1254,6 @@ }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(null)", "Query": "insert into `user`(id, `Name`, Costly) values (:_Id_0, :_Name_0, :_Costly_0)", - "TableName": "user", "VindexValues": { "costly_map": "null", "name_user_map": "null", @@ -1332,7 +1282,6 @@ }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(1)", "Query": "insert into `user`(id, `Name`, Costly) values (:_Id_0, :_Name_0, :_Costly_0)", - "TableName": "user", "VindexValues": { "costly_map": "null", "name_user_map": "null", @@ -1362,7 +1311,6 @@ "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(1)", "InsertIgnore": true, "Query": "insert ignore into `user`(id, `Name`, Costly) values (:_Id_0, :_Name_0, :_Costly_0)", - "TableName": "user", "VindexValues": { "costly_map": "null", "name_user_map": "null", @@ -1392,7 +1340,6 @@ "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(1)", "InsertIgnore": true, "Query": "insert into `user`(id, `Name`, Costly) values (:_Id_0, :_Name_0, :_Costly_0) on duplicate key update col = 2", - "TableName": "user", "VindexValues": { "costly_map": "null", "name_user_map": "null", @@ -1421,7 +1368,6 @@ }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(:aa)", "Query": "insert into `user`(id, `Name`, Costly) values (:_Id_0, :_Name_0, :_Costly_0)", - "TableName": "user", "VindexValues": { "costly_map": "null", "name_user_map": "null", @@ -1450,7 +1396,6 @@ }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(null)", "Query": "insert into `user`(nonid, id, `Name`, Costly) values (2, :_Id_0, :_Name_0, :_Costly_0)", - "TableName": "user", "VindexValues": { "costly_map": "null", "name_user_map": "null", @@ -1479,7 +1424,6 @@ }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(null)", "Query": "insert into `user`(id, nonid, `Name`, Costly) values (:_Id_0, 2, :_Name_0, :_Costly_0)", - "TableName": "user", "VindexValues": { "costly_map": "null", "name_user_map": "null", @@ -1508,7 +1452,6 @@ }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(null)", "Query": "insert into `user`(nonid, id, `Name`, Costly) values (true, :_Id_0, :_Name_0, :_Costly_0)", - "TableName": "user", "VindexValues": { "costly_map": "null", "name_user_map": "null", @@ -1537,7 +1480,6 @@ }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(1)", "Query": "insert into `user`(nonid, `name`, id, Costly) values (2, :_Name_0, :_Id_0, :_Costly_0)", - "TableName": "user", "VindexValues": { "costly_map": "null", "name_user_map": "'foo'", @@ -1566,7 +1508,6 @@ }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(null)", "Query": "insert into user_extra(nonid, extra_id, user_id) values (2, :__seq0, :_user_id_0)", - "TableName": "user_extra", "VindexValues": { "user_index": "null" } @@ -1592,7 +1533,6 @@ "Sharded": true }, "Query": "insert into `weird``name`(`a``b*c`, `b*c`) values (:_a_b_c_0, 2)", - "TableName": "weird`name", "VindexValues": { "user_index": "1" } @@ -1617,8 +1557,7 @@ "Name": "main", "Sharded": false }, - "Query": "insert into unsharded select 1 from dual union select 1 from dual", - "TableName": "unsharded" + "Query": "insert into unsharded select 1 from dual union select 1 from dual" }, "TablesUsed": [ "main.dual", @@ -1643,7 +1582,6 @@ }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(18446744073709551616)", "Query": "insert into user_extra(nonid, extra_id, user_id) values (2, :__seq0, :_user_id_0)", - "TableName": "user_extra", "VindexValues": { "user_index": "null" } @@ -1669,7 +1607,6 @@ "Sharded": true }, "Query": "insert into music_extra(music_id, user_id) values (:_music_id_0, :_user_id_0)", - "TableName": "music_extra", "VindexValues": { "music_user_map": "1", "user_index": "18446744073709551616" @@ -1709,7 +1646,6 @@ }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(1, 2)", "Query": "insert into `user`(id, `Name`, Costly) values (:_Id_0, :_Name_0, :_Costly_0), (:_Id_1, :_Name_1, :_Costly_1)", - "TableName": "user", "VindexValues": { "costly_map": "null, null", "name_user_map": "null, null", @@ -1739,7 +1675,6 @@ "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(1, 2)", "Query": "insert /*vt+ QUERY_TIMEOUT_MS=1 */ into `user`(id, `Name`, Costly) values (:_Id_0, :_Name_0, :_Costly_0), (:_Id_1, :_Name_1, :_Costly_1)", "QueryTimeout": 1, - "TableName": "user", "VindexValues": { "costly_map": "null, null", "name_user_map": "null, null", @@ -1769,7 +1704,6 @@ "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(1, 2)", "MultiShardAutocommit": true, "Query": "insert /*vt+ MULTI_SHARD_AUTOCOMMIT=1 */ into `user`(id, `Name`, Costly) values (:_Id_0, :_Name_0, :_Costly_0), (:_Id_1, :_Name_1, :_Costly_1)", - "TableName": "user", "VindexValues": { "costly_map": "null, null", "name_user_map": "null, null", @@ -1802,8 +1736,7 @@ "Name": "main", "Sharded": false }, - "Query": "replace into unsharded values (1, 2)", - "TableName": "unsharded" + "Query": "replace into unsharded values (1, 2)" }, "TablesUsed": [ "main.unsharded" @@ -1825,8 +1758,7 @@ "Name": "main", "Sharded": false }, - "Query": "replace into unsharded select id from unsharded_auto", - "TableName": "unsharded" + "Query": "replace into unsharded select id from unsharded_auto" }, "TablesUsed": [ "main.unsharded", @@ -1850,8 +1782,7 @@ "Sharded": false }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(18446744073709551616)", - "Query": "replace into unsharded_auto(id, val) values (:__seq0, 'aa')", - "TableName": "unsharded_auto" + "Query": "replace into unsharded_auto(id, val) values (:__seq0, 'aa')" }, "TablesUsed": [ "main.unsharded_auto" @@ -1874,8 +1805,7 @@ "Sharded": false }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(1)", - "Query": "replace into unsharded_auto(id, val) values (:__seq0, 'aa')", - "TableName": "unsharded_auto" + "Query": "replace into unsharded_auto(id, val) values (:__seq0, 'aa')" }, "TablesUsed": [ "main.unsharded_auto" @@ -1898,8 +1828,7 @@ "Sharded": false }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(null)", - "Query": "replace into unsharded_auto(val, id) values ('aa', :__seq0)", - "TableName": "unsharded_auto" + "Query": "replace into unsharded_auto(val, id) values ('aa', :__seq0)" }, "TablesUsed": [ "main.unsharded_auto" @@ -1922,8 +1851,7 @@ "Sharded": false }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(1, null)", - "Query": "replace into unsharded_auto(id, val) values (:__seq0, 'aa'), (:__seq1, 'bb')", - "TableName": "unsharded_auto" + "Query": "replace into unsharded_auto(id, val) values (:__seq0, 'aa'), (:__seq1, 'bb')" }, "TablesUsed": [ "main.unsharded_auto" @@ -1952,7 +1880,6 @@ "Sharded": true }, "Query": "insert into multicolvin(column_a, column_b, column_c, kid) values (:_column_a_0, :_column_b_0, :_column_c_0, :_kid_0)", - "TableName": "multicolvin", "VindexValues": { "cola_map": "1", "colb_colc_map": "2, 3", @@ -1980,7 +1907,6 @@ "Sharded": true }, "Query": "insert into overlap_vindex(kid, column_a, column_b) values (:_kid_0, :_column_a_0, 3)", - "TableName": "overlap_vindex", "VindexValues": { "cola_kid_map": "2, 1", "kid_index": "1" @@ -2007,7 +1933,6 @@ "Sharded": true }, "Query": "insert into multicolvin(column_a, column_b, column_c, kid) values (:_column_a_0, :_column_b_0, :_column_c_0, :_kid_0), (:_column_a_1, :_column_b_1, :_column_c_1, :_kid_1)", - "TableName": "multicolvin", "VindexValues": { "cola_map": "1, 5", "colb_colc_map": "2, 6, 3, 7", @@ -2038,7 +1963,6 @@ "KsidVindex": "kid_index", "OwnedVindexQuery": "select kid, column_a, column_b, column_c from multicolvin where kid = 1 for update", "Query": "delete from multicolvin where kid = 1", - "Table": "multicolvin", "Values": [ "1" ], @@ -2071,7 +1995,6 @@ "KsidVindex": "kid_index", "OwnedVindexQuery": "select kid, column_a, column_b, column_c, column_b = 1 and column_c = 2 from multicolvin where kid = 1 for update", "Query": "update multicolvin set column_b = 1, column_c = 2 where kid = 1", - "Table": "multicolvin", "Values": [ "1" ], @@ -2105,7 +2028,6 @@ "KsidVindex": "kid_index", "OwnedVindexQuery": "select kid, column_a, column_b, column_c, column_a = 0, column_b = 1 and column_c = 2 from multicolvin where kid = 1 for update", "Query": "update multicolvin set column_a = 0, column_b = 1, column_c = 2 where kid = 1", - "Table": "multicolvin", "Values": [ "1" ], @@ -2131,8 +2053,7 @@ "Name": "user", "Sharded": true }, - "Query": "update user_extra set val = 1", - "Table": "user_extra" + "Query": "update user_extra set val = 1" }, "TablesUsed": [ "user.user_extra" @@ -2154,8 +2075,7 @@ "Name": "user", "Sharded": true }, - "Query": "update user_extra set val = 1", - "Table": "user_extra" + "Query": "update user_extra set val = 1" }, "TablesUsed": [ "user.user_extra" @@ -2178,8 +2098,7 @@ "Sharded": true }, "MultiShardAutocommit": true, - "Query": "update /*vt+ MULTI_SHARD_AUTOCOMMIT=1 */ user_extra set val = 1", - "Table": "user_extra" + "Query": "update /*vt+ MULTI_SHARD_AUTOCOMMIT=1 */ user_extra set val = 1" }, "TablesUsed": [ "user.user_extra" @@ -2202,8 +2121,7 @@ "Sharded": true }, "Query": "update /*vt+ QUERY_TIMEOUT_MS=1 */ user_extra set val = 1", - "QueryTimeout": 1, - "Table": "user_extra" + "QueryTimeout": 1 }, "TablesUsed": [ "user.user_extra" @@ -2225,8 +2143,7 @@ "Name": "user", "Sharded": true }, - "Query": "update user_extra set val = 1 where id between 1 and 2", - "Table": "user_extra" + "Query": "update user_extra set val = 1 where id between 1 and 2" }, "TablesUsed": [ "user.user_extra" @@ -2249,7 +2166,6 @@ "Sharded": true }, "Query": "update user_extra set val = 1 where user_id in ::__vals", - "Table": "user_extra", "Values": [ "(1, 2)" ], @@ -2275,8 +2191,7 @@ "Name": "user", "Sharded": true }, - "Query": "update user_extra set val = 1 where `name` = 'foo'", - "Table": "user_extra" + "Query": "update user_extra set val = 1 where `name` = 'foo'" }, "TablesUsed": [ "user.user_extra" @@ -2298,8 +2213,7 @@ "Name": "user", "Sharded": true }, - "Query": "update user_extra set val = 1 where id in (1, 2)", - "Table": "user_extra" + "Query": "update user_extra set val = 1 where id in (1, 2)" }, "TablesUsed": [ "user.user_extra" @@ -2321,8 +2235,7 @@ "Name": "user", "Sharded": true }, - "Query": "update user_extra set val = 1 where `name` = 'foo' or id = 1", - "Table": "user_extra" + "Query": "update user_extra set val = 1 where `name` = 'foo' or id = 1" }, "TablesUsed": [ "user.user_extra" @@ -2345,8 +2258,7 @@ "Sharded": true }, "FetchLastInsertID": true, - "Query": "update user_extra set col = last_insert_id(123)", - "Table": "user_extra" + "Query": "update user_extra set col = last_insert_id(123)" }, "TablesUsed": [ "user.user_extra" @@ -2368,8 +2280,7 @@ "Sharded": true }, "FetchLastInsertID": true, - "Query": "delete from user_extra where col = last_insert_id(123)", - "Table": "user_extra" + "Query": "delete from user_extra where col = last_insert_id(123)" }, "TablesUsed": [ "user.user_extra" @@ -2390,8 +2301,7 @@ "Name": "user", "Sharded": true }, - "Query": "delete from user_extra", - "Table": "user_extra" + "Query": "delete from user_extra" }, "TablesUsed": [ "user.user_extra" @@ -2413,8 +2323,7 @@ "Name": "user", "Sharded": true }, - "Query": "delete from user_extra", - "Table": "user_extra" + "Query": "delete from user_extra" }, "TablesUsed": [ "user.user_extra" @@ -2436,8 +2345,7 @@ "Name": "user", "Sharded": true }, - "Query": "delete from user_extra where user_id between 1 and 2", - "Table": "user_extra" + "Query": "delete from user_extra where user_id between 1 and 2" }, "TablesUsed": [ "user.user_extra" @@ -2459,8 +2367,7 @@ "Name": "user", "Sharded": true }, - "Query": "delete from user_extra where `name` = 'jose'", - "Table": "user_extra" + "Query": "delete from user_extra where `name` = 'jose'" }, "TablesUsed": [ "user.user_extra" @@ -2483,8 +2390,7 @@ "Sharded": true }, "MultiShardAutocommit": true, - "Query": "delete /*vt+ MULTI_SHARD_AUTOCOMMIT=1 */ from user_extra where `name` = 'jose'", - "Table": "user_extra" + "Query": "delete /*vt+ MULTI_SHARD_AUTOCOMMIT=1 */ from user_extra where `name` = 'jose'" }, "TablesUsed": [ "user.user_extra" @@ -2507,8 +2413,7 @@ "Sharded": true }, "Query": "delete /*vt+ QUERY_TIMEOUT_MS=1 */ from user_extra where `name` = 'jose'", - "QueryTimeout": 1, - "Table": "user_extra" + "QueryTimeout": 1 }, "TablesUsed": [ "user.user_extra" @@ -2531,7 +2436,6 @@ "Sharded": true }, "Query": "delete from user_extra where user_id in ::__vals", - "Table": "user_extra", "Values": [ "(1, 2)" ], @@ -2557,8 +2461,7 @@ "Name": "main", "Sharded": false }, - "Query": "update unsharded set col = (select id from unsharded_a where id = unsharded.col) where col = (select id from unsharded_b)", - "Table": "unsharded, unsharded_a, unsharded_b" + "Query": "update unsharded set col = (select id from unsharded_a where id = unsharded.col) where col = (select id from unsharded_b)" }, "TablesUsed": [ "main.unsharded", @@ -2582,8 +2485,7 @@ "Name": "main", "Sharded": false }, - "Query": "delete from unsharded where col = (select id from unsharded_a where id = unsharded.col)", - "Table": "unsharded, unsharded_a" + "Query": "delete from unsharded where col = (select id from unsharded_a where id = unsharded.col)" }, "TablesUsed": [ "main.unsharded", @@ -2613,7 +2515,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly, `name` = null from `user` where id = 1 for update", "Query": "update `user` set `name` = null where id = 1", - "Table": "user", "Values": [ "1" ], @@ -2639,8 +2540,7 @@ "Name": "main", "Sharded": false }, - "Query": "insert into unsharded values (:__lastInsertId, 2)", - "TableName": "unsharded" + "Query": "insert into unsharded values (:__lastInsertId, 2)" }, "TablesUsed": [ "main.unsharded" @@ -2663,8 +2563,7 @@ "Sharded": false }, "FetchLastInsertID": true, - "Query": "insert into unsharded values (last_insert_id(789), 2)", - "TableName": "unsharded" + "Query": "insert into unsharded values (last_insert_id(789), 2)" }, "TablesUsed": [ "main.unsharded" @@ -2693,7 +2592,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly, `name` = null from `user` where id in (1, 2, 3) for update", "Query": "update `user` set `name` = null where id in ::__vals", - "Table": "user", "Values": [ "(1, 2, 3)" ], @@ -2725,8 +2623,7 @@ "KsidLength": 1, "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly, `name` = null from `user` for update", - "Query": "update `user` set `name` = null", - "Table": "user" + "Query": "update `user` set `name` = null" }, "TablesUsed": [ "user.user" @@ -2754,8 +2651,7 @@ "KsidLength": 1, "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly, `name` = null from `user` where id + 1 = 2 for update", - "Query": "update `user` set `name` = null where id + 1 = 2", - "Table": "user" + "Query": "update `user` set `name` = null where id + 1 = 2" }, "TablesUsed": [ "user.user" @@ -2781,7 +2677,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly from `user` where id in (1, 2, 3) for update", "Query": "delete from `user` where id in ::__vals", - "Table": "user", "Values": [ "(1, 2, 3)" ], @@ -2810,8 +2705,7 @@ "KsidLength": 1, "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly from `user` where id + 1 = 2 for update", - "Query": "delete from `user` where id + 1 = 2", - "Table": "user" + "Query": "delete from `user` where id + 1 = 2" }, "TablesUsed": [ "user.user" @@ -2836,8 +2730,7 @@ "KsidLength": 1, "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly from `user` for update", - "Query": "delete from `user`", - "Table": "user" + "Query": "delete from `user`" }, "TablesUsed": [ "user.user" @@ -2863,7 +2756,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select user_id, id from music where id = 1 for update", "Query": "delete from music where id = 1", - "Table": "music", "Values": [ "1" ], @@ -2889,8 +2781,7 @@ "Name": "user", "Sharded": true }, - "Query": "update `user` set val = 1", - "Table": "user" + "Query": "update `user` set val = 1" }, "TablesUsed": [ "user.user" @@ -2915,8 +2806,7 @@ "KsidLength": 1, "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly from `user` for update", - "Query": "delete from `user`", - "Table": "user" + "Query": "delete from `user`" }, "TablesUsed": [ "user.user" @@ -2945,7 +2835,6 @@ "KsidVindex": "kid_index", "OwnedVindexQuery": "select kid, column_a, column_b, column_c, column_c = 2 from multicolvin where kid = 1 for update", "Query": "update multicolvin set column_c = 2 where kid = 1", - "Table": "multicolvin", "Values": [ "1" ], @@ -2978,7 +2867,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly, `name` = _binary 'abc' from `user` where id = 1 for update", "Query": "update `user` set `name` = _binary 'abc' where id = 1", - "Table": "user", "Values": [ "1" ], @@ -3008,7 +2896,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly from `user` where `name` = _binary 'abc' for update", "Query": "delete from `user` where `name` = _binary 'abc'", - "Table": "user", "Values": [ "_binary'abc'" ], @@ -3037,8 +2924,7 @@ "KsidLength": 1, "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly from `user` for update", - "Query": "delete from `user`", - "Table": "user" + "Query": "delete from `user`" }, "TablesUsed": [ "user.user" @@ -3066,8 +2952,7 @@ "KsidLength": 1, "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly, `name` = 'myname' from `user` for update", - "Query": "update `user` set `name` = 'myname'", - "Table": "user" + "Query": "update `user` set `name` = 'myname'" }, "TablesUsed": [ "user.user" @@ -3089,8 +2974,7 @@ "Name": "user", "Sharded": true }, - "Query": "update user_extra set val = 1", - "Table": "user_extra" + "Query": "update user_extra set val = 1" }, "TablesUsed": [ "user.user_extra" @@ -3115,8 +2999,7 @@ "KsidLength": 1, "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly from `user` where `user`.id * `user`.col = `user`.foo for update", - "Query": "delete from `user` where `user`.id * `user`.col = `user`.foo", - "Table": "user" + "Query": "delete from `user` where `user`.id * `user`.col = `user`.foo" }, "TablesUsed": [ "user.user" @@ -3156,8 +3039,7 @@ "Name": "main", "Sharded": false }, - "Query": "insert into user_privacy_consents(user_id, accepted_at) select user_id, accepted_at from (select 1 as user_id, 1629194864 as accepted_at from dual) as tmp where not exists (select 1 from user_privacy_consents where user_id = 1)", - "TableName": "user_privacy_consents" + "Query": "insert into user_privacy_consents(user_id, accepted_at) select user_id, accepted_at from (select 1 as user_id, 1629194864 as accepted_at from dual) as tmp where not exists (select 1 from user_privacy_consents where user_id = 1)" }, "TablesUsed": [ "main.dual", @@ -3183,8 +3065,7 @@ "KsidLength": 1, "KsidVindex": "xxhash", "OwnedVindexQuery": "select c1, c2, c3 from t1 where c2 = 20 for update", - "Query": "delete from t1 where c2 = 20", - "Table": "t1" + "Query": "delete from t1 where c2 = 20" }, "TablesUsed": [ "zlookup_unique.t1" @@ -3212,8 +3093,7 @@ "KsidLength": 1, "KsidVindex": "xxhash", "OwnedVindexQuery": "select c1, c2, c3, c2 = 1 from t1 where c2 = 20 for update", - "Query": "update t1 set c2 = 1 where c2 = 20", - "Table": "t1" + "Query": "update t1 set c2 = 1 where c2 = 20" }, "TablesUsed": [ "zlookup_unique.t1" @@ -3239,7 +3119,6 @@ "KsidVindex": "xxhash", "OwnedVindexQuery": "select c1, c2, c3 from t1 where c2 = 10 and c3 = 20 for update", "Query": "delete from t1 where c2 = 10 and c3 = 20", - "Table": "t1", "Values": [ "20" ], @@ -3272,7 +3151,6 @@ "KsidVindex": "xxhash", "OwnedVindexQuery": "select c1, c2, c3, c2 = 1 from t1 where c2 = 10 and c3 = 20 for update", "Query": "update t1 set c2 = 1 where c2 = 10 and c3 = 20", - "Table": "t1", "Values": [ "20" ], @@ -3302,7 +3180,6 @@ "KsidVindex": "xxhash", "OwnedVindexQuery": "select c1, c2, c3 from t1 where c2 = 10 and c3 in (20, 21) for update", "Query": "delete from t1 where c2 = 10 and c3 in ::__vals", - "Table": "t1", "Values": [ "(20, 21)" ], @@ -3335,7 +3212,6 @@ "KsidVindex": "xxhash", "OwnedVindexQuery": "select c1, c2, c3, c2 = 1 from t1 where c2 = 10 and c3 in (20, 21) for update", "Query": "update t1 set c2 = 1 where c2 = 10 and c3 in ::__vals", - "Table": "t1", "Values": [ "(20, 21)" ], @@ -3367,8 +3243,7 @@ "KsidLength": 1, "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly, u.`name` = 'john' from `user` as u where u.col > 20 for update", - "Query": "update `user` as u set u.`name` = 'john' where u.col > 20", - "Table": "user" + "Query": "update `user` as u set u.`name` = 'john' where u.col > 20" }, "TablesUsed": [ "user.user" @@ -3393,8 +3268,7 @@ "KsidLength": 1, "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly from `user` as u where u.col > 20 for update", - "Query": "delete from `user` as u where u.col > 20", - "Table": "user" + "Query": "delete from `user` as u where u.col > 20" }, "TablesUsed": [ "user.user" @@ -3417,7 +3291,6 @@ "Sharded": true }, "Query": "update multicol_tbl set x = 1 where cola = 1 and colb = 2", - "Table": "multicol_tbl", "Values": [ "1", "2" @@ -3445,7 +3318,6 @@ "Sharded": true }, "Query": "update multicol_tbl set x = 1 where colb = 2 and cola = 1", - "Table": "multicol_tbl", "Values": [ "1", "2" @@ -3473,7 +3345,6 @@ "Sharded": true }, "Query": "update multicol_tbl set x = 1 where colb in ::__vals1 and cola = 1", - "Table": "multicol_tbl", "Values": [ "1", "(1, 2)" @@ -3501,7 +3372,6 @@ "Sharded": true }, "Query": "update multicol_tbl set x = 1 where colb in ::__vals1 and cola in ::__vals0", - "Table": "multicol_tbl", "Values": [ "(3, 4)", "(1, 2)" @@ -3532,7 +3402,6 @@ "KsidVindex": "multicolIdx", "OwnedVindexQuery": "select cola, colb, colc, `name` from multicol_tbl where cola = 1 and colb = 2 for update", "Query": "delete from multicol_tbl where cola = 1 and colb = 2", - "Table": "multicol_tbl", "Values": [ "1", "2" @@ -3563,7 +3432,6 @@ "KsidVindex": "multicolIdx", "OwnedVindexQuery": "select cola, colb, colc, `name` from multicol_tbl where colb = 2 and cola = 1 for update", "Query": "delete from multicol_tbl where colb = 2 and cola = 1", - "Table": "multicol_tbl", "Values": [ "1", "2" @@ -3594,7 +3462,6 @@ "KsidVindex": "multicolIdx", "OwnedVindexQuery": "select cola, colb, colc, `name` from multicol_tbl where colb in (1, 2) and cola = 1 for update", "Query": "delete from multicol_tbl where colb in ::__vals1 and cola = 1", - "Table": "multicol_tbl", "Values": [ "1", "(1, 2)" @@ -3625,7 +3492,6 @@ "KsidVindex": "multicolIdx", "OwnedVindexQuery": "select cola, colb, colc, `name` from multicol_tbl where colb in (1, 2) and cola in (3, 4) for update", "Query": "delete from multicol_tbl where colb in ::__vals1 and cola in ::__vals0", - "Table": "multicol_tbl", "Values": [ "(3, 4)", "(1, 2)" @@ -3659,7 +3525,6 @@ "KsidVindex": "multicolIdx", "OwnedVindexQuery": "select cola, colb, colc, `name`, colc = 1 from multicol_tbl where cola = 1 and colb = 2 for update", "Query": "update multicol_tbl set colc = 1 where cola = 1 and colb = 2", - "Table": "multicol_tbl", "Values": [ "1", "2" @@ -3687,7 +3552,6 @@ "Sharded": true }, "Query": "update multicol_tbl set x = 42 where `name` = 'foo'", - "Table": "multicol_tbl", "Values": [ "'foo'" ], @@ -3714,7 +3578,6 @@ "Sharded": true }, "Query": "update multicol_tbl set x = 42 where cola = 1", - "Table": "multicol_tbl", "Values": [ "1" ], @@ -3747,7 +3610,6 @@ "KsidVindex": "multicolIdx", "OwnedVindexQuery": "select cola, colb, colc, `name`, `name` = 'bar' from multicol_tbl where cola = 1 for update", "Query": "update multicol_tbl set `name` = 'bar' where cola = 1", - "Table": "multicol_tbl", "Values": [ "1" ], @@ -3780,7 +3642,6 @@ "KsidVindex": "multicolIdx", "OwnedVindexQuery": "select cola, colb, colc, `name`, `name` = 'bar' from multicol_tbl where cola in (1, 2) for update", "Query": "update multicol_tbl set `name` = 'bar' where cola in ::__vals0", - "Table": "multicol_tbl", "Values": [ "(1, 2)" ], @@ -3807,7 +3668,6 @@ "Sharded": true }, "Query": "update multicol_tbl set x = 1 where `name` = 'foo' and cola = 2", - "Table": "multicol_tbl", "Values": [ "'foo'" ], @@ -3837,7 +3697,6 @@ "KsidVindex": "multicolIdx", "OwnedVindexQuery": "select cola, colb, colc, `name` from multicol_tbl where `name` = 'foo' for update", "Query": "delete from multicol_tbl where `name` = 'foo'", - "Table": "multicol_tbl", "Values": [ "'foo'" ], @@ -3867,7 +3726,6 @@ "KsidVindex": "multicolIdx", "OwnedVindexQuery": "select cola, colb, colc, `name` from multicol_tbl where cola = 1 for update", "Query": "delete from multicol_tbl where cola = 1", - "Table": "multicol_tbl", "Values": [ "1" ], @@ -3897,7 +3755,6 @@ "KsidVindex": "multicolIdx", "OwnedVindexQuery": "select cola, colb, colc, `name` from multicol_tbl where cola in (1, 2) for update", "Query": "delete from multicol_tbl where cola in ::__vals0", - "Table": "multicol_tbl", "Values": [ "(1, 2)" ], @@ -3927,7 +3784,6 @@ "KsidVindex": "multicolIdx", "OwnedVindexQuery": "select cola, colb, colc, `name` from multicol_tbl where `name` = 'foo' and cola = 2 for update", "Query": "delete from multicol_tbl where `name` = 'foo' and cola = 2", - "Table": "multicol_tbl", "Values": [ "'foo'" ], @@ -3953,7 +3809,6 @@ "Name": "user", "Sharded": true }, - "TableName": "music", "VindexOffsetFromSelect": { "music_user_map": "[0]", "user_index": "[1]" @@ -3967,8 +3822,7 @@ "Sharded": true }, "FieldQuery": "select * from `user` where 1 != 1", - "Query": "select * from `user` lock in share mode", - "Table": "`user`" + "Query": "select * from `user` lock in share mode" } ] }, @@ -4012,7 +3866,6 @@ "Sharded": true }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Offset(1)", - "TableName": "user_extra", "VindexOffsetFromSelect": { "user_index": "[0]" }, @@ -4025,8 +3878,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` lock in share mode", - "Table": "`user`" + "Query": "select id from `user` lock in share mode" } ] }, @@ -4052,7 +3904,6 @@ "Sharded": true }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Offset(2)", - "TableName": "user_extra", "VindexOffsetFromSelect": { "user_index": "[1]" }, @@ -4065,8 +3916,7 @@ "Sharded": true }, "FieldQuery": "select null, id from `user` where 1 != 1", - "Query": "select null, id from `user` lock in share mode", - "Table": "`user`" + "Query": "select null, id from `user` lock in share mode" } ] }, @@ -4092,7 +3942,6 @@ "Sharded": true }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Offset(0)", - "TableName": "user", "VindexOffsetFromSelect": { "costly_map": "[-1]", "name_user_map": "[-1]", @@ -4107,8 +3956,7 @@ "Sharded": false }, "FieldQuery": "select 1 from dual where 1 != 1", - "Query": "select 1 from dual lock in share mode", - "Table": "dual" + "Query": "select 1 from dual lock in share mode" } ] }, @@ -4134,7 +3982,6 @@ "Sharded": true }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Offset(1)", - "TableName": "user", "VindexOffsetFromSelect": { "costly_map": "[-1]", "name_user_map": "[-1]", @@ -4149,8 +3996,7 @@ "Sharded": false }, "FieldQuery": "select 1 from dual where 1 != 1", - "Query": "select 1 from dual lock in share mode", - "Table": "dual" + "Query": "select 1 from dual lock in share mode" } ] }, @@ -4182,7 +4028,6 @@ "Sharded": true }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Offset(2)", - "TableName": "user_extra", "VindexOffsetFromSelect": { "user_index": "[0]" }, @@ -4195,8 +4040,7 @@ "Sharded": true }, "FieldQuery": "select col1, col2 from `user` where 1 != 1", - "Query": "select col1, col2 from `user` lock in share mode", - "Table": "`user`" + "Query": "select col1, col2 from `user` lock in share mode" } ] }, @@ -4221,8 +4065,7 @@ "Name": "main", "Sharded": false }, - "Query": "insert into unsharded(col) select col from unsharded_auto", - "TableName": "unsharded" + "Query": "insert into unsharded(col) select col from unsharded_auto" }, "TablesUsed": [ "main.unsharded", @@ -4246,7 +4089,6 @@ "Sharded": true }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Offset(2)", - "TableName": "user_extra", "VindexOffsetFromSelect": { "user_index": "[0]" }, @@ -4259,8 +4101,7 @@ "Sharded": true }, "FieldQuery": "select col1, col2 from t1 where 1 != 1", - "Query": "select col1, col2 from t1 lock in share mode", - "Table": "t1" + "Query": "select col1, col2 from t1 lock in share mode" } ] }, @@ -4286,7 +4127,6 @@ "Sharded": true }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Offset(2)", - "TableName": "user_extra", "VindexOffsetFromSelect": { "user_index": "[0]" }, @@ -4299,8 +4139,7 @@ "Sharded": false }, "FieldQuery": "select col1, col2 from unsharded_tab where 1 != 1", - "Query": "select col1, col2 from unsharded_tab lock in share mode", - "Table": "unsharded_tab" + "Query": "select col1, col2 from unsharded_tab lock in share mode" } ] }, @@ -4325,7 +4164,6 @@ "Name": "main", "Sharded": false }, - "TableName": "unsharded", "Inputs": [ { "OperatorType": "Route", @@ -4335,8 +4173,7 @@ "Sharded": false }, "FieldQuery": "select col from unsharded_tab where 1 != 1", - "Query": "select col from unsharded_tab lock in share mode", - "Table": "unsharded_tab" + "Query": "select col from unsharded_tab lock in share mode" } ] }, @@ -4361,7 +4198,6 @@ "Name": "main", "Sharded": false }, - "TableName": "unsharded", "Inputs": [ { "OperatorType": "Route", @@ -4371,8 +4207,7 @@ "Sharded": true }, "FieldQuery": "select col from t1 where 1 != 1", - "Query": "select col from t1 lock in share mode", - "Table": "t1" + "Query": "select col from t1 lock in share mode" } ] }, @@ -4406,8 +4241,7 @@ "Sharded": false }, "FieldQuery": "select id from unsharded where 1 != 1", - "Query": "select id from unsharded lock in share mode", - "Table": "unsharded" + "Query": "select id from unsharded lock in share mode" }, { "InputName": "Outer", @@ -4417,8 +4251,7 @@ "Name": "user", "Sharded": true }, - "Query": "update `user` set col = :__sq1", - "Table": "user" + "Query": "update `user` set col = :__sq1" } ] }, @@ -4452,8 +4285,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` lock in share mode", - "Table": "`user`" + "Query": "select id from `user` lock in share mode" }, { "InputName": "Outer", @@ -4463,8 +4295,7 @@ "Name": "main", "Sharded": false }, - "Query": "update unsharded set col = :__sq1", - "Table": "unsharded" + "Query": "update unsharded set col = :__sq1" } ] }, @@ -4497,7 +4328,6 @@ "JoinVars": { "unsharded_id": 0 }, - "TableName": "unsharded_`user`", "Inputs": [ { "OperatorType": "Route", @@ -4507,8 +4337,7 @@ "Sharded": false }, "FieldQuery": "select unsharded.id from unsharded where 1 != 1", - "Query": "select unsharded.id from unsharded lock in share mode", - "Table": "unsharded" + "Query": "select unsharded.id from unsharded lock in share mode" }, { "OperatorType": "Route", @@ -4519,7 +4348,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where `user`.id = :unsharded_id lock in share mode", - "Table": "`user`", "Values": [ ":unsharded_id" ], @@ -4535,8 +4363,7 @@ "Name": "main", "Sharded": false }, - "Query": "update unsharded set col = :__sq1", - "Table": "unsharded" + "Query": "update unsharded set col = :__sq1" } ] }, @@ -4562,7 +4389,6 @@ "Sharded": true }, "Query": "update `user` set col = (select count(*) from user_extra where user_extra.user_id = 5) where id = 5", - "Table": "user", "Values": [ "5" ], @@ -4590,7 +4416,6 @@ "Sharded": true }, "Query": "update `user` set col = (select count(*) from user_extra where user_extra.user_id = `user`.id) where id = 5", - "Table": "user", "Values": [ "5" ], @@ -4617,8 +4442,7 @@ "Name": "user", "Sharded": true }, - "Query": "update `user` set col = (select count(*) from user_extra where user_extra.user_id = `user`.id) where id > 5", - "Table": "user" + "Query": "update `user` set col = (select count(*) from user_extra where user_extra.user_id = `user`.id) where id > 5" }, "TablesUsed": [ "user.user", @@ -4642,7 +4466,6 @@ "Sharded": true }, "Query": "insert into authoritative(user_id) values (:_user_id_0)", - "TableName": "authoritative", "VindexValues": { "user_index": "null" } @@ -4680,8 +4503,7 @@ "KsidLength": 1, "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly from `user` for update", - "Query": "delete from `user`", - "Table": "user" + "Query": "delete from `user`" } ] }, @@ -4712,8 +4534,7 @@ "KsidLength": 1, "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly from `user` for update", - "Query": "delete from `user`", - "Table": "user" + "Query": "delete from `user`" } ] }, @@ -4737,8 +4558,7 @@ "Name": "main", "Sharded": false }, - "Query": "delete foo from unsharded as foo join (select id from unsharded as a join unsharded_b as b on a.user_id = b.user_id) as keepers on foo.id = keepers.id where keepers.id is null and foo.col is not null and foo.col < 1000", - "Table": "unsharded, unsharded_b" + "Query": "delete foo from unsharded as foo join (select id from unsharded as a join unsharded_b as b on a.user_id = b.user_id) as keepers on foo.id = keepers.id where keepers.id is null and foo.col is not null and foo.col < 1000" }, "TablesUsed": [ "main.unsharded", @@ -4762,7 +4582,6 @@ "Sharded": true }, "Query": "update `user` set col = 1 where (`name`, col) in (('aa', 'bb'), ('cc', 'dd'))", - "Table": "user", "Values": [ "('aa', 'cc')" ], @@ -4792,7 +4611,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly from `user` where (`name`, col) in (('aa', 'bb'), ('cc', 'dd')) for update", "Query": "delete from `user` where (`name`, col) in (('aa', 'bb'), ('cc', 'dd'))", - "Table": "user", "Values": [ "('aa', 'cc')" ], @@ -4818,8 +4636,7 @@ "Name": "user", "Sharded": true }, - "Query": "insert into ref(col) values (1)", - "TableName": "ref" + "Query": "insert into ref(col) values (1)" }, "TablesUsed": [ "user.ref" @@ -4841,8 +4658,7 @@ "Name": "main", "Sharded": false }, - "Query": "update m1 set foo = last_insert_id(foo + 1) where id = 12345", - "Table": "m1" + "Query": "update m1 set foo = last_insert_id(foo + 1) where id = 12345" }, "TablesUsed": [ "main.m1" @@ -4865,8 +4681,7 @@ "Sharded": false }, "Query": "update /*vt+ QUERY_TIMEOUT_MS=1 */ unsharded set val = 1", - "QueryTimeout": 1, - "Table": "unsharded" + "QueryTimeout": 1 }, "TablesUsed": [ "main.unsharded" @@ -4889,8 +4704,7 @@ "Sharded": false }, "Query": "insert /*vt+ QUERY_TIMEOUT_MS=1 */ into unsharded values ()", - "QueryTimeout": 1, - "TableName": "unsharded" + "QueryTimeout": 1 }, "TablesUsed": [ "main.unsharded" @@ -4913,7 +4727,6 @@ "Sharded": true }, "InputAsNonStreaming": true, - "TableName": "music", "VindexOffsetFromSelect": { "music_user_map": "[0]", "user_index": "[1]" @@ -4928,7 +4741,6 @@ }, "FieldQuery": "select id, user_id from music where 1 != 1", "Query": "select id, user_id from music where user_id = 1 lock in share mode", - "Table": "music", "Values": [ "1" ], @@ -4958,7 +4770,6 @@ }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(null, null, null)", "Query": "insert into mixed_tbl(shard_key, lkp_key) values (:_shard_key_0, :_lkp_key_0), (:_shard_key_1, :_lkp_key_1), (:_shard_key_2, :_lkp_key_2)", - "TableName": "mixed_tbl", "VindexValues": { "lkp_shard_map": ":__seq0, :__seq1, :__seq2", "shard_index": "1, 4, 9" @@ -4986,7 +4797,6 @@ }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Values::(1, null, 27)", "Query": "insert into mixed_tbl(shard_key, lkp_key) values (:_shard_key_0, :_lkp_key_0), (:_shard_key_1, :_lkp_key_1), (:_shard_key_2, :_lkp_key_2)", - "TableName": "mixed_tbl", "VindexValues": { "lkp_shard_map": ":__seq0, :__seq1, :__seq2", "shard_index": "1, 4, 9" @@ -5013,7 +4823,6 @@ "Sharded": true }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Offset(1)", - "TableName": "mixed_tbl", "VindexOffsetFromSelect": { "lkp_shard_map": "[1]", "shard_index": "[0]" @@ -5028,7 +4837,6 @@ }, "FieldQuery": "select foo from `user` where 1 != 1", "Query": "select foo from `user` where id = 1 lock in share mode", - "Table": "`user`", "Values": [ "1" ], @@ -5058,7 +4866,6 @@ "Sharded": true }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Offset(1)", - "TableName": "mixed_tbl", "VindexOffsetFromSelect": { "lkp_shard_map": "[1]", "shard_index": "[0]" @@ -5073,7 +4880,6 @@ }, "FieldQuery": "select foo, bar from `user` where 1 != 1", "Query": "select foo, bar from `user` where id = 1 lock in share mode", - "Table": "`user`", "Values": [ "1" ], @@ -5110,7 +4916,6 @@ }, "AutoIncrement": "select next :n /* INT64 */ values from seq:Offset(0)", "InputAsNonStreaming": true, - "TableName": "user", "VindexOffsetFromSelect": { "costly_map": "[-1]", "name_user_map": "[-1]", @@ -5125,8 +4930,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` lock in share mode", - "Table": "`user`" + "Query": "select id from `user` lock in share mode" } ] }, @@ -5182,7 +4986,6 @@ }, "InsertIgnore": true, "Query": "insert into music(id, user_id, col) values (:_id_0, :_user_id_0, 3) on duplicate key update music.col = 5", - "TableName": "music", "VindexValues": { "music_user_map": "1", "user_index": "2" @@ -5208,8 +5011,7 @@ "Name": "main", "Sharded": false }, - "Query": "delete from source_of_ref where col = 1", - "Table": "source_of_ref" + "Query": "delete from source_of_ref where col = 1" }, "TablesUsed": [ "main.source_of_ref" @@ -5231,8 +5033,7 @@ "Name": "user", "Sharded": true }, - "Query": "delete from ref", - "Table": "ref" + "Query": "delete from ref" }, "TablesUsed": [ "user.ref" @@ -5257,8 +5058,7 @@ "KsidLength": 1, "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly from `user` limit 20 for update", - "Query": "delete from `user` limit 20", - "Table": "user" + "Query": "delete from `user` limit 20" }, "TablesUsed": [ "user.user" @@ -5283,8 +5083,7 @@ "KsidLength": 1, "KsidVindex": "user_index", "OwnedVindexQuery": "select u.Id, u.`Name`, u.Costly from `user` as u, ref_with_source as r where u.col = r.col for update", - "Query": "delete u from `user` as u, ref_with_source as r where u.col = r.col", - "Table": "user" + "Query": "delete u from `user` as u, ref_with_source as r where u.col = r.col" }, "TablesUsed": [ "user.ref_with_source", @@ -5310,8 +5109,7 @@ "KsidLength": 1, "KsidVindex": "user_index", "OwnedVindexQuery": "select u.Id, u.`Name`, u.Costly from `user` as u, music as m where u.id = m.user_id for update", - "Query": "delete u from `user` as u, music as m where u.id = m.user_id", - "Table": "user" + "Query": "delete u from `user` as u, music as m where u.id = m.user_id" }, "TablesUsed": [ "user.music", @@ -5340,7 +5138,6 @@ "JoinVars": { "user_extra_id": 0 }, - "TableName": "user_extra_`user`", "Inputs": [ { "OperatorType": "Route", @@ -5350,8 +5147,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.id from user_extra where 1 != 1", - "Query": "select user_extra.id from user_extra", - "Table": "user_extra" + "Query": "select user_extra.id from user_extra" }, { "OperatorType": "Route", @@ -5362,7 +5158,6 @@ }, "FieldQuery": "select `user`.id from `user` where 1 != 1", "Query": "select `user`.id from `user` where `user`.`name` = 'foo' and `user`.id = :user_extra_id", - "Table": "`user`", "Values": [ ":user_extra_id" ], @@ -5381,7 +5176,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select `user`.Id, `user`.`Name`, `user`.Costly from `user` where `user`.id in ::dml_vals for update", "Query": "delete from `user` where `user`.id in ::dml_vals", - "Table": "user", "Values": [ "::dml_vals" ], @@ -5416,7 +5210,6 @@ "JoinVars": { "u_col": 1 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -5426,8 +5219,7 @@ "Sharded": true }, "FieldQuery": "select u.id, u.col from `user` as u where 1 != 1", - "Query": "select u.id, u.col from `user` as u", - "Table": "`user`" + "Query": "select u.id, u.col from `user` as u" }, { "OperatorType": "Route", @@ -5437,8 +5229,7 @@ "Sharded": true }, "FieldQuery": "select 1 from music as m where 1 != 1", - "Query": "select 1 from music as m where m.col = :u_col /* INT16 */", - "Table": "music" + "Query": "select 1 from music as m where m.col = :u_col /* INT16 */" } ] }, @@ -5453,7 +5244,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select u.Id, u.`Name`, u.Costly from `user` as u where u.id in ::dml_vals for update", "Query": "delete from `user` as u where u.id in ::dml_vals", - "Table": "user", "Values": [ "::dml_vals" ], @@ -5488,7 +5278,6 @@ "JoinVars": { "m_col": 0 }, - "TableName": "music_`user`", "Inputs": [ { "OperatorType": "Route", @@ -5498,8 +5287,7 @@ "Sharded": true }, "FieldQuery": "select m.col from music as m where 1 != 1", - "Query": "select m.col from music as m where m.foo = 42", - "Table": "music" + "Query": "select m.col from music as m where m.foo = 42" }, { "OperatorType": "Route", @@ -5509,8 +5297,7 @@ "Sharded": true }, "FieldQuery": "select u.id from `user` as u where 1 != 1", - "Query": "select u.id from `user` as u where u.col = :m_col", - "Table": "`user`" + "Query": "select u.id from `user` as u where u.col = :m_col" } ] }, @@ -5525,7 +5312,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select u.Id, u.`Name`, u.Costly from `user` as u where u.id in ::dml_vals for update", "Query": "delete from `user` as u where u.id in ::dml_vals", - "Table": "user", "Values": [ "::dml_vals" ], @@ -5557,8 +5343,7 @@ "KsidLength": 1, "KsidVindex": "user_index", "OwnedVindexQuery": "select u.Id, u.`Name`, u.Costly from `user` as u, music as m where m.foo = 42 and u.id = m.user_id for update", - "Query": "delete u from `user` as u, music as m where m.foo = 42 and u.id = m.user_id", - "Table": "user" + "Query": "delete u from `user` as u, music as m where m.foo = 42 and u.id = m.user_id" }, "TablesUsed": [ "user.music", @@ -5587,7 +5372,6 @@ "JoinVars": { "u_col": 1 }, - "TableName": "`user`_music, user_extra", "Inputs": [ { "OperatorType": "Route", @@ -5597,8 +5381,7 @@ "Sharded": true }, "FieldQuery": "select u.id, u.col from `user` as u where 1 != 1", - "Query": "select u.id, u.col from `user` as u where u.col = 30", - "Table": "`user`" + "Query": "select u.id, u.col from `user` as u where u.col = 30" }, { "OperatorType": "Route", @@ -5608,8 +5391,7 @@ "Sharded": true }, "FieldQuery": "select 1 from music as m, user_extra as ue where 1 != 1", - "Query": "select 1 from music as m, user_extra as ue where m.bar = 40 and m.col = :u_col /* INT16 */ and ue.foo = 20 and m.user_id = ue.user_id", - "Table": "music, user_extra" + "Query": "select 1 from music as m, user_extra as ue where m.bar = 40 and m.col = :u_col /* INT16 */ and ue.foo = 20 and m.user_id = ue.user_id" } ] }, @@ -5624,7 +5406,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select u.Id, u.`Name`, u.Costly from `user` as u where u.id in ::dml_vals for update", "Query": "delete from `user` as u where u.id in ::dml_vals", - "Table": "user", "Values": [ "::dml_vals" ], @@ -5660,7 +5441,6 @@ "JoinVars": { "u_col": 0 }, - "TableName": "`user`_music, user_extra", "Inputs": [ { "OperatorType": "Route", @@ -5670,8 +5450,7 @@ "Sharded": true }, "FieldQuery": "select u.col from `user` as u where 1 != 1", - "Query": "select u.col from `user` as u where u.col = 30", - "Table": "`user`" + "Query": "select u.col from `user` as u where u.col = 30" }, { "OperatorType": "Route", @@ -5681,8 +5460,7 @@ "Sharded": true }, "FieldQuery": "select m.id from music as m, user_extra as ue where 1 != 1", - "Query": "select m.id from music as m, user_extra as ue where m.bar = 40 and m.col = :u_col /* INT16 */ and ue.foo = 20 and m.user_id = ue.user_id", - "Table": "music, user_extra" + "Query": "select m.id from music as m, user_extra as ue where m.bar = 40 and m.col = :u_col /* INT16 */ and ue.foo = 20 and m.user_id = ue.user_id" } ] }, @@ -5697,7 +5475,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select m.user_id, m.id from music as m where m.id in ::dml_vals for update", "Query": "delete from music as m where m.id in ::dml_vals", - "Table": "music", "Values": [ "::dml_vals" ], @@ -5738,8 +5515,7 @@ "Sharded": true }, "FieldQuery": "select `user`.id from `user` where 1 != 1", - "Query": "select `user`.id from `user` limit :__upper_limit", - "Table": "`user`" + "Query": "select `user`.id from `user` limit :__upper_limit" } ] }, @@ -5754,7 +5530,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly from `user` where `user`.id in ::dml_vals for update", "Query": "delete from `user` where `user`.id in ::dml_vals", - "Table": "user", "Values": [ "::dml_vals" ], @@ -5794,8 +5569,7 @@ }, "FieldQuery": "select `user`.id, `name`, weight_string(`name`), col from `user` where 1 != 1", "OrderBy": "(1|2) ASC, 3 ASC", - "Query": "select `user`.id, `name`, weight_string(`name`), col from `user` order by `name` asc, col asc limit :__upper_limit", - "Table": "`user`" + "Query": "select `user`.id, `name`, weight_string(`name`), col from `user` order by `name` asc, col asc limit :__upper_limit" } ] }, @@ -5810,7 +5584,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly from `user` where `user`.id in ::dml_vals for update", "Query": "delete from `user` where `user`.id in ::dml_vals", - "Table": "user", "Values": [ "::dml_vals" ], @@ -5849,8 +5622,7 @@ "Sharded": true }, "FieldQuery": "select `user`.id from `user` where 1 != 1", - "Query": "select `user`.id from `user` where `name` = 'foo' or id = 1 limit :__upper_limit lock in share mode", - "Table": "`user`" + "Query": "select `user`.id from `user` where `name` = 'foo' or id = 1 limit :__upper_limit lock in share mode" } ] }, @@ -5862,7 +5634,6 @@ "Sharded": true }, "Query": "update `user` set val = 1 where `user`.id in ::dml_vals", - "Table": "user", "Values": [ "::dml_vals" ], @@ -5901,8 +5672,7 @@ "Sharded": true }, "FieldQuery": "select `user`.id from `user` where 1 != 1", - "Query": "select `user`.id from `user` where id > 10 limit :__upper_limit lock in share mode", - "Table": "`user`" + "Query": "select `user`.id from `user` where id > 10 limit :__upper_limit lock in share mode" } ] }, @@ -5920,7 +5690,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly, `name` = 'abc' from `user` where `user`.id in ::dml_vals for update", "Query": "update `user` set `name` = 'abc' where `user`.id in ::dml_vals", - "Table": "user", "Values": [ "::dml_vals" ], @@ -5954,7 +5723,6 @@ "JoinVars": { "ue_id": 0 }, - "TableName": "user_extra_`user`", "Inputs": [ { "OperatorType": "Route", @@ -5964,8 +5732,7 @@ "Sharded": true }, "FieldQuery": "select ue.id from user_extra as ue where 1 != 1", - "Query": "select ue.id from user_extra as ue lock in share mode", - "Table": "user_extra" + "Query": "select ue.id from user_extra as ue lock in share mode" }, { "OperatorType": "Route", @@ -5976,7 +5743,6 @@ }, "FieldQuery": "select u.id from `user` as u where 1 != 1", "Query": "select u.id from `user` as u where u.id = :ue_id lock in share mode", - "Table": "`user`", "Values": [ ":ue_id" ], @@ -5998,7 +5764,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly, u.`name` = 'foo' from `user` as u where u.id in ::dml_vals for update", "Query": "update `user` as u set u.`name` = 'foo' where u.id in ::dml_vals", - "Table": "user", "Values": [ "::dml_vals" ], @@ -6033,7 +5798,6 @@ "JoinVars": { "user_extra_id": 0 }, - "TableName": "user_extra_`user`", "Inputs": [ { "OperatorType": "Route", @@ -6043,8 +5807,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.id from user_extra where 1 != 1", - "Query": "select user_extra.id from user_extra lock in share mode", - "Table": "user_extra" + "Query": "select user_extra.id from user_extra lock in share mode" }, { "OperatorType": "Route", @@ -6055,7 +5818,6 @@ }, "FieldQuery": "select `user`.id from `user` where 1 != 1", "Query": "select `user`.id from `user` where `user`.id = :user_extra_id lock in share mode", - "Table": "`user`", "Values": [ ":user_extra_id" ], @@ -6077,7 +5839,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly, `user`.`name` = 'foo' from `user` where `user`.id in ::dml_vals for update", "Query": "update `user` set `user`.`name` = 'foo' where `user`.id in ::dml_vals", - "Table": "user", "Values": [ "::dml_vals" ], @@ -6115,7 +5876,6 @@ "JoinVars": { "ue_id": 1 }, - "TableName": "user_extra_`user`", "Inputs": [ { "OperatorType": "Route", @@ -6125,8 +5885,7 @@ "Sharded": true }, "FieldQuery": "select ue.col, ue.id from user_extra as ue where 1 != 1", - "Query": "select ue.col, ue.id from user_extra as ue for update", - "Table": "user_extra" + "Query": "select ue.col, ue.id from user_extra as ue for update" }, { "OperatorType": "Route", @@ -6137,7 +5896,6 @@ }, "FieldQuery": "select u.id from `user` as u where 1 != 1", "Query": "select u.id from `user` as u where u.id = :ue_id for update", - "Table": "`user`", "Values": [ ":ue_id" ], @@ -6153,7 +5911,6 @@ "Sharded": true }, "Query": "update `user` as u set u.col = :ue_col /* INT16 */ where u.id in ::dml_vals", - "Table": "user", "Values": [ "::dml_vals" ], @@ -6191,7 +5948,6 @@ "JoinVars": { "ue_id": 2 }, - "TableName": "user_extra_`user`", "Inputs": [ { "OperatorType": "Route", @@ -6201,8 +5957,7 @@ "Sharded": true }, "FieldQuery": "select ue.foo, ue.bar, ue.id from user_extra as ue where 1 != 1", - "Query": "select ue.foo, ue.bar, ue.id from user_extra as ue for update", - "Table": "user_extra" + "Query": "select ue.foo, ue.bar, ue.id from user_extra as ue for update" }, { "OperatorType": "Route", @@ -6213,7 +5968,6 @@ }, "FieldQuery": "select u.id from `user` as u where 1 != 1", "Query": "select u.id from `user` as u where u.id = :ue_id for update", - "Table": "`user`", "Values": [ ":ue_id" ], @@ -6229,7 +5983,6 @@ "Sharded": true }, "Query": "update `user` as u set u.col = :ue_foo + :ue_bar + u.baz where u.id in ::dml_vals", - "Table": "user", "Values": [ "::dml_vals" ], @@ -6269,7 +6022,6 @@ "JoinVars": { "user_id": 0 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -6280,7 +6032,6 @@ }, "FieldQuery": "select `user`.id, `user`.baz from `user` where 1 != 1", "Query": "select `user`.id, `user`.baz from `user` where `user`.id = 1 for update", - "Table": "`user`", "Values": [ "1" ], @@ -6294,8 +6045,7 @@ "Sharded": true }, "FieldQuery": "select ue.id, ue.user_id from user_extra as ue where 1 != 1", - "Query": "select ue.id, ue.user_id from user_extra as ue where ue.id = :user_id for update", - "Table": "user_extra" + "Query": "select ue.id, ue.user_id from user_extra as ue where ue.id = :user_id for update" } ] }, @@ -6313,7 +6063,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly, `user`.`name` = :ue_id + 'foo' from `user` where `user`.id in ::dml_vals for update", "Query": "update `user` set `user`.`name` = :ue_id + 'foo' where `user`.id in ::dml_vals", - "Table": "user", "Values": [ "::dml_vals" ], @@ -6327,7 +6076,6 @@ "Sharded": true }, "Query": "update user_extra as ue set ue.bar = :user_baz where (ue.id, ue.user_id) in ::dml_vals", - "Table": "user_extra", "Values": [ "dml_vals:1" ], @@ -6371,8 +6119,7 @@ "KsidLength": 1, "KsidVindex": "user_index", "OwnedVindexQuery": "select user_id, id from music as bar for update", - "Query": "delete from music as bar", - "Table": "music" + "Query": "delete from music as bar" }, "TablesUsed": [ "user.music" @@ -6394,8 +6141,7 @@ "Name": "user", "Sharded": true }, - "Query": "update music as bar set col = 23", - "Table": "music" + "Query": "update music as bar set col = 23" }, "TablesUsed": [ "user.music" @@ -6418,7 +6164,6 @@ "Sharded": true }, "Query": "insert into music(id, user_id) values (:_id_0, :_user_id_0)", - "TableName": "music", "VindexValues": { "music_user_map": "2", "user_index": "null" @@ -6454,7 +6199,6 @@ }, "FieldQuery": "select id from music where 1 != 1", "Query": "select id from music where user_id = 1", - "Table": "music", "Values": [ "1" ], @@ -6472,7 +6216,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly from `user` where id = :__sq1 for update", "Query": "delete from `user` where id = :__sq1", - "Table": "user", "Values": [ ":__sq1" ], @@ -6510,8 +6253,7 @@ "Sharded": false }, "FieldQuery": "select id from unsharded where 1 != 1", - "Query": "select id from unsharded", - "Table": "unsharded" + "Query": "select id from unsharded" }, { "InputName": "Outer", @@ -6524,8 +6266,7 @@ "KsidLength": 1, "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly from `user` where col = :__sq1 for update", - "Query": "delete from `user` where col = :__sq1", - "Table": "user" + "Query": "delete from `user` where col = :__sq1" } ] }, @@ -6559,8 +6300,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user`", - "Table": "`user`" + "Query": "select id from `user`" }, { "InputName": "Outer", @@ -6570,8 +6310,7 @@ "Name": "main", "Sharded": false }, - "Query": "delete from unsharded where col = :__sq1", - "Table": "unsharded" + "Query": "delete from unsharded where col = :__sq1" } ] }, @@ -6613,8 +6352,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user`", - "Table": "`user`" + "Query": "select id from `user`" }, { "InputName": "Outer", @@ -6625,8 +6363,7 @@ "Sharded": false }, "FieldQuery": "select id from unsharded where 1 != 1", - "Query": "select id from unsharded where id = :__sq2", - "Table": "unsharded" + "Query": "select id from unsharded where id = :__sq2" } ] }, @@ -6638,8 +6375,7 @@ "Name": "main", "Sharded": false }, - "Query": "delete from unsharded where col = :__sq1", - "Table": "unsharded" + "Query": "delete from unsharded where col = :__sq1" } ] }, @@ -6672,7 +6408,6 @@ "JoinVars": { "unsharded_id": 0 }, - "TableName": "unsharded_`user`", "Inputs": [ { "OperatorType": "Route", @@ -6682,8 +6417,7 @@ "Sharded": false }, "FieldQuery": "select unsharded.id from unsharded where 1 != 1", - "Query": "select unsharded.id from unsharded", - "Table": "unsharded" + "Query": "select unsharded.id from unsharded" }, { "OperatorType": "Route", @@ -6694,7 +6428,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where `user`.id = :unsharded_id", - "Table": "`user`", "Values": [ ":unsharded_id" ], @@ -6710,8 +6443,7 @@ "Name": "main", "Sharded": false }, - "Query": "delete from unsharded where col = :__sq1", - "Table": "unsharded" + "Query": "delete from unsharded where col = :__sq1" } ] }, @@ -6744,7 +6476,6 @@ "u_col": 1, "u_foo": 2 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -6754,8 +6485,7 @@ "Sharded": true }, "FieldQuery": "select u.id, u.col, u.foo from `user` as u where 1 != 1", - "Query": "select u.id, u.col, u.foo from `user` as u where u.baz = 12 for update", - "Table": "`user`" + "Query": "select u.id, u.col, u.foo from `user` as u where u.baz = 12 for update" }, { "OperatorType": "Route", @@ -6765,8 +6495,7 @@ "Sharded": true }, "FieldQuery": "select m.id from music as m where 1 != 1", - "Query": "select m.id from music as m where m.baz = 21 and m.bar = :u_foo and m.col = :u_col /* INT16 */ for update", - "Table": "music" + "Query": "select m.id from music as m where m.baz = 21 and m.bar = :u_foo and m.col = :u_col /* INT16 */ for update" } ] }, @@ -6781,7 +6510,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly from `user` as u where u.id in ::dml_vals for update", "Query": "delete from `user` as u where u.id in ::dml_vals", - "Table": "user", "Values": [ "::dml_vals" ], @@ -6798,7 +6526,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select user_id, id from music as m where m.id in ::dml_vals for update", "Query": "delete from music as m where m.id in ::dml_vals", - "Table": "music", "Values": [ "::dml_vals" ], @@ -6834,7 +6561,6 @@ "JoinVars": { "music_id": 0 }, - "TableName": "music_`user`", "Inputs": [ { "OperatorType": "Route", @@ -6844,8 +6570,7 @@ "Sharded": true }, "FieldQuery": "select music.id from music where 1 != 1", - "Query": "select music.id from music for update", - "Table": "music" + "Query": "select music.id from music for update" }, { "OperatorType": "Route", @@ -6856,7 +6581,6 @@ }, "FieldQuery": "select `user`.id from `user` where 1 != 1", "Query": "select `user`.id from `user` where `user`.id = :music_id for update", - "Table": "`user`", "Values": [ ":music_id" ], @@ -6875,7 +6599,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select user_id, id from music where music.id in ::dml_vals for update", "Query": "delete from music where music.id in ::dml_vals", - "Table": "music", "Values": [ "::dml_vals" ], @@ -6892,7 +6615,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly from `user` where `user`.id in ::dml_vals for update", "Query": "delete from `user` where `user`.id in ::dml_vals", - "Table": "user", "Values": [ "::dml_vals" ], @@ -6929,8 +6651,7 @@ "Sharded": true }, "FieldQuery": "select u.id, m.id from `user` as u, music as m where 1 != 1", - "Query": "select u.id, m.id from `user` as u, music as m where u.id = m.user_id for update", - "Table": "`user`, music" + "Query": "select u.id, m.id from `user` as u, music as m where u.id = m.user_id for update" }, { "OperatorType": "Delete", @@ -6943,7 +6664,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly from `user` as u where u.id in ::dml_vals for update", "Query": "delete from `user` as u where u.id in ::dml_vals", - "Table": "user", "Values": [ "::dml_vals" ], @@ -6960,7 +6680,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select user_id, id from music as m where m.id in ::dml_vals for update", "Query": "delete from music as m where m.id in ::dml_vals", - "Table": "music", "Values": [ "::dml_vals" ], @@ -6996,7 +6715,6 @@ "JoinVars": { "u_col": 1 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -7006,8 +6724,7 @@ "Sharded": true }, "FieldQuery": "select u.id, u.col from `user` as u where 1 != 1", - "Query": "select u.id, u.col from `user` as u for update", - "Table": "`user`" + "Query": "select u.id, u.col from `user` as u for update" }, { "OperatorType": "Route", @@ -7017,8 +6734,7 @@ "Sharded": true }, "FieldQuery": "select m.id from music as m where 1 != 1", - "Query": "select m.id from music as m where m.col = :u_col /* INT16 */ for update", - "Table": "music" + "Query": "select m.id from music as m where m.col = :u_col /* INT16 */ for update" } ] }, @@ -7033,7 +6749,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly from `user` as u where u.id in ::dml_vals for update", "Query": "delete from `user` as u where u.id in ::dml_vals", - "Table": "user", "Values": [ "::dml_vals" ], @@ -7050,7 +6765,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select user_id, id from music as m where m.id in ::dml_vals for update", "Query": "delete from music as m where m.id in ::dml_vals", - "Table": "music", "Values": [ "::dml_vals" ], @@ -7087,8 +6801,7 @@ "Sharded": true }, "FieldQuery": "select u.id, ue.id, ue.user_id from `user` as u, user_extra as ue where 1 != 1", - "Query": "select u.id, ue.id, ue.user_id from `user` as u, user_extra as ue where u.id = ue.user_id for update", - "Table": "`user`, user_extra" + "Query": "select u.id, ue.id, ue.user_id from `user` as u, user_extra as ue where u.id = ue.user_id for update" }, { "OperatorType": "Delete", @@ -7101,7 +6814,6 @@ "KsidVindex": "user_index", "OwnedVindexQuery": "select Id, `Name`, Costly from `user` as u where u.id in ::dml_vals for update", "Query": "delete from `user` as u where u.id in ::dml_vals", - "Table": "user", "Values": [ "::dml_vals" ], @@ -7115,7 +6827,6 @@ "Sharded": true }, "Query": "delete from user_extra as ue where (ue.id, ue.user_id) in ::dml_vals", - "Table": "user_extra", "Values": [ "dml_vals:1" ], @@ -7152,8 +6863,7 @@ "Sharded": true }, "FieldQuery": "select ev.oid, ev.ename, o.oid, o.region_id from `order` as o, order_event as ev where 1 != 1", - "Query": "select ev.oid, ev.ename, o.oid, o.region_id from `order` as o, order_event as ev where ev.ename = 'a' and o.oid = ev.oid for update", - "Table": "`order`, order_event" + "Query": "select ev.oid, ev.ename, o.oid, o.region_id from `order` as o, order_event as ev where ev.ename = 'a' and o.oid = ev.oid for update" }, { "OperatorType": "Delete", @@ -7163,7 +6873,6 @@ "Sharded": true }, "Query": "delete from order_event as ev where (ev.oid, ev.ename) in ::dml_vals", - "Table": "order_event", "Values": [ "dml_vals:0" ], @@ -7180,7 +6889,6 @@ "KsidVindex": "xxhash", "OwnedVindexQuery": "select region_id, oid from `order` as o where (o.oid, o.region_id) in ::dml_vals for update", "Query": "delete from `order` as o where (o.oid, o.region_id) in ::dml_vals", - "Table": "order", "Values": [ "dml_vals:1" ], @@ -7216,7 +6924,6 @@ "JoinVars": { "u_col": 1 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -7226,8 +6933,7 @@ "Sharded": true }, "FieldQuery": "select u.id, u.col from `user` as u where 1 != 1", - "Query": "select u.id, u.col from `user` as u for update", - "Table": "`user`" + "Query": "select u.id, u.col from `user` as u for update" }, { "OperatorType": "Route", @@ -7237,8 +6943,7 @@ "Sharded": true }, "FieldQuery": "select m.id from music as m where 1 != 1", - "Query": "select m.id from music as m where m.col = :u_col /* INT16 */ for update", - "Table": "music" + "Query": "select m.id from music as m where m.col = :u_col /* INT16 */ for update" } ] }, @@ -7250,7 +6955,6 @@ "Sharded": true }, "Query": "update ignore `user` as u set u.foo = 21 where u.id in ::dml_vals", - "Table": "user", "Values": [ "::dml_vals" ], @@ -7264,7 +6968,6 @@ "Sharded": true }, "Query": "update ignore music as m set m.bar = 'abc' where m.id in ::dml_vals", - "Table": "music", "Values": [ "::dml_vals" ], @@ -7295,7 +6998,6 @@ }, "InsertIgnore": true, "Query": "insert into authoritative(user_id, col1, col2) values (:_user_id_0, '2', 3), (:_user_id_1, '5', 6) as new on duplicate key update col2 = new.user_id + new.col1", - "TableName": "authoritative", "VindexValues": { "user_index": "1, 4" } @@ -7322,7 +7024,6 @@ }, "InsertIgnore": true, "Query": "insert into authoritative(user_id, col1, col2) values (:_user_id_0, '2', 3), (:_user_id_1, '5', 6) as new (a, b, c) on duplicate key update col1 = a + c", - "TableName": "authoritative", "VindexValues": { "user_index": "1, 4" } @@ -7349,7 +7050,6 @@ }, "InsertIgnore": true, "Query": "insert into authoritative(user_id, col1, col2) values (:_user_id_0, '2', 3), (:_user_id_1, '5', 6) as new on duplicate key update col2 = new.user_id + new.col1", - "TableName": "authoritative", "VindexValues": { "user_index": "1, 4" } @@ -7376,7 +7076,6 @@ }, "InsertIgnore": true, "Query": "insert into authoritative(user_id, col1, col2) values (:_user_id_0, '2', 3), (:_user_id_1, '5', 6) as new (a, b, c) on duplicate key update col1 = a + c", - "TableName": "authoritative", "VindexValues": { "user_index": "1, 4" } diff --git a/go/vt/vtgate/planbuilder/testdata/dml_cases_with_user_as_default.json b/go/vt/vtgate/planbuilder/testdata/dml_cases_with_user_as_default.json index 5d2dfc3bbdd..6d224c52475 100644 --- a/go/vt/vtgate/planbuilder/testdata/dml_cases_with_user_as_default.json +++ b/go/vt/vtgate/planbuilder/testdata/dml_cases_with_user_as_default.json @@ -13,8 +13,7 @@ "Name": "main", "Sharded": false }, - "Query": "update ambiguous_ref_with_source set done = true where id = 1", - "Table": "ambiguous_ref_with_source" + "Query": "update ambiguous_ref_with_source set done = true where id = 1" }, "TablesUsed": [ "main.ambiguous_ref_with_source" diff --git a/go/vt/vtgate/planbuilder/testdata/filter_cases.json b/go/vt/vtgate/planbuilder/testdata/filter_cases.json index cf36f2f8ab1..ea78afe8451 100644 --- a/go/vt/vtgate/planbuilder/testdata/filter_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/filter_cases.json @@ -14,8 +14,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user`", - "Table": "`user`" + "Query": "select id from `user`" }, "TablesUsed": [ "user.user" @@ -37,8 +36,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where someColumn = null", - "Table": "`user`" + "Query": "select id from `user` where someColumn = null" }, "TablesUsed": [ "user.user" @@ -60,8 +58,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where someColumn <=> null", - "Table": "`user`" + "Query": "select id from `user` where someColumn <=> null" }, "TablesUsed": [ "user.user" @@ -84,7 +81,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where `user`.id = 5", - "Table": "`user`", "Values": [ "5" ], @@ -111,7 +107,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where `user`.id = 5 + 5", - "Table": "`user`", "Values": [ "10" ], @@ -138,7 +133,6 @@ }, "FieldQuery": "select id from music where 1 != 1", "Query": "select id from music where id = 5 and user_id = 4", - "Table": "music", "Values": [ "4" ], @@ -177,7 +171,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -191,8 +184,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where costly = 'aa' and `name` = 'bb'", - "Table": "`user`" + "Query": "select id from `user` where costly = 'aa' and `name` = 'bb'" } ] }, @@ -229,7 +221,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -243,8 +234,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where costly in ('aa', 'bb') and `name` in ::__vals", - "Table": "`user`" + "Query": "select id from `user` where costly in ('aa', 'bb') and `name` in ::__vals" } ] }, @@ -281,7 +271,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -295,8 +284,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where (`name`, col) in (('aa', 'bb'), ('cc', 'dd'))", - "Table": "`user`" + "Query": "select id from `user` where (`name`, col) in (('aa', 'bb'), ('cc', 'dd'))" } ] }, @@ -333,7 +321,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -347,8 +334,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where (col, `name`) in (('aa', 'bb'), ('cc', 'dd'))", - "Table": "`user`" + "Query": "select id from `user` where (col, `name`) in (('aa', 'bb'), ('cc', 'dd'))" } ] }, @@ -385,7 +371,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -399,8 +384,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where (costly, `name`) in (('aa', 'bb'), ('cc', 'dd'))", - "Table": "`user`" + "Query": "select id from `user` where (costly, `name`) in (('aa', 'bb'), ('cc', 'dd'))" } ] }, @@ -437,7 +421,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -451,8 +434,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where (`name`, costly) in (('aa', 'bb'), ('cc', 'dd'))", - "Table": "`user`" + "Query": "select id from `user` where (`name`, costly) in (('aa', 'bb'), ('cc', 'dd'))" } ] }, @@ -489,7 +471,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -503,8 +484,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where (col, costly) in (('aa', 'bb')) and (col, `name`) in (('cc', 'dd'))", - "Table": "`user`" + "Query": "select id from `user` where (col, costly) in (('aa', 'bb')) and (col, `name`) in (('cc', 'dd'))" } ] }, @@ -529,7 +509,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where (col, `name`) in (('aa', 'bb')) and id = 5", - "Table": "`user`", "Values": [ "5" ], @@ -568,7 +547,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -582,8 +560,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where (costly, `name`) in (('aa', 'bb'), ('cc', 'dd'))", - "Table": "`user`" + "Query": "select id from `user` where (costly, `name`) in (('aa', 'bb'), ('cc', 'dd'))" } ] }, @@ -620,7 +597,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -634,8 +610,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where ((col1, `name`), col2) in ((('aa', 'bb'), 'cc'), (('dd', 'ee'), 'ff'))", - "Table": "`user`" + "Query": "select id from `user` where ((col1, `name`), col2) in ((('aa', 'bb'), 'cc'), (('dd', 'ee'), 'ff'))" } ] }, @@ -672,7 +647,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -686,8 +660,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where (`name`, (col1, col2)) in (('aa', ('bb', 'cc')), ('dd', ('ee', 'ff')))", - "Table": "`user`" + "Query": "select id from `user` where (`name`, (col1, col2)) in (('aa', ('bb', 'cc')), ('dd', ('ee', 'ff')))" } ] }, @@ -711,8 +684,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where ((col1, `name`), col2) in (('aa', 'bb', 'cc'), (('dd', 'ee'), 'ff'))", - "Table": "`user`" + "Query": "select id from `user` where ((col1, `name`), col2) in (('aa', 'bb', 'cc'), (('dd', 'ee'), 'ff'))" }, "TablesUsed": [ "user.user" @@ -735,8 +707,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where (col1, `name`) in (select * from music where music.user_id = `user`.id)", - "Table": "`user`" + "Query": "select id from `user` where (col1, `name`) in (select * from music where music.user_id = `user`.id)" }, "TablesUsed": [ "user.music", @@ -773,7 +744,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -787,8 +757,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where (col1, `name`) in (('aa', 1 + 1))", - "Table": "`user`" + "Query": "select id from `user` where (col1, `name`) in (('aa', 1 + 1))" } ] }, @@ -812,8 +781,7 @@ "Sharded": true }, "FieldQuery": "select Id from `user` where 1 != 1", - "Query": "select Id from `user` where 0", - "Table": "`user`" + "Query": "select Id from `user` where 0" }, "TablesUsed": [ "user.user" @@ -848,7 +816,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -862,8 +829,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where col = 'aa' and `name` = 'bb' or col = 'cc' and `name` = 'dd' or col = 'ee' and `name` = 'ff' or col = 'gg' and `name` = 'hh'", - "Table": "`user`" + "Query": "select id from `user` where col = 'aa' and `name` = 'bb' or col = 'cc' and `name` = 'dd' or col = 'ee' and `name` = 'ff' or col = 'gg' and `name` = 'hh'" } ] }, @@ -900,7 +866,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -914,8 +879,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where col in ('aa', 'cc', 'ee') and (col in ('aa', 'cc') or `name` = 'ff') and (col = 'aa' or `name` = 'dd' or col = 'ee') and (col = 'aa' or `name` = 'dd' or `name` = 'ff') and (`name` = 'bb' or col = 'cc' or col = 'ee') and (`name` = 'bb' or col = 'cc' or `name` = 'ff') and (`name` in ('bb', 'dd') or col = 'ee') and `name` in ::__vals", - "Table": "`user`" + "Query": "select id from `user` where col in ('aa', 'cc', 'ee') and (col in ('aa', 'cc') or `name` = 'ff') and (col = 'aa' or `name` = 'dd' or col = 'ee') and (col = 'aa' or `name` = 'dd' or `name` = 'ff') and (`name` = 'bb' or col = 'cc' or col = 'ee') and (`name` = 'bb' or col = 'cc' or `name` = 'ff') and (`name` in ('bb', 'dd') or col = 'ee') and `name` in ::__vals" } ] }, @@ -939,8 +903,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where `name` in (col, 'bb')", - "Table": "`user`" + "Query": "select id from `user` where `name` in (col, 'bb')" }, "TablesUsed": [ "user.user" @@ -975,7 +938,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -989,8 +951,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where `name` = :a", - "Table": "`user`" + "Query": "select id from `user` where `name` = :a" } ] }, @@ -1015,8 +976,7 @@ "Sharded": true }, "FieldQuery": "select u.id from `user` as u where 1 != 1", - "Query": "select u.id from `user` as u where not exists (select 1 from user_extra as ue where u.id = ue.user_id)", - "Table": "`user`" + "Query": "select u.id from `user` as u where not exists (select 1 from user_extra as ue where u.id = ue.user_id)" }, "TablesUsed": [ "user.user", @@ -1052,7 +1012,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -1066,8 +1025,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where `name` = 18446744073709551615", - "Table": "`user`" + "Query": "select id from `user` where `name` = 18446744073709551615" } ] }, @@ -1104,7 +1062,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -1118,8 +1075,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where `name` in ::__vals", - "Table": "`user`" + "Query": "select id from `user` where `name` in ::__vals" } ] }, @@ -1145,7 +1101,6 @@ }, "FieldQuery": "select user_extra.id from `user`, user_extra where 1 != 1", "Query": "select user_extra.id from `user`, user_extra where `user`.id = 5 and `user`.id = user_extra.user_id", - "Table": "`user`, user_extra", "Values": [ "5" ], @@ -1173,7 +1128,6 @@ }, "FieldQuery": "select user_extra.id from `user`, user_extra where 1 != 1", "Query": "select user_extra.id from `user`, user_extra where user_extra.user_id = 5 and `user`.id = user_extra.user_id", - "Table": "`user`, user_extra", "Values": [ "5" ], @@ -1201,7 +1155,6 @@ }, "FieldQuery": "select user_extra.id from `user` left join user_extra on `user`.id = user_extra.user_id where 1 != 1", "Query": "select user_extra.id from `user` left join user_extra on `user`.id = user_extra.user_id where `user`.id = 5", - "Table": "`user`, user_extra", "Values": [ "5" ], @@ -1229,7 +1182,6 @@ }, "FieldQuery": "select user_extra.id from `user`, user_extra where 1 != 1", "Query": "select user_extra.id from `user`, user_extra where user_extra.user_id = 5 and `user`.id = user_extra.user_id", - "Table": "`user`, user_extra", "Values": [ "5" ], @@ -1255,7 +1207,6 @@ "JoinVars": { "user_col": 0 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1266,7 +1217,6 @@ }, "FieldQuery": "select `user`.col from `user` where 1 != 1", "Query": "select `user`.col from `user` where `user`.id = 5", - "Table": "`user`", "Values": [ "5" ], @@ -1280,8 +1230,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.id from user_extra where 1 != 1", - "Query": "select user_extra.id from user_extra where user_extra.col = :user_col /* INT16 */", - "Table": "user_extra" + "Query": "select user_extra.id from user_extra where user_extra.col = :user_col /* INT16 */" } ] }, @@ -1308,7 +1257,6 @@ }, "FieldQuery": "select user_extra.id from `user`, user_extra where 1 != 1", "Query": "select user_extra.id from `user`, user_extra where `user`.id = 5 and user_extra.user_id = 5 and `user`.col = user_extra.col", - "Table": "`user`, user_extra", "Values": [ "5" ], @@ -1335,7 +1283,6 @@ "JoinVars": { "user_col": 0 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1345,8 +1292,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user` where 1 != 1", - "Query": "select `user`.col from `user`", - "Table": "`user`" + "Query": "select `user`.col from `user`" }, { "OperatorType": "Route", @@ -1357,7 +1303,6 @@ }, "FieldQuery": "select user_extra.id from user_extra where 1 != 1", "Query": "select user_extra.id from user_extra where user_extra.user_id = :user_col /* INT16 */ and user_extra.col = :user_col /* INT16 */", - "Table": "user_extra", "Values": [ ":user_col" ], @@ -1386,7 +1331,6 @@ "JoinVars": { "user_col": 0 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1396,8 +1340,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user` where 1 != 1", - "Query": "select `user`.col from `user`", - "Table": "`user`" + "Query": "select `user`.col from `user`" }, { "OperatorType": "Route", @@ -1407,8 +1350,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.id from user_extra where 1 != 1", - "Query": "select user_extra.id from user_extra where user_extra.col = :user_col /* INT16 */", - "Table": "user_extra" + "Query": "select user_extra.id from user_extra where user_extra.col = :user_col /* INT16 */" } ] }, @@ -1435,7 +1377,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where `user`.col = 5 and `user`.id in ::__vals", - "Table": "`user`", "Values": [ "(1, 2)" ], @@ -1462,7 +1403,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where `user`.col = case `user`.col when 'foo' then true else false end and `user`.id in ::__vals", - "Table": "`user`", "Values": [ "(1, 2)" ], @@ -1501,7 +1441,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -1515,8 +1454,7 @@ "Sharded": true }, "FieldQuery": "select id or col as val from `user` where 1 != 1", - "Query": "select id or col as val from `user` where `user`.col = 5 and `user`.id in (1, 2) and `user`.`name` = 'aa'", - "Table": "`user`" + "Query": "select id or col as val from `user` where `user`.col = 5 and `user`.id in (1, 2) and `user`.`name` = 'aa'" } ] }, @@ -1553,7 +1491,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -1567,8 +1504,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where `user`.col = false and `user`.id in (1, 2) and `user`.`name` = 'aa'", - "Table": "`user`" + "Query": "select id from `user` where `user`.col = false and `user`.id in (1, 2) and `user`.`name` = 'aa'" } ] }, @@ -1593,7 +1529,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where `user`.col = 5 and `user`.id in (1, 2) and `user`.`name` = 'aa' and `user`.id = 1", - "Table": "`user`", "Values": [ "1" ], @@ -1620,7 +1555,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where `user`.id = 1 and `user`.`name` = 'aa' and `user`.id in (1, 2) and `user`.col = 5", - "Table": "`user`", "Values": [ "1" ], @@ -1647,7 +1581,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where (`user`.id = 1 or `user`.`name` = 'aa') and `user`.id in ::__vals", - "Table": "`user`", "Values": [ "(1, 2)" ], @@ -1672,7 +1605,6 @@ "JoinVars": { "unsharded_id": 0 }, - "TableName": "unsharded_`user`", "Inputs": [ { "OperatorType": "Route", @@ -1682,8 +1614,7 @@ "Sharded": false }, "FieldQuery": "select unsharded.id from unsharded where 1 != 1", - "Query": "select unsharded.id from unsharded", - "Table": "unsharded" + "Query": "select unsharded.id from unsharded" }, { "OperatorType": "Route", @@ -1694,7 +1625,6 @@ }, "FieldQuery": "select 1 from `user` where 1 != 1", "Query": "select 1 from `user` where `user`.id = :unsharded_id", - "Table": "`user`", "Values": [ ":unsharded_id" ], @@ -1725,7 +1655,6 @@ }, "FieldQuery": "select col from `user` as route1 where 1 != 1", "Query": "select col from `user` as route1 where id = 1", - "Table": "`user`", "Values": [ "1" ], @@ -1751,7 +1680,6 @@ "JoinVars": { "user_extra_col": 0 }, - "TableName": "user_extra_`user`", "Inputs": [ { "OperatorType": "Route", @@ -1761,8 +1689,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.col from user_extra where 1 != 1", - "Query": "select user_extra.col from user_extra", - "Table": "user_extra" + "Query": "select user_extra.col from user_extra" }, { "OperatorType": "Route", @@ -1773,7 +1700,6 @@ }, "FieldQuery": "select u.m from `user` as u where 1 != 1", "Query": "select u.m from `user` as u where u.id in ::__vals and u.id in (select m2 from `user` where `user`.id = u.id and `user`.col = :user_extra_col /* INT16 */)", - "Table": "`user`", "Values": [ "(:user_extra_col, 1)" ], @@ -1802,7 +1728,6 @@ "JoinVars": { "user_extra_col": 0 }, - "TableName": "user_extra_`user`", "Inputs": [ { "OperatorType": "Route", @@ -1812,8 +1737,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.col from user_extra where 1 != 1", - "Query": "select user_extra.col from user_extra", - "Table": "user_extra" + "Query": "select user_extra.col from user_extra" }, { "OperatorType": "Route", @@ -1824,7 +1748,6 @@ }, "FieldQuery": "select u.m from `user` as u where 1 != 1", "Query": "select u.m from `user` as u where u.id in ::__vals and u.id in (select m2 from `user` where `user`.id = u.id)", - "Table": "`user`", "Values": [ "(:user_extra_col, 1)" ], @@ -1850,7 +1773,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "R:0", - "TableName": "user_extra_`user`", "Inputs": [ { "OperatorType": "Route", @@ -1860,8 +1782,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra", - "Table": "user_extra" + "Query": "select 1 from user_extra" }, { "OperatorType": "Route", @@ -1872,7 +1793,6 @@ }, "FieldQuery": "select u.m from `user` as u where 1 != 1", "Query": "select u.m from `user` as u where u.id = 5 and u.id in (select m2 from `user` where `user`.id = 5)", - "Table": "`user`", "Values": [ "5" ], @@ -1901,7 +1821,6 @@ "JoinVars": { "user_extra_col": 0 }, - "TableName": "user_extra_`user`", "Inputs": [ { "OperatorType": "Route", @@ -1911,8 +1830,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.col from user_extra where 1 != 1", - "Query": "select user_extra.col from user_extra", - "Table": "user_extra" + "Query": "select user_extra.col from user_extra" }, { "OperatorType": "Route", @@ -1923,7 +1841,6 @@ }, "FieldQuery": "select u.m from `user` as u where 1 != 1", "Query": "select u.m from `user` as u where u.id in ::__vals and u.id in (select m2 from `user` where `user`.id = u.id and `user`.col = :user_extra_col /* INT16 */ and `user`.id in (select m3 from user_extra where user_extra.user_id = `user`.id))", - "Table": "`user`", "Values": [ "(:user_extra_col, 1)" ], @@ -1953,8 +1870,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where `user`.col in (select user_extra.col from user_extra where user_extra.user_id = `user`.id)", - "Table": "`user`" + "Query": "select id from `user` where `user`.col in (select user_extra.col from user_extra where user_extra.user_id = `user`.id)" }, "TablesUsed": [ "user.user", @@ -1979,7 +1895,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where id = 5 and `user`.col in (select user_extra.col from user_extra where user_extra.user_id = 5)", - "Table": "`user`", "Values": [ "5" ], @@ -2008,7 +1923,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where id = 'aa' and `user`.col in (select user_extra.col from user_extra where user_extra.user_id = 'aa')", - "Table": "`user`", "Values": [ "'aa'" ], @@ -2037,7 +1951,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where id = :a and `user`.col in (select user_extra.col from user_extra where user_extra.user_id = :a)", - "Table": "`user`", "Values": [ ":a" ], @@ -2071,8 +1984,7 @@ "Sharded": true }, "FieldQuery": "select id2 from `user` as uu where 1 != 1", - "Query": "select id2 from `user` as uu where id in (select id from `user` where id = uu.id and `user`.col in (select user_extra.col from user_extra where user_extra.user_id = uu.id))", - "Table": "`user`" + "Query": "select id2 from `user` as uu where id in (select id from `user` where id = uu.id and `user`.col in (select user_extra.col from user_extra where user_extra.user_id = uu.id))" }, "TablesUsed": [ "user.user", @@ -2105,8 +2017,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user`", - "Table": "`user`" + "Query": "select col from `user`" }, { "InputName": "Outer", @@ -2118,7 +2029,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where :__sq_has_values and id in ::__vals", - "Table": "`user`", "Values": [ "::__sq1" ], @@ -2155,8 +2065,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user`", - "Table": "`user`" + "Query": "select col from `user`" }, { "InputName": "Outer", @@ -2167,8 +2076,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where not :__sq_has_values or id not in ::__sq1", - "Table": "`user`" + "Query": "select id from `user` where not :__sq_has_values or id not in ::__sq1" } ] }, @@ -2204,8 +2112,7 @@ "Sharded": true }, "FieldQuery": "select 1 from `user` where 1 != 1", - "Query": "select 1 from `user` limit 1", - "Table": "`user`" + "Query": "select 1 from `user` limit 1" } ] }, @@ -2218,8 +2125,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where :__sq_has_values", - "Table": "`user`" + "Query": "select id from `user` where :__sq_has_values" } ] }, @@ -2251,8 +2157,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user`", - "Table": "`user`" + "Query": "select col from `user`" }, { "InputName": "Outer", @@ -2264,7 +2169,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where id = :__sq1", - "Table": "`user`", "Values": [ ":__sq1" ], @@ -2309,8 +2213,7 @@ "Sharded": true }, "FieldQuery": "select id3 from `user` where 1 != 1", - "Query": "select id3 from `user`", - "Table": "`user`" + "Query": "select id3 from `user`" }, { "InputName": "Outer", @@ -2321,8 +2224,7 @@ "Sharded": true }, "FieldQuery": "select id2 from `user` where 1 != 1", - "Query": "select id2 from `user` where :__sq_has_values and id2 in ::__sq2", - "Table": "`user`" + "Query": "select id2 from `user` where :__sq_has_values and id2 in ::__sq2" } ] }, @@ -2336,7 +2238,6 @@ }, "FieldQuery": "select id1 from `user` where 1 != 1", "Query": "select id1 from `user` where id = :__sq1", - "Table": "`user`", "Values": [ ":__sq1" ], @@ -2364,8 +2265,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user` where id = (select id from `user` as route1 where route1.id = `user`.id)", - "Table": "`user`" + "Query": "select col from `user` where id = (select id from `user` as route1 where route1.id = `user`.id)" }, "TablesUsed": [ "user.user" @@ -2396,8 +2296,7 @@ "Sharded": false }, "FieldQuery": "select id from unsharded as route2 where 1 != 1", - "Query": "select id from unsharded as route2", - "Table": "unsharded" + "Query": "select id from unsharded as route2" }, { "InputName": "Outer", @@ -2409,7 +2308,6 @@ }, "FieldQuery": "select col from `user` where 1 != 1", "Query": "select col from `user` where id = :__sq1", - "Table": "`user`", "Values": [ ":__sq1" ], @@ -2440,7 +2338,6 @@ }, "FieldQuery": "select user_extra.Id from `user`, user_extra where 1 != 1", "Query": "select user_extra.Id from `user`, user_extra where `user`.Id = 5 and `user`.iD = user_extra.User_Id", - "Table": "`user`, user_extra", "Values": [ "5" ], @@ -2468,8 +2365,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where database()", - "Table": "`user`" + "Query": "select id from `user` where database()" }, "TablesUsed": [ "user.user" @@ -2491,8 +2387,7 @@ "Sharded": true }, "FieldQuery": "select id from music where 1 != 1", - "Query": "select id from music where id = null", - "Table": "music" + "Query": "select id from music where id = null" }, "TablesUsed": [ "user.music" @@ -2514,8 +2409,7 @@ "Sharded": true }, "FieldQuery": "select id from music where 1 != 1", - "Query": "select id from music where id is null", - "Table": "music" + "Query": "select id from music where id is null" }, "TablesUsed": [ "user.music" @@ -2537,8 +2431,7 @@ "Sharded": true }, "FieldQuery": "select id from music where 1 != 1", - "Query": "select id from music where id is not null", - "Table": "music" + "Query": "select id from music where id is not null" }, "TablesUsed": [ "user.music" @@ -2560,8 +2453,7 @@ "Sharded": true }, "FieldQuery": "select id from music where 1 != 1", - "Query": "select id from music where user_id = 4 and id = null", - "Table": "music" + "Query": "select id from music where user_id = 4 and id = null" }, "TablesUsed": [ "user.music" @@ -2583,8 +2475,7 @@ "Sharded": true }, "FieldQuery": "select id from music where 1 != 1", - "Query": "select id from music where user_id = 4 and id in (null)", - "Table": "music" + "Query": "select id from music where user_id = 4 and id in (null)" }, "TablesUsed": [ "user.music" @@ -2607,7 +2498,6 @@ }, "FieldQuery": "select id from music where 1 != 1", "Query": "select id from music where user_id = 4 and id in (null, 1, 2)", - "Table": "music", "Values": [ "4" ], @@ -2633,8 +2523,7 @@ "Sharded": true }, "FieldQuery": "select id from music where 1 != 1", - "Query": "select id from music where user_id = 4 and id not in (null, 1, 2)", - "Table": "music" + "Query": "select id from music where user_id = 4 and id not in (null, 1, 2)" }, "TablesUsed": [ "user.music" @@ -2656,8 +2545,7 @@ "Sharded": true }, "FieldQuery": "select id from music where 1 != 1", - "Query": "select id from music where id not in (null, 1, 2) and user_id = 4", - "Table": "music" + "Query": "select id from music where id not in (null, 1, 2) and user_id = 4" }, "TablesUsed": [ "user.music" @@ -2689,7 +2577,6 @@ }, "FieldQuery": "select user_extra.col from user_extra where 1 != 1", "Query": "select user_extra.col from user_extra where user_extra.user_id = 411", - "Table": "user_extra", "Values": [ "411" ], @@ -2714,7 +2601,6 @@ }, "FieldQuery": "select user_extra.col from user_extra where 1 != 1", "Query": "select user_extra.col from user_extra where user_extra.user_id = 42", - "Table": "user_extra", "Values": [ "42" ], @@ -2730,7 +2616,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where (not :__sq_has_values or id not in ::__sq1) and :__sq_has_values1 and id in ::__vals", - "Table": "`user`", "Values": [ "::__sq2" ], @@ -2763,7 +2648,6 @@ }, "FieldQuery": "select c2 from cfc_vindex_col where 1 != 1", "Query": "select c2 from cfc_vindex_col where c1 like 'A%'", - "Table": "cfc_vindex_col", "Values": [ "'A%'" ], @@ -2790,7 +2674,6 @@ }, "FieldQuery": "select col from samecolvin where 1 != 1", "Query": "select col from samecolvin where col = :col", - "Table": "samecolvin", "Values": [ ":col" ], @@ -2817,8 +2700,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` where `user`.id > 5", - "Table": "`user`" + "Query": "select id from `user` where `user`.id > 5" }, "TablesUsed": [ "user.user" @@ -2840,8 +2722,7 @@ "Sharded": false }, "FieldQuery": "select unsharded.id from unsharded where 1 != 1", - "Query": "select unsharded.id from unsharded where unsharded.`name` in (select `name` from unsharded_a)", - "Table": "unsharded, unsharded_a" + "Query": "select unsharded.id from unsharded where unsharded.`name` in (select `name` from unsharded_a)" }, "TablesUsed": [ "main.unsharded", @@ -2873,8 +2754,7 @@ "Sharded": false }, "FieldQuery": "select col from unsharded where 1 != 1", - "Query": "select col from unsharded where col = id", - "Table": "unsharded" + "Query": "select col from unsharded where col = id" }, { "InputName": "Outer", @@ -2886,7 +2766,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where :__sq_has_values and id in ::__vals", - "Table": "`user`", "Values": [ "::__sq1" ], @@ -2915,8 +2794,7 @@ "Sharded": true }, "FieldQuery": "select u.id from `user` as u where 1 != 1", - "Query": "select u.id from `user` as u where u.col in (select ue.user_id from user_extra as ue where ue.user_id = u.id)", - "Table": "`user`" + "Query": "select u.id from `user` as u where u.col in (select ue.user_id from user_extra as ue where ue.user_id = u.id)" }, "TablesUsed": [ "user.user", @@ -2940,8 +2818,7 @@ "Sharded": false }, "FieldQuery": "select t.table_schema from information_schema.`tables` as t where 1 != 1", - "Query": "select t.table_schema from information_schema.`tables` as t where t.table_schema in (select c.`column_name` from information_schema.`columns` as c)", - "Table": "information_schema.`tables`" + "Query": "select t.table_schema from information_schema.`tables` as t where t.table_schema in (select c.`column_name` from information_schema.`columns` as c)" } }, "skip_e2e": true @@ -2961,8 +2838,7 @@ "Sharded": true }, "FieldQuery": "select ref.col from ref where 1 != 1", - "Query": "select ref.col from ref where ref.col in (select ref.col from ref)", - "Table": "ref" + "Query": "select ref.col from ref where ref.col in (select ref.col from ref)" }, "TablesUsed": [ "user.ref" @@ -2985,7 +2861,6 @@ }, "FieldQuery": "select u1.col from `user` as u1 where 1 != 1", "Query": "select u1.col from `user` as u1 where u1.id = 5 and u1.`name` in (select u2.`name` from `user` as u2 where u2.id = 5)", - "Table": "`user`", "Values": [ "5" ], @@ -3012,7 +2887,6 @@ }, "FieldQuery": "select u1.col from `user` as u1 where 1 != 1", "Query": "select u1.col from `user` as u1 where u1.id = 5 and exists (select 1 from `user` as u2 where u2.id = 5)", - "Table": "`user`", "Values": [ "5" ], @@ -3039,7 +2913,6 @@ }, "FieldQuery": "select u1.col from `user` as u1 where 1 != 1", "Query": "select u1.col from `user` as u1 where u1.id = 5 and not exists (select 1 from `user` as u2 where u2.id = 5)", - "Table": "`user`", "Values": [ "5" ], @@ -3074,7 +2947,6 @@ }, "FieldQuery": "select 1 from `user` as u2 where 1 != 1", "Query": "select 1 from `user` as u2 where u2.id = 5 limit 1", - "Table": "`user`", "Values": [ "5" ], @@ -3089,8 +2961,7 @@ "Sharded": true }, "FieldQuery": "select u1.col from `user` as u1 where 1 != 1", - "Query": "select u1.col from `user` as u1 where not :__sq_has_values", - "Table": "`user`" + "Query": "select u1.col from `user` as u1 where not :__sq_has_values" } ] }, @@ -3124,7 +2995,6 @@ }, "FieldQuery": "select user_extra.col from user_extra where 1 != 1", "Query": "select user_extra.col from user_extra where user_extra.user_id = 4", - "Table": "user_extra", "Values": [ "4" ], @@ -3140,7 +3010,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where id = 5 and id not in (select user_extra.col from user_extra where user_extra.user_id = 5) and :__sq_has_values and id in ::__sq2", - "Table": "`user`", "Values": [ "5" ], @@ -3180,7 +3049,6 @@ }, "FieldQuery": "select user_extra.col from user_extra where 1 != 1", "Query": "select user_extra.col from user_extra where user_extra.user_id = 4", - "Table": "user_extra", "Values": [ "4" ], @@ -3196,7 +3064,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where id = 5 and id in (select user_extra.col from user_extra where user_extra.user_id = 5) and (not :__sq_has_values or id not in ::__sq1)", - "Table": "`user`", "Values": [ "5" ], @@ -3226,8 +3093,7 @@ "Sharded": true }, "FieldQuery": "select u.id from `user` as u where 1 != 1", - "Query": "select u.id from `user` as u where u.col in (select ue.user_id from user_extra as ue where ue.user_id = u.id) and u.col2 in (select ue.user_id from user_extra as ue where ue.user_id = u.id)", - "Table": "`user`" + "Query": "select u.id from `user` as u where u.col in (select ue.user_id from user_extra as ue where ue.user_id = u.id) and u.col2 in (select ue.user_id from user_extra as ue where ue.user_id = u.id)" }, "TablesUsed": [ "user.user", @@ -3252,7 +3118,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where `user`.id = `user`.col and `user`.col = 5", - "Table": "`user`", "Values": [ "5" ], @@ -3278,8 +3143,7 @@ "Sharded": true }, "FieldQuery": "select id from `user`, user_extra where 1 != 1", - "Query": "select id from `user`, user_extra where user_extra.col = user_extra.user_id and `user`.id = user_extra.col", - "Table": "`user`, user_extra" + "Query": "select id from `user`, user_extra where user_extra.col = user_extra.user_id and `user`.id = user_extra.col" }, "TablesUsed": [ "user.user", @@ -3302,7 +3166,6 @@ "JoinVars": { "user_extra_col": 0 }, - "TableName": "user_extra_`user`", "Inputs": [ { "OperatorType": "Route", @@ -3312,8 +3175,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.col from user_extra where 1 != 1", - "Query": "select user_extra.col from user_extra where user_extra.col = user_extra.user_id or user_extra.col2 = user_extra.`name`", - "Table": "user_extra" + "Query": "select user_extra.col from user_extra where user_extra.col = user_extra.user_id or user_extra.col2 = user_extra.`name`" }, { "OperatorType": "Route", @@ -3324,7 +3186,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where `user`.id = :user_extra_col /* INT16 */", - "Table": "`user`", "Values": [ ":user_extra_col" ], @@ -3354,8 +3215,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user` where id = (select id from `user` as a where a.id = `user`.id)", - "Table": "`user`" + "Query": "select col from `user` where id = (select id from `user` as a where a.id = `user`.id)" }, "TablesUsed": [ "user.user" @@ -3377,7 +3237,6 @@ "JoinVars": { "user_col": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -3387,8 +3246,7 @@ "Sharded": true }, "FieldQuery": "select `user`.id, `user`.col from `user` where 1 != 1", - "Query": "select `user`.id, `user`.col from `user`", - "Table": "`user`" + "Query": "select `user`.id, `user`.col from `user`" }, { "OperatorType": "Route", @@ -3398,8 +3256,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra where user_extra.foobar = 5 and user_extra.col = :user_col /* INT16 */", - "Table": "user_extra" + "Query": "select 1 from user_extra where user_extra.foobar = 5 and user_extra.col = :user_col /* INT16 */" } ] }, @@ -3435,7 +3292,6 @@ "JoinVars": { "user_col": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -3445,8 +3301,7 @@ "Sharded": true }, "FieldQuery": "select `user`.id, `user`.col from `user` where 1 != 1", - "Query": "select `user`.id, `user`.col from `user`", - "Table": "`user`" + "Query": "select `user`.id, `user`.col from `user`" }, { "OperatorType": "Route", @@ -3456,8 +3311,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.id from user_extra where 1 != 1", - "Query": "select user_extra.id from user_extra where user_extra.col = :user_col /* INT16 */", - "Table": "user_extra" + "Query": "select user_extra.id from user_extra where user_extra.col = :user_col /* INT16 */" } ] } @@ -3502,8 +3356,7 @@ "Sharded": true }, "FieldQuery": "select id from music where 1 != 1", - "Query": "select id from music where col2 = 'a'", - "Table": "music" + "Query": "select id from music where col2 = 'a'" }, { "InputName": "Outer", @@ -3514,8 +3367,7 @@ "Sharded": true }, "FieldQuery": "select `user`.id, `user`.col, weight_string(`user`.id) from `user` where 1 != 1", - "Query": "select `user`.id, `user`.col, weight_string(`user`.id) from `user` where :__sq_has_values and `user`.col in ::__sq1", - "Table": "`user`" + "Query": "select `user`.id, `user`.col, weight_string(`user`.id) from `user` where :__sq_has_values and `user`.col in ::__sq1" } ] } @@ -3555,7 +3407,6 @@ }, "FieldQuery": "select colb, keyspace_id from colb_colc_map where 1 != 1", "Query": "select colb, keyspace_id from colb_colc_map where colb in ::__vals", - "Table": "colb_colc_map", "Values": [ "::colb" ], @@ -3569,8 +3420,7 @@ "Sharded": true }, "FieldQuery": "select * from multicolvin where 1 != 1", - "Query": "select * from multicolvin where column_b = 1", - "Table": "multicolvin" + "Query": "select * from multicolvin where column_b = 1" } ] }, @@ -3607,7 +3457,6 @@ }, "FieldQuery": "select colb, keyspace_id from colb_colc_map where 1 != 1", "Query": "select colb, keyspace_id from colb_colc_map where colb in ::__vals", - "Table": "colb_colc_map", "Values": [ "::colb" ], @@ -3621,8 +3470,7 @@ "Sharded": true }, "FieldQuery": "select * from multicolvin where 1 != 1", - "Query": "select * from multicolvin where column_b = 1 and column_c = 2", - "Table": "multicolvin" + "Query": "select * from multicolvin where column_b = 1 and column_c = 2" } ] }, @@ -3659,7 +3507,6 @@ }, "FieldQuery": "select colb, keyspace_id from colb_colc_map where 1 != 1", "Query": "select colb, keyspace_id from colb_colc_map where colb in ::__vals", - "Table": "colb_colc_map", "Values": [ "::colb" ], @@ -3673,8 +3520,7 @@ "Sharded": true }, "FieldQuery": "select * from multicolvin where 1 != 1", - "Query": "select * from multicolvin where column_b = 1 and column_c = 2 and column_a = 3", - "Table": "multicolvin" + "Query": "select * from multicolvin where column_b = 1 and column_c = 2 and column_a = 3" } ] }, @@ -3711,7 +3557,6 @@ }, "FieldQuery": "select colb, keyspace_id from colb_colc_map where 1 != 1", "Query": "select colb, keyspace_id from colb_colc_map where colb in ::__vals", - "Table": "colb_colc_map", "Values": [ "::colb" ], @@ -3725,8 +3570,7 @@ "Sharded": true }, "FieldQuery": "select * from multicolvin where 1 != 1", - "Query": "select * from multicolvin where column_a = 3 and column_b = 1", - "Table": "multicolvin" + "Query": "select * from multicolvin where column_a = 3 and column_b = 1" } ] }, @@ -3751,7 +3595,6 @@ }, "FieldQuery": "select * from multicol_tbl where 1 != 1", "Query": "select * from multicol_tbl where cola = 1 and colb = 2", - "Table": "multicol_tbl", "Values": [ "1", "2" @@ -3779,7 +3622,6 @@ }, "FieldQuery": "select * from multicol_tbl where 1 != 1", "Query": "select * from multicol_tbl where colb = 2 and cola = 1", - "Table": "multicol_tbl", "Values": [ "1", "2" @@ -3807,7 +3649,6 @@ }, "FieldQuery": "select * from multicol_tbl where 1 != 1", "Query": "select * from multicol_tbl where cola in ::__vals0 and colb in ::__vals1", - "Table": "multicol_tbl", "Values": [ "(1, 2)", "(3, 4)" @@ -3835,7 +3676,6 @@ }, "FieldQuery": "select * from multicol_tbl where 1 != 1", "Query": "select * from multicol_tbl where colb in ::__vals1 and cola in ::__vals0", - "Table": "multicol_tbl", "Values": [ "(1, 2)", "(3, 4)" @@ -3863,7 +3703,6 @@ }, "FieldQuery": "select * from multicol_tbl where 1 != 1", "Query": "select * from multicol_tbl where colb = 1 and cola in ::__vals0", - "Table": "multicol_tbl", "Values": [ "(3, 4)", "1" @@ -3891,7 +3730,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where id = 34 and `name` = 'apa'", - "Table": "`user`", "Values": [ "34" ], @@ -3918,7 +3756,6 @@ }, "FieldQuery": "select * from multicol_tbl where 1 != 1", "Query": "select * from multicol_tbl where cola in (1, 10) and cola = 4 and colb in (5, 6) and colb = 7", - "Table": "multicol_tbl", "Values": [ "4", "7" @@ -3946,7 +3783,6 @@ }, "FieldQuery": "select * from multicol_tbl where 1 != 1", "Query": "select * from multicol_tbl where colb = 4 and colb in ::__vals1 and cola in ::__vals0", - "Table": "multicol_tbl", "Values": [ "(5, 6)", "(1, 10)" @@ -3974,7 +3810,6 @@ }, "FieldQuery": "select * from multicol_tbl where 1 != 1", "Query": "select * from multicol_tbl where colb in (1, 10) and colb = 4 and cola in ::__vals0", - "Table": "multicol_tbl", "Values": [ "(5, 6)", "4" @@ -4002,7 +3837,6 @@ }, "FieldQuery": "select * from multicol_tbl where 1 != 1", "Query": "select * from multicol_tbl where colb in (1, 2) and cola in (3, 4) and cola = 5 and colb = 6", - "Table": "multicol_tbl", "Values": [ "5", "6" @@ -4030,7 +3864,6 @@ }, "FieldQuery": "select * from multicol_tbl where 1 != 1", "Query": "select * from multicol_tbl where (cola, colb) in ((1, 2), (3, 4))", - "Table": "multicol_tbl", "Values": [ "(1, 3)", "(2, 4)" @@ -4058,7 +3891,6 @@ }, "FieldQuery": "select * from multicol_tbl where 1 != 1", "Query": "select * from multicol_tbl where cola = 1", - "Table": "multicol_tbl", "Values": [ "1" ], @@ -4085,7 +3917,6 @@ }, "FieldQuery": "select * from multicol_tbl where 1 != 1", "Query": "select * from multicol_tbl where cola = 1 and colb in ::__vals1", - "Table": "multicol_tbl", "Values": [ "1", "(2, 3)" @@ -4112,8 +3943,7 @@ "Sharded": false }, "FieldQuery": "select 0 from unsharded_a left join unsharded_b on unsharded_a.col = unsharded_b.col where 1 != 1", - "Query": "select 0 from unsharded_a left join unsharded_b on unsharded_a.col = unsharded_b.col where coalesce(unsharded_b.col, 4) = 5", - "Table": "unsharded_a, unsharded_b" + "Query": "select 0 from unsharded_a left join unsharded_b on unsharded_a.col = unsharded_b.col where coalesce(unsharded_b.col, 4) = 5" }, "TablesUsed": [ "main.unsharded_a", @@ -4136,8 +3966,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from user_extra left join `user` on user_extra.user_id = `user`.id where 1 != 1", - "Query": "select `user`.col from user_extra left join `user` on user_extra.user_id = `user`.id where `user`.id is null", - "Table": "`user`, user_extra" + "Query": "select `user`.col from user_extra left join `user` on user_extra.user_id = `user`.id where `user`.id is null" }, "TablesUsed": [ "user.user", @@ -4162,7 +3991,6 @@ }, "FieldQuery": "select music.id from music left join `user` on music.user_id = `user`.id where 1 != 1", "Query": "select music.id from music left join `user` on music.user_id = `user`.id where music.user_id = 10 and `user`.id <=> null", - "Table": "`user`, music", "Values": [ "10" ], @@ -4190,7 +4018,6 @@ }, "FieldQuery": "select music.id from music left join `user` on music.user_id = `user`.id where 1 != 1", "Query": "select music.id from music left join `user` on music.user_id = `user`.id where music.user_id = 5 and (`user`.`name` = 'Trent Reznor' or music.genre = 'pop')", - "Table": "`user`, music", "Values": [ "5" ], @@ -4218,7 +4045,6 @@ }, "FieldQuery": "select music.id from music left join `user` on music.user_id = `user`.id where 1 != 1", "Query": "select music.id from music left join `user` on music.user_id = `user`.id where music.user_id = 5 and (`user`.`name` = 'Trent Reznor' or music.genre = 'pop')", - "Table": "`user`, music", "Values": [ "5" ], @@ -4246,7 +4072,6 @@ }, "FieldQuery": "select music.id from music, `user` where 1 != 1", "Query": "select music.id from music, `user` where music.user_id = 5 and music.user_id = `user`.id and music.componist = `user`.`name`", - "Table": "`user`, music", "Values": [ "5" ], @@ -4274,7 +4099,6 @@ }, "FieldQuery": "select music.id from music, `user` where 1 != 1", "Query": "select music.id from music, `user` where music.user_id = 5 and `user`.id is not null and `user`.id = music.user_id", - "Table": "`user`, music", "Values": [ "5" ], @@ -4302,7 +4126,6 @@ }, "FieldQuery": "select col from `user` where 1 != 1", "Query": "select col from `user` where id in ::__vals", - "Table": "`user`", "Values": [ "(1, 2)" ], @@ -4329,7 +4152,6 @@ }, "FieldQuery": "select col from `user` where 1 != 1", "Query": "select col from `user` where id in ::__vals", - "Table": "`user`", "Values": [ "(1, 2, 3)" ], @@ -4356,7 +4178,6 @@ }, "FieldQuery": "select col from `user` where 1 != 1", "Query": "select col from `user` where id in ::__vals", - "Table": "`user`", "Values": [ "(1, 2, 3, 4)" ], @@ -4383,7 +4204,6 @@ }, "FieldQuery": "select id from music where 1 != 1", "Query": "select id from music where id is null and user_id in ::__vals", - "Table": "music", "Values": [ "(1, 2)" ], @@ -4409,8 +4229,7 @@ "Sharded": true }, "FieldQuery": "select a + 2 as a from `user` where 1 != 1", - "Query": "select a + 2 as a from `user` where `user`.a + 2 = 42", - "Table": "`user`" + "Query": "select a + 2 as a from `user` where `user`.a + 2 = 42" }, "TablesUsed": [ "user.user" @@ -4434,8 +4253,7 @@ "FieldQuery": "select a + 2 as a, weight_string(a + 2) from `user` where 1 != 1", "OrderBy": "(0|1) ASC", "Query": "select a + 2 as a, weight_string(a + 2) from `user` order by `user`.a + 2 asc", - "ResultColumns": 1, - "Table": "`user`" + "ResultColumns": 1 }, "TablesUsed": [ "user.user" @@ -4457,8 +4275,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col + 2 as a from `user` where 1 != 1", - "Query": "select `user`.col + 2 as a from `user` where `user`.col + 2 = 42", - "Table": "`user`" + "Query": "select `user`.col + 2 as a from `user` where `user`.col + 2 = 42" }, "TablesUsed": [ "user.user" @@ -4480,8 +4297,7 @@ "Sharded": false }, "FieldQuery": "select col + 2 as a from unsharded where 1 != 1", - "Query": "select col + 2 as a from unsharded having a = 42", - "Table": "unsharded" + "Query": "select col + 2 as a from unsharded having a = 42" }, "TablesUsed": [ "main.unsharded" @@ -4504,7 +4320,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where id = 5 and (`name` = 'apa' or foo = 'bar')", - "Table": "`user`", "Values": [ "5" ], @@ -4531,7 +4346,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where id in ::__vals and (id = 5 or `name` = 'bar') and (`name` = 'foo' or id = 12) and `name` in ('foo', 'bar')", - "Table": "`user`", "Values": [ "(5, 12)" ], @@ -4574,7 +4388,6 @@ "JoinVars": { "a_textcol1": 1 }, - "TableName": "`user`_`user`", "Inputs": [ { "OperatorType": "Route", @@ -4585,8 +4398,7 @@ }, "FieldQuery": "select sum(a.id), a.textcol1 from `user` as a where 1 != 1 group by a.textcol1", "OrderBy": "1 ASC COLLATE latin1_swedish_ci", - "Query": "select sum(a.id), a.textcol1 from `user` as a group by a.textcol1 order by a.textcol1 asc", - "Table": "`user`" + "Query": "select sum(a.id), a.textcol1 from `user` as a group by a.textcol1 order by a.textcol1 asc" }, { "OperatorType": "Route", @@ -4596,8 +4408,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from `user` as b where 1 != 1 group by .0", - "Query": "select count(*) from `user` as b where b.textcol2 = :a_textcol1 /* VARCHAR */ group by .0", - "Table": "`user`" + "Query": "select count(*) from `user` as b where b.textcol2 = :a_textcol1 /* VARCHAR */ group by .0" } ] } @@ -4628,8 +4439,7 @@ "Sharded": true }, "FieldQuery": "select textcol1 from `user` where 1 != 1", - "Query": "select textcol1 from `user` where foo = 42", - "Table": "`user`" + "Query": "select textcol1 from `user` where foo = 42" }, "TablesUsed": [ "user.user" @@ -4647,7 +4457,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "unsharded_`user`_unsharded", "Inputs": [ { "OperatorType": "Route", @@ -4657,15 +4466,13 @@ "Sharded": false }, "FieldQuery": "select 1 from unsharded where 1 != 1", - "Query": "select 1 from unsharded", - "Table": "unsharded" + "Query": "select 1 from unsharded" }, { "OperatorType": "SemiJoin", "JoinVars": { "u1_bar": 0 }, - "TableName": "`user`_unsharded", "Inputs": [ { "InputName": "Outer", @@ -4676,8 +4483,7 @@ "Sharded": true }, "FieldQuery": "select u1.bar from `user` as u1 where 1 != 1", - "Query": "select u1.bar from `user` as u1", - "Table": "`user`" + "Query": "select u1.bar from `user` as u1" }, { "InputName": "SubQuery", @@ -4688,8 +4494,7 @@ "Sharded": false }, "FieldQuery": "select 1 from unsharded as u2 where 1 != 1", - "Query": "select 1 from unsharded as u2 where u2.baz = :u1_bar limit 1", - "Table": "unsharded" + "Query": "select 1 from unsharded as u2 where u2.baz = :u1_bar limit 1" } ] } @@ -4733,7 +4538,6 @@ "JoinVars": { "user_id": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -4743,8 +4547,7 @@ "Sharded": true }, "FieldQuery": "select count(*), `user`.id from `user` where 1 != 1 group by `user`.id", - "Query": "select count(*), `user`.id from `user` group by `user`.id", - "Table": "`user`" + "Query": "select count(*), `user`.id from `user` group by `user`.id" }, { "OperatorType": "Route", @@ -4754,8 +4557,7 @@ "Sharded": true }, "FieldQuery": "select count(*), user_extra.collections_status from user_extra where 1 != 1 group by user_extra.collections_status", - "Query": "select count(*), user_extra.collections_status from user_extra where user_extra.bar = :user_id group by user_extra.collections_status", - "Table": "user_extra" + "Query": "select count(*), user_extra.collections_status from user_extra where user_extra.bar = :user_id group by user_extra.collections_status" } ] } @@ -4793,8 +4595,7 @@ "FieldQuery": "select 1, ts, weight_string(ts) from `user` where 1 != 1", "OrderBy": "(1|2) ASC", "Query": "select 1, ts, weight_string(ts) from `user` where shard_key = 1 and is_removed = 1 and cmd in ('A', 'B', 'C') and (not user_id = 1 or not user_id is not null or not ts >= 1 or not ts <= 2) and (not user_id = 1 or not user_id is not null or not ts >= 12 or not ts <= 13) and (not user_id = 1 or not user_id is not null or not ts >= 14 or not ts <= 15) and (not user_id = 1 or not user_id is not null or not ts >= 16 or not ts <= 17) and (not user_id = 1 or not user_id is not null or not ts >= 18 or not ts <= 19) and (not user_id = 1 or not user_id is not null or not ts >= 110 or not ts <= 111) and (not user_id = 1 or not user_id is not null or not ts >= 112 or not ts <= 113) and (not user_id = 1 or not user_id is not null or not ts >= 114 or not ts <= 115) and (not user_id = 1 or not user_id is not null or not ts >= 116 or not ts <= 117) and (not user_id = 1 or not user_id is not null or not ts >= 118 or not ts <= 119) and (not user_id = 1 or not user_id is not null or not ts >= 120 or not ts <= 121) and (not user_id = 1 or not user_id is not null or not ts >= 122 or not ts <= 123) and (not user_id = 1 or not user_id is not null or not ts >= 124 or not ts <= 125) and (not user_id = 1 or not user_id is not null or not ts >= 126 or not ts <= 127) and (not user_id = 1 or not user_id is not null or not ts >= 128 or not ts <= 129) and (not user_id = 1 or not user_id is not null or not ts >= 130 or not ts <= 131) and (not user_id = 1 or not user_id is not null or not ts >= 132 or not ts <= 133) and (not user_id = 1 or not user_id is not null or not ts >= 134 or not ts <= 135) and (not user_id = 1 or not user_id is not null or not ts >= 136 or not ts <= 137) and (not user_id = 1 or not user_id is not null or not ts >= 138 or not ts <= 139) and (not user_id = 1 or not user_id is not null or not ts >= 140 or not ts <= 141) and (not user_id = 1 or not user_id is not null or not ts >= 142 or not ts <= 143) and (not user_id = 1 or not user_id is not null or not ts >= 144 or not ts <= 145) and (not user_id = 1 or not user_id is not null or not ts >= 146 or not ts <= 147) and (not user_id = 1 or not user_id is not null or not ts >= 148 or not ts <= 149) and (not user_id = 1 or not user_id is not null or not ts >= 150 or not ts <= 151) and (not user_id = 1 or not user_id is not null or not ts >= 152 or not ts <= 153) and (not user_id = 1 or not user_id is not null or not ts >= 154 or not ts <= 155) and (not user_id = 1 or not user_id is not null or not ts >= 156 or not ts <= 157) and (not user_id = 1 or not user_id is not null or not ts >= 158 or not ts <= 159) and (not user_id = 1 or not user_id is not null or not ts >= 160 or not ts <= 161) and (not user_id = 1 or not user_id is not null or not ts >= 162 or not ts <= 163) and (not user_id = 1 or not user_id is not null or not ts >= 164 or not ts <= 165) and (not user_id = 1 or not user_id is not null or not ts >= 166 or not ts <= 167) and (not user_id = 1 or not user_id is not null or not ts >= 168 or not ts <= 169) and (not user_id = 1 or not user_id is not null or not ts >= 170 or not ts <= 171) and (not user_id = 1 or not user_id is not null or not ts >= 172 or not ts <= 173) and (not user_id = 1 or not user_id is not null or not ts >= 174 or not ts <= 175) and (not user_id = 1 or not user_id is not null or not ts >= 176 or not ts <= 177) and (not user_id = 1 or not user_id is not null or not ts >= 178 or not ts <= 179) and (not user_id = 1 or not user_id is not null or not ts >= 180 or not ts <= 181) and (not user_id = 1 or not user_id is not null or not ts >= 182 or not ts <= 183) and (not user_id = 1 or not user_id is not null or not ts >= 184 or not ts <= 185) and (not user_id = 1 or not user_id is not null or not ts >= 186 or not ts <= 187) and (not user_id = 1 or not user_id is not null or not ts >= 188 or not ts <= 189) and (not user_id = 1 or not user_id is not null or not ts >= 190 or not ts <= 191) and (not user_id = 1 or not user_id is not null or not ts >= 192 or not ts <= 193) and (not user_id = 1 or not user_id is not null or not ts >= 194 or not ts <= 195) and (not user_id = 1 or not user_id is not null or not ts >= 196 or not ts <= 197) and (not user_id = 1 or not user_id is not null or not ts >= 198 or not ts <= 199) and (not user_id = 1 or not user_id is not null or not ts >= 1100 or not ts <= 1101) and (not user_id = 1 or not user_id is not null or not ts >= 1102 or not ts <= 1103) and (not user_id = 1 or not user_id is not null or not ts >= 1104 or not ts <= 1105) and (not user_id = 1 or not user_id is not null or not ts >= 1106 or not ts <= 1107) and (not user_id = 1 or not user_id is not null or not ts >= 1108 or not ts <= 1109) and (not user_id = 1 or not user_id is not null or not ts >= 1110 or not ts <= 1111) and (not user_id = 1 or not user_id is not null or not ts >= 1112 or not ts <= 1113) and (not user_id = 1 or not user_id is not null or not ts >= 1114 or not ts <= 1115) and (not user_id = 1 or not user_id is not null or not ts >= 1116 or not ts <= 1117) and (not user_id = 1 or not user_id is not null or not ts >= 1118 or not ts <= 1119) and (not user_id = 1 or not user_id is not null or not ts >= 1120 or not ts <= 1121) and (not user_id = 1 or not user_id is not null or not ts >= 1122 or not ts <= 1123) and (not user_id = 1 or not user_id is not null or not ts >= 1124 or not ts <= 1125) and (not user_id = 1 or not user_id is not null or not ts >= 1126 or not ts <= 1127) and (not user_id = 1 or not user_id is not null or not ts >= 1128 or not ts <= 1129) and (not user_id = 1 or not user_id is not null or not ts >= 1130 or not ts <= 1131) and (not user_id = 1 or not user_id is not null or not ts >= 1132 or not ts <= 1133) and (not user_id = 1 or not user_id is not null or not ts >= 1134 or not ts <= 1135) and (not user_id = 1 or not user_id is not null or not ts >= 1136 or not ts <= 1137) and (not user_id = 1 or not user_id is not null or not ts >= 1138 or not ts <= 1139) and (not user_id = 1 or not user_id is not null or not ts >= 1140 or not ts <= 1141) and (not user_id = 1 or not user_id is not null or not ts >= 1142 or not ts <= 1143) and (not user_id = 1 or not user_id is not null or not ts >= 1144 or not ts <= 1145) and (not user_id = 1 or not user_id is not null or not ts >= 1146 or not ts <= 1147) and (not user_id = 1 or not user_id is not null or not ts >= 1148 or not ts <= 1149) and (not user_id = 1 or not user_id is not null or not ts >= 1150 or not ts <= 1151) and (not user_id = 1 or not user_id is not null or not ts >= 1152 or not ts <= 1153) and (not user_id = 1 or not user_id is not null or not ts >= 1154 or not ts <= 1155) and (not user_id = 1 or not user_id is not null or not ts >= 1156 or not ts <= 1157) and (not user_id = 1 or not user_id is not null or not ts >= 1158 or not ts <= 1159) and (not user_id = 1 or not user_id is not null or not ts >= 1160 or not ts <= 1161) and (not user_id = 1 or not user_id is not null or not ts >= 1162 or not ts <= 1163) and (not user_id = 1 or not user_id is not null or not ts >= 1164 or not ts <= 1165) and (not user_id = 1 or not user_id is not null or not ts >= 1166 or not ts <= 1167) and (not user_id = 1 or not user_id is not null or not ts >= 1168 or not ts <= 1169) and (not user_id = 1 or not user_id is not null or not ts >= 1170 or not ts <= 1171) and (not user_id = 1 or not user_id is not null or not ts >= 1172 or not ts <= 1173) and (not user_id = 1 or not user_id is not null or not ts >= 1174 or not ts <= 1175) and (not user_id = 1 or not user_id is not null or not ts >= 1176 or not ts <= 1177) and (not user_id = 1 or not user_id is not null or not ts >= 1178 or not ts <= 1179) and (not user_id = 1 or not user_id is not null or not ts >= 1180 or not ts <= 1181) and (not user_id = 1 or not user_id is not null or not ts >= 1182 or not ts <= 1183) and (not user_id = 1 or not user_id is not null or not ts >= 1184 or not ts <= 1185) and (not user_id = 1 or not user_id is not null or not ts >= 1186 or not ts <= 1187) and (not user_id = 1 or not user_id is not null or not ts >= 1188 or not ts <= 1189) and (not user_id = 1 or not user_id is not null or not ts >= 1190 or not ts <= 1191) and (not user_id = 1 or not user_id is not null or not ts >= 1192 or not ts <= 1193) and (not user_id = 1 or not user_id is not null or not ts >= 1194 or not ts <= 1195) and (not user_id = 1 or not user_id is not null or not ts >= 1196 or not ts <= 1197) and (not user_id = 1 or not user_id is not null or not ts >= 1198 or not ts <= 1199) and (not user_id = 1 or not user_id is not null or not ts >= 1200 or not ts <= 1201) and (not user_id = 1 or not user_id is not null or not ts >= 1202 or not ts <= 1203) and (not user_id = 1 or not user_id is not null or not ts >= 1204 or not ts <= 1205) and (not user_id = 1 or not user_id is not null or not ts >= 1206 or not ts <= 1207) and (not user_id = 1 or not user_id is not null or not ts >= 1208 or not ts <= 1209) and (not user_id = 1 or not user_id is not null or not ts >= 1210 or not ts <= 1211) and (not user_id = 1 or not user_id is not null or not ts >= 1212 or not ts <= 1213) and (not user_id = 1 or not user_id is not null or not ts >= 1214 or not ts <= 1215) and (not user_id = 1 or not user_id is not null or not ts >= 1216 or not ts <= 1217) and (not user_id = 1 or not user_id is not null or not ts >= 1218 or not ts <= 1219) and (not user_id = 1 or not user_id is not null or not ts >= 1220 or not ts <= 1221) and (not user_id = 1 or not user_id is not null or not ts >= 1222 or not ts <= 1223) and (not user_id = 1 or not user_id is not null or not ts >= 1224 or not ts <= 1225) and (not user_id = 1 or not user_id is not null or not ts >= 1226 or not ts <= 1227) and (not user_id = 1 or not user_id is not null or not ts >= 1228 or not ts <= 1229) and (not user_id = 1 or not user_id is not null or not ts >= 1230 or not ts <= 1231) and (not user_id = 1 or not user_id is not null or not ts >= 1232 or not ts <= 1233) and (not user_id = 1 or not user_id is not null or not ts >= 1234 or not ts <= 1235) and (not user_id = 1 or not user_id is not null or not ts >= 1236 or not ts <= 1237) and (not user_id = 1 or not user_id is not null or not ts >= 1238 or not ts <= 1239) and (not user_id = 1 or not user_id is not null or not ts >= 1240 or not ts <= 1241) and (not user_id = 1 or not user_id is not null or not ts >= 1242 or not ts <= 1243) and (not user_id = 1 or not user_id is not null or not ts >= 1244 or not ts <= 1245) and (not user_id = 1 or not user_id is not null or not ts >= 1246 or not ts <= 1247) and (not user_id = 1 or not user_id is not null or not ts >= 1248 or not ts <= 1249) and (not user_id = 1 or not user_id is not null or not ts >= 1250 or not ts <= 1251) and (not user_id = 1 or not user_id is not null or not ts >= 1252 or not ts <= 1253) and (not user_id = 1 or not user_id is not null or not ts >= 1254 or not ts <= 1255) and (not user_id = 1 or not user_id is not null or not ts >= 1256 or not ts <= 1257) and (not user_id = 1 or not user_id is not null or not ts >= 1258 or not ts <= 1259) and (not user_id = 1 or not user_id is not null or not ts >= 1260 or not ts <= 1261) and (not user_id = 1 or not user_id is not null or not ts >= 1262 or not ts <= 1263) and (not user_id = 1 or not user_id is not null or not ts >= 1264 or not ts <= 1265) and (not user_id = 1 or not user_id is not null or not ts >= 1266 or not ts <= 1267) and (not user_id = 1 or not user_id is not null or not ts >= 1268 or not ts <= 1269) and (not user_id = 1 or not user_id is not null or not ts >= 1270 or not ts <= 1271) and (not user_id = 1 or not user_id is not null or not ts >= 1272 or not ts <= 1273) and (not user_id = 1 or not user_id is not null or not ts >= 1274 or not ts <= 1275) and (not user_id = 1 or not user_id is not null or not ts >= 1276 or not ts <= 1277) and (not user_id = 1 or not user_id is not null or not ts >= 1278 or not ts <= 1279) and (not user_id = 1 or not user_id is not null or not ts >= 1280 or not ts <= 1281) and (not user_id = 1 or not user_id is not null or not ts >= 1282 or not ts <= 1283) and (not user_id = 1 or not user_id is not null or not ts >= 1284 or not ts <= 1285) and (not user_id = 1 or not user_id is not null or not ts >= 1286 or not ts <= 1287) and (not user_id = 1 or not user_id is not null or not ts >= 1288 or not ts <= 1289) and (not user_id = 1 or not user_id is not null or not ts >= 1290 or not ts <= 1291) and (not user_id = 1 or not user_id is not null or not ts >= 1292 or not ts <= 1293) and (not user_id = 1 or not user_id is not null or not ts >= 1294 or not ts <= 1295) and (not user_id = 1 or not user_id is not null or not ts >= 1296 or not ts <= 1297) and (not user_id = 1 or not user_id is not null or not ts >= 1298 or not ts <= 1299) and (not user_id = 1 or not user_id is not null or not ts >= 1300 or not ts <= 1301) and (not user_id = 1 or not user_id is not null or not ts >= 1302 or not ts <= 1303) and (not user_id = 1 or not user_id is not null or not ts >= 1304 or not ts <= 1305) and (not user_id = 1 or not user_id is not null or not ts >= 1306 or not ts <= 1307) and (not user_id = 1 or not user_id is not null or not ts >= 1308 or not ts <= 1309) and (not user_id = 1 or not user_id is not null or not ts >= 1310 or not ts <= 1311) and (not user_id = 1 or not user_id is not null or not ts >= 1312 or not ts <= 1313) and (not user_id = 1 or not user_id is not null or not ts >= 1314 or not ts <= 1315) and (not user_id = 1 or not user_id is not null or not ts >= 1316 or not ts <= 1317) and (not user_id = 1 or not user_id is not null or not ts >= 1318 or not ts <= 1319) and (not user_id = 1 or not user_id is not null or not ts >= 1320 or not ts <= 1321) and (not user_id = 1 or not user_id is not null or not ts >= 1322 or not ts <= 1323) and (not user_id = 1 or not user_id is not null or not ts >= 1324 or not ts <= 1325) and (not user_id = 1 or not user_id is not null or not ts >= 1326 or not ts <= 1327) and (not user_id = 1 or not user_id is not null or not ts >= 1328 or not ts <= 1329) and (not user_id = 1 or not user_id is not null or not ts >= 1330 or not ts <= 1331) and (not user_id = 1 or not user_id is not null or not ts >= 1332 or not ts <= 1333) and (not user_id = 1 or not user_id is not null or not ts >= 1334 or not ts <= 1335) and (not user_id = 1 or not user_id is not null or not ts >= 1336 or not ts <= 1337) and (not user_id = 1 or not user_id is not null or not ts >= 1338 or not ts <= 1339) and (not user_id = 1 or not user_id is not null or not ts >= 1340 or not ts <= 1341) and (not user_id = 1 or not user_id is not null or not ts >= 1342 or not ts <= 1343) and (not user_id = 1 or not user_id is not null or not ts >= 1344 or not ts <= 1345) and (not user_id = 1 or not user_id is not null or not ts >= 1346 or not ts <= 1347) and (not user_id = 1 or not user_id is not null or not ts >= 1348 or not ts <= 1349) and (not user_id = 1 or not user_id is not null or not ts >= 1350 or not ts <= 1351) and (not user_id = 1 or not user_id is not null or not ts >= 1352 or not ts <= 1353) and (not user_id = 1 or not user_id is not null or not ts >= 1354 or not ts <= 1355) and (not user_id = 1 or not user_id is not null or not ts >= 1356 or not ts <= 1357) and (not user_id = 1 or not user_id is not null or not ts >= 1358 or not ts <= 1359) and (not user_id = 1 or not user_id is not null or not ts >= 1360 or not ts <= 1361) and (not user_id = 1 or not user_id is not null or not ts >= 1362 or not ts <= 1363) and (not user_id = 1 or not user_id is not null or not ts >= 1364 or not ts <= 1365) and (not user_id = 1 or not user_id is not null or not ts >= 1366 or not ts <= 1367) and (not user_id = 1 or not user_id is not null or not ts >= 1368 or not ts <= 1369) and (not user_id = 1 or not user_id is not null or not ts >= 1370 or not ts <= 1371) and (not user_id = 1 or not user_id is not null or not ts >= 1372 or not ts <= 1373) and (not user_id = 1 or not user_id is not null or not ts >= 1374 or not ts <= 1375) and (not user_id = 1 or not user_id is not null or not ts >= 1376 or not ts <= 1377) and (not user_id = 1 or not user_id is not null or not ts >= 1378 or not ts <= 1379) and (not user_id = 1 or not user_id is not null or not ts >= 1380 or not ts <= 1381) and (not user_id = 1 or not user_id is not null or not ts >= 1382 or not ts <= 1383) and (not user_id = 1 or not user_id is not null or not ts >= 1384 or not ts <= 1385) and (not user_id = 1 or not user_id is not null or not ts >= 1386 or not ts <= 1387) and (not user_id = 1 or not user_id is not null or not ts >= 1388 or not ts <= 1389) and (not user_id = 1 or not user_id is not null or not ts >= 1390 or not ts <= 1391) and (not user_id = 1 or not user_id is not null or not ts >= 1392 or not ts <= 1393) and (not user_id = 1 or not user_id is not null or not ts >= 1394 or not ts <= 1395) and (not user_id = 1 or not user_id is not null or not ts >= 1396 or not ts <= 1397) and (not user_id = 1 or not user_id is not null or not ts >= 1398 or not ts <= 1399) and (not user_id = 1 or not user_id is not null or not ts >= 1400 or not ts <= 1401) and (not user_id = 1 or not user_id is not null or not ts >= 1402 or not ts <= 1403) and (not user_id = 1 or not user_id is not null or not ts >= 1404 or not ts <= 1405) and (not user_id = 1 or not user_id is not null or not ts >= 1406 or not ts <= 1407) and (not user_id = 1 or not user_id is not null or not ts >= 1408 or not ts <= 1409) and (not user_id = 1 or not user_id is not null or not ts >= 1410 or not ts <= 1411) and (not user_id = 1 or not user_id is not null or not ts >= 1412 or not ts <= 1413) and (not user_id = 1 or not user_id is not null or not ts >= 1414 or not ts <= 1415) and (not user_id = 1 or not user_id is not null or not ts >= 1416 or not ts <= 1417) and (not user_id = 1 or not user_id is not null or not ts >= 1418 or not ts <= 1419) and (not user_id = 1 or not user_id is not null or not ts >= 1420 or not ts <= 1421) and (not user_id = 1 or not user_id is not null or not ts >= 1422 or not ts <= 1423) and (not user_id = 1 or not user_id is not null or not ts >= 1424 or not ts <= 1425) and (not user_id = 1 or not user_id is not null or not ts >= 1426 or not ts <= 1427) and (not user_id = 1 or not user_id is not null or not ts >= 1428 or not ts <= 1429) and (not user_id = 1 or not user_id is not null or not ts >= 1430 or not ts <= 1431) and (not user_id = 1 or not user_id is not null or not ts >= 1432 or not ts <= 1433) and (not user_id = 1 or not user_id is not null or not ts >= 1434 or not ts <= 1435) and (not user_id = 1 or not user_id is not null or not ts >= 1436 or not ts <= 1437) and (not user_id = 1 or not user_id is not null or not ts >= 1438 or not ts <= 1439) and (not user_id = 1 or not user_id is not null or not ts >= 1440 or not ts <= 1441) and (not user_id = 1 or not user_id is not null or not ts >= 1442 or not ts <= 1443) and (not user_id = 1 or not user_id is not null or not ts >= 1444 or not ts <= 1445) and (not user_id = 1 or not user_id is not null or not ts >= 1446 or not ts <= 1447) and (not user_id = 1 or not user_id is not null or not ts >= 1448 or not ts <= 1449) and (not user_id = 1 or not user_id is not null or not ts >= 1450 or not ts <= 1451) and (not user_id = 1 or not user_id is not null or not ts >= 1452 or not ts <= 1453) and (not user_id = 1 or not user_id is not null or not ts >= 1454 or not ts <= 1455) and (not user_id = 1 or not user_id is not null or not ts >= 1456 or not ts <= 1457) and (not user_id = 1 or not user_id is not null or not ts >= 1458 or not ts <= 1459) and (not user_id = 1 or not user_id is not null or not ts >= 1460 or not ts <= 1461) and (not user_id = 1 or not user_id is not null or not ts >= 1462 or not ts <= 1463) and (not user_id = 1 or not user_id is not null or not ts >= 1464 or not ts <= 1465) and (not user_id = 1 or not user_id is not null or not ts >= 1466 or not ts <= 1467) and (not user_id = 1 or not user_id is not null or not ts >= 1468 or not ts <= 1469) and (not user_id = 1 or not user_id is not null or not ts >= 1470 or not ts <= 1471) and (not user_id = 1 or not user_id is not null or not ts >= 1472 or not ts <= 1473) and (not user_id = 1 or not user_id is not null or not ts >= 1474 or not ts <= 1475) and (not user_id = 1 or not user_id is not null or not ts >= 1476 or not ts <= 1477) and (not user_id = 1 or not user_id is not null or not ts >= 1478 or not ts <= 1479) and (not user_id = 1 or not user_id is not null or not ts >= 1480 or not ts <= 1481) and (not user_id = 1 or not user_id is not null or not ts >= 1482 or not ts <= 1483) and (not user_id = 1 or not user_id is not null or not ts >= 1484 or not ts <= 1485) and (not user_id = 1 or not user_id is not null or not ts >= 1486 or not ts <= 1487) and (not user_id = 1 or not user_id is not null or not ts >= 1488 or not ts <= 1489) and (not user_id = 1 or not user_id is not null or not ts >= 1490 or not ts <= 1491) and (not user_id = 1 or not user_id is not null or not ts >= 1492 or not ts <= 1493) and (not user_id = 1 or not user_id is not null or not ts >= 1494 or not ts <= 1495) and (not user_id = 1 or not user_id is not null or not ts >= 1496 or not ts <= 1497) and (not user_id = 1 or not user_id is not null or not ts >= 1498 or not ts <= 1499) and (not user_id = 1 or not user_id is not null or not ts >= 1500 or not ts <= 1501) and (not user_id = 1 or not user_id is not null or not ts >= 1502 or not ts <= 1503) and (not user_id = 1 or not user_id is not null or not ts >= 1504 or not ts <= 1505) and (not user_id = 1 or not user_id is not null or not ts >= 1506 or not ts <= 1507) and (not user_id = 1 or not user_id is not null or not ts >= 1508 or not ts <= 1509) and (not user_id = 1 or not user_id is not null or not ts >= 1510 or not ts <= 1511) and (not user_id = 1 or not user_id is not null or not ts >= 1512 or not ts <= 1513) and (not user_id = 1 or not user_id is not null or not ts >= 1514 or not ts <= 1515) and (not user_id = 1 or not user_id is not null or not ts >= 1516 or not ts <= 1517) and (not user_id = 1 or not user_id is not null or not ts >= 1518 or not ts <= 1519) and (not user_id = 1 or not user_id is not null or not ts >= 1520 or not ts <= 1521) and (not user_id = 1 or not user_id is not null or not ts >= 1522 or not ts <= 1523) and (not user_id = 1 or not user_id is not null or not ts >= 1524 or not ts <= 1525) and (not user_id = 1 or not user_id is not null or not ts >= 1526 or not ts <= 1527) and (not user_id = 1 or not user_id is not null or not ts >= 1528 or not ts <= 1529) and (not user_id = 1 or not user_id is not null or not ts >= 1530 or not ts <= 1531) and (not user_id = 1 or not user_id is not null or not ts >= 1532 or not ts <= 1533) and (not user_id = 1 or not user_id is not null or not ts >= 1534 or not ts <= 1535) and (not user_id = 1 or not user_id is not null or not ts >= 1536 or not ts <= 1537) and (not user_id = 1 or not user_id is not null or not ts >= 1538 or not ts <= 1539) and (not user_id = 1 or not user_id is not null or not ts >= 1540 or not ts <= 1541) and (not user_id = 1 or not user_id is not null or not ts >= 1542 or not ts <= 1543) and (not user_id = 1 or not user_id is not null or not ts >= 1544 or not ts <= 1545) and (not user_id = 1 or not user_id is not null or not ts >= 1546 or not ts <= 1547) and (not user_id = 1 or not user_id is not null or not ts >= 1548 or not ts <= 1549) and (not user_id = 1 or not user_id is not null or not ts >= 1550 or not ts <= 1551) and (not user_id = 1 or not user_id is not null or not ts >= 1552 or not ts <= 1553) and (not user_id = 1 or not user_id is not null or not ts >= 1554 or not ts <= 1555) and (not user_id = 1 or not user_id is not null or not ts >= 1556 or not ts <= 1557) and (not user_id = 1 or not user_id is not null or not ts >= 1558 or not ts <= 1559) and (not user_id = 1 or not user_id is not null or not ts >= 1560 or not ts <= 1561) and (not user_id = 1 or not user_id is not null or not ts >= 1562 or not ts <= 1563) and (not user_id = 1 or not user_id is not null or not ts >= 1564 or not ts <= 1565) and (not user_id = 1 or not user_id is not null or not ts >= 1566 or not ts <= 1567) and (not user_id = 1 or not user_id is not null or not ts >= 1568 or not ts <= 1569) and (not user_id = 1 or not user_id is not null or not ts >= 1570 or not ts <= 1571) and (not user_id = 1 or not user_id is not null or not ts >= 1572 or not ts <= 1573) and (not user_id = 1 or not user_id is not null or not ts >= 1574 or not ts <= 1575) and (not user_id = 1 or not user_id is not null or not ts >= 1576 or not ts <= 1577) and (not user_id = 1 or not user_id is not null or not ts >= 1578 or not ts <= 1579) and (not user_id = 1 or not user_id is not null or not ts >= 1580 or not ts <= 1581) and (not user_id = 1 or not user_id is not null or not ts >= 1582 or not ts <= 1583) and (not user_id = 1 or not user_id is not null or not ts >= 1584 or not ts <= 1585) and (not user_id = 1 or not user_id is not null or not ts >= 1586 or not ts <= 1587) and (not user_id = 1 or not user_id is not null or not ts >= 1588 or not ts <= 1589) and (not user_id = 1 or not user_id is not null or not ts >= 1590 or not ts <= 1591) and (not user_id = 1 or not user_id is not null or not ts >= 1592 or not ts <= 1593) and (not user_id = 1 or not user_id is not null or not ts >= 1594 or not ts <= 1595) and (not user_id = 1 or not user_id is not null or not ts >= 1596 or not ts <= 1597) and (not user_id = 1 or not user_id is not null or not ts >= 1598 or not ts <= 1599) and (not user_id = 1 or not user_id is not null or not ts >= 1600 or not ts <= 1601) and (not user_id = 1 or not user_id is not null or not ts >= 1602 or not ts <= 1603) and (not user_id = 1 or not user_id is not null or not ts >= 1604 or not ts <= 1605) and (not user_id = 1 or not user_id is not null or not ts >= 1606 or not ts <= 1607) and (not user_id = 1 or not user_id is not null or not ts >= 1608 or not ts <= 1609) and (not user_id = 1 or not user_id is not null or not ts >= 1610 or not ts <= 1611) and (not user_id = 1 or not user_id is not null or not ts >= 1612 or not ts <= 1613) and (not user_id = 1 or not user_id is not null or not ts >= 1614 or not ts <= 1615) and (not user_id = 1 or not user_id is not null or not ts >= 1616 or not ts <= 1617) and (not user_id = 1 or not user_id is not null or not ts >= 1618 or not ts <= 1619) and (not user_id = 1 or not user_id is not null or not ts >= 1620 or not ts <= 1621) and (not user_id = 1 or not user_id is not null or not ts >= 1622 or not ts <= 1623) and (not user_id = 1 or not user_id is not null or not ts >= 1624 or not ts <= 1625) and (not user_id = 1 or not user_id is not null or not ts >= 1626 or not ts <= 1627) and (not user_id = 1 or not user_id is not null or not ts >= 1628 or not ts <= 1629) and (not user_id = 1 or not user_id is not null or not ts >= 1630 or not ts <= 1631) and (not user_id = 1 or not user_id is not null or not ts >= 1632 or not ts <= 1633) and (not user_id = 1 or not user_id is not null or not ts >= 1634 or not ts <= 1635) and (not user_id = 1 or not user_id is not null or not ts >= 1636 or not ts <= 1637) and (not user_id = 1 or not user_id is not null or not ts >= 1638 or not ts <= 1639) and (not user_id = 1 or not user_id is not null or not ts >= 1640 or not ts <= 1641) and (not user_id = 1 or not user_id is not null or not ts >= 1642 or not ts <= 1643) and (not user_id = 1 or not user_id is not null or not ts >= 1644 or not ts <= 1645) and (not user_id = 1 or not user_id is not null or not ts >= 1646 or not ts <= 1647) and (not user_id = 1 or not user_id is not null or not ts >= 1648 or not ts <= 1649) and (not user_id = 1 or not user_id is not null or not ts >= 1650 or not ts <= 1651) and (not user_id = 1 or not user_id is not null or not ts >= 1652 or not ts <= 1653) and (not user_id = 1 or not user_id is not null or not ts >= 1654 or not ts <= 1655) and (not user_id = 1 or not user_id is not null or not ts >= 1656 or not ts <= 1657) and (not user_id = 1 or not user_id is not null or not ts >= 1658 or not ts <= 1659) and (not user_id = 1 or not user_id is not null or not ts >= 1660 or not ts <= 1661) and (not user_id = 1 or not user_id is not null or not ts >= 1662 or not ts <= 1663) and (not user_id = 1 or not user_id is not null or not ts >= 1664 or not ts <= 1665) and (not user_id = 1 or not user_id is not null or not ts >= 1666 or not ts <= 1667) and (not user_id = 1 or not user_id is not null or not ts >= 1668 or not ts <= 1669) and (not user_id = 1 or not user_id is not null or not ts >= 1670 or not ts <= 1671) and (not user_id = 1 or not user_id is not null or not ts >= 1672 or not ts <= 1673) and (not user_id = 1 or not user_id is not null or not ts >= 1674 or not ts <= 1675) and (not user_id = 1 or not user_id is not null or not ts >= 1676 or not ts <= 1677) and (not user_id = 1 or not user_id is not null or not ts >= 1678 or not ts <= 1679) and (not user_id = 1 or not user_id is not null or not ts >= 1680 or not ts <= 1681) and (not user_id = 1 or not user_id is not null or not ts >= 1682 or not ts <= 1683) and (not user_id = 1 or not user_id is not null or not ts >= 1684 or not ts <= 1685) and (not user_id = 1 or not user_id is not null or not ts >= 1686 or not ts <= 1687) and (not user_id = 1 or not user_id is not null or not ts >= 1688 or not ts <= 1689) and (not user_id = 1 or not user_id is not null or not ts >= 1690 or not ts <= 1691) and (not user_id = 1 or not user_id is not null or not ts >= 1692 or not ts <= 1693) and (not user_id = 1 or not user_id is not null or not ts >= 1694 or not ts <= 1695) and (not user_id = 1 or not user_id is not null or not ts >= 1696 or not ts <= 1697) and (not user_id = 1 or not user_id is not null or not ts >= 1698 or not ts <= 1699) and (not user_id = 1 or not user_id is not null or not ts >= 1700 or not ts <= 1701) and (not user_id = 1 or not user_id is not null or not ts >= 1702 or not ts <= 1703) and (not user_id = 1 or not user_id is not null or not ts >= 1704 or not ts <= 1705) and (not user_id = 1 or not user_id is not null or not ts >= 1706 or not ts <= 1707) and (not user_id = 1 or not user_id is not null or not ts >= 1708 or not ts <= 1709) and (not user_id = 1 or not user_id is not null or not ts >= 1710 or not ts <= 1711) and (not user_id = 1 or not user_id is not null or not ts >= 1712 or not ts <= 1713) and (not user_id = 1 or not user_id is not null or not ts >= 1714 or not ts <= 1715) and (not user_id = 1 or not user_id is not null or not ts >= 1716 or not ts <= 1717) and (not user_id = 1 or not user_id is not null or not ts >= 1718 or not ts <= 1719) and (not user_id = 1 or not user_id is not null or not ts >= 1720 or not ts <= 1721) and (not user_id = 1 or not user_id is not null or not ts >= 1722 or not ts <= 1723) and (not user_id = 1 or not user_id is not null or not ts >= 1724 or not ts <= 1725) and (not user_id = 1 or not user_id is not null or not ts >= 1726 or not ts <= 1727) and (not user_id = 1 or not user_id is not null or not ts >= 1728 or not ts <= 1729) and (not user_id = 1 or not user_id is not null or not ts >= 1730 or not ts <= 1731) and (not user_id = 1 or not user_id is not null or not ts >= 1732 or not ts <= 1733) and (not user_id = 1 or not user_id is not null or not ts >= 1734 or not ts <= 1735) and (not user_id = 1 or not user_id is not null or not ts >= 1736 or not ts <= 1737) and (not user_id = 1 or not user_id is not null or not ts >= 1738 or not ts <= 1739) and (not user_id = 1 or not user_id is not null or not ts >= 1740 or not ts <= 1741) and (not user_id = 1 or not user_id is not null or not ts >= 1742 or not ts <= 1743) and (not user_id = 1 or not user_id is not null or not ts >= 1744 or not ts <= 1745) and (not user_id = 1 or not user_id is not null or not ts >= 1746 or not ts <= 1747) and (not user_id = 1 or not user_id is not null or not ts >= 1748 or not ts <= 1749) and (not user_id = 1 or not user_id is not null or not ts >= 1750 or not ts <= 1751) and (not user_id = 1 or not user_id is not null or not ts >= 1752 or not ts <= 1753) and (not user_id = 1 or not user_id is not null or not ts >= 1754 or not ts <= 1755) and (not user_id = 1 or not user_id is not null or not ts >= 1756 or not ts <= 1757) and (not user_id = 1 or not user_id is not null or not ts >= 1758 or not ts <= 1759) and (not user_id = 1 or not user_id is not null or not ts >= 1760 or not ts <= 1761) and (not user_id = 1 or not user_id is not null or not ts >= 1762 or not ts <= 1763) and (not user_id = 1 or not user_id is not null or not ts >= 1764 or not ts <= 1765) and (not user_id = 1 or not user_id is not null or not ts >= 1766 or not ts <= 1767) and (not user_id = 1 or not user_id is not null or not ts >= 1768 or not ts <= 1769) and (not user_id = 1 or not user_id is not null or not ts >= 1770 or not ts <= 1771) and (not user_id = 1 or not user_id is not null or not ts >= 1772 or not ts <= 1773) and (not user_id = 1 or not user_id is not null or not ts >= 1774 or not ts <= 1775) and (not user_id = 1 or not user_id is not null or not ts >= 1776 or not ts <= 1777) and (not user_id = 1 or not user_id is not null or not ts >= 1778 or not ts <= 1779) and (not user_id = 1 or not user_id is not null or not ts >= 1780 or not ts <= 1781) and (not user_id = 1 or not user_id is not null or not ts >= 1782 or not ts <= 1783) and (not user_id = 1 or not user_id is not null or not ts >= 1784 or not ts <= 1785) and (not user_id = 1 or not user_id is not null or not ts >= 1786 or not ts <= 1787) and (not user_id = 1 or not user_id is not null or not ts >= 1788 or not ts <= 1789) and (not user_id = 1 or not user_id is not null or not ts >= 1790 or not ts <= 1791) and (not user_id = 1 or not user_id is not null or not ts >= 1792 or not ts <= 1793) and (not user_id = 1 or not user_id is not null or not ts >= 1794 or not ts <= 1795) and (not user_id = 1 or not user_id is not null or not ts >= 1796 or not ts <= 1797) and (not user_id = 1 or not user_id is not null or not ts >= 1798 or not ts <= 1799) and (not user_id = 1 or not user_id is not null or not ts >= 1800 or not ts <= 1801) and (not user_id = 1 or not user_id is not null or not ts >= 1802 or not ts <= 1803) and (not user_id = 1 or not user_id is not null or not ts >= 1804 or not ts <= 1805) and (not user_id = 1 or not user_id is not null or not ts >= 1806 or not ts <= 1807) and (not user_id = 1 or not user_id is not null or not ts >= 1808 or not ts <= 1809) and (not user_id = 1 or not user_id is not null or not ts >= 1810 or not ts <= 1811) and (not user_id = 1 or not user_id is not null or not ts >= 1812 or not ts <= 1813) and (not user_id = 1 or not user_id is not null or not ts >= 1814 or not ts <= 1815) and (not user_id = 1 or not user_id is not null or not ts >= 1816 or not ts <= 1817) and (not user_id = 1 or not user_id is not null or not ts >= 1818 or not ts <= 1819) and (not user_id = 1 or not user_id is not null or not ts >= 1820 or not ts <= 1821) and (not user_id = 1 or not user_id is not null or not ts >= 1822 or not ts <= 1823) and (not user_id = 1 or not user_id is not null or not ts >= 1824 or not ts <= 1825) and (not user_id = 1 or not user_id is not null or not ts >= 1826 or not ts <= 1827) and (not user_id = 1 or not user_id is not null or not ts >= 1828 or not ts <= 1829) and (not user_id = 1 or not user_id is not null or not ts >= 1830 or not ts <= 1831) and (not user_id = 1 or not user_id is not null or not ts >= 1832 or not ts <= 1833) and (not user_id = 1 or not user_id is not null or not ts >= 1834 or not ts <= 1835) and (not user_id = 1 or not user_id is not null or not ts >= 1836 or not ts <= 1837) and (not user_id = 1 or not user_id is not null or not ts >= 1838 or not ts <= 1839) and (not user_id = 1 or not user_id is not null or not ts >= 1840 or not ts <= 1841) and (not user_id = 1 or not user_id is not null or not ts >= 1842 or not ts <= 1843) and (not user_id = 1 or not user_id is not null or not ts >= 1844 or not ts <= 1845) and (not user_id = 1 or not user_id is not null or not ts >= 1846 or not ts <= 1847) and (not user_id = 1 or not user_id is not null or not ts >= 1848 or not ts <= 1849) and (not user_id = 1 or not user_id is not null or not ts >= 1850 or not ts <= 1851) and (not user_id = 1 or not user_id is not null or not ts >= 1852 or not ts <= 1853) and (not user_id = 1 or not user_id is not null or not ts >= 1854 or not ts <= 1855) and (not user_id = 1 or not user_id is not null or not ts >= 1856 or not ts <= 1857) and (not user_id = 1 or not user_id is not null or not ts >= 1858 or not ts <= 1859) and (not user_id = 1 or not user_id is not null or not ts >= 1860 or not ts <= 1861) and (not user_id = 1 or not user_id is not null or not ts >= 1862 or not ts <= 1863) and (not user_id = 1 or not user_id is not null or not ts >= 1864 or not ts <= 1865) and (not user_id = 1 or not user_id is not null or not ts >= 1866 or not ts <= 1867) and (not user_id = 1 or not user_id is not null or not ts >= 1868 or not ts <= 1869) and (not user_id = 1 or not user_id is not null or not ts >= 1870 or not ts <= 1871) and (not user_id = 1 or not user_id is not null or not ts >= 1872 or not ts <= 1873) and (not user_id = 1 or not user_id is not null or not ts >= 1874 or not ts <= 1875) and (not user_id = 1 or not user_id is not null or not ts >= 1876 or not ts <= 1877) and (not user_id = 1 or not user_id is not null or not ts >= 1878 or not ts <= 1879) and (not user_id = 1 or not user_id is not null or not ts >= 1880 or not ts <= 1881) and (not user_id = 1 or not user_id is not null or not ts >= 1882 or not ts <= 1883) and (not user_id = 1 or not user_id is not null or not ts >= 1884 or not ts <= 1885) and (not user_id = 1 or not user_id is not null or not ts >= 1886 or not ts <= 1887) and (not user_id = 1 or not user_id is not null or not ts >= 1888 or not ts <= 1889) and (not user_id = 1 or not user_id is not null or not ts >= 1890 or not ts <= 1891) and (not user_id = 1 or not user_id is not null or not ts >= 1892 or not ts <= 1893) and (not user_id = 1 or not user_id is not null or not ts >= 1894 or not ts <= 1895) and (not user_id = 1 or not user_id is not null or not ts >= 1896 or not ts <= 1897) and (not user_id = 1 or not user_id is not null or not ts >= 1898 or not ts <= 1899) and (not user_id = 1 or not user_id is not null or not ts >= 1900 or not ts <= 1901) and (not user_id = 1 or not user_id is not null or not ts >= 1902 or not ts <= 1903) and (not user_id = 1 or not user_id is not null or not ts >= 1904 or not ts <= 1905) and (not user_id = 1 or not user_id is not null or not ts >= 1906 or not ts <= 1907) and (not user_id = 1 or not user_id is not null or not ts >= 1908 or not ts <= 1909) and (not user_id = 1 or not user_id is not null or not ts >= 1910 or not ts <= 1911) and (not user_id = 1 or not user_id is not null or not ts >= 1912 or not ts <= 1913) and (not user_id = 1 or not user_id is not null or not ts >= 1914 or not ts <= 1915) and (not user_id = 1 or not user_id is not null or not ts >= 1916 or not ts <= 1917) and (not user_id = 1 or not user_id is not null or not ts >= 1918 or not ts <= 1919) and (not user_id = 1 or not user_id is not null or not ts >= 1920 or not ts <= 1921) and (not user_id = 1 or not user_id is not null or not ts >= 1922 or not ts <= 1923) and (not user_id = 1 or not user_id is not null or not ts >= 1924 or not ts <= 1925) and (not user_id = 1 or not user_id is not null or not ts >= 1926 or not ts <= 1927) and (not user_id = 1 or not user_id is not null or not ts >= 1928 or not ts <= 1929) and (not user_id = 1 or not user_id is not null or not ts >= 1930 or not ts <= 1931) and (not user_id = 1 or not user_id is not null or not ts >= 1932 or not ts <= 1933) and (not user_id = 1 or not user_id is not null or not ts >= 1934 or not ts <= 1935) and (not user_id = 1 or not user_id is not null or not ts >= 1936 or not ts <= 1937) and (not user_id = 1 or not user_id is not null or not ts >= 1938 or not ts <= 1939) and (not user_id = 1 or not user_id is not null or not ts >= 1940 or not ts <= 1941) and (not user_id = 1 or not user_id is not null or not ts >= 1942 or not ts <= 1943) and (not user_id = 1 or not user_id is not null or not ts >= 1944 or not ts <= 1945) and (not user_id = 1 or not user_id is not null or not ts >= 1946 or not ts <= 1947) and (not user_id = 1 or not user_id is not null or not ts >= 1948 or not ts <= 1949) and (not user_id = 1 or not user_id is not null or not ts >= 1950 or not ts <= 1951) and (not user_id = 1 or not user_id is not null or not ts >= 1952 or not ts <= 1953) and (not user_id = 1 or not user_id is not null or not ts >= 1954 or not ts <= 1955) and (not user_id = 1 or not user_id is not null or not ts >= 1956 or not ts <= 1957) and (not user_id = 1 or not user_id is not null or not ts >= 1958 or not ts <= 1959) and (not user_id = 1 or not user_id is not null or not ts >= 1960 or not ts <= 1961) and (not user_id = 1 or not user_id is not null or not ts >= 1962 or not ts <= 1963) and (not user_id = 1 or not user_id is not null or not ts >= 1964 or not ts <= 1965) and (not user_id = 1 or not user_id is not null or not ts >= 1966 or not ts <= 1967) and (not user_id = 1 or not user_id is not null or not ts >= 1968 or not ts <= 1969) and (not user_id = 1 or not user_id is not null or not ts >= 1970 or not ts <= 1971) and (not user_id = 1 or not user_id is not null or not ts >= 1972 or not ts <= 1973) and (not user_id = 1 or not user_id is not null or not ts >= 1974 or not ts <= 1975) and (not user_id = 1 or not user_id is not null or not ts >= 1976 or not ts <= 1977) and (not user_id = 1 or not user_id is not null or not ts >= 1978 or not ts <= 1979) and (not user_id = 1 or not user_id is not null or not ts >= 1980 or not ts <= 1981) and (not user_id = 1 or not user_id is not null or not ts >= 1982 or not ts <= 1983) and (not user_id = 1 or not user_id is not null or not ts >= 1984 or not ts <= 1985) and (not user_id = 1 or not user_id is not null or not ts >= 1986 or not ts <= 1987) and (not user_id = 1 or not user_id is not null or not ts >= 1988 or not ts <= 1989) and (not user_id = 1 or not user_id is not null or not ts >= 1990 or not ts <= 1991) and (not user_id = 1 or not user_id is not null or not ts >= 1992 or not ts <= 1993) and (not user_id = 1 or not user_id is not null or not ts >= 1994 or not ts <= 1995) and (not user_id = 1 or not user_id is not null or not ts >= 1996 or not ts <= 1997) and (not user_id = 1 or not user_id is not null or not ts >= 1998 or not ts <= 1999) and (not user_id = 1 or not user_id is not null or not ts >= 11000 or not ts <= 11001) and (not user_id = 1 or not user_id is not null or not ts >= 11002 or not ts <= 11003) and (not user_id = 1 or not user_id is not null or not ts >= 11004 or not ts <= 11005) and (not user_id = 1 or not user_id is not null or not ts >= 11006 or not ts <= 11007) and (not user_id = 1 or not user_id is not null or not ts >= 11008 or not ts <= 11009) and (not user_id = 1 or not user_id is not null or not ts >= 11010 or not ts <= 11011) and (not user_id = 1 or not user_id is not null or not ts >= 11012 or not ts <= 11013) and (not user_id = 1 or not user_id is not null or not ts >= 11014 or not ts <= 11015) and (not user_id = 1 or not user_id is not null or not ts >= 11016 or not ts <= 11017) and (not user_id = 1 or not user_id is not null or not ts >= 11018 or not ts <= 11019) and (not user_id = 1 or not user_id is not null or not ts >= 11020 or not ts <= 11021) and (not user_id = 1 or not user_id is not null or not ts >= 11022 or not ts <= 11023) and (not user_id = 1 or not user_id is not null or not ts >= 11024 or not ts <= 11025) and (not user_id = 1 or not user_id is not null or not ts >= 11026 or not ts <= 11027) and (not user_id = 1 or not user_id is not null or not ts >= 11028 or not ts <= 11029) and (not user_id = 1 or not user_id is not null or not ts >= 11030 or not ts <= 11031) and (not user_id = 1 or not user_id is not null or not ts >= 11032 or not ts <= 11033) and (not user_id = 1 or not user_id is not null or not ts >= 11034 or not ts <= 11035) and (not user_id = 1 or not user_id is not null or not ts >= 11036 or not ts <= 11037) and (not user_id = 1 or not user_id is not null or not ts >= 11038 or not ts <= 11039) and (not user_id = 1 or not user_id is not null or not ts >= 11040 or not ts <= 11041) and (not user_id = 1 or not user_id is not null or not ts >= 11042 or not ts <= 11043) and (not user_id = 1 or not user_id is not null or not ts >= 11044 or not ts <= 11045) and (not user_id = 1 or not user_id is not null or not ts >= 11046 or not ts <= 11047) and (not user_id = 1 or not user_id is not null or not ts >= 11048 or not ts <= 11049) and (not user_id = 1 or not user_id is not null or not ts >= 11050 or not ts <= 11051) and (not user_id = 1 or not user_id is not null or not ts >= 11052 or not ts <= 11053) and (not user_id = 1 or not user_id is not null or not ts >= 11054 or not ts <= 11055) and (not user_id = 1 or not user_id is not null or not ts >= 11056 or not ts <= 11057) and (not user_id = 1 or not user_id is not null or not ts >= 11058 or not ts <= 11059) and (not user_id = 1 or not user_id is not null or not ts >= 11060 or not ts <= 11061) and (not user_id = 1 or not user_id is not null or not ts >= 11062 or not ts <= 11063) and (not user_id = 1 or not user_id is not null or not ts >= 11064 or not ts <= 11065) and (not user_id = 1 or not user_id is not null or not ts >= 11066 or not ts <= 11067) and (not user_id = 1 or not user_id is not null or not ts >= 11068 or not ts <= 11069) and (not user_id = 1 or not user_id is not null or not ts >= 11070 or not ts <= 11071) and (not user_id = 1 or not user_id is not null or not ts >= 11072 or not ts <= 11073) and (not user_id = 1 or not user_id is not null or not ts >= 11074 or not ts <= 11075) and (not user_id = 1 or not user_id is not null or not ts >= 11076 or not ts <= 11077) and (not user_id = 1 or not user_id is not null or not ts >= 11078 or not ts <= 11079) and (not user_id = 1 or not user_id is not null or not ts >= 11080 or not ts <= 11081) and (not user_id = 1 or not user_id is not null or not ts >= 11082 or not ts <= 11083) and (not user_id = 1 or not user_id is not null or not ts >= 11084 or not ts <= 11085) and (not user_id = 1 or not user_id is not null or not ts >= 11086 or not ts <= 11087) and (not user_id = 1 or not user_id is not null or not ts >= 11088 or not ts <= 11089) and (not user_id = 1 or not user_id is not null or not ts >= 11090 or not ts <= 11091) and (not user_id = 1 or not user_id is not null or not ts >= 11092 or not ts <= 11093) and (not user_id = 1 or not user_id is not null or not ts >= 11094 or not ts <= 11095) and (not user_id = 1 or not user_id is not null or not ts >= 11096 or not ts <= 11097) and (not user_id = 1 or not user_id is not null or not ts >= 11098 or not ts <= 11099) and (not user_id = 1 or not user_id is not null or not ts >= 11100 or not ts <= 11101) and (not user_id = 1 or not user_id is not null or not ts >= 11102 or not ts <= 11103) and (not user_id = 1 or not user_id is not null or not ts >= 11104 or not ts <= 11105) and (not user_id = 1 or not user_id is not null or not ts >= 11106 or not ts <= 11107) and (not user_id = 1 or not user_id is not null or not ts >= 11108 or not ts <= 11109) and (not user_id = 1 or not user_id is not null or not ts >= 11110 or not ts <= 11111) and (not user_id = 1 or not user_id is not null or not ts >= 11112 or not ts <= 11113) and (not user_id = 1 or not user_id is not null or not ts >= 11114 or not ts <= 11115) and (not user_id = 1 or not user_id is not null or not ts >= 11116 or not ts <= 11117) and (not user_id = 1 or not user_id is not null or not ts >= 11118 or not ts <= 11119) and (not user_id = 1 or not user_id is not null or not ts >= 11120 or not ts <= 11121) and (not user_id = 1 or not user_id is not null or not ts >= 11122 or not ts <= 11123) and (not user_id = 1 or not user_id is not null or not ts >= 11124 or not ts <= 11125) and (not user_id = 1 or not user_id is not null or not ts >= 11126 or not ts <= 11127) and (not user_id = 1 or not user_id is not null or not ts >= 11128 or not ts <= 11129) and (not user_id = 1 or not user_id is not null or not ts >= 11130 or not ts <= 11131) and (not user_id = 1 or not user_id is not null or not ts >= 11132 or not ts <= 11133) and (not user_id = 1 or not user_id is not null or not ts >= 11134 or not ts <= 11135) and (not user_id = 1 or not user_id is not null or not ts >= 11136 or not ts <= 11137) and (not user_id = 1 or not user_id is not null or not ts >= 11138 or not ts <= 11139) and (not user_id = 1 or not user_id is not null or not ts >= 11140 or not ts <= 11141) and (not user_id = 1 or not user_id is not null or not ts >= 11142 or not ts <= 11143) and (not user_id = 1 or not user_id is not null or not ts >= 11144 or not ts <= 11145) and (not user_id = 1 or not user_id is not null or not ts >= 11146 or not ts <= 11147) and (not user_id = 1 or not user_id is not null or not ts >= 11148 or not ts <= 11149) and (not user_id = 1 or not user_id is not null or not ts >= 11150 or not ts <= 11151) and (not user_id = 1 or not user_id is not null or not ts >= 11152 or not ts <= 11153) and (not user_id = 1 or not user_id is not null or not ts >= 11154 or not ts <= 11155) and (not user_id = 1 or not user_id is not null or not ts >= 11156 or not ts <= 11157) and (not user_id = 1 or not user_id is not null or not ts >= 11158 or not ts <= 11159) and (not user_id = 1 or not user_id is not null or not ts >= 11160 or not ts <= 11161) and (not user_id = 1 or not user_id is not null or not ts >= 11162 or not ts <= 11163) and (not user_id = 1 or not user_id is not null or not ts >= 11164 or not ts <= 11165) and (not user_id = 1 or not user_id is not null or not ts >= 11166 or not ts <= 11167) and (not user_id = 1 or not user_id is not null or not ts >= 11168 or not ts <= 11169) and (not user_id = 1 or not user_id is not null or not ts >= 11170 or not ts <= 11171) and (not user_id = 1 or not user_id is not null or not ts >= 11172 or not ts <= 11173) and (not user_id = 1 or not user_id is not null or not ts >= 11174 or not ts <= 11175) and (not user_id = 1 or not user_id is not null or not ts >= 11176 or not ts <= 11177) and (not user_id = 1 or not user_id is not null or not ts >= 11178 or not ts <= 11179) and (not user_id = 1 or not user_id is not null or not ts >= 11180 or not ts <= 11181) and (not user_id = 1 or not user_id is not null or not ts >= 11182 or not ts <= 11183) and (not user_id = 1 or not user_id is not null or not ts >= 11184 or not ts <= 11185) and (not user_id = 1 or not user_id is not null or not ts >= 11186 or not ts <= 11187) and (not user_id = 1 or not user_id is not null or not ts >= 11188 or not ts <= 11189) and (not user_id = 1 or not user_id is not null or not ts >= 11190 or not ts <= 11191) and (not user_id = 1 or not user_id is not null or not ts >= 11192 or not ts <= 11193) and (not user_id = 1 or not user_id is not null or not ts >= 11194 or not ts <= 11195) and (not user_id = 1 or not user_id is not null or not ts >= 11196 or not ts <= 11197) and (not user_id = 1 or not user_id is not null or not ts >= 11198 or not ts <= 11199) and (not user_id = 1 or not user_id is not null or not ts >= 11200 or not ts <= 11201) and (not user_id = 1 or not user_id is not null or not ts >= 11202 or not ts <= 11203) and (not user_id = 1 or not user_id is not null or not ts >= 11204 or not ts <= 11205) and (not user_id = 1 or not user_id is not null or not ts >= 11206 or not ts <= 11207) and (not user_id = 1 or not user_id is not null or not ts >= 11208 or not ts <= 11209) and (not user_id = 1 or not user_id is not null or not ts >= 11210 or not ts <= 11211) and (not user_id = 1 or not user_id is not null or not ts >= 11212 or not ts <= 11213) and (not user_id = 1 or not user_id is not null or not ts >= 11214 or not ts <= 11215) and (not user_id = 1 or not user_id is not null or not ts >= 11216 or not ts <= 11217) and (not user_id = 1 or not user_id is not null or not ts >= 11218 or not ts <= 11219) and (not user_id = 1 or not user_id is not null or not ts >= 11220 or not ts <= 11221) and (not user_id = 1 or not user_id is not null or not ts >= 11222 or not ts <= 11223) and (not user_id = 1 or not user_id is not null or not ts >= 11224 or not ts <= 11225) and (not user_id = 1 or not user_id is not null or not ts >= 11226 or not ts <= 11227) and (not user_id = 1 or not user_id is not null or not ts >= 11228 or not ts <= 11229) and (not user_id = 1 or not user_id is not null or not ts >= 11230 or not ts <= 11231) and (not user_id = 1 or not user_id is not null or not ts >= 11232 or not ts <= 11233) and (not user_id = 1 or not user_id is not null or not ts >= 11234 or not ts <= 11235) and (not user_id = 1 or not user_id is not null or not ts >= 11236 or not ts <= 11237) and (not user_id = 1 or not user_id is not null or not ts >= 11238 or not ts <= 11239) and (not user_id = 1 or not user_id is not null or not ts >= 11240 or not ts <= 11241) and (not user_id = 1 or not user_id is not null or not ts >= 11242 or not ts <= 11243) and (not user_id = 1 or not user_id is not null or not ts >= 11244 or not ts <= 11245) and (not user_id = 1 or not user_id is not null or not ts >= 11246 or not ts <= 11247) and (not user_id = 1 or not user_id is not null or not ts >= 11248 or not ts <= 11249) and (not user_id = 1 or not user_id is not null or not ts >= 11250 or not ts <= 11251) and (not user_id = 1 or not user_id is not null or not ts >= 11252 or not ts <= 11253) and (not user_id = 1 or not user_id is not null or not ts >= 11254 or not ts <= 11255) and (not user_id = 1 or not user_id is not null or not ts >= 11256 or not ts <= 11257) and (not user_id = 1 or not user_id is not null or not ts >= 11258 or not ts <= 11259) and (not user_id = 1 or not user_id is not null or not ts >= 11260 or not ts <= 11261) and (not user_id = 1 or not user_id is not null or not ts >= 11262 or not ts <= 11263) and (not user_id = 1 or not user_id is not null or not ts >= 11264 or not ts <= 11265) and (not user_id = 1 or not user_id is not null or not ts >= 11266 or not ts <= 11267) and (not user_id = 1 or not user_id is not null or not ts >= 11268 or not ts <= 11269) and (not user_id = 1 or not user_id is not null or not ts >= 11270 or not ts <= 11271) and (not user_id = 1 or not user_id is not null or not ts >= 11272 or not ts <= 11273) and (not user_id = 1 or not user_id is not null or not ts >= 11274 or not ts <= 11275) and (not user_id = 1 or not user_id is not null or not ts >= 11276 or not ts <= 11277) and (not user_id = 1 or not user_id is not null or not ts >= 11278 or not ts <= 11279) and (not user_id = 1 or not user_id is not null or not ts >= 11280 or not ts <= 11281) and (not user_id = 1 or not user_id is not null or not ts >= 11282 or not ts <= 11283) and (not user_id = 1 or not user_id is not null or not ts >= 11284 or not ts <= 11285) and (not user_id = 1 or not user_id is not null or not ts >= 11286 or not ts <= 11287) and (not user_id = 1 or not user_id is not null or not ts >= 11288 or not ts <= 11289) and (not user_id = 1 or not user_id is not null or not ts >= 11290 or not ts <= 11291) and (not user_id = 1 or not user_id is not null or not ts >= 11292 or not ts <= 11293) and (not user_id = 1 or not user_id is not null or not ts >= 11294 or not ts <= 11295) and (not user_id = 1 or not user_id is not null or not ts >= 11296 or not ts <= 11297) and (not user_id = 1 or not user_id is not null or not ts >= 11298 or not ts <= 11299) and (not user_id = 1 or not user_id is not null or not ts >= 11300 or not ts <= 11301) and (not user_id = 1 or not user_id is not null or not ts >= 11302 or not ts <= 11303) and (not user_id = 1 or not user_id is not null or not ts >= 11304 or not ts <= 11305) and (not user_id = 1 or not user_id is not null or not ts >= 11306 or not ts <= 11307) and (not user_id = 1 or not user_id is not null or not ts >= 11308 or not ts <= 11309) and (not user_id = 1 or not user_id is not null or not ts >= 11310 or not ts <= 11311) and (not user_id = 1 or not user_id is not null or not ts >= 11312 or not ts <= 11313) and (not user_id = 1 or not user_id is not null or not ts >= 11314 or not ts <= 11315) and (not user_id = 1 or not user_id is not null or not ts >= 11316 or not ts <= 11317) and (not user_id = 1 or not user_id is not null or not ts >= 11318 or not ts <= 11319) and (not user_id = 1 or not user_id is not null or not ts >= 11320 or not ts <= 11321) and (not user_id = 1 or not user_id is not null or not ts >= 11322 or not ts <= 11323) and (not user_id = 1 or not user_id is not null or not ts >= 11324 or not ts <= 11325) and (not user_id = 1 or not user_id is not null or not ts >= 11326 or not ts <= 11327) and (not user_id = 1 or not user_id is not null or not ts >= 11328 or not ts <= 11329) and (not user_id = 1 or not user_id is not null or not ts >= 11330 or not ts <= 11331) and (not user_id = 1 or not user_id is not null or not ts >= 11332 or not ts <= 11333) and (not user_id = 1 or not user_id is not null or not ts >= 11334 or not ts <= 11335) and (not user_id = 1 or not user_id is not null or not ts >= 11336 or not ts <= 11337) and (not user_id = 1 or not user_id is not null or not ts >= 11338 or not ts <= 11339) and (not user_id = 1 or not user_id is not null or not ts >= 11340 or not ts <= 11341) and (not user_id = 1 or not user_id is not null or not ts >= 11342 or not ts <= 11343) and (not user_id = 1 or not user_id is not null or not ts >= 11344 or not ts <= 11345) and (not user_id = 1 or not user_id is not null or not ts >= 11346 or not ts <= 11347) and (not user_id = 1 or not user_id is not null or not ts >= 11348 or not ts <= 11349) and (not user_id = 1 or not user_id is not null or not ts >= 11350 or not ts <= 11351) and (not user_id = 1 or not user_id is not null or not ts >= 11352 or not ts <= 11353) and (not user_id = 1 or not user_id is not null or not ts >= 11354 or not ts <= 11355) and (not user_id = 1 or not user_id is not null or not ts >= 11356 or not ts <= 11357) and (not user_id = 1 or not user_id is not null or not ts >= 11358 or not ts <= 11359) and (not user_id = 1 or not user_id is not null or not ts >= 11360 or not ts <= 11361) and (not user_id = 1 or not user_id is not null or not ts >= 11362 or not ts <= 11363) and (not user_id = 1 or not user_id is not null or not ts >= 11364 or not ts <= 11365) and (not user_id = 1 or not user_id is not null or not ts >= 11366 or not ts <= 11367) and (not user_id = 1 or not user_id is not null or not ts >= 11368 or not ts <= 11369) and (not user_id = 1 or not user_id is not null or not ts >= 11370 or not ts <= 11371) and (not user_id = 1 or not user_id is not null or not ts >= 11372 or not ts <= 11373) and (not user_id = 1 or not user_id is not null or not ts >= 11374 or not ts <= 11375) and (not user_id = 1 or not user_id is not null or not ts >= 11376 or not ts <= 11377) and (not user_id = 1 or not user_id is not null or not ts >= 11378 or not ts <= 11379) and (not user_id = 1 or not user_id is not null or not ts >= 11380 or not ts <= 11381) and (not user_id = 1 or not user_id is not null or not ts >= 11382 or not ts <= 11383) and (not user_id = 1 or not user_id is not null or not ts >= 11384 or not ts <= 11385) and (not user_id = 1 or not user_id is not null or not ts >= 11386 or not ts <= 11387) and (not user_id = 1 or not user_id is not null or not ts >= 11388 or not ts <= 11389) and (not user_id = 1 or not user_id is not null or not ts >= 11390 or not ts <= 11391) and (not user_id = 1 or not user_id is not null or not ts >= 11392 or not ts <= 11393) and (not user_id = 1 or not user_id is not null or not ts >= 11394 or not ts <= 11395) and (not user_id = 1 or not user_id is not null or not ts >= 11396 or not ts <= 11397) and (not user_id = 1 or not user_id is not null or not ts >= 11398 or not ts <= 11399) and (not user_id = 1 or not user_id is not null or not ts >= 11400 or not ts <= 11401) and (not user_id = 1 or not user_id is not null or not ts >= 11402 or not ts <= 11403) and (not user_id = 1 or not user_id is not null or not ts >= 11404 or not ts <= 11405) and (not user_id = 1 or not user_id is not null or not ts >= 11406 or not ts <= 11407) and (not user_id = 1 or not user_id is not null or not ts >= 11408 or not ts <= 11409) and (not user_id = 1 or not user_id is not null or not ts >= 11410 or not ts <= 11411) and (not user_id = 1 or not user_id is not null or not ts >= 11412 or not ts <= 11413) and (not user_id = 1 or not user_id is not null or not ts >= 11414 or not ts <= 11415) and (not user_id = 1 or not user_id is not null or not ts >= 11416 or not ts <= 11417) and (not user_id = 1 or not user_id is not null or not ts >= 11418 or not ts <= 11419) and (not user_id = 1 or not user_id is not null or not ts >= 11420 or not ts <= 11421) and (not user_id = 1 or not user_id is not null or not ts >= 11422 or not ts <= 11423) and (not user_id = 1 or not user_id is not null or not ts >= 11424 or not ts <= 11425) and (not user_id = 1 or not user_id is not null or not ts >= 11426 or not ts <= 11427) and (not user_id = 1 or not user_id is not null or not ts >= 11428 or not ts <= 11429) and (not user_id = 1 or not user_id is not null or not ts >= 11430 or not ts <= 11431) and (not user_id = 1 or not user_id is not null or not ts >= 11432 or not ts <= 11433) and (not user_id = 1 or not user_id is not null or not ts >= 11434 or not ts <= 11435) and (not user_id = 1 or not user_id is not null or not ts >= 11436 or not ts <= 11437) and (not user_id = 1 or not user_id is not null or not ts >= 11438 or not ts <= 11439) and (not user_id = 1 or not user_id is not null or not ts >= 11440 or not ts <= 11441) and (not user_id = 1 or not user_id is not null or not ts >= 11442 or not ts <= 11443) and (not user_id = 1 or not user_id is not null or not ts >= 11444 or not ts <= 11445) and (not user_id = 1 or not user_id is not null or not ts >= 11446 or not ts <= 11447) and (not user_id = 1 or not user_id is not null or not ts >= 11448 or not ts <= 11449) and (not user_id = 1 or not user_id is not null or not ts >= 11450 or not ts <= 11451) and (not user_id = 1 or not user_id is not null or not ts >= 11452 or not ts <= 11453) and (not user_id = 1 or not user_id is not null or not ts >= 11454 or not ts <= 11455) and (not user_id = 1 or not user_id is not null or not ts >= 11456 or not ts <= 11457) and (not user_id = 1 or not user_id is not null or not ts >= 11458 or not ts <= 11459) and (not user_id = 1 or not user_id is not null or not ts >= 11460 or not ts <= 11461) and (not user_id = 1 or not user_id is not null or not ts >= 11462 or not ts <= 11463) and (not user_id = 1 or not user_id is not null or not ts >= 11464 or not ts <= 11465) and (not user_id = 1 or not user_id is not null or not ts >= 11466 or not ts <= 11467) and (not user_id = 1 or not user_id is not null or not ts >= 11468 or not ts <= 11469) and (not user_id = 1 or not user_id is not null or not ts >= 11470 or not ts <= 11471) and (not user_id = 1 or not user_id is not null or not ts >= 11472 or not ts <= 11473) and (not user_id = 1 or not user_id is not null or not ts >= 11474 or not ts <= 11475) and (not user_id = 1 or not user_id is not null or not ts >= 11476 or not ts <= 11477) and (not user_id = 1 or not user_id is not null or not ts >= 11478 or not ts <= 11479) and (not user_id = 1 or not user_id is not null or not ts >= 11480 or not ts <= 11481) and (not user_id = 1 or not user_id is not null or not ts >= 11482 or not ts <= 11483) and (not user_id = 1 or not user_id is not null or not ts >= 11484 or not ts <= 11485) and (not user_id = 1 or not user_id is not null or not ts >= 11486 or not ts <= 11487) and (not user_id = 1 or not user_id is not null or not ts >= 11488 or not ts <= 11489) and (not user_id = 1 or not user_id is not null or not ts >= 11490 or not ts <= 11491) and (not user_id = 1 or not user_id is not null or not ts >= 11492 or not ts <= 11493) and (not user_id = 1 or not user_id is not null or not ts >= 11494 or not ts <= 11495) and (not user_id = 1 or not user_id is not null or not ts >= 11496 or not ts <= 11497) and (not user_id = 1 or not user_id is not null or not ts >= 11498 or not ts <= 11499) and (not user_id = 1 or not user_id is not null or not ts >= 11500 or not ts <= 11501) and (not user_id = 1 or not user_id is not null or not ts >= 11502 or not ts <= 11503) and (not user_id = 1 or not user_id is not null or not ts >= 11504 or not ts <= 11505) and (not user_id = 1 or not user_id is not null or not ts >= 11506 or not ts <= 11507) and (not user_id = 1 or not user_id is not null or not ts >= 11508 or not ts <= 11509) and (not user_id = 1 or not user_id is not null or not ts >= 11510 or not ts <= 11511) and (not user_id = 1 or not user_id is not null or not ts >= 11512 or not ts <= 11513) and (not user_id = 1 or not user_id is not null or not ts >= 11514 or not ts <= 11515) and (not user_id = 1 or not user_id is not null or not ts >= 11516 or not ts <= 11517) and (not user_id = 1 or not user_id is not null or not ts >= 11518 or not ts <= 11519) and (not user_id = 1 or not user_id is not null or not ts >= 11520 or not ts <= 11521) and (not user_id = 1 or not user_id is not null or not ts >= 11522 or not ts <= 11523) and (not user_id = 1 or not user_id is not null or not ts >= 11524 or not ts <= 11525) and (not user_id = 1 or not user_id is not null or not ts >= 11526 or not ts <= 11527) and (not user_id = 1 or not user_id is not null or not ts >= 11528 or not ts <= 11529) and (not user_id = 1 or not user_id is not null or not ts >= 11530 or not ts <= 11531) and (not user_id = 1 or not user_id is not null or not ts >= 11532 or not ts <= 11533) and (not user_id = 1 or not user_id is not null or not ts >= 11534 or not ts <= 11535) and (not user_id = 1 or not user_id is not null or not ts >= 11536 or not ts <= 11537) and (not user_id = 1 or not user_id is not null or not ts >= 11538 or not ts <= 11539) and (not user_id = 1 or not user_id is not null or not ts >= 11540 or not ts <= 11541) and (not user_id = 1 or not user_id is not null or not ts >= 11542 or not ts <= 11543) and (not user_id = 1 or not user_id is not null or not ts >= 11544 or not ts <= 11545) and (not user_id = 1 or not user_id is not null or not ts >= 11546 or not ts <= 11547) and (not user_id = 1 or not user_id is not null or not ts >= 11548 or not ts <= 11549) and (not user_id = 1 or not user_id is not null or not ts >= 11550 or not ts <= 11551) and (not user_id = 1 or not user_id is not null or not ts >= 11552 or not ts <= 11553) and (not user_id = 1 or not user_id is not null or not ts >= 11554 or not ts <= 11555) and (not user_id = 1 or not user_id is not null or not ts >= 11556 or not ts <= 11557) and (not user_id = 1 or not user_id is not null or not ts >= 11558 or not ts <= 11559) and (not user_id = 1 or not user_id is not null or not ts >= 11560 or not ts <= 11561) and (not user_id = 1 or not user_id is not null or not ts >= 11562 or not ts <= 11563) and (not user_id = 1 or not user_id is not null or not ts >= 11564 or not ts <= 11565) and (not user_id = 1 or not user_id is not null or not ts >= 11566 or not ts <= 11567) and (not user_id = 1 or not user_id is not null or not ts >= 11568 or not ts <= 11569) and (not user_id = 1 or not user_id is not null or not ts >= 11570 or not ts <= 11571) and (not user_id = 1 or not user_id is not null or not ts >= 11572 or not ts <= 11573) and (not user_id = 1 or not user_id is not null or not ts >= 11574 or not ts <= 11575) and (not user_id = 1 or not user_id is not null or not ts >= 11576 or not ts <= 11577) and (not user_id = 1 or not user_id is not null or not ts >= 11578 or not ts <= 11579) and (not user_id = 1 or not user_id is not null or not ts >= 11580 or not ts <= 11581) and (not user_id = 1 or not user_id is not null or not ts >= 11582 or not ts <= 11583) and (not user_id = 1 or not user_id is not null or not ts >= 11584 or not ts <= 11585) and (not user_id = 1 or not user_id is not null or not ts >= 11586 or not ts <= 11587) and (not user_id = 1 or not user_id is not null or not ts >= 11588 or not ts <= 11589) and (not user_id = 1 or not user_id is not null or not ts >= 11590 or not ts <= 11591) and (not user_id = 1 or not user_id is not null or not ts >= 11592 or not ts <= 11593) and (not user_id = 1 or not user_id is not null or not ts >= 11594 or not ts <= 11595) and (not user_id = 1 or not user_id is not null or not ts >= 11596 or not ts <= 11597) and (not user_id = 1 or not user_id is not null or not ts >= 11598 or not ts <= 11599) and (not user_id = 1 or not user_id is not null or not ts >= 11600 or not ts <= 11601) and (not user_id = 1 or not user_id is not null or not ts >= 11602 or not ts <= 11603) and (not user_id = 1 or not user_id is not null or not ts >= 11604 or not ts <= 11605) and (not user_id = 1 or not user_id is not null or not ts >= 11606 or not ts <= 11607) and (not user_id = 1 or not user_id is not null or not ts >= 11608 or not ts <= 11609) and (not user_id = 1 or not user_id is not null or not ts >= 11610 or not ts <= 11611) and (not user_id = 1 or not user_id is not null or not ts >= 11612 or not ts <= 11613) and (not user_id = 1 or not user_id is not null or not ts >= 11614 or not ts <= 11615) and (not user_id = 1 or not user_id is not null or not ts >= 11616 or not ts <= 11617) and (not user_id = 1 or not user_id is not null or not ts >= 11618 or not ts <= 11619) and (not user_id = 1 or not user_id is not null or not ts >= 11620 or not ts <= 11621) and (not user_id = 1 or not user_id is not null or not ts >= 11622 or not ts <= 11623) and (not user_id = 1 or not user_id is not null or not ts >= 11624 or not ts <= 11625) and (not user_id = 1 or not user_id is not null or not ts >= 11626 or not ts <= 11627) and (not user_id = 1 or not user_id is not null or not ts >= 11628 or not ts <= 11629) and (not user_id = 1 or not user_id is not null or not ts >= 11630 or not ts <= 11631) and (not user_id = 1 or not user_id is not null or not ts >= 11632 or not ts <= 11633) and (not user_id = 1 or not user_id is not null or not ts >= 11634 or not ts <= 11635) and (not user_id = 1 or not user_id is not null or not ts >= 11636 or not ts <= 11637) and (not user_id = 1 or not user_id is not null or not ts >= 11638 or not ts <= 11639) and (not user_id = 1 or not user_id is not null or not ts >= 11640 or not ts <= 11641) and (not user_id = 1 or not user_id is not null or not ts >= 11642 or not ts <= 11643) and (not user_id = 1 or not user_id is not null or not ts >= 11644 or not ts <= 11645) and (not user_id = 1 or not user_id is not null or not ts >= 11646 or not ts <= 11647) and (not user_id = 1 or not user_id is not null or not ts >= 11648 or not ts <= 11649) and (not user_id = 1 or not user_id is not null or not ts >= 11650 or not ts <= 11651) and (not user_id = 1 or not user_id is not null or not ts >= 11652 or not ts <= 11653) and (not user_id = 1 or not user_id is not null or not ts >= 11654 or not ts <= 11655) and (not user_id = 1 or not user_id is not null or not ts >= 11656 or not ts <= 11657) and (not user_id = 1 or not user_id is not null or not ts >= 11658 or not ts <= 11659) and (not user_id = 1 or not user_id is not null or not ts >= 11660 or not ts <= 11661) and (not user_id = 1 or not user_id is not null or not ts >= 11662 or not ts <= 11663) and (not user_id = 1 or not user_id is not null or not ts >= 11664 or not ts <= 11665) and (not user_id = 1 or not user_id is not null or not ts >= 11666 or not ts <= 11667) and (not user_id = 1 or not user_id is not null or not ts >= 11668 or not ts <= 11669) and (not user_id = 1 or not user_id is not null or not ts >= 11670 or not ts <= 11671) and (not user_id = 1 or not user_id is not null or not ts >= 11672 or not ts <= 11673) and (not user_id = 1 or not user_id is not null or not ts >= 11674 or not ts <= 11675) and (not user_id = 1 or not user_id is not null or not ts >= 11676 or not ts <= 11677) and (not user_id = 1 or not user_id is not null or not ts >= 11678 or not ts <= 11679) and (not user_id = 1 or not user_id is not null or not ts >= 11680 or not ts <= 11681) and (not user_id = 1 or not user_id is not null or not ts >= 11682 or not ts <= 11683) and (not user_id = 1 or not user_id is not null or not ts >= 11684 or not ts <= 11685) and (not user_id = 1 or not user_id is not null or not ts >= 11686 or not ts <= 11687) and (not user_id = 1 or not user_id is not null or not ts >= 11688 or not ts <= 11689) and (not user_id = 1 or not user_id is not null or not ts >= 11690 or not ts <= 11691) and (not user_id = 1 or not user_id is not null or not ts >= 11692 or not ts <= 11693) and (not user_id = 1 or not user_id is not null or not ts >= 11694 or not ts <= 11695) and (not user_id = 1 or not user_id is not null or not ts >= 11696 or not ts <= 11697) and (not user_id = 1 or not user_id is not null or not ts >= 11698 or not ts <= 11699) and (not user_id = 1 or not user_id is not null or not ts >= 11700 or not ts <= 11701) and (not user_id = 1 or not user_id is not null or not ts >= 11702 or not ts <= 11703) and (not user_id = 1 or not user_id is not null or not ts >= 11704 or not ts <= 11705) and (not user_id = 1 or not user_id is not null or not ts >= 11706 or not ts <= 11707) and (not user_id = 1 or not user_id is not null or not ts >= 11708 or not ts <= 11709) and (not user_id = 1 or not user_id is not null or not ts >= 11710 or not ts <= 11711) and (not user_id = 1 or not user_id is not null or not ts >= 11712 or not ts <= 11713) and (not user_id = 1 or not user_id is not null or not ts >= 11714 or not ts <= 11715) and (not user_id = 1 or not user_id is not null or not ts >= 11716 or not ts <= 11717) and (not user_id = 1 or not user_id is not null or not ts >= 11718 or not ts <= 11719) and (not user_id = 1 or not user_id is not null or not ts >= 11720 or not ts <= 11721) and (not user_id = 1 or not user_id is not null or not ts >= 11722 or not ts <= 11723) and (not user_id = 1 or not user_id is not null or not ts >= 11724 or not ts <= 11725) and (not user_id = 1 or not user_id is not null or not ts >= 11726 or not ts <= 11727) and (not user_id = 1 or not user_id is not null or not ts >= 11728 or not ts <= 11729) and (not user_id = 1 or not user_id is not null or not ts >= 11730 or not ts <= 11731) and (not user_id = 1 or not user_id is not null or not ts >= 11732 or not ts <= 11733) and (not user_id = 1 or not user_id is not null or not ts >= 11734 or not ts <= 11735) and (not user_id = 1 or not user_id is not null or not ts >= 11736 or not ts <= 11737) and (not user_id = 1 or not user_id is not null or not ts >= 11738 or not ts <= 11739) and (not user_id = 1 or not user_id is not null or not ts >= 11740 or not ts <= 11741) and (not user_id = 1 or not user_id is not null or not ts >= 11742 or not ts <= 11743) and (not user_id = 1 or not user_id is not null or not ts >= 11744 or not ts <= 11745) and (not user_id = 1 or not user_id is not null or not ts >= 11746 or not ts <= 11747) and (not user_id = 1 or not user_id is not null or not ts >= 11748 or not ts <= 11749) and (not user_id = 1 or not user_id is not null or not ts >= 11750 or not ts <= 11751) and (not user_id = 1 or not user_id is not null or not ts >= 11752 or not ts <= 11753) and (not user_id = 1 or not user_id is not null or not ts >= 11754 or not ts <= 11755) and (not user_id = 1 or not user_id is not null or not ts >= 11756 or not ts <= 11757) and (not user_id = 1 or not user_id is not null or not ts >= 11758 or not ts <= 11759) and (not user_id = 1 or not user_id is not null or not ts >= 11760 or not ts <= 11761) and (not user_id = 1 or not user_id is not null or not ts >= 11762 or not ts <= 11763) and (not user_id = 1 or not user_id is not null or not ts >= 11764 or not ts <= 11765) and (not user_id = 1 or not user_id is not null or not ts >= 11766 or not ts <= 11767) and (not user_id = 1 or not user_id is not null or not ts >= 11768 or not ts <= 11769) and (not user_id = 1 or not user_id is not null or not ts >= 11770 or not ts <= 11771) and (not user_id = 1 or not user_id is not null or not ts >= 11772 or not ts <= 11773) and (not user_id = 1 or not user_id is not null or not ts >= 11774 or not ts <= 11775) and (not user_id = 1 or not user_id is not null or not ts >= 11776 or not ts <= 11777) and (not user_id = 1 or not user_id is not null or not ts >= 11778 or not ts <= 11779) and (not user_id = 1 or not user_id is not null or not ts >= 11780 or not ts <= 11781) and (not user_id = 1 or not user_id is not null or not ts >= 11782 or not ts <= 11783) and (not user_id = 1 or not user_id is not null or not ts >= 11784 or not ts <= 11785) and (not user_id = 1 or not user_id is not null or not ts >= 11786 or not ts <= 11787) and (not user_id = 1 or not user_id is not null or not ts >= 11788 or not ts <= 11789) and (not user_id = 1 or not user_id is not null or not ts >= 11790 or not ts <= 11791) and (not user_id = 1 or not user_id is not null or not ts >= 11792 or not ts <= 11793) and (not user_id = 1 or not user_id is not null or not ts >= 11794 or not ts <= 11795) and (not user_id = 1 or not user_id is not null or not ts >= 11796 or not ts <= 11797) and (not user_id = 1 or not user_id is not null or not ts >= 11798 or not ts <= 11799) and (not user_id = 1 or not user_id is not null or not ts >= 11800 or not ts <= 11801) and (not user_id = 1 or not user_id is not null or not ts >= 11802 or not ts <= 11803) and (not user_id = 1 or not user_id is not null or not ts >= 11804 or not ts <= 11805) and (not user_id = 1 or not user_id is not null or not ts >= 11806 or not ts <= 11807) and (not user_id = 1 or not user_id is not null or not ts >= 11808 or not ts <= 11809) and (not user_id = 1 or not user_id is not null or not ts >= 11810 or not ts <= 11811) and (not user_id = 1 or not user_id is not null or not ts >= 11812 or not ts <= 11813) and (not user_id = 1 or not user_id is not null or not ts >= 11814 or not ts <= 11815) and (not user_id = 1 or not user_id is not null or not ts >= 11816 or not ts <= 11817) and (not user_id = 1 or not user_id is not null or not ts >= 11818 or not ts <= 11819) and (not user_id = 1 or not user_id is not null or not ts >= 11820 or not ts <= 11821) and (not user_id = 1 or not user_id is not null or not ts >= 11822 or not ts <= 11823) and (not user_id = 1 or not user_id is not null or not ts >= 11824 or not ts <= 11825) and (not user_id = 1 or not user_id is not null or not ts >= 11826 or not ts <= 11827) and (not user_id = 1 or not user_id is not null or not ts >= 11828 or not ts <= 11829) and (not user_id = 1 or not user_id is not null or not ts >= 11830 or not ts <= 11831) and (not user_id = 1 or not user_id is not null or not ts >= 11832 or not ts <= 11833) and (not user_id = 1 or not user_id is not null or not ts >= 11834 or not ts <= 11835) and (not user_id = 1 or not user_id is not null or not ts >= 11836 or not ts <= 11837) and (not user_id = 1 or not user_id is not null or not ts >= 11838 or not ts <= 11839) and (not user_id = 1 or not user_id is not null or not ts >= 11840 or not ts <= 11841) and (not user_id = 1 or not user_id is not null or not ts >= 11842 or not ts <= 11843) and (not user_id = 1 or not user_id is not null or not ts >= 11844 or not ts <= 11845) and (not user_id = 1 or not user_id is not null or not ts >= 11846 or not ts <= 11847) and (not user_id = 1 or not user_id is not null or not ts >= 11848 or not ts <= 11849) and (not user_id = 1 or not user_id is not null or not ts >= 11850 or not ts <= 11851) and (not user_id = 1 or not user_id is not null or not ts >= 11852 or not ts <= 11853) and (not user_id = 1 or not user_id is not null or not ts >= 11854 or not ts <= 11855) and (not user_id = 1 or not user_id is not null or not ts >= 11856 or not ts <= 11857) and (not user_id = 1 or not user_id is not null or not ts >= 11858 or not ts <= 11859) and (not user_id = 1 or not user_id is not null or not ts >= 11860 or not ts <= 11861) and (not user_id = 1 or not user_id is not null or not ts >= 11862 or not ts <= 11863) and (not user_id = 1 or not user_id is not null or not ts >= 11864 or not ts <= 11865) and (not user_id = 1 or not user_id is not null or not ts >= 11866 or not ts <= 11867) and (not user_id = 1 or not user_id is not null or not ts >= 11868 or not ts <= 11869) and (not user_id = 1 or not user_id is not null or not ts >= 11870 or not ts <= 11871) and (not user_id = 1 or not user_id is not null or not ts >= 11872 or not ts <= 11873) and (not user_id = 1 or not user_id is not null or not ts >= 11874 or not ts <= 11875) and (not user_id = 1 or not user_id is not null or not ts >= 11876 or not ts <= 11877) and (not user_id = 1 or not user_id is not null or not ts >= 11878 or not ts <= 11879) and (not user_id = 1 or not user_id is not null or not ts >= 11880 or not ts <= 11881) and (not user_id = 1 or not user_id is not null or not ts >= 11882 or not ts <= 11883) and (not user_id = 1 or not user_id is not null or not ts >= 11884 or not ts <= 11885) and (not user_id = 1 or not user_id is not null or not ts >= 11886 or not ts <= 11887) and (not user_id = 1 or not user_id is not null or not ts >= 11888 or not ts <= 11889) and (not user_id = 1 or not user_id is not null or not ts >= 11890 or not ts <= 11891) and (not user_id = 1 or not user_id is not null or not ts >= 11892 or not ts <= 11893) and (not user_id = 1 or not user_id is not null or not ts >= 11894 or not ts <= 11895) and (not user_id = 1 or not user_id is not null or not ts >= 11896 or not ts <= 11897) and (not user_id = 1 or not user_id is not null or not ts >= 11898 or not ts <= 11899) and (not user_id = 1 or not user_id is not null or not ts >= 11900 or not ts <= 11901) and (not user_id = 1 or not user_id is not null or not ts >= 11902 or not ts <= 11903) and (not user_id = 1 or not user_id is not null or not ts >= 11904 or not ts <= 11905) and (not user_id = 1 or not user_id is not null or not ts >= 11906 or not ts <= 11907) and (not user_id = 1 or not user_id is not null or not ts >= 11908 or not ts <= 11909) and (not user_id = 1 or not user_id is not null or not ts >= 11910 or not ts <= 11911) and (not user_id = 1 or not user_id is not null or not ts >= 11912 or not ts <= 11913) and (not user_id = 1 or not user_id is not null or not ts >= 11914 or not ts <= 11915) and (not user_id = 1 or not user_id is not null or not ts >= 11916 or not ts <= 11917) and (not user_id = 1 or not user_id is not null or not ts >= 11918 or not ts <= 11919) and (not user_id = 1 or not user_id is not null or not ts >= 11920 or not ts <= 11921) and (not user_id = 1 or not user_id is not null or not ts >= 11922 or not ts <= 11923) and (not user_id = 1 or not user_id is not null or not ts >= 11924 or not ts <= 11925) and (not user_id = 1 or not user_id is not null or not ts >= 11926 or not ts <= 11927) and (not user_id = 1 or not user_id is not null or not ts >= 11928 or not ts <= 11929) and (not user_id = 1 or not user_id is not null or not ts >= 11930 or not ts <= 11931) and (not user_id = 1 or not user_id is not null or not ts >= 11932 or not ts <= 11933) and (not user_id = 1 or not user_id is not null or not ts >= 11934 or not ts <= 11935) and (not user_id = 1 or not user_id is not null or not ts >= 11936 or not ts <= 11937) and (not user_id = 1 or not user_id is not null or not ts >= 11938 or not ts <= 11939) and (not user_id = 1 or not user_id is not null or not ts >= 11940 or not ts <= 11941) and (not user_id = 1 or not user_id is not null or not ts >= 11942 or not ts <= 11943) and (not user_id = 1 or not user_id is not null or not ts >= 11944 or not ts <= 11945) and (not user_id = 1 or not user_id is not null or not ts >= 11946 or not ts <= 11947) and (not user_id = 1 or not user_id is not null or not ts >= 11948 or not ts <= 11949) and (not user_id = 1 or not user_id is not null or not ts >= 11950 or not ts <= 11951) and (not user_id = 1 or not user_id is not null or not ts >= 11952 or not ts <= 11953) and (not user_id = 1 or not user_id is not null or not ts >= 11954 or not ts <= 11955) and (not user_id = 1 or not user_id is not null or not ts >= 11956 or not ts <= 11957) and (not user_id = 1 or not user_id is not null or not ts >= 11958 or not ts <= 11959) and (not user_id = 1 or not user_id is not null or not ts >= 11960 or not ts <= 11961) and (not user_id = 1 or not user_id is not null or not ts >= 11962 or not ts <= 11963) and (not user_id = 1 or not user_id is not null or not ts >= 11964 or not ts <= 11965) and (not user_id = 1 or not user_id is not null or not ts >= 11966 or not ts <= 11967) and (not user_id = 1 or not user_id is not null or not ts >= 11968 or not ts <= 11969) and (not user_id = 1 or not user_id is not null or not ts >= 11970 or not ts <= 11971) and (not user_id = 1 or not user_id is not null or not ts >= 11972 or not ts <= 11973) and (not user_id = 1 or not user_id is not null or not ts >= 11974 or not ts <= 11975) and (not user_id = 1 or not user_id is not null or not ts >= 11976 or not ts <= 11977) and (not user_id = 1 or not user_id is not null or not ts >= 11978 or not ts <= 11979) and (not user_id = 1 or not user_id is not null or not ts >= 11980 or not ts <= 11981) and (not user_id = 1 or not user_id is not null or not ts >= 11982 or not ts <= 11983) and (not user_id = 1 or not user_id is not null or not ts >= 11984 or not ts <= 11985) and (not user_id = 1 or not user_id is not null or not ts >= 11986 or not ts <= 11987) and (not user_id = 1 or not user_id is not null or not ts >= 11988 or not ts <= 11989) and (not user_id = 1 or not user_id is not null or not ts >= 11990 or not ts <= 11991) and (not user_id = 1 or not user_id is not null or not ts >= 11992 or not ts <= 11993) and ts >= 113898 and parent_id = 1 order by ts asc limit 100", - "ResultColumns": 1, - "Table": "`user`" + "ResultColumns": 1 } ] }, @@ -4820,7 +4621,6 @@ }, "FieldQuery": "select 1 from `user` where 1 != 1", "Query": "select 1 from `user` where id = 12 and exists (select 1 from music where user_id = 12 union select 1 from user_extra where user_id = 12)", - "Table": "`user`", "Values": [ "12" ], @@ -4849,7 +4649,6 @@ }, "FieldQuery": "select 1 from `user` where 1 != 1", "Query": "select 1 from `user` where (id, col) in ::vals", - "Table": "`user`", "Values": [ "vals:0" ], @@ -4877,7 +4676,6 @@ }, "FieldQuery": "select 1 from `user` where 1 != 1", "Query": "select 1 from `user` where (col, id) in ::vals", - "Table": "`user`", "Values": [ "vals:1" ], @@ -4905,7 +4703,6 @@ }, "FieldQuery": "select 1 from multicol_tbl where 1 != 1", "Query": "select 1 from multicol_tbl where (cola, colb) in ::vals", - "Table": "multicol_tbl", "Values": [ "vals:0", "vals:1" @@ -4934,7 +4731,6 @@ }, "FieldQuery": "select 1 from multicol_tbl where 1 != 1", "Query": "select 1 from multicol_tbl where cola in ::__vals0", - "Table": "multicol_tbl", "Values": [ "::vals" ], @@ -4962,7 +4758,6 @@ }, "FieldQuery": "select 1 from multicol_tbl where 1 != 1", "Query": "select 1 from multicol_tbl where (cola, colx, colb) in ::vals", - "Table": "multicol_tbl", "Values": [ "vals:0", "vals:2" @@ -4991,7 +4786,6 @@ }, "FieldQuery": "select 1 from multicol_tbl where 1 != 1", "Query": "select 1 from multicol_tbl where (colb, colx, cola) in ::vals", - "Table": "multicol_tbl", "Values": [ "vals:2", "vals:0" @@ -5020,7 +4814,6 @@ }, "FieldQuery": "select col from `user` where 1 != 1", "Query": "select col from `user` where id = 1 order by `user`.user_id asc", - "Table": "`user`", "Values": [ "1" ], @@ -5047,7 +4840,6 @@ }, "FieldQuery": "select col from `user` where 1 != 1 group by `user`.user_id", "Query": "select col from `user` where id = 1 group by `user`.user_id", - "Table": "`user`", "Values": [ "1" ], @@ -5074,7 +4866,6 @@ }, "FieldQuery": "select user_id, col1, col2 from authoritative where 1 != 1", "Query": "select user_id, col1, col2 from authoritative where user_id = 5 order by authoritative.user_id asc", - "Table": "authoritative", "Values": [ "5" ], @@ -5101,7 +4892,6 @@ }, "FieldQuery": "select user_id, col1, col2 from authoritative where 1 != 1 group by user_id", "Query": "select user_id, col1, col2 from authoritative where user_id = 5 group by user_id having count(user_id) = 6 order by authoritative.user_id asc", - "Table": "authoritative", "Values": [ "5" ], @@ -5128,7 +4918,6 @@ }, "FieldQuery": "select id from unq_binary_idx where 1 != 1", "Query": "select id from unq_binary_idx where id between 1 and 5", - "Table": "unq_binary_idx", "Values": [ "(1, 5)" ], @@ -5154,8 +4943,7 @@ "Sharded": true }, "FieldQuery": "select id from customer where 1 != 1", - "Query": "select id from customer where id between 1 and 5", - "Table": "customer" + "Query": "select id from customer where id between 1 and 5" }, "TablesUsed": [ "user.customer" @@ -5177,8 +4965,7 @@ "Sharded": true }, "FieldQuery": "select id, col1 from unq_binary_idx where 1 != 1", - "Query": "select id, col1 from unq_binary_idx where col1 between 10 and 50", - "Table": "unq_binary_idx" + "Query": "select id, col1 from unq_binary_idx where col1 between 10 and 50" }, "TablesUsed": [ "user.unq_binary_idx" @@ -5200,8 +4987,7 @@ "Sharded": true }, "FieldQuery": "select cola, colb, colc from multicol_tbl where 1 != 1", - "Query": "select cola, colb, colc from multicol_tbl where cola between 1 and 5", - "Table": "multicol_tbl" + "Query": "select cola, colb, colc from multicol_tbl where cola between 1 and 5" }, "TablesUsed": [ "user.multicol_tbl" @@ -5224,7 +5010,6 @@ "se_end": 3, "se_start": 2 }, - "TableName": "sales_extra_sales", "Inputs": [ { "OperatorType": "Route", @@ -5234,8 +5019,7 @@ "Sharded": true }, "FieldQuery": "select se.colb, se.cola, se.`start`, se.`end` from sales_extra as se where 1 != 1", - "Query": "select se.colb, se.cola, se.`start`, se.`end` from sales_extra as se", - "Table": "sales_extra" + "Query": "select se.colb, se.cola, se.`start`, se.`end` from sales_extra as se" }, { "OperatorType": "Route", @@ -5246,7 +5030,6 @@ }, "FieldQuery": "select s.oid, s.col1 from sales as s where 1 != 1", "Query": "select s.oid, s.col1 from sales as s where s.oid between :se_start /* INT16 */ and :se_end /* INT16 */ and s.col1 = :se_cola /* VARCHAR */", - "Table": "sales", "Values": [ "(:se_start, :se_end)" ], diff --git a/go/vt/vtgate/planbuilder/testdata/foreignkey_cases.json b/go/vt/vtgate/planbuilder/testdata/foreignkey_cases.json index 74a53146278..024a71017dc 100644 --- a/go/vt/vtgate/planbuilder/testdata/foreignkey_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/foreignkey_cases.json @@ -19,7 +19,6 @@ "Sharded": true }, "Query": "insert into tbl2(col2, coly) values (:_col2_0, 3)", - "TableName": "tbl2", "VindexValues": { "hash_vin": "1" } @@ -44,7 +43,6 @@ "Sharded": true }, "Query": "insert into multicol_tbl2(cola, colb, colc) values (:_cola_0, :_colb_0, :_colc_0)", - "TableName": "multicol_tbl2", "VindexValues": { "multicolIdx": "1, 2, 3" } @@ -84,7 +82,6 @@ }, "FieldQuery": "select multicol_tbl1.colb, multicol_tbl1.cola, multicol_tbl1.y, multicol_tbl1.colc, multicol_tbl1.x from multicol_tbl1 where 1 != 1", "Query": "select multicol_tbl1.colb, multicol_tbl1.cola, multicol_tbl1.y, multicol_tbl1.colc, multicol_tbl1.x from multicol_tbl1 where cola = 1 and colb = 2 and colc = 3 for update", - "Table": "multicol_tbl1", "Values": [ "1", "2", @@ -109,7 +106,6 @@ 4 ], "Query": "delete from multicol_tbl2 where (colb, cola, x, colc, y) in ::fkc_vals", - "Table": "multicol_tbl2", "Values": [ "fkc_vals:1", "fkc_vals:0", @@ -126,7 +122,6 @@ "Sharded": true }, "Query": "delete from multicol_tbl1 where cola = 1 and colb = 2 and colc = 3", - "Table": "multicol_tbl1", "Values": [ "1", "2", @@ -161,8 +156,7 @@ "Sharded": true }, "FieldQuery": "select tbl5.col5, tbl5.t5col5 from tbl5 where 1 != 1", - "Query": "select tbl5.col5, tbl5.t5col5 from tbl5 for update", - "Table": "tbl5" + "Query": "select tbl5.col5, tbl5.t5col5 from tbl5 for update" }, { "InputName": "CascadeChild-1", @@ -177,7 +171,6 @@ 0 ], "Query": "delete from tbl4 where (col4) in ::fkc_vals", - "Table": "tbl4", "Values": [ "fkc_vals:0" ], @@ -195,8 +188,7 @@ "Cols": [ 1 ], - "Query": "delete from tbl4 where (t4col4) in ::fkc_vals1", - "Table": "tbl4" + "Query": "delete from tbl4 where (t4col4) in ::fkc_vals1" }, { "InputName": "Parent", @@ -206,8 +198,7 @@ "Name": "sharded_fk_allow", "Sharded": true }, - "Query": "delete from tbl5", - "Table": "tbl5" + "Query": "delete from tbl5" } ] }, @@ -241,8 +232,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl9.col9 from u_tbl9 where 1 != 1", - "Query": "select u_tbl9.col9 from u_tbl9 where col9 = 5 for update nowait", - "Table": "u_tbl9" + "Query": "select u_tbl9.col9 from u_tbl9 where col9 = 5 for update nowait" }, { "InputName": "CascadeChild-1", @@ -256,8 +246,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl8 set col8 = null where (col8) in ::fkc_vals", - "Table": "u_tbl8" + "Query": "update u_tbl8 set col8 = null where (col8) in ::fkc_vals" }, { "InputName": "Parent", @@ -267,8 +256,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "delete from u_tbl9 where col9 = 5", - "Table": "u_tbl9" + "Query": "delete from u_tbl9 where col9 = 5" } ] }, @@ -292,8 +280,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_tbl5 set col5 = 'foo' where id = 1", - "Table": "u_tbl5" + "Query": "update u_tbl5 set col5 = 'foo' where id = 1" }, "TablesUsed": [ "unsharded_fk_allow.u_tbl5" @@ -319,8 +306,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2 from u_tbl2 where id = 1 for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2 from u_tbl2 where id = 1 for update" }, { "InputName": "CascadeChild-1", @@ -334,8 +320,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals and (col3) not in ((cast('bar' as CHAR)))", - "Table": "u_tbl3" + "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals and (col3) not in ((cast('bar' as CHAR)))" }, { "InputName": "Parent", @@ -345,8 +330,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_tbl2 set col2 = 'bar' where id = 1", - "Table": "u_tbl2" + "Query": "update u_tbl2 set col2 = 'bar' where id = 1" } ] }, @@ -370,8 +354,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_tbl2 set col_no_ref = 'baz' where id = 1", - "Table": "u_tbl2" + "Query": "update u_tbl2 set col_no_ref = 'baz' where id = 1" }, "TablesUsed": [ "unsharded_fk_allow.u_tbl2" @@ -397,8 +380,7 @@ "Name": "sharded_fk_allow", "Sharded": true }, - "Query": "update tbl1 set not_ref_col = 'foo' where id = 1", - "Table": "tbl1" + "Query": "update tbl1 set not_ref_col = 'foo' where id = 1" }, "TablesUsed": [ "sharded_fk_allow.tbl1" @@ -429,8 +411,7 @@ "Sharded": true }, "FieldQuery": "select tbl5.t5col5 from tbl5 where 1 != 1", - "Query": "select tbl5.t5col5 from tbl5 for update", - "Table": "tbl5" + "Query": "select tbl5.t5col5 from tbl5 for update" }, { "InputName": "CascadeChild-1", @@ -444,8 +425,7 @@ "Cols": [ 0 ], - "Query": "update tbl4 set t4col4 = null where (t4col4) in ::fkc_vals and (t4col4) not in (('foo'))", - "Table": "tbl4" + "Query": "update tbl4 set t4col4 = null where (t4col4) in ::fkc_vals and (t4col4) not in (('foo'))" }, { "InputName": "Parent", @@ -455,8 +435,7 @@ "Name": "sharded_fk_allow", "Sharded": true }, - "Query": "update tbl5 set t5col5 = 'foo'", - "Table": "tbl5" + "Query": "update tbl5 set t5col5 = 'foo'" } ] }, @@ -485,8 +464,7 @@ "Name": "sharded_fk_allow", "Sharded": true }, - "Query": "update tbl2 set col = 'foo'", - "Table": "tbl2" + "Query": "update tbl2 set col = 'foo'" }, "TablesUsed": [ "sharded_fk_allow.tbl2" @@ -522,7 +500,6 @@ "OperatorType": "Join", "Variant": "LeftJoin", "JoinColumnIndexes": "R:0", - "TableName": "tbl10_tbl3", "Inputs": [ { "OperatorType": "Route", @@ -532,8 +509,7 @@ "Sharded": true }, "FieldQuery": "select 1 from tbl10 where 1 != 1", - "Query": "select 1 from tbl10 where not (tbl10.col) <=> ('foo') for share", - "Table": "tbl10" + "Query": "select 1 from tbl10 where not (tbl10.col) <=> ('foo') for share" }, { "OperatorType": "Route", @@ -543,8 +519,7 @@ "Sharded": true }, "FieldQuery": "select tbl3.col from tbl3 where 1 != 1", - "Query": "select tbl3.col from tbl3 where tbl3.col = 'foo' for share", - "Table": "tbl3" + "Query": "select tbl3.col from tbl3 where tbl3.col = 'foo' for share" } ] } @@ -562,8 +537,7 @@ "Name": "sharded_fk_allow", "Sharded": true }, - "Query": "update tbl10 set col = 'foo'", - "Table": "tbl10" + "Query": "update tbl10 set col = 'foo'" } ] }, @@ -598,7 +572,6 @@ }, "FieldQuery": "select tbl9.col9 from tbl9 where 1 != 1", "Query": "select tbl9.col9 from tbl9 where col9 = 34 for update", - "Table": "tbl9", "Values": [ "34" ], @@ -616,8 +589,7 @@ "Cols": [ 0 ], - "Query": "update tbl4 set col_ref = null where (col_ref) in ::fkc_vals", - "Table": "tbl4" + "Query": "update tbl4 set col_ref = null where (col_ref) in ::fkc_vals" }, { "InputName": "Parent", @@ -628,7 +600,6 @@ "Sharded": true }, "Query": "delete from tbl9 where col9 = 34", - "Table": "tbl9", "Values": [ "34" ], @@ -661,8 +632,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl1.col1 from u_tbl1 where 1 != 1", - "Query": "select u_tbl1.col1 from u_tbl1 for update", - "Table": "u_tbl1" + "Query": "select u_tbl1.col1 from u_tbl1 for update" }, { "InputName": "CascadeChild-1", @@ -681,8 +651,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update" }, { "InputName": "CascadeChild-1", @@ -696,8 +665,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals1 and (col3) not in ((cast('foo' as CHAR)))", - "Table": "u_tbl3" + "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals1 and (col3) not in ((cast('foo' as CHAR)))" }, { "InputName": "Parent", @@ -707,8 +675,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set col2 = 'foo' where (col2) in ::fkc_vals", - "Table": "u_tbl2" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set col2 = 'foo' where (col2) in ::fkc_vals" } ] }, @@ -729,8 +696,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl9.col9 from u_tbl9 where 1 != 1", - "Query": "select u_tbl9.col9 from u_tbl9 where (col9) in ::fkc_vals2 and (col9) not in ((cast('foo' as CHAR))) for update nowait", - "Table": "u_tbl9" + "Query": "select u_tbl9.col9 from u_tbl9 where (col9) in ::fkc_vals2 and (col9) not in ((cast('foo' as CHAR))) for update nowait" }, { "InputName": "CascadeChild-1", @@ -744,8 +710,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl8 set col8 = null where (col8) in ::fkc_vals3", - "Table": "u_tbl8" + "Query": "update u_tbl8 set col8 = null where (col8) in ::fkc_vals3" }, { "InputName": "Parent", @@ -755,8 +720,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_tbl9 set col9 = null where (col9) in ::fkc_vals2 and (col9) not in ((cast('foo' as CHAR)))", - "Table": "u_tbl9" + "Query": "update u_tbl9 set col9 = null where (col9) in ::fkc_vals2 and (col9) not in ((cast('foo' as CHAR)))" } ] }, @@ -768,8 +732,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_tbl1 set col1 = 'foo'", - "Table": "u_tbl1" + "Query": "update u_tbl1 set col1 = 'foo'" } ] }, @@ -801,8 +764,7 @@ "Sharded": false }, "FieldQuery": "select 1 from u_tbl2 left join u_tbl1 on u_tbl1.col1 = cast(u_tbl2.col1 + 'bar' as CHAR) where 1 != 1", - "Query": "select 1 from u_tbl2 left join u_tbl1 on u_tbl1.col1 = cast(u_tbl2.col1 + 'bar' as CHAR) where u_tbl1.col1 is null and cast(u_tbl2.col1 + 'bar' as CHAR) is not null and not (u_tbl2.col2) <=> (cast(u_tbl2.col1 + 'bar' as CHAR)) and u_tbl2.id = 1 limit 1 for share", - "Table": "u_tbl1, u_tbl2" + "Query": "select 1 from u_tbl2 left join u_tbl1 on u_tbl1.col1 = cast(u_tbl2.col1 + 'bar' as CHAR) where u_tbl1.col1 is null and cast(u_tbl2.col1 + 'bar' as CHAR) is not null and not (u_tbl2.col2) <=> (cast(u_tbl2.col1 + 'bar' as CHAR)) and u_tbl2.id = 1 limit 1 for share" }, { "InputName": "PostVerify", @@ -817,8 +779,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2, col2 <=> cast(col1 + 'bar' as CHAR), cast(col1 + 'bar' as CHAR) from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2, col2 <=> cast(col1 + 'bar' as CHAR), cast(col1 + 'bar' as CHAR) from u_tbl2 where id = 1 for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2, col2 <=> cast(col1 + 'bar' as CHAR), cast(col1 + 'bar' as CHAR) from u_tbl2 where id = 1 for update" }, { "InputName": "CascadeChild-1", @@ -839,8 +800,7 @@ "UpdateExprBvName": "fkc_upd" } ], - "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals and (:fkc_upd is null or (col3) not in ((:fkc_upd)))", - "Table": "u_tbl3" + "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals and (:fkc_upd is null or (col3) not in ((:fkc_upd)))" }, { "InputName": "Parent", @@ -850,8 +810,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set m = 2, col2 = col1 + 'bar' where id = 1", - "Table": "u_tbl2" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set m = 2, col2 = col1 + 'bar' where id = 1" } ] } @@ -883,8 +842,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl1.col1, col1 <=> cast(x + 'bar' as CHAR), cast(x + 'bar' as CHAR) from u_tbl1 where 1 != 1", - "Query": "select u_tbl1.col1, col1 <=> cast(x + 'bar' as CHAR), cast(x + 'bar' as CHAR) from u_tbl1 where id = 1 for update", - "Table": "u_tbl1" + "Query": "select u_tbl1.col1, col1 <=> cast(x + 'bar' as CHAR), cast(x + 'bar' as CHAR) from u_tbl1 where id = 1 for update" }, { "InputName": "CascadeChild-1", @@ -910,8 +868,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update" }, { "InputName": "CascadeChild-1", @@ -925,8 +882,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals1 and (cast(:fkc_upd as CHAR) is null or (col3) not in ((cast(:fkc_upd as CHAR))))", - "Table": "u_tbl3" + "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals1 and (cast(:fkc_upd as CHAR) is null or (col3) not in ((cast(:fkc_upd as CHAR))))" }, { "InputName": "Parent", @@ -936,8 +892,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set col2 = :fkc_upd where (col2) in ::fkc_vals", - "Table": "u_tbl2" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set col2 = :fkc_upd where (col2) in ::fkc_vals" } ] }, @@ -965,8 +920,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl9.col9 from u_tbl9 where 1 != 1", - "Query": "select u_tbl9.col9 from u_tbl9 where (col9) in ::fkc_vals2 and (:fkc_upd1 is null or (col9) not in ((:fkc_upd1))) for update nowait", - "Table": "u_tbl9" + "Query": "select u_tbl9.col9 from u_tbl9 where (col9) in ::fkc_vals2 and (:fkc_upd1 is null or (col9) not in ((:fkc_upd1))) for update nowait" }, { "InputName": "CascadeChild-1", @@ -980,8 +934,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl8 set col8 = null where (col8) in ::fkc_vals3", - "Table": "u_tbl8" + "Query": "update u_tbl8 set col8 = null where (col8) in ::fkc_vals3" }, { "InputName": "Parent", @@ -991,8 +944,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_tbl9 set col9 = null where (col9) in ::fkc_vals2 and (:fkc_upd1 is null or (col9) not in ((:fkc_upd1)))", - "Table": "u_tbl9" + "Query": "update u_tbl9 set col9 = null where (col9) in ::fkc_vals2 and (:fkc_upd1 is null or (col9) not in ((:fkc_upd1)))" } ] }, @@ -1004,8 +956,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl1 set m = 2, col1 = x + 'bar' where id = 1", - "Table": "u_tbl1" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl1 set m = 2, col1 = x + 'bar' where id = 1" } ] }, @@ -1037,8 +988,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2 from u_tbl2 where id = 1 for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2 from u_tbl2 where id = 1 for update" }, { "InputName": "CascadeChild-1", @@ -1052,8 +1002,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals and (col3) not in ((cast(2 as CHAR)))", - "Table": "u_tbl3" + "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals and (col3) not in ((cast(2 as CHAR)))" }, { "InputName": "Parent", @@ -1063,8 +1012,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_tbl2 set m = col1 + 'bar', col2 = 2 where id = 1", - "Table": "u_tbl2" + "Query": "update u_tbl2 set m = col1 + 'bar', col2 = 2 where id = 1" } ] }, @@ -1093,8 +1041,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl1.col1 from u_tbl1 where 1 != 1", - "Query": "select u_tbl1.col1 from u_tbl1 where id = 1 for update", - "Table": "u_tbl1" + "Query": "select u_tbl1.col1 from u_tbl1 where id = 1 for update" }, { "InputName": "CascadeChild-1", @@ -1113,8 +1060,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update" }, { "InputName": "CascadeChild-1", @@ -1128,8 +1074,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals1 and (col3) not in ((cast(2 as CHAR)))", - "Table": "u_tbl3" + "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals1 and (col3) not in ((cast(2 as CHAR)))" }, { "InputName": "Parent", @@ -1139,8 +1084,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set col2 = 2 where (col2) in ::fkc_vals", - "Table": "u_tbl2" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set col2 = 2 where (col2) in ::fkc_vals" } ] }, @@ -1161,8 +1105,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl9.col9 from u_tbl9 where 1 != 1", - "Query": "select u_tbl9.col9 from u_tbl9 where (col9) in ::fkc_vals2 and (col9) not in ((cast(2 as CHAR))) for update nowait", - "Table": "u_tbl9" + "Query": "select u_tbl9.col9 from u_tbl9 where (col9) in ::fkc_vals2 and (col9) not in ((cast(2 as CHAR))) for update nowait" }, { "InputName": "CascadeChild-1", @@ -1176,8 +1119,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl8 set col8 = null where (col8) in ::fkc_vals3", - "Table": "u_tbl8" + "Query": "update u_tbl8 set col8 = null where (col8) in ::fkc_vals3" }, { "InputName": "Parent", @@ -1187,8 +1129,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_tbl9 set col9 = null where (col9) in ::fkc_vals2 and (col9) not in ((cast(2 as CHAR)))", - "Table": "u_tbl9" + "Query": "update u_tbl9 set col9 = null where (col9) in ::fkc_vals2 and (col9) not in ((cast(2 as CHAR)))" } ] }, @@ -1200,8 +1141,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_tbl1 set m = x + 'bar', col1 = 2 where id = 1", - "Table": "u_tbl1" + "Query": "update u_tbl1 set m = x + 'bar', col1 = 2 where id = 1" } ] }, @@ -1240,8 +1180,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.id from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.id from u_tbl2 limit 2 for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.id from u_tbl2 limit 2 for update" }, { "OperatorType": "FkCascade", @@ -1255,8 +1194,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2 from u_tbl2 where u_tbl2.id in ::dml_vals for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2 from u_tbl2 where u_tbl2.id in ::dml_vals for update" }, { "InputName": "CascadeChild-1", @@ -1270,8 +1208,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals", - "Table": "u_tbl3" + "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals" }, { "InputName": "Parent", @@ -1281,8 +1218,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "delete from u_tbl2 where u_tbl2.id in ::dml_vals", - "Table": "u_tbl2" + "Query": "delete from u_tbl2 where u_tbl2.id in ::dml_vals" } ] } @@ -1326,7 +1262,6 @@ "JoinVars": { "tbl3_colx": 0 }, - "TableName": "tbl3_tbl1", "Inputs": [ { "OperatorType": "Route", @@ -1336,8 +1271,7 @@ "Sharded": true }, "FieldQuery": "select tbl3.colx from tbl3 where 1 != 1", - "Query": "select tbl3.colx from tbl3 where tbl3.colx + 10 is not null and not (tbl3.coly) <=> (tbl3.colx + 10) and tbl3.coly = 10 for share", - "Table": "tbl3" + "Query": "select tbl3.colx from tbl3 where tbl3.colx + 10 is not null and not (tbl3.coly) <=> (tbl3.colx + 10) and tbl3.coly = 10 for share" }, { "OperatorType": "Route", @@ -1347,8 +1281,7 @@ "Sharded": true }, "FieldQuery": "select tbl1.t1col1 from tbl1 where 1 != 1", - "Query": "select tbl1.t1col1 from tbl1 where tbl1.t1col1 = :tbl3_colx + 10 for share", - "Table": "tbl1" + "Query": "select tbl1.t1col1 from tbl1 where tbl1.t1col1 = :tbl3_colx + 10 for share" } ] } @@ -1366,8 +1299,7 @@ "Name": "sharded_fk_allow", "Sharded": true }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ tbl3 set coly = colx + 10 where coly = 10", - "Table": "tbl3" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ tbl3 set coly = colx + 10 where coly = 10" } ] }, @@ -1406,7 +1338,6 @@ "OperatorType": "Join", "Variant": "LeftJoin", "JoinColumnIndexes": "R:0", - "TableName": "tbl3_tbl1", "Inputs": [ { "OperatorType": "Route", @@ -1416,8 +1347,7 @@ "Sharded": true }, "FieldQuery": "select 1 from tbl3 where 1 != 1", - "Query": "select 1 from tbl3 where not (tbl3.coly) <=> (20) and tbl3.coly = 10 for share", - "Table": "tbl3" + "Query": "select 1 from tbl3 where not (tbl3.coly) <=> (20) and tbl3.coly = 10 for share" }, { "OperatorType": "Route", @@ -1427,8 +1357,7 @@ "Sharded": true }, "FieldQuery": "select tbl1.t1col1 from tbl1 where 1 != 1", - "Query": "select tbl1.t1col1 from tbl1 where tbl1.t1col1 = 20 for share", - "Table": "tbl1" + "Query": "select tbl1.t1col1 from tbl1 where tbl1.t1col1 = 20 for share" } ] } @@ -1446,8 +1375,7 @@ "Name": "sharded_fk_allow", "Sharded": true }, - "Query": "update tbl3 set coly = 20 where coly = 10", - "Table": "tbl3" + "Query": "update tbl3 set coly = 20 where coly = 10" } ] }, @@ -1476,8 +1404,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl6.col6 from u_tbl6 where 1 != 1", - "Query": "select u_tbl6.col6 from u_tbl6 for update", - "Table": "u_tbl6" + "Query": "select u_tbl6.col6 from u_tbl6 for update" }, { "InputName": "CascadeChild-1", @@ -1496,8 +1423,7 @@ "Sharded": false }, "FieldQuery": "select 1 from u_tbl8 left join u_tbl9 on u_tbl9.col9 = cast('foo' as CHAR) where 1 != 1", - "Query": "select 1 from u_tbl8 left join u_tbl9 on u_tbl9.col9 = cast('foo' as CHAR) where u_tbl9.col9 is null and not (u_tbl8.col8) <=> (cast('foo' as CHAR)) and (u_tbl8.col8) in ::fkc_vals limit 1 for share nowait", - "Table": "u_tbl8, u_tbl9" + "Query": "select 1 from u_tbl8 left join u_tbl9 on u_tbl9.col9 = cast('foo' as CHAR) where u_tbl9.col9 is null and not (u_tbl8.col8) <=> (cast('foo' as CHAR)) and (u_tbl8.col8) in ::fkc_vals limit 1 for share nowait" }, { "InputName": "PostVerify", @@ -1507,8 +1433,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl8 set col8 = 'foo' where (col8) in ::fkc_vals", - "Table": "u_tbl8" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl8 set col8 = 'foo' where (col8) in ::fkc_vals" } ] }, @@ -1520,8 +1445,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_tbl6 set col6 = 'foo'", - "Table": "u_tbl6" + "Query": "update u_tbl6 set col6 = 'foo'" } ] }, @@ -1551,8 +1475,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl7.col7 from u_tbl7 where 1 != 1", - "Query": "select u_tbl7.col7 from u_tbl7 for update", - "Table": "u_tbl7" + "Query": "select u_tbl7.col7 from u_tbl7 for update" }, { "InputName": "CascadeChild-1", @@ -1571,8 +1494,7 @@ "Sharded": false }, "FieldQuery": "select 1 from u_tbl4 left join u_tbl3 on u_tbl3.col3 = cast('foo' as CHAR) where 1 != 1", - "Query": "select 1 from u_tbl4 left join u_tbl3 on u_tbl3.col3 = cast('foo' as CHAR) where u_tbl3.col3 is null and not (u_tbl4.col4) <=> (cast('foo' as CHAR)) and (u_tbl4.col4) in ::fkc_vals limit 1 for share", - "Table": "u_tbl3, u_tbl4" + "Query": "select 1 from u_tbl4 left join u_tbl3 on u_tbl3.col3 = cast('foo' as CHAR) where u_tbl3.col3 is null and not (u_tbl4.col4) <=> (cast('foo' as CHAR)) and (u_tbl4.col4) in ::fkc_vals limit 1 for share" }, { "InputName": "VerifyChild-2", @@ -1583,8 +1505,7 @@ "Sharded": false }, "FieldQuery": "select 1 from u_tbl4, u_tbl9 where 1 != 1", - "Query": "select 1 from u_tbl4, u_tbl9 where u_tbl4.col4 = u_tbl9.col9 and (u_tbl4.col4) in ::fkc_vals and (u_tbl9.col9) not in ((cast('foo' as CHAR))) limit 1 for share", - "Table": "u_tbl4, u_tbl9" + "Query": "select 1 from u_tbl4, u_tbl9 where u_tbl4.col4 = u_tbl9.col9 and (u_tbl4.col4) in ::fkc_vals and (u_tbl9.col9) not in ((cast('foo' as CHAR))) limit 1 for share" }, { "InputName": "PostVerify", @@ -1594,8 +1515,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl4 set col4 = 'foo' where (col4) in ::fkc_vals", - "Table": "u_tbl4" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl4 set col4 = 'foo' where (col4) in ::fkc_vals" } ] }, @@ -1607,8 +1527,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_tbl7 set col7 = 'foo'", - "Table": "u_tbl7" + "Query": "update u_tbl7 set col7 = 'foo'" } ] }, @@ -1639,8 +1558,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl7.col7 from u_tbl7 where 1 != 1", - "Query": "select u_tbl7.col7 from u_tbl7 for update", - "Table": "u_tbl7" + "Query": "select u_tbl7.col7 from u_tbl7 for update" }, { "InputName": "CascadeChild-1", @@ -1659,8 +1577,7 @@ "Sharded": false }, "FieldQuery": "select 1 from u_tbl4 left join u_tbl3 on u_tbl3.col3 = cast(:v1 as CHAR) where 1 != 1", - "Query": "select 1 from u_tbl4 left join u_tbl3 on u_tbl3.col3 = cast(:v1 as CHAR) where u_tbl3.col3 is null and cast(:v1 as CHAR) is not null and not (u_tbl4.col4) <=> (cast(:v1 as CHAR)) and (u_tbl4.col4) in ::fkc_vals limit 1 for share", - "Table": "u_tbl3, u_tbl4" + "Query": "select 1 from u_tbl4 left join u_tbl3 on u_tbl3.col3 = cast(:v1 as CHAR) where u_tbl3.col3 is null and cast(:v1 as CHAR) is not null and not (u_tbl4.col4) <=> (cast(:v1 as CHAR)) and (u_tbl4.col4) in ::fkc_vals limit 1 for share" }, { "InputName": "VerifyChild-2", @@ -1671,8 +1588,7 @@ "Sharded": false }, "FieldQuery": "select 1 from u_tbl4, u_tbl9 where 1 != 1", - "Query": "select 1 from u_tbl4, u_tbl9 where u_tbl4.col4 = u_tbl9.col9 and (u_tbl4.col4) in ::fkc_vals and (cast(:v1 as CHAR) is null or (u_tbl9.col9) not in ((cast(:v1 as CHAR)))) limit 1 for share", - "Table": "u_tbl4, u_tbl9" + "Query": "select 1 from u_tbl4, u_tbl9 where u_tbl4.col4 = u_tbl9.col9 and (u_tbl4.col4) in ::fkc_vals and (cast(:v1 as CHAR) is null or (u_tbl9.col9) not in ((cast(:v1 as CHAR)))) limit 1 for share" }, { "InputName": "PostVerify", @@ -1682,8 +1598,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl4 set col4 = :v1 where (col4) in ::fkc_vals", - "Table": "u_tbl4" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl4 set col4 = :v1 where (col4) in ::fkc_vals" } ] }, @@ -1695,8 +1610,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_tbl7 set col7 = :v1", - "Table": "u_tbl7" + "Query": "update u_tbl7 set col7 = :v1" } ] }, @@ -1727,8 +1641,7 @@ "Sharded": false }, "NoAutoCommit": true, - "Query": "insert into u_tbl1(id, col1) values (1, 3)", - "TableName": "u_tbl1" + "Query": "insert into u_tbl1(id, col1) values (1, 3)" }, { "InputName": "Update-1", @@ -1743,8 +1656,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl1.col1 from u_tbl1 where 1 != 1", - "Query": "select u_tbl1.col1 from u_tbl1 where id = 1 for update", - "Table": "u_tbl1" + "Query": "select u_tbl1.col1 from u_tbl1 where id = 1 for update" }, { "InputName": "CascadeChild-1", @@ -1763,8 +1675,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update" }, { "InputName": "CascadeChild-1", @@ -1778,8 +1689,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals1 and (col3) not in ((cast(5 as CHAR)))", - "Table": "u_tbl3" + "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals1 and (col3) not in ((cast(5 as CHAR)))" }, { "InputName": "Parent", @@ -1789,8 +1699,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set col2 = 5 where (col2) in ::fkc_vals", - "Table": "u_tbl2" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set col2 = 5 where (col2) in ::fkc_vals" } ] }, @@ -1811,8 +1720,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl9.col9 from u_tbl9 where 1 != 1", - "Query": "select u_tbl9.col9 from u_tbl9 where (col9) in ::fkc_vals2 and (col9) not in ((cast(5 as CHAR))) for update nowait", - "Table": "u_tbl9" + "Query": "select u_tbl9.col9 from u_tbl9 where (col9) in ::fkc_vals2 and (col9) not in ((cast(5 as CHAR))) for update nowait" }, { "InputName": "CascadeChild-1", @@ -1826,8 +1734,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl8 set col8 = null where (col8) in ::fkc_vals3", - "Table": "u_tbl8" + "Query": "update u_tbl8 set col8 = null where (col8) in ::fkc_vals3" }, { "InputName": "Parent", @@ -1837,8 +1744,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_tbl9 set col9 = null where (col9) in ::fkc_vals2 and (col9) not in ((cast(5 as CHAR)))", - "Table": "u_tbl9" + "Query": "update u_tbl9 set col9 = null where (col9) in ::fkc_vals2 and (col9) not in ((cast(5 as CHAR)))" } ] }, @@ -1850,8 +1756,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_tbl1 set col1 = 5 where id = 1", - "Table": "u_tbl1" + "Query": "update u_tbl1 set col1 = 5 where id = 1" } ] } @@ -1880,8 +1785,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "insert into u_tbl1(id, col1, foo) values (1, 3, 'bar') on duplicate key update foo = 'baz'", - "TableName": "u_tbl1" + "Query": "insert into u_tbl1(id, col1, foo) values (1, 3, 'bar') on duplicate key update foo = 'baz'" }, "TablesUsed": [ "unsharded_fk_allow.u_tbl1" @@ -1915,8 +1819,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl1.col1 from u_tbl1 where 1 != 1", - "Query": "select u_tbl1.col1 from u_tbl1 where (id) in ((1)) for update", - "Table": "u_tbl1" + "Query": "select u_tbl1.col1 from u_tbl1 where (id) in ((1)) for update" }, { "InputName": "CascadeChild-1", @@ -1935,8 +1838,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update" }, { "InputName": "CascadeChild-1", @@ -1950,8 +1852,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals1", - "Table": "u_tbl3" + "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals1" }, { "InputName": "Parent", @@ -1961,8 +1862,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "delete from u_tbl2 where (col2) in ::fkc_vals", - "Table": "u_tbl2" + "Query": "delete from u_tbl2 where (col2) in ::fkc_vals" } ] }, @@ -1974,8 +1874,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "delete from u_tbl1 where (id) in ((1))", - "Table": "u_tbl1" + "Query": "delete from u_tbl1 where (id) in ((1))" } ] }, @@ -1987,8 +1886,7 @@ "Sharded": false }, "NoAutoCommit": true, - "Query": "insert into u_tbl1(id, col1) values (1, 2)", - "TableName": "u_tbl1" + "Query": "insert into u_tbl1(id, col1) values (1, 2)" } ] }, @@ -2018,8 +1916,7 @@ "Sharded": false }, "FieldQuery": "select u_multicol_tbl1.cola, u_multicol_tbl1.colb from u_multicol_tbl1 where 1 != 1", - "Query": "select u_multicol_tbl1.cola, u_multicol_tbl1.colb from u_multicol_tbl1 where id = 3 for update", - "Table": "u_multicol_tbl1" + "Query": "select u_multicol_tbl1.cola, u_multicol_tbl1.colb from u_multicol_tbl1 where id = 3 for update" }, { "InputName": "CascadeChild-1", @@ -2039,8 +1936,7 @@ "Sharded": false }, "FieldQuery": "select u_multicol_tbl2.cola, u_multicol_tbl2.colb from u_multicol_tbl2 where 1 != 1", - "Query": "select u_multicol_tbl2.cola, u_multicol_tbl2.colb from u_multicol_tbl2 where (cola, colb) in ::fkc_vals and (cola, colb) not in ((1, 2)) for update", - "Table": "u_multicol_tbl2" + "Query": "select u_multicol_tbl2.cola, u_multicol_tbl2.colb from u_multicol_tbl2 where (cola, colb) in ::fkc_vals and (cola, colb) not in ((1, 2)) for update" }, { "InputName": "CascadeChild-1", @@ -2055,8 +1951,7 @@ 0, 1 ], - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_multicol_tbl3 set cola = null, colb = null where (cola, colb) in ::fkc_vals1", - "Table": "u_multicol_tbl3" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_multicol_tbl3 set cola = null, colb = null where (cola, colb) in ::fkc_vals1" }, { "InputName": "Parent", @@ -2066,8 +1961,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_multicol_tbl2 set cola = null, colb = null where (cola, colb) in ::fkc_vals and (cola, colb) not in ((1, 2))", - "Table": "u_multicol_tbl2" + "Query": "update u_multicol_tbl2 set cola = null, colb = null where (cola, colb) in ::fkc_vals and (cola, colb) not in ((1, 2))" } ] }, @@ -2079,8 +1973,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_multicol_tbl1 set cola = 1, colb = 2 where id = 3", - "Table": "u_multicol_tbl1" + "Query": "update u_multicol_tbl1 set cola = 1, colb = 2 where id = 3" } ] }, @@ -2110,8 +2003,7 @@ "Sharded": false }, "FieldQuery": "select u_multicol_tbl1.cola, u_multicol_tbl1.colb from u_multicol_tbl1 where 1 != 1", - "Query": "select u_multicol_tbl1.cola, u_multicol_tbl1.colb from u_multicol_tbl1 where id = :v3 for update", - "Table": "u_multicol_tbl1" + "Query": "select u_multicol_tbl1.cola, u_multicol_tbl1.colb from u_multicol_tbl1 where id = :v3 for update" }, { "InputName": "CascadeChild-1", @@ -2131,8 +2023,7 @@ "Sharded": false }, "FieldQuery": "select u_multicol_tbl2.cola, u_multicol_tbl2.colb from u_multicol_tbl2 where 1 != 1", - "Query": "select u_multicol_tbl2.cola, u_multicol_tbl2.colb from u_multicol_tbl2 where (cola, colb) in ::fkc_vals and (:v2 is null or (:v1 is null or (cola, colb) not in ((:v1, :v2)))) for update", - "Table": "u_multicol_tbl2" + "Query": "select u_multicol_tbl2.cola, u_multicol_tbl2.colb from u_multicol_tbl2 where (cola, colb) in ::fkc_vals and (:v2 is null or (:v1 is null or (cola, colb) not in ((:v1, :v2)))) for update" }, { "InputName": "CascadeChild-1", @@ -2147,8 +2038,7 @@ 0, 1 ], - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_multicol_tbl3 set cola = null, colb = null where (cola, colb) in ::fkc_vals1", - "Table": "u_multicol_tbl3" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_multicol_tbl3 set cola = null, colb = null where (cola, colb) in ::fkc_vals1" }, { "InputName": "Parent", @@ -2158,8 +2048,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_multicol_tbl2 set cola = null, colb = null where (cola, colb) in ::fkc_vals and (:v2 is null or (:v1 is null or (cola, colb) not in ((:v1, :v2))))", - "Table": "u_multicol_tbl2" + "Query": "update u_multicol_tbl2 set cola = null, colb = null where (cola, colb) in ::fkc_vals and (:v2 is null or (:v1 is null or (cola, colb) not in ((:v1, :v2))))" } ] }, @@ -2171,8 +2060,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_multicol_tbl1 set cola = :v1, colb = :v2 where id = :v3", - "Table": "u_multicol_tbl1" + "Query": "update u_multicol_tbl1 set cola = :v1, colb = :v2 where id = :v3" } ] }, @@ -2208,8 +2096,7 @@ "Sharded": true }, "FieldQuery": "select tbl5.col5, tbl5.t5col5 from tbl5 where 1 != 1", - "Query": "select tbl5.col5, tbl5.t5col5 from tbl5 where id = :v1 for update", - "Table": "tbl5" + "Query": "select tbl5.col5, tbl5.t5col5 from tbl5 where id = :v1 for update" }, { "InputName": "CascadeChild-1", @@ -2224,7 +2111,6 @@ 0 ], "Query": "delete from tbl4 where (col4) in ::fkc_vals", - "Table": "tbl4", "Values": [ "fkc_vals:0" ], @@ -2242,8 +2128,7 @@ "Cols": [ 1 ], - "Query": "delete from tbl4 where (t4col4) in ::fkc_vals1", - "Table": "tbl4" + "Query": "delete from tbl4 where (t4col4) in ::fkc_vals1" }, { "InputName": "Parent", @@ -2253,8 +2138,7 @@ "Name": "sharded_fk_allow", "Sharded": true }, - "Query": "delete from tbl5 where id = :v1", - "Table": "tbl5" + "Query": "delete from tbl5 where id = :v1" } ] } @@ -2290,8 +2174,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl7.col7, col7 <=> cast(baz + 1 + col7 as CHAR), cast(baz + 1 + col7 as CHAR) from u_tbl7 where 1 != 1", - "Query": "select u_tbl7.col7, col7 <=> cast(baz + 1 + col7 as CHAR), cast(baz + 1 + col7 as CHAR) from u_tbl7 where bar = 42 for update", - "Table": "u_tbl7" + "Query": "select u_tbl7.col7, col7 <=> cast(baz + 1 + col7 as CHAR), cast(baz + 1 + col7 as CHAR) from u_tbl7 where bar = 42 for update" }, { "InputName": "CascadeChild-1", @@ -2317,8 +2200,7 @@ "Sharded": false }, "FieldQuery": "select 1 from u_tbl4 left join u_tbl3 on u_tbl3.col3 = cast(:fkc_upd as CHAR) where 1 != 1", - "Query": "select 1 from u_tbl4 left join u_tbl3 on u_tbl3.col3 = cast(:fkc_upd as CHAR) where u_tbl3.col3 is null and cast(:fkc_upd as CHAR) is not null and not (u_tbl4.col4) <=> (cast(:fkc_upd as CHAR)) and (u_tbl4.col4) in ::fkc_vals limit 1 for share", - "Table": "u_tbl3, u_tbl4" + "Query": "select 1 from u_tbl4 left join u_tbl3 on u_tbl3.col3 = cast(:fkc_upd as CHAR) where u_tbl3.col3 is null and cast(:fkc_upd as CHAR) is not null and not (u_tbl4.col4) <=> (cast(:fkc_upd as CHAR)) and (u_tbl4.col4) in ::fkc_vals limit 1 for share" }, { "InputName": "VerifyChild-2", @@ -2329,8 +2211,7 @@ "Sharded": false }, "FieldQuery": "select 1 from u_tbl4, u_tbl9 where 1 != 1", - "Query": "select 1 from u_tbl4, u_tbl9 where u_tbl4.col4 = u_tbl9.col9 and (u_tbl4.col4) in ::fkc_vals and (cast(:fkc_upd as CHAR) is null or (u_tbl9.col9) not in ((cast(:fkc_upd as CHAR)))) limit 1 for share", - "Table": "u_tbl4, u_tbl9" + "Query": "select 1 from u_tbl4, u_tbl9 where u_tbl4.col4 = u_tbl9.col9 and (u_tbl4.col4) in ::fkc_vals and (cast(:fkc_upd as CHAR) is null or (u_tbl9.col9) not in ((cast(:fkc_upd as CHAR)))) limit 1 for share" }, { "InputName": "PostVerify", @@ -2340,8 +2221,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl4 set col4 = :fkc_upd where (col4) in ::fkc_vals", - "Table": "u_tbl4" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl4 set col4 = :fkc_upd where (col4) in ::fkc_vals" } ] }, @@ -2353,8 +2233,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl7 set foo = 100, col7 = baz + 1 + col7 where bar = 42", - "Table": "u_tbl7" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl7 set foo = 100, col7 = baz + 1 + col7 where bar = 42" } ] }, @@ -2385,8 +2264,7 @@ "Sharded": false }, "FieldQuery": "select u_multicol_tbl1.cola, u_multicol_tbl1.colb, cola <=> cola + 3, cola + 3 from u_multicol_tbl1 where 1 != 1", - "Query": "select u_multicol_tbl1.cola, u_multicol_tbl1.colb, cola <=> cola + 3, cola + 3 from u_multicol_tbl1 where id = 3 for update", - "Table": "u_multicol_tbl1" + "Query": "select u_multicol_tbl1.cola, u_multicol_tbl1.colb, cola <=> cola + 3, cola + 3 from u_multicol_tbl1 where id = 3 for update" }, { "InputName": "CascadeChild-1", @@ -2413,8 +2291,7 @@ "Sharded": false }, "FieldQuery": "select u_multicol_tbl2.cola, u_multicol_tbl2.colb from u_multicol_tbl2 where 1 != 1", - "Query": "select u_multicol_tbl2.cola, u_multicol_tbl2.colb from u_multicol_tbl2 where (cola, colb) in ::fkc_vals and (:fkc_upd is null or (cola) not in ((:fkc_upd))) for update", - "Table": "u_multicol_tbl2" + "Query": "select u_multicol_tbl2.cola, u_multicol_tbl2.colb from u_multicol_tbl2 where (cola, colb) in ::fkc_vals and (:fkc_upd is null or (cola) not in ((:fkc_upd))) for update" }, { "InputName": "CascadeChild-1", @@ -2429,8 +2306,7 @@ 0, 1 ], - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_multicol_tbl3 set cola = null, colb = null where (cola, colb) in ::fkc_vals1", - "Table": "u_multicol_tbl3" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_multicol_tbl3 set cola = null, colb = null where (cola, colb) in ::fkc_vals1" }, { "InputName": "Parent", @@ -2440,8 +2316,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_multicol_tbl2 set cola = null, colb = null where (cola, colb) in ::fkc_vals and (:fkc_upd is null or (cola) not in ((:fkc_upd)))", - "Table": "u_multicol_tbl2" + "Query": "update u_multicol_tbl2 set cola = null, colb = null where (cola, colb) in ::fkc_vals and (:fkc_upd is null or (cola) not in ((:fkc_upd)))" } ] }, @@ -2453,8 +2328,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_multicol_tbl1 set cola = cola + 3 where id = 3", - "Table": "u_multicol_tbl1" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_multicol_tbl1 set cola = cola + 3 where id = 3" } ] }, @@ -2489,8 +2363,7 @@ "Sharded": false }, "FieldQuery": "select 1 from u_multicol_tbl2 left join u_multicol_tbl1 on u_multicol_tbl1.cola = 2 and u_multicol_tbl1.colb = u_multicol_tbl2.colc - 2 where 1 != 1", - "Query": "select 1 from u_multicol_tbl2 left join u_multicol_tbl1 on u_multicol_tbl1.cola = 2 and u_multicol_tbl1.colb = u_multicol_tbl2.colc - 2 where u_multicol_tbl1.cola is null and u_multicol_tbl1.colb is null and u_multicol_tbl2.colc - 2 is not null and not (u_multicol_tbl2.cola, u_multicol_tbl2.colb) <=> (2, u_multicol_tbl2.colc - 2) and u_multicol_tbl2.id = 7 limit 1 for share", - "Table": "u_multicol_tbl1, u_multicol_tbl2" + "Query": "select 1 from u_multicol_tbl2 left join u_multicol_tbl1 on u_multicol_tbl1.cola = 2 and u_multicol_tbl1.colb = u_multicol_tbl2.colc - 2 where u_multicol_tbl1.cola is null and u_multicol_tbl1.colb is null and u_multicol_tbl2.colc - 2 is not null and not (u_multicol_tbl2.cola, u_multicol_tbl2.colb) <=> (2, u_multicol_tbl2.colc - 2) and u_multicol_tbl2.id = 7 limit 1 for share" }, { "InputName": "PostVerify", @@ -2505,8 +2378,7 @@ "Sharded": false }, "FieldQuery": "select u_multicol_tbl2.cola, u_multicol_tbl2.colb, cola <=> 2, 2, colb <=> colc - 2, colc - 2 from u_multicol_tbl2 where 1 != 1", - "Query": "select u_multicol_tbl2.cola, u_multicol_tbl2.colb, cola <=> 2, 2, colb <=> colc - 2, colc - 2 from u_multicol_tbl2 where id = 7 for update", - "Table": "u_multicol_tbl2" + "Query": "select u_multicol_tbl2.cola, u_multicol_tbl2.colb, cola <=> 2, 2, colb <=> colc - 2, colc - 2 from u_multicol_tbl2 where id = 7 for update" }, { "InputName": "CascadeChild-1", @@ -2533,8 +2405,7 @@ "UpdateExprBvName": "fkc_upd1" } ], - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_multicol_tbl3 set cola = :fkc_upd, colb = :fkc_upd1 where (cola, colb) in ::fkc_vals", - "Table": "u_multicol_tbl3" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_multicol_tbl3 set cola = :fkc_upd, colb = :fkc_upd1 where (cola, colb) in ::fkc_vals" }, { "InputName": "Parent", @@ -2544,8 +2415,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_multicol_tbl2 set cola = 2, colb = colc - 2 where id = 7", - "Table": "u_multicol_tbl2" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_multicol_tbl2 set cola = 2, colb = colc - 2 where id = 7" } ] } @@ -2580,8 +2450,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl9.col9 from u_tbl9 where 1 != 1", - "Query": "select u_tbl9.col9 from u_tbl9 where (col9) in ((10), (20), (30)) or (col9 * foo) in ((10 * null), (20 * null), (30 * null)) or (bar, col9) in ((1, 10), (1, 20), (1, 30)) or (id) in ((1), (2), (3)) for update nowait", - "Table": "u_tbl9" + "Query": "select u_tbl9.col9 from u_tbl9 where (col9) in ((10), (20), (30)) or (col9 * foo) in ((10 * null), (20 * null), (30 * null)) or (bar, col9) in ((1, 10), (1, 20), (1, 30)) or (id) in ((1), (2), (3)) for update nowait" }, { "InputName": "CascadeChild-1", @@ -2595,8 +2464,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl8 set col8 = null where (col8) in ::fkc_vals", - "Table": "u_tbl8" + "Query": "update u_tbl8 set col8 = null where (col8) in ::fkc_vals" }, { "InputName": "Parent", @@ -2606,8 +2474,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "delete from u_tbl9 where (col9) in ((10), (20), (30)) or (col9 * foo) in ((10 * null), (20 * null), (30 * null)) or (bar, col9) in ((1, 10), (1, 20), (1, 30)) or (id) in ((1), (2), (3))", - "Table": "u_tbl9" + "Query": "delete from u_tbl9 where (col9) in ((10), (20), (30)) or (col9 * foo) in ((10 * null), (20 * null), (30 * null)) or (bar, col9) in ((1, 10), (1, 20), (1, 30)) or (id) in ((1), (2), (3))" } ] }, @@ -2619,8 +2486,7 @@ "Sharded": false }, "NoAutoCommit": true, - "Query": "insert into u_tbl9(id, col9) values (1, 10), (2, 20), (3, 30)", - "TableName": "u_tbl9" + "Query": "insert into u_tbl9(id, col9) values (1, 10), (2, 20), (3, 30)" } ] }, @@ -2645,7 +2511,6 @@ "Sharded": true }, "Query": "delete /*+ SET_VAR(foreign_key_checks=Off) */ from multicol_tbl1 where cola = 1 and colb = 2 and colc = 3", - "Table": "multicol_tbl1", "Values": [ "1", "2", @@ -2672,8 +2537,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=Off) */ u_multicol_tbl1 set cola = 1, colb = 2 where id = 3", - "Table": "u_multicol_tbl1" + "Query": "update /*+ SET_VAR(foreign_key_checks=Off) */ u_multicol_tbl1 set cola = 1, colb = 2 where id = 3" }, "TablesUsed": [ "unsharded_fk_allow.u_multicol_tbl1" @@ -2695,7 +2559,6 @@ "Sharded": true }, "Query": "insert /*+ SET_VAR(foreign_key_checks=Off) */ into tbl3(col3, coly) values (:_col3_0, 3)", - "TableName": "tbl3", "VindexValues": { "hash_vin": "1" } @@ -2724,8 +2587,7 @@ "Sharded": false }, "NoAutoCommit": true, - "Query": "insert into u_tbl1(id, col1) values (1, 3)", - "TableName": "u_tbl1" + "Query": "insert into u_tbl1(id, col1) values (1, 3)" }, { "InputName": "Update-1", @@ -2740,8 +2602,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl1.col1 from u_tbl1 where 1 != 1", - "Query": "select u_tbl1.col1 from u_tbl1 where id = 1 for update", - "Table": "u_tbl1" + "Query": "select u_tbl1.col1 from u_tbl1 where id = 1 for update" }, { "InputName": "CascadeChild-1", @@ -2760,8 +2621,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update" }, { "InputName": "CascadeChild-1", @@ -2775,8 +2635,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals1 and (col3) not in ((cast(3 as CHAR)))", - "Table": "u_tbl3" + "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals1 and (col3) not in ((cast(3 as CHAR)))" }, { "InputName": "Parent", @@ -2786,8 +2645,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set col2 = 3 where (col2) in ::fkc_vals", - "Table": "u_tbl2" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set col2 = 3 where (col2) in ::fkc_vals" } ] }, @@ -2808,8 +2666,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl9.col9 from u_tbl9 where 1 != 1", - "Query": "select u_tbl9.col9 from u_tbl9 where (col9) in ::fkc_vals2 and (col9) not in ((cast(3 as CHAR))) for update nowait", - "Table": "u_tbl9" + "Query": "select u_tbl9.col9 from u_tbl9 where (col9) in ::fkc_vals2 and (col9) not in ((cast(3 as CHAR))) for update nowait" }, { "InputName": "CascadeChild-1", @@ -2823,8 +2680,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl8 set col8 = null where (col8) in ::fkc_vals3", - "Table": "u_tbl8" + "Query": "update u_tbl8 set col8 = null where (col8) in ::fkc_vals3" }, { "InputName": "Parent", @@ -2834,8 +2690,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_tbl9 set col9 = null where (col9) in ::fkc_vals2 and (col9) not in ((cast(3 as CHAR)))", - "Table": "u_tbl9" + "Query": "update u_tbl9 set col9 = null where (col9) in ::fkc_vals2 and (col9) not in ((cast(3 as CHAR)))" } ] }, @@ -2847,8 +2702,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_tbl1 set col1 = 3 where id = 1", - "Table": "u_tbl1" + "Query": "update u_tbl1 set col1 = 3 where id = 1" } ] } @@ -2882,8 +2736,7 @@ "Sharded": false }, "NoAutoCommit": true, - "Query": "insert into u_tbl2(id, col2) values (:v1, :v2)", - "TableName": "u_tbl2" + "Query": "insert into u_tbl2(id, col2) values (:v1, :v2)" }, { "InputName": "Update-1", @@ -2898,8 +2751,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2 from u_tbl2 where id = :v1 for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2 from u_tbl2 where id = :v1 for update" }, { "InputName": "CascadeChild-1", @@ -2913,8 +2765,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals and (cast(:v2 as CHAR) is null or (col3) not in ((cast(:v2 as CHAR))))", - "Table": "u_tbl3" + "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals and (cast(:v2 as CHAR) is null or (col3) not in ((cast(:v2 as CHAR))))" }, { "InputName": "Parent", @@ -2924,8 +2775,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_tbl2 set col2 = :v2 where id = :v1", - "Table": "u_tbl2" + "Query": "update u_tbl2 set col2 = :v2 where id = :v1" } ] }, @@ -2938,8 +2788,7 @@ "Sharded": false }, "NoAutoCommit": true, - "Query": "insert into u_tbl2(id, col2) values (:v3, :v4)", - "TableName": "u_tbl2" + "Query": "insert into u_tbl2(id, col2) values (:v3, :v4)" }, { "InputName": "Update-2", @@ -2954,8 +2803,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2 from u_tbl2 where id = :v3 for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2 from u_tbl2 where id = :v3 for update" }, { "InputName": "CascadeChild-1", @@ -2969,8 +2817,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals1 and (cast(:v4 as CHAR) is null or (col3) not in ((cast(:v4 as CHAR))))", - "Table": "u_tbl3" + "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals1 and (cast(:v4 as CHAR) is null or (col3) not in ((cast(:v4 as CHAR))))" }, { "InputName": "Parent", @@ -2980,8 +2827,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_tbl2 set col2 = :v4 where id = :v3", - "Table": "u_tbl2" + "Query": "update u_tbl2 set col2 = :v4 where id = :v3" } ] }, @@ -2994,8 +2840,7 @@ "Sharded": false }, "NoAutoCommit": true, - "Query": "insert into u_tbl2(id, col2) values (:v5, :v6)", - "TableName": "u_tbl2" + "Query": "insert into u_tbl2(id, col2) values (:v5, :v6)" }, { "InputName": "Update-3", @@ -3010,8 +2855,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2 from u_tbl2 where id = :v5 for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2 from u_tbl2 where id = :v5 for update" }, { "InputName": "CascadeChild-1", @@ -3025,8 +2869,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals2 and (cast(:v6 as CHAR) is null or (col3) not in ((cast(:v6 as CHAR))))", - "Table": "u_tbl3" + "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals2 and (cast(:v6 as CHAR) is null or (col3) not in ((cast(:v6 as CHAR))))" }, { "InputName": "Parent", @@ -3036,8 +2879,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_tbl2 set col2 = :v6 where id = :v5", - "Table": "u_tbl2" + "Query": "update u_tbl2 set col2 = :v6 where id = :v5" } ] } @@ -3075,8 +2917,7 @@ "Sharded": false }, "FieldQuery": "select u.id from u_tbl6 as u, u_tbl5 as m where 1 != 1", - "Query": "select u.id from u_tbl6 as u, u_tbl5 as m where u.col2 = 4 and m.col3 = 6 and u.col = m.col for update", - "Table": "u_tbl5, u_tbl6" + "Query": "select u.id from u_tbl6 as u, u_tbl5 as m where u.col2 = 4 and m.col3 = 6 and u.col = m.col for update" }, { "OperatorType": "FkCascade", @@ -3090,8 +2931,7 @@ "Sharded": false }, "FieldQuery": "select u.col6 from u_tbl6 as u where 1 != 1", - "Query": "select u.col6 from u_tbl6 as u where u.id in ::dml_vals for update", - "Table": "u_tbl6" + "Query": "select u.col6 from u_tbl6 as u where u.id in ::dml_vals for update" }, { "InputName": "CascadeChild-1", @@ -3105,8 +2945,7 @@ "Cols": [ 0 ], - "Query": "delete from u_tbl8 where (col8) in ::fkc_vals", - "Table": "u_tbl8" + "Query": "delete from u_tbl8 where (col8) in ::fkc_vals" }, { "InputName": "Parent", @@ -3116,8 +2955,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "delete from u_tbl6 as u where u.id in ::dml_vals", - "Table": "u_tbl6" + "Query": "delete from u_tbl6 as u where u.id in ::dml_vals" } ] } @@ -3151,8 +2989,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl10.id from u_tbl10, u_tbl11 where 1 != 1", - "Query": "select u_tbl10.id from u_tbl10, u_tbl11 where u_tbl10.id = 5 and u_tbl10.id = u_tbl11.id for update", - "Table": "u_tbl10, u_tbl11" + "Query": "select u_tbl10.id from u_tbl10, u_tbl11 where u_tbl10.id = 5 and u_tbl10.id = u_tbl11.id for update" }, { "OperatorType": "FkCascade", @@ -3166,8 +3003,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl10.col from u_tbl10 where 1 != 1", - "Query": "select u_tbl10.col from u_tbl10 where u_tbl10.id in ::dml_vals for update", - "Table": "u_tbl10" + "Query": "select u_tbl10.col from u_tbl10 where u_tbl10.id in ::dml_vals for update" }, { "InputName": "CascadeChild-1", @@ -3181,8 +3017,7 @@ "Cols": [ 0 ], - "Query": "delete from u_tbl11 where (col) in ::fkc_vals", - "Table": "u_tbl11" + "Query": "delete from u_tbl11 where (col) in ::fkc_vals" }, { "InputName": "Parent", @@ -3192,8 +3027,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "delete from u_tbl10 where u_tbl10.id in ::dml_vals", - "Table": "u_tbl10" + "Query": "delete from u_tbl10 where u_tbl10.id in ::dml_vals" } ] } @@ -3226,8 +3060,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl1.id from u_tbl10, u_tbl1 where 1 != 1", - "Query": "select u_tbl1.id from u_tbl10, u_tbl1 where u_tbl10.col = u_tbl1.col for update", - "Table": "u_tbl1, u_tbl10" + "Query": "select u_tbl1.id from u_tbl10, u_tbl1 where u_tbl10.col = u_tbl1.col for update" }, { "OperatorType": "FkCascade", @@ -3241,8 +3074,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl1.col1 from u_tbl1 where 1 != 1", - "Query": "select u_tbl1.col1 from u_tbl1 where u_tbl1.id in ::dml_vals for update", - "Table": "u_tbl1" + "Query": "select u_tbl1.col1 from u_tbl1 where u_tbl1.id in ::dml_vals for update" }, { "InputName": "CascadeChild-1", @@ -3261,8 +3093,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update" }, { "InputName": "CascadeChild-1", @@ -3276,8 +3107,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals1", - "Table": "u_tbl3" + "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals1" }, { "InputName": "Parent", @@ -3287,8 +3117,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "delete from u_tbl2 where (col2) in ::fkc_vals", - "Table": "u_tbl2" + "Query": "delete from u_tbl2 where (col2) in ::fkc_vals" } ] }, @@ -3300,8 +3129,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "delete from u_tbl1 where u_tbl1.id in ::dml_vals", - "Table": "u_tbl1" + "Query": "delete from u_tbl1 where u_tbl1.id in ::dml_vals" } ] } @@ -3336,8 +3164,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl1.id from u_tbl1 where 1 != 1", - "Query": "select u_tbl1.id from u_tbl1 order by id asc limit 1 for update", - "Table": "u_tbl1" + "Query": "select u_tbl1.id from u_tbl1 order by id asc limit 1 for update" }, { "OperatorType": "FkCascade", @@ -3351,8 +3178,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl1.col1 from u_tbl1 where 1 != 1", - "Query": "select u_tbl1.col1 from u_tbl1 where u_tbl1.id in ::dml_vals for update", - "Table": "u_tbl1" + "Query": "select u_tbl1.col1 from u_tbl1 where u_tbl1.id in ::dml_vals for update" }, { "InputName": "CascadeChild-1", @@ -3371,8 +3197,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update" }, { "InputName": "CascadeChild-1", @@ -3386,8 +3211,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals1", - "Table": "u_tbl3" + "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals1" }, { "InputName": "Parent", @@ -3397,8 +3221,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "delete from u_tbl2 where (col2) in ::fkc_vals", - "Table": "u_tbl2" + "Query": "delete from u_tbl2 where (col2) in ::fkc_vals" } ] }, @@ -3410,8 +3233,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "delete from u_tbl1 where u_tbl1.id in ::dml_vals", - "Table": "u_tbl1" + "Query": "delete from u_tbl1 where u_tbl1.id in ::dml_vals" } ] } @@ -3447,8 +3269,7 @@ "Sharded": false }, "FieldQuery": "select col14 from u_tbl1 where 1 != 1", - "Query": "select col14 from u_tbl1 where x = 2 and y = 4 lock in share mode", - "Table": "u_tbl1" + "Query": "select col14 from u_tbl1 where x = 2 and y = 4 lock in share mode" }, { "InputName": "Outer", @@ -3463,8 +3284,7 @@ "Sharded": false }, "FieldQuery": "select 1 from u_tbl4 left join u_tbl1 on u_tbl1.col14 = cast(:__sq1 as SIGNED) where 1 != 1", - "Query": "select 1 from u_tbl4 left join u_tbl1 on u_tbl1.col14 = cast(:__sq1 as SIGNED) where u_tbl1.col14 is null and cast(:__sq1 as SIGNED) is not null and not (u_tbl4.col41) <=> (cast(:__sq1 as SIGNED)) and u_tbl4.col4 = 3 limit 1 for share", - "Table": "u_tbl1, u_tbl4" + "Query": "select 1 from u_tbl4 left join u_tbl1 on u_tbl1.col14 = cast(:__sq1 as SIGNED) where u_tbl1.col14 is null and cast(:__sq1 as SIGNED) is not null and not (u_tbl4.col41) <=> (cast(:__sq1 as SIGNED)) and u_tbl4.col4 = 3 limit 1 for share" }, { "InputName": "PostVerify", @@ -3474,8 +3294,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl4 set col41 = :__sq1 where col4 = 3", - "Table": "u_tbl4" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl4 set col41 = :__sq1 where col4 = 3" } ] } @@ -3510,8 +3329,7 @@ "Sharded": false }, "FieldQuery": "select foo from u_tbl1 where 1 != 1", - "Query": "select foo from u_tbl1 where id = 1 lock in share mode", - "Table": "u_tbl1" + "Query": "select foo from u_tbl1 where id = 1 lock in share mode" }, { "InputName": "Outer", @@ -3526,8 +3344,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl1.col1 from u_tbl1 where 1 != 1", - "Query": "select u_tbl1.col1 from u_tbl1 order by id desc for update", - "Table": "u_tbl1" + "Query": "select u_tbl1.col1 from u_tbl1 order by id desc for update" }, { "InputName": "CascadeChild-1", @@ -3546,8 +3363,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update" }, { "InputName": "CascadeChild-1", @@ -3561,8 +3377,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals1 and (cast(:__sq1 as CHAR) is null or (col3) not in ((cast(:__sq1 as CHAR))))", - "Table": "u_tbl3" + "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals1 and (cast(:__sq1 as CHAR) is null or (col3) not in ((cast(:__sq1 as CHAR))))" }, { "InputName": "Parent", @@ -3572,8 +3387,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set col2 = :__sq1 where (col2) in ::fkc_vals", - "Table": "u_tbl2" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set col2 = :__sq1 where (col2) in ::fkc_vals" } ] }, @@ -3594,8 +3408,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl9.col9 from u_tbl9 where 1 != 1", - "Query": "select u_tbl9.col9 from u_tbl9 where (col9) in ::fkc_vals2 and (cast(:__sq1 as CHAR) is null or (col9) not in ((cast(:__sq1 as CHAR)))) for update nowait", - "Table": "u_tbl9" + "Query": "select u_tbl9.col9 from u_tbl9 where (col9) in ::fkc_vals2 and (cast(:__sq1 as CHAR) is null or (col9) not in ((cast(:__sq1 as CHAR)))) for update nowait" }, { "InputName": "CascadeChild-1", @@ -3609,8 +3422,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl8 set col8 = null where (col8) in ::fkc_vals3", - "Table": "u_tbl8" + "Query": "update u_tbl8 set col8 = null where (col8) in ::fkc_vals3" }, { "InputName": "Parent", @@ -3620,8 +3432,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_tbl9 set col9 = null where (col9) in ::fkc_vals2 and (cast(:__sq1 as CHAR) is null or (col9) not in ((cast(:__sq1 as CHAR))))", - "Table": "u_tbl9" + "Query": "update u_tbl9 set col9 = null where (col9) in ::fkc_vals2 and (cast(:__sq1 as CHAR) is null or (col9) not in ((cast(:__sq1 as CHAR))))" } ] }, @@ -3633,8 +3444,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl1 set col1 = :__sq1 order by id desc", - "Table": "u_tbl1" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl1 set col1 = :__sq1 order by id desc" } ] } @@ -3670,8 +3480,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl6.id from u_tbl6, u_tbl8 where 1 != 1", - "Query": "select u_tbl6.id from u_tbl6, u_tbl8 where u_tbl6.id = 4 and u_tbl6.id = u_tbl8.id for update", - "Table": "u_tbl6, u_tbl8" + "Query": "select u_tbl6.id from u_tbl6, u_tbl8 where u_tbl6.id = 4 and u_tbl6.id = u_tbl8.id for update" }, { "OperatorType": "FkCascade", @@ -3685,8 +3494,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl6.col6 from u_tbl6 where 1 != 1", - "Query": "select u_tbl6.col6 from u_tbl6 where u_tbl6.id in ::dml_vals for update", - "Table": "u_tbl6" + "Query": "select u_tbl6.col6 from u_tbl6 where u_tbl6.id in ::dml_vals for update" }, { "InputName": "CascadeChild-1", @@ -3700,8 +3508,7 @@ "Cols": [ 0 ], - "Query": "delete from u_tbl8 where (col8) in ::fkc_vals", - "Table": "u_tbl8" + "Query": "delete from u_tbl8 where (col8) in ::fkc_vals" }, { "InputName": "Parent", @@ -3711,8 +3518,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "delete from u_tbl6 where u_tbl6.id in ::dml_vals", - "Table": "u_tbl6" + "Query": "delete from u_tbl6 where u_tbl6.id in ::dml_vals" } ] } @@ -3746,8 +3552,7 @@ "Sharded": false }, "FieldQuery": "select u.id, m.id from u_tbl6 as u, u_tbl5 as m where 1 != 1", - "Query": "select u.id, m.id from u_tbl6 as u, u_tbl5 as m where u.col2 = 4 and m.col3 = 6 and u.col = m.col for update", - "Table": "u_tbl5, u_tbl6" + "Query": "select u.id, m.id from u_tbl6 as u, u_tbl5 as m where u.col2 = 4 and m.col3 = 6 and u.col = m.col for update" }, { "OperatorType": "FkCascade", @@ -3761,8 +3566,7 @@ "Sharded": false }, "FieldQuery": "select u.col6 from u_tbl6 as u where 1 != 1", - "Query": "select u.col6 from u_tbl6 as u where u.id in ::dml_vals for update", - "Table": "u_tbl6" + "Query": "select u.col6 from u_tbl6 as u where u.id in ::dml_vals for update" }, { "InputName": "CascadeChild-1", @@ -3776,8 +3580,7 @@ "Cols": [ 0 ], - "Query": "delete from u_tbl8 where (col8) in ::fkc_vals", - "Table": "u_tbl8" + "Query": "delete from u_tbl8 where (col8) in ::fkc_vals" }, { "InputName": "Parent", @@ -3787,8 +3590,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "delete from u_tbl6 as u where u.id in ::dml_vals", - "Table": "u_tbl6" + "Query": "delete from u_tbl6 as u where u.id in ::dml_vals" } ] }, @@ -3799,8 +3601,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "delete from u_tbl5 as m where m.id in ::dml_vals", - "Table": "u_tbl5" + "Query": "delete from u_tbl5 as m where m.id in ::dml_vals" } ] }, @@ -3832,8 +3633,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.id from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.id from u_tbl2 limit 2 for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.id from u_tbl2 limit 2 for update" }, { "OperatorType": "FkCascade", @@ -3847,8 +3647,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2 from u_tbl2 where u_tbl2.id in ::dml_vals for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2 from u_tbl2 where u_tbl2.id in ::dml_vals for update" }, { "InputName": "CascadeChild-1", @@ -3862,8 +3661,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals and (col3) not in ((cast('bar' as CHAR)))", - "Table": "u_tbl3" + "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals and (col3) not in ((cast('bar' as CHAR)))" }, { "InputName": "Parent", @@ -3873,8 +3671,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_tbl2 set col2 = 'bar' where u_tbl2.id in ::dml_vals", - "Table": "u_tbl2" + "Query": "update u_tbl2 set col2 = 'bar' where u_tbl2.id in ::dml_vals" } ] } @@ -3907,8 +3704,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.id from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.id from u_tbl2 order by id asc limit 2 for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.id from u_tbl2 order by id asc limit 2 for update" }, { "OperatorType": "FKVerify", @@ -3922,8 +3718,7 @@ "Sharded": false }, "FieldQuery": "select 1 from u_tbl2 left join u_tbl1 on u_tbl1.col1 = cast(u_tbl2.id + 1 as CHAR) where 1 != 1", - "Query": "select 1 from u_tbl2 left join u_tbl1 on u_tbl1.col1 = cast(u_tbl2.id + 1 as CHAR) where u_tbl1.col1 is null and cast(u_tbl2.id + 1 as CHAR) is not null and not (u_tbl2.col2) <=> (cast(u_tbl2.id + 1 as CHAR)) and u_tbl2.id in ::dml_vals limit 1 for share", - "Table": "u_tbl1, u_tbl2" + "Query": "select 1 from u_tbl2 left join u_tbl1 on u_tbl1.col1 = cast(u_tbl2.id + 1 as CHAR) where u_tbl1.col1 is null and cast(u_tbl2.id + 1 as CHAR) is not null and not (u_tbl2.col2) <=> (cast(u_tbl2.id + 1 as CHAR)) and u_tbl2.id in ::dml_vals limit 1 for share" }, { "InputName": "PostVerify", @@ -3938,8 +3733,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2, col2 <=> cast(id + 1 as CHAR), cast(id + 1 as CHAR) from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2, col2 <=> cast(id + 1 as CHAR), cast(id + 1 as CHAR) from u_tbl2 where u_tbl2.id in ::dml_vals order by id asc for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2, col2 <=> cast(id + 1 as CHAR), cast(id + 1 as CHAR) from u_tbl2 where u_tbl2.id in ::dml_vals order by id asc for update" }, { "InputName": "CascadeChild-1", @@ -3960,8 +3754,7 @@ "UpdateExprBvName": "fkc_upd" } ], - "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals and (:fkc_upd is null or (col3) not in ((:fkc_upd)))", - "Table": "u_tbl3" + "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals and (:fkc_upd is null or (col3) not in ((:fkc_upd)))" }, { "InputName": "Parent", @@ -3971,8 +3764,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set col2 = id + 1 where u_tbl2.id in ::dml_vals order by id asc", - "Table": "u_tbl2" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set col2 = id + 1 where u_tbl2.id in ::dml_vals order by id asc" } ] } @@ -4006,8 +3798,7 @@ "Sharded": false }, "FieldQuery": "select u.col6 from u_tbl6 as u, u_tbl5 as m where 1 != 1", - "Query": "select u.col6 from u_tbl6 as u, u_tbl5 as m where u.col = m.col and u.col2 = 4 and m.col3 = 6 for update", - "Table": "u_tbl5, u_tbl6" + "Query": "select u.col6 from u_tbl6 as u, u_tbl5 as m where u.col = m.col and u.col2 = 4 and m.col3 = 6 for update" }, { "InputName": "CascadeChild-1", @@ -4026,8 +3817,7 @@ "Sharded": false }, "FieldQuery": "select 1 from u_tbl8 left join u_tbl9 on u_tbl9.col9 = cast('foo' as CHAR) where 1 != 1", - "Query": "select 1 from u_tbl8 left join u_tbl9 on u_tbl9.col9 = cast('foo' as CHAR) where u_tbl9.col9 is null and not (u_tbl8.col8) <=> (cast('foo' as CHAR)) and (u_tbl8.col8) in ::fkc_vals limit 1 for share nowait", - "Table": "u_tbl8, u_tbl9" + "Query": "select 1 from u_tbl8 left join u_tbl9 on u_tbl9.col9 = cast('foo' as CHAR) where u_tbl9.col9 is null and not (u_tbl8.col8) <=> (cast('foo' as CHAR)) and (u_tbl8.col8) in ::fkc_vals limit 1 for share nowait" }, { "InputName": "PostVerify", @@ -4037,8 +3827,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl8 set col8 = 'foo' where (col8) in ::fkc_vals", - "Table": "u_tbl8" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl8 set col8 = 'foo' where (col8) in ::fkc_vals" } ] }, @@ -4050,8 +3839,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_tbl6 as u, u_tbl5 as m set u.col6 = 'foo' where u.col2 = 4 and m.col3 = 6 and u.col = m.col", - "Table": "u_tbl6" + "Query": "update u_tbl6 as u, u_tbl5 as m set u.col6 = 'foo' where u.col2 = 4 and m.col3 = 6 and u.col = m.col" } ] }, @@ -4085,8 +3873,7 @@ "Sharded": false }, "FieldQuery": "select u.id, m.id from u_tbl1 as u, u_multicol_tbl1 as m where 1 != 1", - "Query": "select u.id, m.id from u_tbl1 as u, u_multicol_tbl1 as m where u.foo = 4 and m.bar = 6 and u.col = m.col for update", - "Table": "u_multicol_tbl1, u_tbl1" + "Query": "select u.id, m.id from u_tbl1 as u, u_multicol_tbl1 as m where u.foo = 4 and m.bar = 6 and u.col = m.col for update" }, { "OperatorType": "FkCascade", @@ -4100,8 +3887,7 @@ "Sharded": false }, "FieldQuery": "select u.col1 from u_tbl1 as u where 1 != 1", - "Query": "select u.col1 from u_tbl1 as u where u.id in ::dml_vals for update", - "Table": "u_tbl1" + "Query": "select u.col1 from u_tbl1 as u where u.id in ::dml_vals for update" }, { "InputName": "CascadeChild-1", @@ -4120,8 +3906,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update" }, { "InputName": "CascadeChild-1", @@ -4135,8 +3920,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals1 and (col3) not in ((cast('foo' as CHAR)))", - "Table": "u_tbl3" + "Query": "update u_tbl3 set col3 = null where (col3) in ::fkc_vals1 and (col3) not in ((cast('foo' as CHAR)))" }, { "InputName": "Parent", @@ -4146,8 +3930,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set col2 = 'foo' where (col2) in ::fkc_vals", - "Table": "u_tbl2" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set col2 = 'foo' where (col2) in ::fkc_vals" } ] }, @@ -4168,8 +3951,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl9.col9 from u_tbl9 where 1 != 1", - "Query": "select u_tbl9.col9 from u_tbl9 where (col9) in ::fkc_vals2 and (col9) not in ((cast('foo' as CHAR))) for update nowait", - "Table": "u_tbl9" + "Query": "select u_tbl9.col9 from u_tbl9 where (col9) in ::fkc_vals2 and (col9) not in ((cast('foo' as CHAR))) for update nowait" }, { "InputName": "CascadeChild-1", @@ -4183,8 +3965,7 @@ "Cols": [ 0 ], - "Query": "update u_tbl8 set col8 = null where (col8) in ::fkc_vals3", - "Table": "u_tbl8" + "Query": "update u_tbl8 set col8 = null where (col8) in ::fkc_vals3" }, { "InputName": "Parent", @@ -4194,8 +3975,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_tbl9 set col9 = null where (col9) in ::fkc_vals2 and (col9) not in ((cast('foo' as CHAR)))", - "Table": "u_tbl9" + "Query": "update u_tbl9 set col9 = null where (col9) in ::fkc_vals2 and (col9) not in ((cast('foo' as CHAR)))" } ] }, @@ -4207,8 +3987,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_tbl1 as u set u.col1 = 'foo' where u.id in ::dml_vals", - "Table": "u_tbl1" + "Query": "update u_tbl1 as u set u.col1 = 'foo' where u.id in ::dml_vals" } ] }, @@ -4224,8 +4003,7 @@ "Sharded": false }, "FieldQuery": "select m.cola, m.colb from u_multicol_tbl1 as m where 1 != 1", - "Query": "select m.cola, m.colb from u_multicol_tbl1 as m where m.id in ::dml_vals for update", - "Table": "u_multicol_tbl1" + "Query": "select m.cola, m.colb from u_multicol_tbl1 as m where m.id in ::dml_vals for update" }, { "InputName": "CascadeChild-1", @@ -4245,8 +4023,7 @@ "Sharded": false }, "FieldQuery": "select u_multicol_tbl2.cola, u_multicol_tbl2.colb from u_multicol_tbl2 where 1 != 1", - "Query": "select u_multicol_tbl2.cola, u_multicol_tbl2.colb from u_multicol_tbl2 where (cola, colb) in ::fkc_vals4 and (cola) not in (('bar')) for update", - "Table": "u_multicol_tbl2" + "Query": "select u_multicol_tbl2.cola, u_multicol_tbl2.colb from u_multicol_tbl2 where (cola, colb) in ::fkc_vals4 and (cola) not in (('bar')) for update" }, { "InputName": "CascadeChild-1", @@ -4261,8 +4038,7 @@ 0, 1 ], - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_multicol_tbl3 set cola = null, colb = null where (cola, colb) in ::fkc_vals5", - "Table": "u_multicol_tbl3" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_multicol_tbl3 set cola = null, colb = null where (cola, colb) in ::fkc_vals5" }, { "InputName": "Parent", @@ -4272,8 +4048,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_multicol_tbl2 set cola = null, colb = null where (cola, colb) in ::fkc_vals4 and (cola) not in (('bar'))", - "Table": "u_multicol_tbl2" + "Query": "update u_multicol_tbl2 set cola = null, colb = null where (cola, colb) in ::fkc_vals4 and (cola) not in (('bar'))" } ] }, @@ -4285,8 +4060,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update u_multicol_tbl1 as m set m.cola = 'bar' where m.id in ::dml_vals", - "Table": "u_multicol_tbl1" + "Query": "update u_multicol_tbl1 as m set m.cola = 'bar' where m.id in ::dml_vals" } ] } diff --git a/go/vt/vtgate/planbuilder/testdata/foreignkey_checks_off_cases.json b/go/vt/vtgate/planbuilder/testdata/foreignkey_checks_off_cases.json index 3a5105224d2..08c8377c611 100644 --- a/go/vt/vtgate/planbuilder/testdata/foreignkey_checks_off_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/foreignkey_checks_off_cases.json @@ -14,7 +14,6 @@ "Sharded": true }, "Query": "insert /*+ SET_VAR(foreign_key_checks=Off) */ into tbl3(col3, coly) values (:_col3_0, 3)", - "TableName": "tbl3", "VindexValues": { "hash_vin": "1" } @@ -39,7 +38,6 @@ "Sharded": true }, "Query": "insert /*+ SET_VAR(foreign_key_checks=Off) */ into multicol_tbl2(cola, colb, colc) values (:_cola_0, :_colb_0, :_colc_0)", - "TableName": "multicol_tbl2", "VindexValues": { "multicolIdx": "1, 2, 3" } @@ -63,8 +61,7 @@ "Name": "sharded_fk_allow", "Sharded": true }, - "Query": "delete /*+ SET_VAR(foreign_key_checks=Off) */ from tbl1", - "Table": "tbl1" + "Query": "delete /*+ SET_VAR(foreign_key_checks=Off) */ from tbl1" }, "TablesUsed": [ "sharded_fk_allow.tbl1" @@ -85,8 +82,7 @@ "Name": "sharded_fk_allow", "Sharded": true }, - "Query": "delete /*+ SET_VAR(foreign_key_checks=Off) */ from tbl7", - "Table": "tbl7" + "Query": "delete /*+ SET_VAR(foreign_key_checks=Off) */ from tbl7" }, "TablesUsed": [ "sharded_fk_allow.tbl7" @@ -113,7 +109,6 @@ }, "FieldQuery": "select multicol_tbl1.colb, multicol_tbl1.cola, multicol_tbl1.y, multicol_tbl1.colc, multicol_tbl1.x from multicol_tbl1 where 1 != 1", "Query": "select multicol_tbl1.colb, multicol_tbl1.cola, multicol_tbl1.y, multicol_tbl1.colc, multicol_tbl1.x from multicol_tbl1 where cola = 1 and colb = 2 and colc = 3 for update", - "Table": "multicol_tbl1", "Values": [ "1", "2", @@ -138,7 +133,6 @@ 4 ], "Query": "delete /*+ SET_VAR(foreign_key_checks=ON) */ from multicol_tbl2 where (colb, cola, x, colc, y) in ::fkc_vals", - "Table": "multicol_tbl2", "Values": [ "fkc_vals:1", "fkc_vals:0", @@ -155,7 +149,6 @@ "Sharded": true }, "Query": "delete /*+ SET_VAR(foreign_key_checks=On) */ from multicol_tbl1 where cola = 1 and colb = 2 and colc = 3", - "Table": "multicol_tbl1", "Values": [ "1", "2", @@ -186,7 +179,6 @@ "Sharded": true }, "Query": "delete /*+ SET_VAR(foreign_key_checks=Off) */ from tbl8 where col8 = 1", - "Table": "tbl8", "Values": [ "1" ], @@ -212,7 +204,6 @@ "Sharded": true }, "Query": "update /*+ SET_VAR(foreign_key_checks=Off) */ tbl1 set t1col1 = 'foo' where col1 = 1", - "Table": "tbl1", "Values": [ "1" ], @@ -237,8 +228,7 @@ "Name": "sharded_fk_allow", "Sharded": true }, - "Query": "update /*+ SET_VAR(foreign_key_checks=Off) */ tbl7 set t7col7 = 'foo', t7col72 = 42", - "Table": "tbl7" + "Query": "update /*+ SET_VAR(foreign_key_checks=Off) */ tbl7 set t7col7 = 'foo', t7col72 = 42" }, "TablesUsed": [ "sharded_fk_allow.tbl7" @@ -264,8 +254,7 @@ "Sharded": true }, "FieldQuery": "select tbl5.t5col5 from tbl5 where 1 != 1", - "Query": "select tbl5.t5col5 from tbl5 for update", - "Table": "tbl5" + "Query": "select tbl5.t5col5 from tbl5 for update" }, { "InputName": "CascadeChild-1", @@ -279,8 +268,7 @@ "Cols": [ 0 ], - "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ tbl4 set t4col4 = null where (t4col4) in ::fkc_vals and (t4col4) not in (('foo'))", - "Table": "tbl4" + "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ tbl4 set t4col4 = null where (t4col4) in ::fkc_vals and (t4col4) not in (('foo'))" }, { "InputName": "Parent", @@ -290,8 +278,7 @@ "Name": "sharded_fk_allow", "Sharded": true }, - "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ tbl5 set t5col5 = 'foo'", - "Table": "tbl5" + "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ tbl5 set t5col5 = 'foo'" } ] }, @@ -316,7 +303,6 @@ "Sharded": true }, "Query": "insert /*+ SET_VAR(foreign_key_checks=Off) */ into tbl6(col6, t6col6) values (:_col6_0, 'foo')", - "TableName": "tbl6", "VindexValues": { "hash_vin": "100" } @@ -341,7 +327,6 @@ "Sharded": true }, "Query": "delete /*+ SET_VAR(foreign_key_checks=Off) */ from tbl20 where col = 'bar'", - "Table": "tbl20", "Values": [ "'bar'" ], @@ -372,7 +357,6 @@ }, "FieldQuery": "select tbl9.col9 from tbl9 where 1 != 1", "Query": "select tbl9.col9 from tbl9 where col9 = 34 for update", - "Table": "tbl9", "Values": [ "34" ], @@ -390,8 +374,7 @@ "Cols": [ 0 ], - "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ tbl4 set col_ref = null where (col_ref) in ::fkc_vals", - "Table": "tbl4" + "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ tbl4 set col_ref = null where (col_ref) in ::fkc_vals" }, { "InputName": "Parent", @@ -402,7 +385,6 @@ "Sharded": true }, "Query": "delete /*+ SET_VAR(foreign_key_checks=On) */ from tbl9 where col9 = 34", - "Table": "tbl9", "Values": [ "34" ], @@ -431,7 +413,6 @@ "Sharded": true }, "Query": "delete /*+ SET_VAR(foreign_key_checks=Off) */ from multicol_tbl1 where cola = 1 and colb = 2 and colc = 3", - "Table": "multicol_tbl1", "Values": [ "1", "2", @@ -458,8 +439,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=Off) */ u_multicol_tbl1 set cola = 1, colb = 2 where id = 3", - "Table": "u_multicol_tbl1" + "Query": "update /*+ SET_VAR(foreign_key_checks=Off) */ u_multicol_tbl1 set cola = 1, colb = 2 where id = 3" }, "TablesUsed": [ "unsharded_fk_allow.u_multicol_tbl1" @@ -481,7 +461,6 @@ "Sharded": true }, "Query": "insert /*+ SET_VAR(foreign_key_checks=Off) */ into tbl3(col3, coly) values (:_col3_0, 3)", - "TableName": "tbl3", "VindexValues": { "hash_vin": "1" } diff --git a/go/vt/vtgate/planbuilder/testdata/foreignkey_checks_on_cases.json b/go/vt/vtgate/planbuilder/testdata/foreignkey_checks_on_cases.json index 9d9de507022..0de693196cd 100644 --- a/go/vt/vtgate/planbuilder/testdata/foreignkey_checks_on_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/foreignkey_checks_on_cases.json @@ -19,7 +19,6 @@ "Sharded": true }, "Query": "insert /*+ SET_VAR(foreign_key_checks=On) */ into tbl2(col2, coly) values (:_col2_0, 3)", - "TableName": "tbl2", "VindexValues": { "hash_vin": "1" } @@ -44,7 +43,6 @@ "Sharded": true }, "Query": "insert /*+ SET_VAR(foreign_key_checks=On) */ into multicol_tbl2(cola, colb, colc) values (:_cola_0, :_colb_0, :_colc_0)", - "TableName": "multicol_tbl2", "VindexValues": { "multicolIdx": "1, 2, 3" } @@ -84,7 +82,6 @@ }, "FieldQuery": "select multicol_tbl1.colb, multicol_tbl1.cola, multicol_tbl1.y, multicol_tbl1.colc, multicol_tbl1.x from multicol_tbl1 where 1 != 1", "Query": "select multicol_tbl1.colb, multicol_tbl1.cola, multicol_tbl1.y, multicol_tbl1.colc, multicol_tbl1.x from multicol_tbl1 where cola = 1 and colb = 2 and colc = 3 for update", - "Table": "multicol_tbl1", "Values": [ "1", "2", @@ -109,7 +106,6 @@ 4 ], "Query": "delete /*+ SET_VAR(foreign_key_checks=ON) */ from multicol_tbl2 where (colb, cola, x, colc, y) in ::fkc_vals", - "Table": "multicol_tbl2", "Values": [ "fkc_vals:1", "fkc_vals:0", @@ -126,7 +122,6 @@ "Sharded": true }, "Query": "delete /*+ SET_VAR(foreign_key_checks=On) */ from multicol_tbl1 where cola = 1 and colb = 2 and colc = 3", - "Table": "multicol_tbl1", "Values": [ "1", "2", @@ -161,8 +156,7 @@ "Sharded": true }, "FieldQuery": "select tbl5.col5, tbl5.t5col5 from tbl5 where 1 != 1", - "Query": "select tbl5.col5, tbl5.t5col5 from tbl5 for update", - "Table": "tbl5" + "Query": "select tbl5.col5, tbl5.t5col5 from tbl5 for update" }, { "InputName": "CascadeChild-1", @@ -177,7 +171,6 @@ 0 ], "Query": "delete /*+ SET_VAR(foreign_key_checks=ON) */ from tbl4 where (col4) in ::fkc_vals", - "Table": "tbl4", "Values": [ "fkc_vals:0" ], @@ -195,8 +188,7 @@ "Cols": [ 1 ], - "Query": "delete /*+ SET_VAR(foreign_key_checks=ON) */ from tbl4 where (t4col4) in ::fkc_vals1", - "Table": "tbl4" + "Query": "delete /*+ SET_VAR(foreign_key_checks=ON) */ from tbl4 where (t4col4) in ::fkc_vals1" }, { "InputName": "Parent", @@ -206,8 +198,7 @@ "Name": "sharded_fk_allow", "Sharded": true }, - "Query": "delete /*+ SET_VAR(foreign_key_checks=On) */ from tbl5", - "Table": "tbl5" + "Query": "delete /*+ SET_VAR(foreign_key_checks=On) */ from tbl5" } ] }, @@ -241,8 +232,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl9.col9 from u_tbl9 where 1 != 1", - "Query": "select u_tbl9.col9 from u_tbl9 where col9 = 5 for update nowait", - "Table": "u_tbl9" + "Query": "select u_tbl9.col9 from u_tbl9 where col9 = 5 for update nowait" }, { "InputName": "CascadeChild-1", @@ -256,8 +246,7 @@ "Cols": [ 0 ], - "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl8 set col8 = null where (col8) in ::fkc_vals", - "Table": "u_tbl8" + "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl8 set col8 = null where (col8) in ::fkc_vals" }, { "InputName": "Parent", @@ -267,8 +256,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "delete /*+ SET_VAR(foreign_key_checks=On) */ from u_tbl9 where col9 = 5", - "Table": "u_tbl9" + "Query": "delete /*+ SET_VAR(foreign_key_checks=On) */ from u_tbl9 where col9 = 5" } ] }, @@ -292,8 +280,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl5 set col5 = 'foo' where id = 1", - "Table": "u_tbl5" + "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl5 set col5 = 'foo' where id = 1" }, "TablesUsed": [ "unsharded_fk_allow.u_tbl5" @@ -319,8 +306,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2 from u_tbl2 where id = 1 for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2 from u_tbl2 where id = 1 for update" }, { "InputName": "CascadeChild-1", @@ -334,8 +320,7 @@ "Cols": [ 0 ], - "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl3 set col3 = null where (col3) in ::fkc_vals and (col3) not in ((cast('bar' as CHAR)))", - "Table": "u_tbl3" + "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl3 set col3 = null where (col3) in ::fkc_vals and (col3) not in ((cast('bar' as CHAR)))" }, { "InputName": "Parent", @@ -345,8 +330,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl2 set col2 = 'bar' where id = 1", - "Table": "u_tbl2" + "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl2 set col2 = 'bar' where id = 1" } ] }, @@ -370,8 +354,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl2 set col_no_ref = 'baz' where id = 1", - "Table": "u_tbl2" + "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl2 set col_no_ref = 'baz' where id = 1" }, "TablesUsed": [ "unsharded_fk_allow.u_tbl2" @@ -397,8 +380,7 @@ "Name": "sharded_fk_allow", "Sharded": true }, - "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ tbl1 set not_ref_col = 'foo' where id = 1", - "Table": "tbl1" + "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ tbl1 set not_ref_col = 'foo' where id = 1" }, "TablesUsed": [ "sharded_fk_allow.tbl1" @@ -429,8 +411,7 @@ "Sharded": true }, "FieldQuery": "select tbl5.t5col5 from tbl5 where 1 != 1", - "Query": "select tbl5.t5col5 from tbl5 for update", - "Table": "tbl5" + "Query": "select tbl5.t5col5 from tbl5 for update" }, { "InputName": "CascadeChild-1", @@ -444,8 +425,7 @@ "Cols": [ 0 ], - "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ tbl4 set t4col4 = null where (t4col4) in ::fkc_vals and (t4col4) not in (('foo'))", - "Table": "tbl4" + "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ tbl4 set t4col4 = null where (t4col4) in ::fkc_vals and (t4col4) not in (('foo'))" }, { "InputName": "Parent", @@ -455,8 +435,7 @@ "Name": "sharded_fk_allow", "Sharded": true }, - "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ tbl5 set t5col5 = 'foo'", - "Table": "tbl5" + "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ tbl5 set t5col5 = 'foo'" } ] }, @@ -485,8 +464,7 @@ "Name": "sharded_fk_allow", "Sharded": true }, - "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ tbl2 set col = 'foo'", - "Table": "tbl2" + "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ tbl2 set col = 'foo'" }, "TablesUsed": [ "sharded_fk_allow.tbl2" @@ -522,7 +500,6 @@ "OperatorType": "Join", "Variant": "LeftJoin", "JoinColumnIndexes": "R:0", - "TableName": "tbl10_tbl3", "Inputs": [ { "OperatorType": "Route", @@ -532,8 +509,7 @@ "Sharded": true }, "FieldQuery": "select 1 from tbl10 where 1 != 1", - "Query": "select 1 from tbl10 where not (tbl10.col) <=> ('foo') for share", - "Table": "tbl10" + "Query": "select 1 from tbl10 where not (tbl10.col) <=> ('foo') for share" }, { "OperatorType": "Route", @@ -543,8 +519,7 @@ "Sharded": true }, "FieldQuery": "select tbl3.col from tbl3 where 1 != 1", - "Query": "select tbl3.col from tbl3 where tbl3.col = 'foo' for share", - "Table": "tbl3" + "Query": "select tbl3.col from tbl3 where tbl3.col = 'foo' for share" } ] } @@ -562,8 +537,7 @@ "Name": "sharded_fk_allow", "Sharded": true }, - "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ tbl10 set col = 'foo'", - "Table": "tbl10" + "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ tbl10 set col = 'foo'" } ] }, @@ -598,7 +572,6 @@ }, "FieldQuery": "select tbl9.col9 from tbl9 where 1 != 1", "Query": "select tbl9.col9 from tbl9 where col9 = 34 for update", - "Table": "tbl9", "Values": [ "34" ], @@ -616,8 +589,7 @@ "Cols": [ 0 ], - "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ tbl4 set col_ref = null where (col_ref) in ::fkc_vals", - "Table": "tbl4" + "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ tbl4 set col_ref = null where (col_ref) in ::fkc_vals" }, { "InputName": "Parent", @@ -628,7 +600,6 @@ "Sharded": true }, "Query": "delete /*+ SET_VAR(foreign_key_checks=On) */ from tbl9 where col9 = 34", - "Table": "tbl9", "Values": [ "34" ], @@ -661,8 +632,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl1.col1 from u_tbl1 where 1 != 1", - "Query": "select u_tbl1.col1 from u_tbl1 for update", - "Table": "u_tbl1" + "Query": "select u_tbl1.col1 from u_tbl1 for update" }, { "InputName": "CascadeChild-1", @@ -681,8 +651,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update" }, { "InputName": "CascadeChild-1", @@ -696,8 +665,7 @@ "Cols": [ 0 ], - "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl3 set col3 = null where (col3) in ::fkc_vals1 and (col3) not in ((cast('foo' as CHAR)))", - "Table": "u_tbl3" + "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl3 set col3 = null where (col3) in ::fkc_vals1 and (col3) not in ((cast('foo' as CHAR)))" }, { "InputName": "Parent", @@ -707,8 +675,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set col2 = 'foo' where (col2) in ::fkc_vals", - "Table": "u_tbl2" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set col2 = 'foo' where (col2) in ::fkc_vals" } ] }, @@ -729,8 +696,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl9.col9 from u_tbl9 where 1 != 1", - "Query": "select u_tbl9.col9 from u_tbl9 where (col9) in ::fkc_vals2 and (col9) not in ((cast('foo' as CHAR))) for update nowait", - "Table": "u_tbl9" + "Query": "select u_tbl9.col9 from u_tbl9 where (col9) in ::fkc_vals2 and (col9) not in ((cast('foo' as CHAR))) for update nowait" }, { "InputName": "CascadeChild-1", @@ -744,8 +710,7 @@ "Cols": [ 0 ], - "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl8 set col8 = null where (col8) in ::fkc_vals3", - "Table": "u_tbl8" + "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl8 set col8 = null where (col8) in ::fkc_vals3" }, { "InputName": "Parent", @@ -755,8 +720,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl9 set col9 = null where (col9) in ::fkc_vals2 and (col9) not in ((cast('foo' as CHAR)))", - "Table": "u_tbl9" + "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl9 set col9 = null where (col9) in ::fkc_vals2 and (col9) not in ((cast('foo' as CHAR)))" } ] }, @@ -768,8 +732,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl1 set col1 = 'foo'", - "Table": "u_tbl1" + "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl1 set col1 = 'foo'" } ] }, @@ -803,8 +766,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.id from u_tbl2 where 1 != 1", - "Query": "select /*+ SET_VAR(foreign_key_checks=On) */ u_tbl2.id from u_tbl2 limit 2 for update", - "Table": "u_tbl2" + "Query": "select /*+ SET_VAR(foreign_key_checks=On) */ u_tbl2.id from u_tbl2 limit 2 for update" }, { "OperatorType": "FkCascade", @@ -818,8 +780,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select /*+ SET_VAR(foreign_key_checks=On) */ u_tbl2.col2 from u_tbl2 where u_tbl2.id in ::dml_vals for update", - "Table": "u_tbl2" + "Query": "select /*+ SET_VAR(foreign_key_checks=On) */ u_tbl2.col2 from u_tbl2 where u_tbl2.id in ::dml_vals for update" }, { "InputName": "CascadeChild-1", @@ -833,8 +794,7 @@ "Cols": [ 0 ], - "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl3 set col3 = null where (col3) in ::fkc_vals and (col3) not in ((cast('bar' as CHAR)))", - "Table": "u_tbl3" + "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl3 set col3 = null where (col3) in ::fkc_vals and (col3) not in ((cast('bar' as CHAR)))" }, { "InputName": "Parent", @@ -844,8 +804,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl2 set col2 = 'bar' where u_tbl2.id in ::dml_vals", - "Table": "u_tbl2" + "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl2 set col2 = 'bar' where u_tbl2.id in ::dml_vals" } ] } @@ -876,8 +835,7 @@ "Sharded": false }, "FieldQuery": "select 1 from u_tbl2 left join u_tbl1 on u_tbl1.col1 = cast(u_tbl2.col1 + 'bar' as CHAR) where 1 != 1", - "Query": "select 1 from u_tbl2 left join u_tbl1 on u_tbl1.col1 = cast(u_tbl2.col1 + 'bar' as CHAR) where u_tbl1.col1 is null and cast(u_tbl2.col1 + 'bar' as CHAR) is not null and not (u_tbl2.col2) <=> (cast(u_tbl2.col1 + 'bar' as CHAR)) and u_tbl2.id = 1 limit 1 for share", - "Table": "u_tbl1, u_tbl2" + "Query": "select 1 from u_tbl2 left join u_tbl1 on u_tbl1.col1 = cast(u_tbl2.col1 + 'bar' as CHAR) where u_tbl1.col1 is null and cast(u_tbl2.col1 + 'bar' as CHAR) is not null and not (u_tbl2.col2) <=> (cast(u_tbl2.col1 + 'bar' as CHAR)) and u_tbl2.id = 1 limit 1 for share" }, { "InputName": "PostVerify", @@ -892,8 +850,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2, col2 <=> cast(col1 + 'bar' as CHAR), cast(col1 + 'bar' as CHAR) from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2, col2 <=> cast(col1 + 'bar' as CHAR), cast(col1 + 'bar' as CHAR) from u_tbl2 where id = 1 for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2, col2 <=> cast(col1 + 'bar' as CHAR), cast(col1 + 'bar' as CHAR) from u_tbl2 where id = 1 for update" }, { "InputName": "CascadeChild-1", @@ -914,8 +871,7 @@ "UpdateExprBvName": "fkc_upd" } ], - "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl3 set col3 = null where (col3) in ::fkc_vals and (:fkc_upd is null or (col3) not in ((:fkc_upd)))", - "Table": "u_tbl3" + "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl3 set col3 = null where (col3) in ::fkc_vals and (:fkc_upd is null or (col3) not in ((:fkc_upd)))" }, { "InputName": "Parent", @@ -925,8 +881,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set m = 2, col2 = col1 + 'bar' where id = 1", - "Table": "u_tbl2" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set m = 2, col2 = col1 + 'bar' where id = 1" } ] } @@ -958,8 +913,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl1.col1, col1 <=> cast(x + 'bar' as CHAR), cast(x + 'bar' as CHAR) from u_tbl1 where 1 != 1", - "Query": "select u_tbl1.col1, col1 <=> cast(x + 'bar' as CHAR), cast(x + 'bar' as CHAR) from u_tbl1 where id = 1 for update", - "Table": "u_tbl1" + "Query": "select u_tbl1.col1, col1 <=> cast(x + 'bar' as CHAR), cast(x + 'bar' as CHAR) from u_tbl1 where id = 1 for update" }, { "InputName": "CascadeChild-1", @@ -985,8 +939,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update" }, { "InputName": "CascadeChild-1", @@ -1000,8 +953,7 @@ "Cols": [ 0 ], - "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl3 set col3 = null where (col3) in ::fkc_vals1 and (cast(:fkc_upd as CHAR) is null or (col3) not in ((cast(:fkc_upd as CHAR))))", - "Table": "u_tbl3" + "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl3 set col3 = null where (col3) in ::fkc_vals1 and (cast(:fkc_upd as CHAR) is null or (col3) not in ((cast(:fkc_upd as CHAR))))" }, { "InputName": "Parent", @@ -1011,8 +963,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set col2 = :fkc_upd where (col2) in ::fkc_vals", - "Table": "u_tbl2" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set col2 = :fkc_upd where (col2) in ::fkc_vals" } ] }, @@ -1040,8 +991,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl9.col9 from u_tbl9 where 1 != 1", - "Query": "select u_tbl9.col9 from u_tbl9 where (col9) in ::fkc_vals2 and (:fkc_upd1 is null or (col9) not in ((:fkc_upd1))) for update nowait", - "Table": "u_tbl9" + "Query": "select u_tbl9.col9 from u_tbl9 where (col9) in ::fkc_vals2 and (:fkc_upd1 is null or (col9) not in ((:fkc_upd1))) for update nowait" }, { "InputName": "CascadeChild-1", @@ -1055,8 +1005,7 @@ "Cols": [ 0 ], - "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl8 set col8 = null where (col8) in ::fkc_vals3", - "Table": "u_tbl8" + "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl8 set col8 = null where (col8) in ::fkc_vals3" }, { "InputName": "Parent", @@ -1066,8 +1015,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl9 set col9 = null where (col9) in ::fkc_vals2 and (:fkc_upd1 is null or (col9) not in ((:fkc_upd1)))", - "Table": "u_tbl9" + "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl9 set col9 = null where (col9) in ::fkc_vals2 and (:fkc_upd1 is null or (col9) not in ((:fkc_upd1)))" } ] }, @@ -1079,8 +1027,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl1 set m = 2, col1 = x + 'bar' where id = 1", - "Table": "u_tbl1" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl1 set m = 2, col1 = x + 'bar' where id = 1" } ] }, @@ -1112,8 +1059,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2 from u_tbl2 where id = 1 for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2 from u_tbl2 where id = 1 for update" }, { "InputName": "CascadeChild-1", @@ -1127,8 +1073,7 @@ "Cols": [ 0 ], - "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl3 set col3 = null where (col3) in ::fkc_vals and (col3) not in ((cast(2 as CHAR)))", - "Table": "u_tbl3" + "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl3 set col3 = null where (col3) in ::fkc_vals and (col3) not in ((cast(2 as CHAR)))" }, { "InputName": "Parent", @@ -1138,8 +1083,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl2 set m = col1 + 'bar', col2 = 2 where id = 1", - "Table": "u_tbl2" + "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl2 set m = col1 + 'bar', col2 = 2 where id = 1" } ] }, @@ -1168,8 +1112,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl1.col1 from u_tbl1 where 1 != 1", - "Query": "select u_tbl1.col1 from u_tbl1 where id = 1 for update", - "Table": "u_tbl1" + "Query": "select u_tbl1.col1 from u_tbl1 where id = 1 for update" }, { "InputName": "CascadeChild-1", @@ -1188,8 +1131,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update" }, { "InputName": "CascadeChild-1", @@ -1203,8 +1145,7 @@ "Cols": [ 0 ], - "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl3 set col3 = null where (col3) in ::fkc_vals1 and (col3) not in ((cast(2 as CHAR)))", - "Table": "u_tbl3" + "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl3 set col3 = null where (col3) in ::fkc_vals1 and (col3) not in ((cast(2 as CHAR)))" }, { "InputName": "Parent", @@ -1214,8 +1155,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set col2 = 2 where (col2) in ::fkc_vals", - "Table": "u_tbl2" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set col2 = 2 where (col2) in ::fkc_vals" } ] }, @@ -1236,8 +1176,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl9.col9 from u_tbl9 where 1 != 1", - "Query": "select u_tbl9.col9 from u_tbl9 where (col9) in ::fkc_vals2 and (col9) not in ((cast(2 as CHAR))) for update nowait", - "Table": "u_tbl9" + "Query": "select u_tbl9.col9 from u_tbl9 where (col9) in ::fkc_vals2 and (col9) not in ((cast(2 as CHAR))) for update nowait" }, { "InputName": "CascadeChild-1", @@ -1251,8 +1190,7 @@ "Cols": [ 0 ], - "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl8 set col8 = null where (col8) in ::fkc_vals3", - "Table": "u_tbl8" + "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl8 set col8 = null where (col8) in ::fkc_vals3" }, { "InputName": "Parent", @@ -1262,8 +1200,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl9 set col9 = null where (col9) in ::fkc_vals2 and (col9) not in ((cast(2 as CHAR)))", - "Table": "u_tbl9" + "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl9 set col9 = null where (col9) in ::fkc_vals2 and (col9) not in ((cast(2 as CHAR)))" } ] }, @@ -1275,8 +1212,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl1 set m = x + 'bar', col1 = 2 where id = 1", - "Table": "u_tbl1" + "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl1 set m = x + 'bar', col1 = 2 where id = 1" } ] }, @@ -1315,8 +1251,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.id from u_tbl2 where 1 != 1", - "Query": "select /*+ SET_VAR(foreign_key_checks=On) */ u_tbl2.id from u_tbl2 limit 2 for update", - "Table": "u_tbl2" + "Query": "select /*+ SET_VAR(foreign_key_checks=On) */ u_tbl2.id from u_tbl2 limit 2 for update" }, { "OperatorType": "FkCascade", @@ -1330,8 +1265,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select /*+ SET_VAR(foreign_key_checks=On) */ u_tbl2.col2 from u_tbl2 where u_tbl2.id in ::dml_vals for update", - "Table": "u_tbl2" + "Query": "select /*+ SET_VAR(foreign_key_checks=On) */ u_tbl2.col2 from u_tbl2 where u_tbl2.id in ::dml_vals for update" }, { "InputName": "CascadeChild-1", @@ -1345,8 +1279,7 @@ "Cols": [ 0 ], - "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl3 set col3 = null where (col3) in ::fkc_vals", - "Table": "u_tbl3" + "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl3 set col3 = null where (col3) in ::fkc_vals" }, { "InputName": "Parent", @@ -1356,8 +1289,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "delete /*+ SET_VAR(foreign_key_checks=On) */ from u_tbl2 where u_tbl2.id in ::dml_vals", - "Table": "u_tbl2" + "Query": "delete /*+ SET_VAR(foreign_key_checks=On) */ from u_tbl2 where u_tbl2.id in ::dml_vals" } ] } @@ -1401,7 +1333,6 @@ "JoinVars": { "tbl3_colx": 0 }, - "TableName": "tbl3_tbl1", "Inputs": [ { "OperatorType": "Route", @@ -1411,8 +1342,7 @@ "Sharded": true }, "FieldQuery": "select tbl3.colx from tbl3 where 1 != 1", - "Query": "select tbl3.colx from tbl3 where tbl3.colx + 10 is not null and not (tbl3.coly) <=> (tbl3.colx + 10) and tbl3.coly = 10 for share", - "Table": "tbl3" + "Query": "select tbl3.colx from tbl3 where tbl3.colx + 10 is not null and not (tbl3.coly) <=> (tbl3.colx + 10) and tbl3.coly = 10 for share" }, { "OperatorType": "Route", @@ -1422,8 +1352,7 @@ "Sharded": true }, "FieldQuery": "select tbl1.t1col1 from tbl1 where 1 != 1", - "Query": "select tbl1.t1col1 from tbl1 where tbl1.t1col1 = :tbl3_colx + 10 for share", - "Table": "tbl1" + "Query": "select tbl1.t1col1 from tbl1 where tbl1.t1col1 = :tbl3_colx + 10 for share" } ] } @@ -1441,8 +1370,7 @@ "Name": "sharded_fk_allow", "Sharded": true }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ tbl3 set coly = colx + 10 where coly = 10", - "Table": "tbl3" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ tbl3 set coly = colx + 10 where coly = 10" } ] }, @@ -1481,7 +1409,6 @@ "OperatorType": "Join", "Variant": "LeftJoin", "JoinColumnIndexes": "R:0", - "TableName": "tbl3_tbl1", "Inputs": [ { "OperatorType": "Route", @@ -1491,8 +1418,7 @@ "Sharded": true }, "FieldQuery": "select 1 from tbl3 where 1 != 1", - "Query": "select 1 from tbl3 where not (tbl3.coly) <=> (20) and tbl3.coly = 10 for share", - "Table": "tbl3" + "Query": "select 1 from tbl3 where not (tbl3.coly) <=> (20) and tbl3.coly = 10 for share" }, { "OperatorType": "Route", @@ -1502,8 +1428,7 @@ "Sharded": true }, "FieldQuery": "select tbl1.t1col1 from tbl1 where 1 != 1", - "Query": "select tbl1.t1col1 from tbl1 where tbl1.t1col1 = 20 for share", - "Table": "tbl1" + "Query": "select tbl1.t1col1 from tbl1 where tbl1.t1col1 = 20 for share" } ] } @@ -1521,8 +1446,7 @@ "Name": "sharded_fk_allow", "Sharded": true }, - "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ tbl3 set coly = 20 where coly = 10", - "Table": "tbl3" + "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ tbl3 set coly = 20 where coly = 10" } ] }, @@ -1551,8 +1475,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl6.col6 from u_tbl6 where 1 != 1", - "Query": "select u_tbl6.col6 from u_tbl6 for update", - "Table": "u_tbl6" + "Query": "select u_tbl6.col6 from u_tbl6 for update" }, { "InputName": "CascadeChild-1", @@ -1571,8 +1494,7 @@ "Sharded": false }, "FieldQuery": "select 1 from u_tbl8 left join u_tbl9 on u_tbl9.col9 = cast('foo' as CHAR) where 1 != 1", - "Query": "select 1 from u_tbl8 left join u_tbl9 on u_tbl9.col9 = cast('foo' as CHAR) where u_tbl9.col9 is null and not (u_tbl8.col8) <=> (cast('foo' as CHAR)) and (u_tbl8.col8) in ::fkc_vals limit 1 for share nowait", - "Table": "u_tbl8, u_tbl9" + "Query": "select 1 from u_tbl8 left join u_tbl9 on u_tbl9.col9 = cast('foo' as CHAR) where u_tbl9.col9 is null and not (u_tbl8.col8) <=> (cast('foo' as CHAR)) and (u_tbl8.col8) in ::fkc_vals limit 1 for share nowait" }, { "InputName": "PostVerify", @@ -1582,8 +1504,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl8 set col8 = 'foo' where (col8) in ::fkc_vals", - "Table": "u_tbl8" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl8 set col8 = 'foo' where (col8) in ::fkc_vals" } ] }, @@ -1595,8 +1516,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl6 set col6 = 'foo'", - "Table": "u_tbl6" + "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl6 set col6 = 'foo'" } ] }, @@ -1626,8 +1546,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl7.col7 from u_tbl7 where 1 != 1", - "Query": "select u_tbl7.col7 from u_tbl7 for update", - "Table": "u_tbl7" + "Query": "select u_tbl7.col7 from u_tbl7 for update" }, { "InputName": "CascadeChild-1", @@ -1646,8 +1565,7 @@ "Sharded": false }, "FieldQuery": "select 1 from u_tbl4 left join u_tbl3 on u_tbl3.col3 = cast('foo' as CHAR) where 1 != 1", - "Query": "select 1 from u_tbl4 left join u_tbl3 on u_tbl3.col3 = cast('foo' as CHAR) where u_tbl3.col3 is null and not (u_tbl4.col4) <=> (cast('foo' as CHAR)) and (u_tbl4.col4) in ::fkc_vals limit 1 for share", - "Table": "u_tbl3, u_tbl4" + "Query": "select 1 from u_tbl4 left join u_tbl3 on u_tbl3.col3 = cast('foo' as CHAR) where u_tbl3.col3 is null and not (u_tbl4.col4) <=> (cast('foo' as CHAR)) and (u_tbl4.col4) in ::fkc_vals limit 1 for share" }, { "InputName": "VerifyChild-2", @@ -1658,8 +1576,7 @@ "Sharded": false }, "FieldQuery": "select 1 from u_tbl4, u_tbl9 where 1 != 1", - "Query": "select 1 from u_tbl4, u_tbl9 where u_tbl4.col4 = u_tbl9.col9 and (u_tbl4.col4) in ::fkc_vals and (u_tbl9.col9) not in ((cast('foo' as CHAR))) limit 1 for share", - "Table": "u_tbl4, u_tbl9" + "Query": "select 1 from u_tbl4, u_tbl9 where u_tbl4.col4 = u_tbl9.col9 and (u_tbl4.col4) in ::fkc_vals and (u_tbl9.col9) not in ((cast('foo' as CHAR))) limit 1 for share" }, { "InputName": "PostVerify", @@ -1669,8 +1586,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl4 set col4 = 'foo' where (col4) in ::fkc_vals", - "Table": "u_tbl4" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl4 set col4 = 'foo' where (col4) in ::fkc_vals" } ] }, @@ -1682,8 +1598,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl7 set col7 = 'foo'", - "Table": "u_tbl7" + "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl7 set col7 = 'foo'" } ] }, @@ -1714,8 +1629,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl7.col7 from u_tbl7 where 1 != 1", - "Query": "select u_tbl7.col7 from u_tbl7 for update", - "Table": "u_tbl7" + "Query": "select u_tbl7.col7 from u_tbl7 for update" }, { "InputName": "CascadeChild-1", @@ -1734,8 +1648,7 @@ "Sharded": false }, "FieldQuery": "select 1 from u_tbl4 left join u_tbl3 on u_tbl3.col3 = cast(:v1 as CHAR) where 1 != 1", - "Query": "select 1 from u_tbl4 left join u_tbl3 on u_tbl3.col3 = cast(:v1 as CHAR) where u_tbl3.col3 is null and cast(:v1 as CHAR) is not null and not (u_tbl4.col4) <=> (cast(:v1 as CHAR)) and (u_tbl4.col4) in ::fkc_vals limit 1 for share", - "Table": "u_tbl3, u_tbl4" + "Query": "select 1 from u_tbl4 left join u_tbl3 on u_tbl3.col3 = cast(:v1 as CHAR) where u_tbl3.col3 is null and cast(:v1 as CHAR) is not null and not (u_tbl4.col4) <=> (cast(:v1 as CHAR)) and (u_tbl4.col4) in ::fkc_vals limit 1 for share" }, { "InputName": "VerifyChild-2", @@ -1746,8 +1659,7 @@ "Sharded": false }, "FieldQuery": "select 1 from u_tbl4, u_tbl9 where 1 != 1", - "Query": "select 1 from u_tbl4, u_tbl9 where u_tbl4.col4 = u_tbl9.col9 and (u_tbl4.col4) in ::fkc_vals and (cast(:v1 as CHAR) is null or (u_tbl9.col9) not in ((cast(:v1 as CHAR)))) limit 1 for share", - "Table": "u_tbl4, u_tbl9" + "Query": "select 1 from u_tbl4, u_tbl9 where u_tbl4.col4 = u_tbl9.col9 and (u_tbl4.col4) in ::fkc_vals and (cast(:v1 as CHAR) is null or (u_tbl9.col9) not in ((cast(:v1 as CHAR)))) limit 1 for share" }, { "InputName": "PostVerify", @@ -1757,8 +1669,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl4 set col4 = :v1 where (col4) in ::fkc_vals", - "Table": "u_tbl4" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl4 set col4 = :v1 where (col4) in ::fkc_vals" } ] }, @@ -1770,8 +1681,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl7 set col7 = :v1", - "Table": "u_tbl7" + "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl7 set col7 = :v1" } ] }, @@ -1802,8 +1712,7 @@ "Sharded": false }, "NoAutoCommit": true, - "Query": "insert /*+ SET_VAR(foreign_key_checks=On) */ into u_tbl1(id, col1) values (1, 3)", - "TableName": "u_tbl1" + "Query": "insert /*+ SET_VAR(foreign_key_checks=On) */ into u_tbl1(id, col1) values (1, 3)" }, { "InputName": "Update-1", @@ -1818,8 +1727,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl1.col1 from u_tbl1 where 1 != 1", - "Query": "select u_tbl1.col1 from u_tbl1 where id = 1 for update", - "Table": "u_tbl1" + "Query": "select u_tbl1.col1 from u_tbl1 where id = 1 for update" }, { "InputName": "CascadeChild-1", @@ -1838,8 +1746,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update" }, { "InputName": "CascadeChild-1", @@ -1853,8 +1760,7 @@ "Cols": [ 0 ], - "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl3 set col3 = null where (col3) in ::fkc_vals1 and (col3) not in ((cast(5 as CHAR)))", - "Table": "u_tbl3" + "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl3 set col3 = null where (col3) in ::fkc_vals1 and (col3) not in ((cast(5 as CHAR)))" }, { "InputName": "Parent", @@ -1864,8 +1770,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set col2 = 5 where (col2) in ::fkc_vals", - "Table": "u_tbl2" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_tbl2 set col2 = 5 where (col2) in ::fkc_vals" } ] }, @@ -1886,8 +1791,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl9.col9 from u_tbl9 where 1 != 1", - "Query": "select u_tbl9.col9 from u_tbl9 where (col9) in ::fkc_vals2 and (col9) not in ((cast(5 as CHAR))) for update nowait", - "Table": "u_tbl9" + "Query": "select u_tbl9.col9 from u_tbl9 where (col9) in ::fkc_vals2 and (col9) not in ((cast(5 as CHAR))) for update nowait" }, { "InputName": "CascadeChild-1", @@ -1901,8 +1805,7 @@ "Cols": [ 0 ], - "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl8 set col8 = null where (col8) in ::fkc_vals3", - "Table": "u_tbl8" + "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl8 set col8 = null where (col8) in ::fkc_vals3" }, { "InputName": "Parent", @@ -1912,8 +1815,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl9 set col9 = null where (col9) in ::fkc_vals2 and (col9) not in ((cast(5 as CHAR)))", - "Table": "u_tbl9" + "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl9 set col9 = null where (col9) in ::fkc_vals2 and (col9) not in ((cast(5 as CHAR)))" } ] }, @@ -1925,8 +1827,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl1 set col1 = 5 where id = 1", - "Table": "u_tbl1" + "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_tbl1 set col1 = 5 where id = 1" } ] } @@ -1955,8 +1856,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "insert /*+ SET_VAR(foreign_key_checks=On) */ into u_tbl1(id, col1, foo) values (1, 3, 'bar') on duplicate key update foo = 'baz'", - "TableName": "u_tbl1" + "Query": "insert /*+ SET_VAR(foreign_key_checks=On) */ into u_tbl1(id, col1, foo) values (1, 3, 'bar') on duplicate key update foo = 'baz'" }, "TablesUsed": [ "unsharded_fk_allow.u_tbl1" @@ -1990,8 +1890,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl1.col1 from u_tbl1 where 1 != 1", - "Query": "select u_tbl1.col1 from u_tbl1 where (id) in ((1)) for update", - "Table": "u_tbl1" + "Query": "select u_tbl1.col1 from u_tbl1 where (id) in ((1)) for update" }, { "InputName": "CascadeChild-1", @@ -2010,8 +1909,7 @@ "Sharded": false }, "FieldQuery": "select u_tbl2.col2 from u_tbl2 where 1 != 1", - "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update", - "Table": "u_tbl2" + "Query": "select u_tbl2.col2 from u_tbl2 where (col2) in ::fkc_vals for update" }, { "InputName": "CascadeChild-1", @@ -2025,8 +1923,7 @@ "Cols": [ 0 ], - "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl3 set col3 = null where (col3) in ::fkc_vals1", - "Table": "u_tbl3" + "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_tbl3 set col3 = null where (col3) in ::fkc_vals1" }, { "InputName": "Parent", @@ -2036,8 +1933,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "delete /*+ SET_VAR(foreign_key_checks=ON) */ from u_tbl2 where (col2) in ::fkc_vals", - "Table": "u_tbl2" + "Query": "delete /*+ SET_VAR(foreign_key_checks=ON) */ from u_tbl2 where (col2) in ::fkc_vals" } ] }, @@ -2049,8 +1945,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "delete /*+ SET_VAR(foreign_key_checks=On) */ from u_tbl1 where (id) in ((1))", - "Table": "u_tbl1" + "Query": "delete /*+ SET_VAR(foreign_key_checks=On) */ from u_tbl1 where (id) in ((1))" } ] }, @@ -2062,8 +1957,7 @@ "Sharded": false }, "NoAutoCommit": true, - "Query": "insert /*+ SET_VAR(foreign_key_checks=On) */ into u_tbl1(id, col1) values (1, 2)", - "TableName": "u_tbl1" + "Query": "insert /*+ SET_VAR(foreign_key_checks=On) */ into u_tbl1(id, col1) values (1, 2)" } ] }, @@ -2093,8 +1987,7 @@ "Sharded": false }, "FieldQuery": "select u_multicol_tbl1.cola, u_multicol_tbl1.colb from u_multicol_tbl1 where 1 != 1", - "Query": "select u_multicol_tbl1.cola, u_multicol_tbl1.colb from u_multicol_tbl1 where id = 3 for update", - "Table": "u_multicol_tbl1" + "Query": "select u_multicol_tbl1.cola, u_multicol_tbl1.colb from u_multicol_tbl1 where id = 3 for update" }, { "InputName": "CascadeChild-1", @@ -2114,8 +2007,7 @@ "Sharded": false }, "FieldQuery": "select u_multicol_tbl2.cola, u_multicol_tbl2.colb from u_multicol_tbl2 where 1 != 1", - "Query": "select u_multicol_tbl2.cola, u_multicol_tbl2.colb from u_multicol_tbl2 where (cola, colb) in ::fkc_vals and (cola, colb) not in ((1, 2)) for update", - "Table": "u_multicol_tbl2" + "Query": "select u_multicol_tbl2.cola, u_multicol_tbl2.colb from u_multicol_tbl2 where (cola, colb) in ::fkc_vals and (cola, colb) not in ((1, 2)) for update" }, { "InputName": "CascadeChild-1", @@ -2130,8 +2022,7 @@ 0, 1 ], - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_multicol_tbl3 set cola = null, colb = null where (cola, colb) in ::fkc_vals1", - "Table": "u_multicol_tbl3" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_multicol_tbl3 set cola = null, colb = null where (cola, colb) in ::fkc_vals1" }, { "InputName": "Parent", @@ -2141,8 +2032,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_multicol_tbl2 set cola = null, colb = null where (cola, colb) in ::fkc_vals and (cola, colb) not in ((1, 2))", - "Table": "u_multicol_tbl2" + "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_multicol_tbl2 set cola = null, colb = null where (cola, colb) in ::fkc_vals and (cola, colb) not in ((1, 2))" } ] }, @@ -2154,8 +2044,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_multicol_tbl1 set cola = 1, colb = 2 where id = 3", - "Table": "u_multicol_tbl1" + "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_multicol_tbl1 set cola = 1, colb = 2 where id = 3" } ] }, @@ -2185,8 +2074,7 @@ "Sharded": false }, "FieldQuery": "select u_multicol_tbl1.cola, u_multicol_tbl1.colb from u_multicol_tbl1 where 1 != 1", - "Query": "select u_multicol_tbl1.cola, u_multicol_tbl1.colb from u_multicol_tbl1 where id = :v3 for update", - "Table": "u_multicol_tbl1" + "Query": "select u_multicol_tbl1.cola, u_multicol_tbl1.colb from u_multicol_tbl1 where id = :v3 for update" }, { "InputName": "CascadeChild-1", @@ -2206,8 +2094,7 @@ "Sharded": false }, "FieldQuery": "select u_multicol_tbl2.cola, u_multicol_tbl2.colb from u_multicol_tbl2 where 1 != 1", - "Query": "select u_multicol_tbl2.cola, u_multicol_tbl2.colb from u_multicol_tbl2 where (cola, colb) in ::fkc_vals and (:v2 is null or (:v1 is null or (cola, colb) not in ((:v1, :v2)))) for update", - "Table": "u_multicol_tbl2" + "Query": "select u_multicol_tbl2.cola, u_multicol_tbl2.colb from u_multicol_tbl2 where (cola, colb) in ::fkc_vals and (:v2 is null or (:v1 is null or (cola, colb) not in ((:v1, :v2)))) for update" }, { "InputName": "CascadeChild-1", @@ -2222,8 +2109,7 @@ 0, 1 ], - "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_multicol_tbl3 set cola = null, colb = null where (cola, colb) in ::fkc_vals1", - "Table": "u_multicol_tbl3" + "Query": "update /*+ SET_VAR(foreign_key_checks=OFF) */ u_multicol_tbl3 set cola = null, colb = null where (cola, colb) in ::fkc_vals1" }, { "InputName": "Parent", @@ -2233,8 +2119,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_multicol_tbl2 set cola = null, colb = null where (cola, colb) in ::fkc_vals and (:v2 is null or (:v1 is null or (cola, colb) not in ((:v1, :v2))))", - "Table": "u_multicol_tbl2" + "Query": "update /*+ SET_VAR(foreign_key_checks=ON) */ u_multicol_tbl2 set cola = null, colb = null where (cola, colb) in ::fkc_vals and (:v2 is null or (:v1 is null or (cola, colb) not in ((:v1, :v2))))" } ] }, @@ -2246,8 +2131,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_multicol_tbl1 set cola = :v1, colb = :v2 where id = :v3", - "Table": "u_multicol_tbl1" + "Query": "update /*+ SET_VAR(foreign_key_checks=On) */ u_multicol_tbl1 set cola = :v1, colb = :v2 where id = :v3" } ] }, @@ -2283,8 +2167,7 @@ "Sharded": true }, "FieldQuery": "select tbl5.col5, tbl5.t5col5 from tbl5 where 1 != 1", - "Query": "select tbl5.col5, tbl5.t5col5 from tbl5 where id = :v1 for update", - "Table": "tbl5" + "Query": "select tbl5.col5, tbl5.t5col5 from tbl5 where id = :v1 for update" }, { "InputName": "CascadeChild-1", @@ -2299,7 +2182,6 @@ 0 ], "Query": "delete /*+ SET_VAR(foreign_key_checks=ON) */ from tbl4 where (col4) in ::fkc_vals", - "Table": "tbl4", "Values": [ "fkc_vals:0" ], @@ -2317,8 +2199,7 @@ "Cols": [ 1 ], - "Query": "delete /*+ SET_VAR(foreign_key_checks=ON) */ from tbl4 where (t4col4) in ::fkc_vals1", - "Table": "tbl4" + "Query": "delete /*+ SET_VAR(foreign_key_checks=ON) */ from tbl4 where (t4col4) in ::fkc_vals1" }, { "InputName": "Parent", @@ -2328,8 +2209,7 @@ "Name": "sharded_fk_allow", "Sharded": true }, - "Query": "delete /*+ SET_VAR(foreign_key_checks=On) */ from tbl5 where id = :v1", - "Table": "tbl5" + "Query": "delete /*+ SET_VAR(foreign_key_checks=On) */ from tbl5 where id = :v1" } ] } @@ -2356,7 +2236,6 @@ "Sharded": true }, "Query": "delete /*+ SET_VAR(foreign_key_checks=Off) */ from multicol_tbl1 where cola = 1 and colb = 2 and colc = 3", - "Table": "multicol_tbl1", "Values": [ "1", "2", @@ -2383,8 +2262,7 @@ "Name": "unsharded_fk_allow", "Sharded": false }, - "Query": "update /*+ SET_VAR(foreign_key_checks=Off) */ u_multicol_tbl1 set cola = 1, colb = 2 where id = 3", - "Table": "u_multicol_tbl1" + "Query": "update /*+ SET_VAR(foreign_key_checks=Off) */ u_multicol_tbl1 set cola = 1, colb = 2 where id = 3" }, "TablesUsed": [ "unsharded_fk_allow.u_multicol_tbl1" @@ -2406,7 +2284,6 @@ "Sharded": true }, "Query": "insert /*+ SET_VAR(foreign_key_checks=Off) */ into tbl3(col3, coly) values (:_col3_0, 3)", - "TableName": "tbl3", "VindexValues": { "hash_vin": "1" } diff --git a/go/vt/vtgate/planbuilder/testdata/from_cases.json b/go/vt/vtgate/planbuilder/testdata/from_cases.json index 6bf1be3618b..91f74671c12 100644 --- a/go/vt/vtgate/planbuilder/testdata/from_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/from_cases.json @@ -14,8 +14,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user`", - "Table": "`user`" + "Query": "select col from `user`" }, "TablesUsed": [ "user.user" @@ -37,8 +36,7 @@ "Sharded": false }, "FieldQuery": "select col from unsharded where 1 != 1", - "Query": "select col from unsharded", - "Table": "unsharded" + "Query": "select col from unsharded" }, "TablesUsed": [ "main.unsharded" @@ -60,8 +58,7 @@ "Sharded": false }, "FieldQuery": "select next 2 values from seq where 1 != 1", - "Query": "select next 2 values from seq", - "Table": "seq" + "Query": "select next 2 values from seq" }, "TablesUsed": [ "main.seq" @@ -108,8 +105,7 @@ "Sharded": true }, "FieldQuery": "select * from ref where 1 != 1", - "Query": "select * from ref", - "Table": "ref" + "Query": "select * from ref" }, "TablesUsed": [ "user.ref" @@ -131,8 +127,7 @@ "Sharded": false }, "FieldQuery": "select m1.col from unsharded as m1 join unsharded as m2 where 1 != 1", - "Query": "select m1.col from unsharded as m1 join unsharded as m2", - "Table": "unsharded" + "Query": "select m1.col from unsharded as m1 join unsharded as m2" }, "TablesUsed": [ "main.unsharded" @@ -150,7 +145,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "R:0", - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -160,8 +154,7 @@ "Sharded": true }, "FieldQuery": "select 1 from `user` where 1 != 1", - "Query": "select 1 from `user`", - "Table": "`user`" + "Query": "select 1 from `user`" }, { "OperatorType": "Route", @@ -171,8 +164,7 @@ "Sharded": true }, "FieldQuery": "select music.col from music where 1 != 1", - "Query": "select music.col from music", - "Table": "music" + "Query": "select music.col from music" } ] }, @@ -197,8 +189,7 @@ "Sharded": true }, "FieldQuery": "select * from `user` where 1 != 1", - "Query": "select * from `user`", - "Table": "`user`" + "Query": "select * from `user`" }, "TablesUsed": [ "user.user" @@ -220,8 +211,7 @@ "Sharded": true }, "FieldQuery": "select * from `user` as a where 1 != 1", - "Query": "select * from `user` as a", - "Table": "`user`" + "Query": "select * from `user` as a" }, "TablesUsed": [ "user.user" @@ -243,8 +233,7 @@ "Sharded": true }, "FieldQuery": "select * from `user` as route1 where 1 != 1", - "Query": "select * from `user` as route1", - "Table": "`user`" + "Query": "select * from `user` as route1" }, "TablesUsed": [ "user.user" @@ -266,8 +255,7 @@ "Sharded": true }, "FieldQuery": "select * from `user` as a where 1 != 1", - "Query": "select * from `user` as a", - "Table": "`user`" + "Query": "select * from `user` as a" }, "TablesUsed": [ "user.user" @@ -289,8 +277,7 @@ "Sharded": true }, "FieldQuery": "select * from `user` as primary_redirect where 1 != 1", - "Query": "select * from `user` as primary_redirect", - "Table": "`user`" + "Query": "select * from `user` as primary_redirect" }, "TablesUsed": [ "user.user" @@ -322,8 +309,7 @@ "Sharded": true }, "FieldQuery": "select foo.col from `user` as foo, `user` where 1 != 1", - "Query": "select foo.col from `user` as foo, `user` where foo.col = 42 and foo.id = `user`.id", - "Table": "`user`" + "Query": "select foo.col from `user` as foo, `user` where foo.col = 42 and foo.id = `user`.id" }, "TablesUsed": [ "user.user" @@ -344,7 +330,6 @@ "JoinVars": { "music_id": 1 }, - "TableName": "music_`user`", "Inputs": [ { "OperatorType": "Route", @@ -354,8 +339,7 @@ "Sharded": true }, "FieldQuery": "select music.foo, music.id from music where 1 != 1", - "Query": "select music.foo, music.id from music where music.col = 42", - "Table": "music" + "Query": "select music.foo, music.id from music where music.col = 42" }, { "OperatorType": "Route", @@ -366,7 +350,6 @@ }, "FieldQuery": "select 1 from `user` where 1 != 1", "Query": "select 1 from `user` where `user`.id = :music_id", - "Table": "`user`", "Values": [ ":music_id" ], @@ -391,7 +374,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "R:0", - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -401,8 +383,7 @@ "Sharded": true }, "FieldQuery": "select 1 from `user` where 1 != 1", - "Query": "select 1 from `user`", - "Table": "`user`" + "Query": "select 1 from `user`" }, { "OperatorType": "Route", @@ -412,8 +393,7 @@ "Sharded": true }, "FieldQuery": "select music.col from music where 1 != 1", - "Query": "select music.col from music", - "Table": "music" + "Query": "select music.col from music" } ] }, @@ -438,8 +418,7 @@ "Sharded": true }, "FieldQuery": "select `name` from (select `name` from `user` where 1 != 1) as t where 1 != 1", - "Query": "select `name` from (select distinct `name` from `user`) as t", - "Table": "`user`" + "Query": "select `name` from (select distinct `name` from `user`) as t" }, "TablesUsed": [ "user.user" @@ -461,8 +440,7 @@ "Sharded": false }, "FieldQuery": "select u1.a, u2.a from unsharded as u1, unsharded as u2 where 1 != 1", - "Query": "select u1.a, u2.a from unsharded as u1, unsharded as u2", - "Table": "unsharded" + "Query": "select u1.a, u2.a from unsharded as u1, unsharded as u2" }, "TablesUsed": [ "main.unsharded" @@ -484,8 +462,7 @@ "Sharded": false }, "FieldQuery": "select u1.a, u2.a from unsharded as u1, unsharded as u2, unsharded as u3 where 1 != 1", - "Query": "select u1.a, u2.a from unsharded as u1, unsharded as u2, unsharded as u3", - "Table": "unsharded" + "Query": "select u1.a, u2.a from unsharded as u1, unsharded as u2, unsharded as u3" }, "TablesUsed": [ "main.unsharded" @@ -507,8 +484,7 @@ "Sharded": false }, "FieldQuery": "select m1.col from unsharded as m1 left join unsharded as m2 on m1.a = m2.b where 1 != 1", - "Query": "select m1.col from unsharded as m1 left join unsharded as m2 on m1.a = m2.b", - "Table": "unsharded" + "Query": "select m1.col from unsharded as m1 left join unsharded as m2 on m1.a = m2.b" }, "TablesUsed": [ "main.unsharded" @@ -529,7 +505,6 @@ "JoinVars": { "u_a": 1 }, - "TableName": "`user`_unsharded", "Inputs": [ { "OperatorType": "Route", @@ -539,8 +514,7 @@ "Sharded": true }, "FieldQuery": "select u.col, u.a from `user` as u where 1 != 1", - "Query": "select u.col, u.a from `user` as u", - "Table": "`user`" + "Query": "select u.col, u.a from `user` as u" }, { "OperatorType": "Route", @@ -550,8 +524,7 @@ "Sharded": false }, "FieldQuery": "select 1 from unsharded as m where 1 != 1", - "Query": "select 1 from unsharded as m where m.b = :u_a", - "Table": "unsharded" + "Query": "select 1 from unsharded as m where m.b = :u_a" } ] }, @@ -575,7 +548,6 @@ "JoinVars": { "m1_col": 1 }, - "TableName": "`user`_unsharded_unsharded", "Inputs": [ { "OperatorType": "Join", @@ -584,7 +556,6 @@ "JoinVars": { "user_col": 0 }, - "TableName": "`user`_unsharded", "Inputs": [ { "OperatorType": "Route", @@ -594,8 +565,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user` where 1 != 1", - "Query": "select `user`.col from `user`", - "Table": "`user`" + "Query": "select `user`.col from `user`" }, { "OperatorType": "Route", @@ -605,8 +575,7 @@ "Sharded": false }, "FieldQuery": "select m1.col from unsharded as m1 where 1 != 1", - "Query": "select m1.col from unsharded as m1 where m1.col = :user_col /* INT16 */", - "Table": "unsharded" + "Query": "select m1.col from unsharded as m1 where m1.col = :user_col /* INT16 */" } ] }, @@ -618,8 +587,7 @@ "Sharded": false }, "FieldQuery": "select m2.foo from unsharded as m2 where 1 != 1", - "Query": "select m2.foo from unsharded as m2 where m2.col = :m1_col", - "Table": "unsharded" + "Query": "select m2.foo from unsharded as m2 where m2.col = :m1_col" } ] }, @@ -643,7 +611,6 @@ "JoinVars": { "user_col": 0 }, - "TableName": "`user`_user_extra_unsharded", "Inputs": [ { "OperatorType": "Route", @@ -653,8 +620,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user` where 1 != 1", - "Query": "select `user`.col from `user`", - "Table": "`user`" + "Query": "select `user`.col from `user`" }, { "OperatorType": "Join", @@ -662,7 +628,6 @@ "JoinVars": { "e_col": 0 }, - "TableName": "user_extra_unsharded", "Inputs": [ { "OperatorType": "Route", @@ -672,8 +637,7 @@ "Sharded": true }, "FieldQuery": "select e.col from user_extra as e where 1 != 1", - "Query": "select e.col from user_extra as e where e.col = :user_col /* INT16 */", - "Table": "user_extra" + "Query": "select e.col from user_extra as e where e.col = :user_col /* INT16 */" }, { "OperatorType": "Route", @@ -683,8 +647,7 @@ "Sharded": false }, "FieldQuery": "select 1 from unsharded as m1 where 1 != 1", - "Query": "select 1 from unsharded as m1 where m1.col = :e_col /* INT16 */", - "Table": "unsharded" + "Query": "select 1 from unsharded as m1 where m1.col = :e_col /* INT16 */" } ] } @@ -712,8 +675,7 @@ "Sharded": false }, "FieldQuery": "select m1.col from unsharded as m1 right join unsharded as m2 on m1.a = m2.b where 1 != 1", - "Query": "select m1.col from unsharded as m1 right join unsharded as m2 on m1.a = m2.b", - "Table": "unsharded" + "Query": "select m1.col from unsharded as m1 right join unsharded as m2 on m1.a = m2.b" }, "TablesUsed": [ "main.unsharded" @@ -735,8 +697,7 @@ "Sharded": false }, "FieldQuery": "select m1.col from unsharded as m1 join unsharded as m2 right join unsharded as m3 on m1.a = m2.b where 1 != 1", - "Query": "select m1.col from unsharded as m1 join unsharded as m2 right join unsharded as m3 on m1.a = m2.b", - "Table": "unsharded" + "Query": "select m1.col from unsharded as m1 join unsharded as m2 right join unsharded as m3 on m1.a = m2.b" }, "TablesUsed": [ "main.unsharded" @@ -769,7 +730,6 @@ "ComparisonType": "FLOAT64", "JoinColumnIndexes": "-1,-2,1,-2,-4,-1", "Predicate": "user_extra.col = um.col", - "TableName": "music_`user`, user_extra_user_metadata", "Inputs": [ { "OperatorType": "Join", @@ -778,7 +738,6 @@ "JoinVars": { "music_intcol": 1 }, - "TableName": "music_`user`, user_extra", "Inputs": [ { "OperatorType": "Route", @@ -788,8 +747,7 @@ "Sharded": true }, "FieldQuery": "select 1, music.intcol from music where 1 != 1 group by music.intcol", - "Query": "select 1, music.intcol from music group by music.intcol", - "Table": "music" + "Query": "select 1, music.intcol from music group by music.intcol" }, { "OperatorType": "Route", @@ -800,7 +758,6 @@ }, "FieldQuery": "select user_extra.col, user_extra.col from `user`, user_extra where 1 != 1 group by user_extra.col", "Query": "select user_extra.col, user_extra.col from `user`, user_extra where `user`.id in (103) and user_extra.col = :music_intcol /* INT16 */ and `user`.id = user_extra.user_id group by user_extra.col", - "Table": "`user`, user_extra", "Values": [ "103" ], @@ -832,8 +789,7 @@ }, "FieldQuery": "select user_metadata.col, count(*) as `count`, weight_string(user_metadata.col) from user_metadata where 1 != 1 group by user_metadata.col, weight_string(user_metadata.col)", "OrderBy": "(0|2) ASC", - "Query": "select user_metadata.col, count(*) as `count`, weight_string(user_metadata.col) from user_metadata group by user_metadata.col, weight_string(user_metadata.col) order by user_metadata.col asc", - "Table": "user_metadata" + "Query": "select user_metadata.col, count(*) as `count`, weight_string(user_metadata.col) from user_metadata group by user_metadata.col, weight_string(user_metadata.col) order by user_metadata.col asc" } ] } @@ -870,8 +826,7 @@ "Sharded": false }, "FieldQuery": "select m1.col from unsharded as m1 straight_join unsharded as m2 where 1 != 1", - "Query": "select m1.col from unsharded as m1 straight_join unsharded as m2", - "Table": "unsharded" + "Query": "select m1.col from unsharded as m1 straight_join unsharded as m2" }, "TablesUsed": [ "main.unsharded" @@ -889,7 +844,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_unsharded", "Inputs": [ { "OperatorType": "Route", @@ -899,8 +853,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user` where 1 != 1", - "Query": "select `user`.col from `user`", - "Table": "`user`" + "Query": "select `user`.col from `user`" }, { "OperatorType": "Route", @@ -910,8 +863,7 @@ "Sharded": false }, "FieldQuery": "select 1 from unsharded as m1, unsharded as m2 where 1 != 1", - "Query": "select 1 from unsharded as m1, unsharded as m2", - "Table": "unsharded" + "Query": "select 1 from unsharded as m1, unsharded as m2" } ] }, @@ -941,7 +893,6 @@ "user_bar": 1, "user_foo": 0 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -951,8 +902,7 @@ "Sharded": true }, "FieldQuery": "select `user`.foo, `user`.bar from `user` where 1 != 1", - "Query": "select `user`.foo, `user`.bar from `user`", - "Table": "`user`" + "Query": "select `user`.foo, `user`.bar from `user`" }, { "OperatorType": "Route", @@ -962,8 +912,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra where user_extra.bar = :user_bar and :user_foo = 42", - "Table": "user_extra" + "Query": "select 1 from user_extra where user_extra.bar = :user_bar and :user_foo = 42" } ] } @@ -986,7 +935,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_unsharded", "Inputs": [ { "OperatorType": "Route", @@ -996,8 +944,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user` where 1 != 1", - "Query": "select `user`.col from `user`", - "Table": "`user`" + "Query": "select `user`.col from `user`" }, { "OperatorType": "Route", @@ -1007,8 +954,7 @@ "Sharded": false }, "FieldQuery": "select 1 from unsharded as m1, unsharded as m2 where 1 != 1", - "Query": "select 1 from unsharded as m1, unsharded as m2", - "Table": "unsharded" + "Query": "select 1 from unsharded as m1, unsharded as m2" } ] }, @@ -1029,7 +975,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "R:0", - "TableName": "`user`_`user`_unsharded", "Inputs": [ { "OperatorType": "Route", @@ -1039,14 +984,12 @@ "Sharded": true }, "FieldQuery": "select 1 from `user` as u1 where 1 != 1", - "Query": "select 1 from `user` as u1", - "Table": "`user`" + "Query": "select 1 from `user` as u1" }, { "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_unsharded", "Inputs": [ { "OperatorType": "Route", @@ -1056,8 +999,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user` where 1 != 1", - "Query": "select `user`.col from `user`", - "Table": "`user`" + "Query": "select `user`.col from `user`" }, { "OperatorType": "Route", @@ -1067,8 +1009,7 @@ "Sharded": false }, "FieldQuery": "select 1 from unsharded where 1 != 1", - "Query": "select 1 from unsharded", - "Table": "unsharded" + "Query": "select 1 from unsharded" } ] } @@ -1095,8 +1036,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user` use index (a) where 1 != 1", - "Query": "select `user`.col from `user` use index (a)", - "Table": "`user`" + "Query": "select `user`.col from `user` use index (a)" }, "TablesUsed": [ "user.user" @@ -1118,8 +1058,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user` use index (a) use index for group by (b) where 1 != 1", - "Query": "select `user`.col from `user` use index (a) use index for group by (b)", - "Table": "`user`" + "Query": "select `user`.col from `user` use index (a) use index for group by (b)" }, "TablesUsed": [ "user.user" @@ -1145,7 +1084,6 @@ "JoinVars": { "ue_x": 0 }, - "TableName": "dual_`user`", "Inputs": [ { "OperatorType": "Route", @@ -1155,8 +1093,7 @@ "Sharded": false }, "FieldQuery": "select ue.x from (select 1 as x from dual where 1 != 1) as ue where 1 != 1", - "Query": "select ue.x from (select 1 as x from dual) as ue", - "Table": "dual" + "Query": "select ue.x from (select 1 as x from dual) as ue" }, { "OperatorType": "Route", @@ -1167,7 +1104,6 @@ }, "FieldQuery": "select 1 from `user` as u where 1 != 1", "Query": "select 1 from `user` as u where u.id = :ue_x /* INT64 */", - "Table": "`user`", "Values": [ ":ue_x" ], @@ -1198,8 +1134,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user`, user_extra where 1 != 1", - "Query": "select `user`.col from `user`, user_extra where `user`.id = user_extra.user_id", - "Table": "`user`, user_extra" + "Query": "select `user`.col from `user`, user_extra where `user`.id = user_extra.user_id" }, "TablesUsed": [ "user.user", @@ -1222,8 +1157,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user`, user_extra where 1 != 1", - "Query": "select `user`.col from `user`, user_extra where `user`.id = user_extra.user_id", - "Table": "`user`, user_extra" + "Query": "select `user`.col from `user`, user_extra where `user`.id = user_extra.user_id" }, "TablesUsed": [ "user.user", @@ -1246,8 +1180,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user`, user_extra where 1 != 1", - "Query": "select `user`.col from `user`, user_extra where `user`.col between 1 and 2 and `user`.id = user_extra.user_id", - "Table": "`user`, user_extra" + "Query": "select `user`.col from `user`, user_extra where `user`.col between 1 and 2 and `user`.id = user_extra.user_id" }, "TablesUsed": [ "user.user", @@ -1270,8 +1203,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user`, user_extra where 1 != 1", - "Query": "select `user`.col from `user`, user_extra where user_extra.user_id = `user`.id", - "Table": "`user`, user_extra" + "Query": "select `user`.col from `user`, user_extra where user_extra.user_id = `user`.id" }, "TablesUsed": [ "user.user", @@ -1295,7 +1227,6 @@ }, "FieldQuery": "select `user`.col from `user`, user_extra where 1 != 1", "Query": "select `user`.col from `user`, user_extra where `user`.id = 5 and `user`.id = user_extra.user_id", - "Table": "`user`, user_extra", "Values": [ "5" ], @@ -1321,7 +1252,6 @@ "JoinVars": { "user_id": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1331,8 +1261,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col, `user`.id from `user` where 1 != 1", - "Query": "select `user`.col, `user`.id from `user`", - "Table": "`user`" + "Query": "select `user`.col, `user`.id from `user`" }, { "OperatorType": "Route", @@ -1342,8 +1271,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra where :user_id < user_extra.user_id", - "Table": "user_extra" + "Query": "select 1 from user_extra where :user_id < user_extra.user_id" } ] }, @@ -1364,7 +1292,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1375,7 +1302,6 @@ }, "FieldQuery": "select `user`.col from `user` where 1 != 1", "Query": "select `user`.col from `user` where `user`.id = 5", - "Table": "`user`", "Values": [ "5" ], @@ -1389,8 +1315,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra", - "Table": "user_extra" + "Query": "select 1 from user_extra" } ] }, @@ -1411,7 +1336,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1422,7 +1346,6 @@ }, "FieldQuery": "select `user`.col from `user` where 1 != 1", "Query": "select `user`.col from `user` where `user`.id = 5", - "Table": "`user`", "Values": [ "5" ], @@ -1436,8 +1359,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra", - "Table": "user_extra" + "Query": "select 1 from user_extra" } ] }, @@ -1461,7 +1383,6 @@ "JoinVars": { "user_extra_col": 0 }, - "TableName": "user_extra_`user`", "Inputs": [ { "OperatorType": "Route", @@ -1471,8 +1392,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.col from user_extra where 1 != 1", - "Query": "select user_extra.col from user_extra", - "Table": "user_extra" + "Query": "select user_extra.col from user_extra" }, { "OperatorType": "Route", @@ -1483,7 +1403,6 @@ }, "FieldQuery": "select `user`.col from `user` where 1 != 1", "Query": "select `user`.col from `user` where `user`.id = :user_extra_col /* INT16 */", - "Table": "`user`", "Values": [ ":user_extra_col" ], @@ -1511,7 +1430,6 @@ "JoinVars": { "user_name": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1521,8 +1439,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col, `user`.`name` from `user` where 1 != 1", - "Query": "select `user`.col, `user`.`name` from `user`", - "Table": "`user`" + "Query": "select `user`.col, `user`.`name` from `user`" }, { "OperatorType": "Route", @@ -1533,7 +1450,6 @@ }, "FieldQuery": "select 1 from user_extra where 1 != 1", "Query": "select 1 from user_extra where user_extra.user_id = :user_name", - "Table": "user_extra", "Values": [ ":user_name" ], @@ -1562,8 +1478,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user`, ref where 1 != 1", - "Query": "select `user`.col from `user`, ref", - "Table": "`user`, ref" + "Query": "select `user`.col from `user`, ref" }, "TablesUsed": [ "user.ref", @@ -1586,8 +1501,7 @@ "Sharded": true }, "FieldQuery": "select r1.col from ref as r1, ref where 1 != 1", - "Query": "select r1.col from ref as r1, ref", - "Table": "ref" + "Query": "select r1.col from ref as r1, ref" }, "TablesUsed": [ "user.ref" @@ -1609,8 +1523,7 @@ "Sharded": true }, "FieldQuery": "select ref.col from ref, `user` where 1 != 1", - "Query": "select ref.col from ref, `user`", - "Table": "`user`, ref" + "Query": "select ref.col from ref, `user`" }, "TablesUsed": [ "user.ref", @@ -1634,7 +1547,6 @@ }, "FieldQuery": "select ref.col from (select aa from `user` where 1 != 1) as `user`, ref where 1 != 1", "Query": "select ref.col from (select aa from `user` where `user`.id = 1) as `user`, ref", - "Table": "`user`, ref", "Values": [ "1" ], @@ -1657,7 +1569,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "unsharded_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1667,8 +1578,7 @@ "Sharded": false }, "FieldQuery": "select route2.col from unsharded as route2 where 1 != 1", - "Query": "select route2.col from unsharded as route2", - "Table": "unsharded" + "Query": "select route2.col from unsharded as route2" }, { "OperatorType": "Route", @@ -1678,8 +1588,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra", - "Table": "user_extra" + "Query": "select 1 from user_extra" } ] }, @@ -1705,7 +1614,6 @@ }, "FieldQuery": "select id from (select id, col from `user` where 1 != 1) as t where 1 != 1", "Query": "select id from (select id, col from `user` where id = 5) as t", - "Table": "`user`", "Values": [ "5" ], @@ -1732,7 +1640,6 @@ }, "FieldQuery": "select t.id from (select id from `user` where 1 != 1) as t, user_extra where 1 != 1", "Query": "select t.id from (select id from `user` where id = 5) as t, user_extra where t.id = user_extra.user_id", - "Table": "`user`, user_extra", "Values": [ "5" ], @@ -1760,7 +1667,6 @@ }, "FieldQuery": "select t.id from (select `user`.id from `user` where 1 != 1) as t, user_extra where 1 != 1", "Query": "select t.id from (select `user`.id from `user` where `user`.id = 5) as t, user_extra where t.id = user_extra.user_id", - "Table": "`user`, user_extra", "Values": [ "5" ], @@ -1793,7 +1699,6 @@ }, "FieldQuery": "select t.id from (select id from `user` where 1 != 1) as t, user_extra where 1 != 1", "Query": "select t.id from (select id from `user` where id = 5) as t, user_extra where t.id = user_extra.user_id", - "Table": "`user`, user_extra", "Values": [ "5" ], @@ -1819,7 +1724,6 @@ "JoinVars": { "t_id": 0 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1830,7 +1734,6 @@ }, "FieldQuery": "select t.id from (select id from `user` where 1 != 1) as t where 1 != 1", "Query": "select t.id from (select id from `user` where id = 5) as t", - "Table": "`user`", "Values": [ "5" ], @@ -1844,8 +1747,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra where user_extra.col = :t_id", - "Table": "user_extra" + "Query": "select 1 from user_extra where user_extra.col = :t_id" } ] }, @@ -1871,7 +1773,6 @@ }, "FieldQuery": "select id from (select id, col from `user` as route1 where 1 != 1) as t where 1 != 1", "Query": "select id from (select id, col from `user` as route1 where id = 5) as t", - "Table": "`user`", "Values": [ "5" ], @@ -1903,7 +1804,6 @@ }, "FieldQuery": "select id from (select id, col from `user` as route1 where 1 != 1) as t where 1 != 1", "Query": "select id from (select id, col from `user` as route1 where id = 5) as t", - "Table": "`user`", "Values": [ "5" ], @@ -1934,8 +1834,7 @@ "Sharded": true }, "FieldQuery": "select t.id from (select id, textcol1 as baz from `user` as route1 where 1 != 1) as t, (select id, textcol1 + textcol1 as baz from `user` where 1 != 1) as s where 1 != 1", - "Query": "select t.id from (select id, textcol1 as baz from `user` as route1 where textcol1 = '3') as t, (select id, textcol1 + textcol1 as baz from `user` where textcol1 + textcol1 = '3') as s where t.id = s.id", - "Table": "`user`" + "Query": "select t.id from (select id, textcol1 as baz from `user` as route1 where textcol1 = '3') as t, (select id, textcol1 + textcol1 as baz from `user` where textcol1 + textcol1 = '3') as s where t.id = s.id" }, "TablesUsed": [ "user.user" @@ -1957,8 +1856,7 @@ "Sharded": true }, "FieldQuery": "select bar from (select foo + 4 as bar from (select colA + colB as foo from `user` where 1 != 1) as u where 1 != 1) as t where 1 != 1", - "Query": "select bar from (select foo + 4 as bar from (select colA + colB as foo from `user` where colA + colB + 4 = 5) as u) as t", - "Table": "`user`" + "Query": "select bar from (select foo + 4 as bar from (select colA + colB as foo from `user` where colA + colB + 4 = 5) as u) as t" }, "TablesUsed": [ "user.user" @@ -1981,7 +1879,6 @@ }, "FieldQuery": "select id from (select id from (select id from `user` where 1 != 1) as u where 1 != 1) as t where 1 != 1", "Query": "select id from (select id from (select id from `user` where id = 5) as u) as t", - "Table": "`user`", "Values": [ "5" ], @@ -2008,7 +1905,6 @@ }, "FieldQuery": "select u.col, e.col from (select col from `user` where 1 != 1) as u, (select col from user_extra where 1 != 1) as e where 1 != 1", "Query": "select u.col, e.col from (select col from `user` where id = 5) as u, (select col from user_extra where user_id = 5) as e", - "Table": "`user`, user_extra", "Values": [ "5" ], @@ -2031,7 +1927,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0", - "TableName": "`user`_`user`", "Inputs": [ { "OperatorType": "Route", @@ -2041,8 +1936,7 @@ "Sharded": true }, "FieldQuery": "select dt1.id from (select id from `user` where 1 != 1) as dt1 where 1 != 1", - "Query": "select dt1.id from (select id from `user`) as dt1", - "Table": "`user`" + "Query": "select dt1.id from (select id from `user`) as dt1" }, { "OperatorType": "Route", @@ -2052,8 +1946,7 @@ "Sharded": true }, "FieldQuery": "select dt2.id from (select id from `user` where 1 != 1) as dt2 where 1 != 1", - "Query": "select dt2.id from (select id from `user`) as dt2", - "Table": "`user`" + "Query": "select dt2.id from (select id from `user`) as dt2" } ] }, @@ -2073,7 +1966,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "R:0", - "TableName": "information_schema.CHARACTER_SETS_unsharded", "Inputs": [ { "OperatorType": "Route", @@ -2083,8 +1975,7 @@ "Sharded": false }, "FieldQuery": "select 1 from information_schema.CHARACTER_SETS where 1 != 1", - "Query": "select 1 from information_schema.CHARACTER_SETS", - "Table": "information_schema.CHARACTER_SETS" + "Query": "select 1 from information_schema.CHARACTER_SETS" }, { "OperatorType": "Route", @@ -2094,8 +1985,7 @@ "Sharded": false }, "FieldQuery": "select unsharded.foo from unsharded where 1 != 1", - "Query": "select unsharded.foo from unsharded", - "Table": "unsharded" + "Query": "select unsharded.foo from unsharded" } ] }, @@ -2119,8 +2009,7 @@ "Sharded": true }, "FieldQuery": "select 42 from `user` as u, user_extra as ue, music as m where 1 != 1", - "Query": "select 42 from `user` as u, user_extra as ue, music as m where u.id = ue.user_id and m.user_id = u.id and (u.foo or m.foo or ue.foo)", - "Table": "`user`, music, user_extra" + "Query": "select 42 from `user` as u, user_extra as ue, music as m where u.id = ue.user_id and m.user_id = u.id and (u.foo or m.foo or ue.foo)" }, "TablesUsed": [ "user.music", @@ -2140,7 +2029,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "unsharded_information_schema.CHARACTER_SETS", "Inputs": [ { "OperatorType": "Route", @@ -2150,8 +2038,7 @@ "Sharded": false }, "FieldQuery": "select unsharded.foo from unsharded where 1 != 1", - "Query": "select unsharded.foo from unsharded", - "Table": "unsharded" + "Query": "select unsharded.foo from unsharded" }, { "OperatorType": "Route", @@ -2161,8 +2048,7 @@ "Sharded": false }, "FieldQuery": "select 1 from information_schema.CHARACTER_SETS where 1 != 1", - "Query": "select 1 from information_schema.CHARACTER_SETS", - "Table": "information_schema.CHARACTER_SETS" + "Query": "select 1 from information_schema.CHARACTER_SETS" } ] }, @@ -2186,13 +2072,11 @@ "t_col1": 0, "t_id": 1 }, - "TableName": "`user`_user_extra_unsharded", "Inputs": [ { "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:1,L:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -2202,8 +2086,7 @@ "Sharded": true }, "FieldQuery": "select t.id, t.col1 from (select `user`.id, `user`.col1 from `user` where 1 != 1) as t where 1 != 1", - "Query": "select t.id, t.col1 from (select `user`.id, `user`.col1 from `user`) as t", - "Table": "`user`" + "Query": "select t.id, t.col1 from (select `user`.id, `user`.col1 from `user`) as t" }, { "OperatorType": "Route", @@ -2213,8 +2096,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra", - "Table": "user_extra" + "Query": "select 1 from user_extra" } ] }, @@ -2226,8 +2108,7 @@ "Sharded": false }, "FieldQuery": "select 1 from unsharded where 1 != 1", - "Query": "select 1 from unsharded where unsharded.id = :t_id and unsharded.col1 = :t_col1", - "Table": "unsharded" + "Query": "select 1 from unsharded where unsharded.id = :t_id and unsharded.col1 = :t_col1" } ] }, @@ -2252,7 +2133,6 @@ "JoinVars": { "user_col": 2 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -2262,8 +2142,7 @@ "Sharded": true }, "FieldQuery": "select t.id, t.col1, t.`user.col` from (select `user`.id, `user`.col1, `user`.col as `user.col` from `user` where 1 != 1) as t where 1 != 1", - "Query": "select t.id, t.col1, t.`user.col` from (select `user`.id, `user`.col1, `user`.col as `user.col` from `user`) as t", - "Table": "`user`" + "Query": "select t.id, t.col1, t.`user.col` from (select `user`.id, `user`.col1, `user`.col as `user.col` from `user`) as t" }, { "OperatorType": "Route", @@ -2273,8 +2152,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra where user_extra.col = :user_col /* INT16 */", - "Table": "user_extra" + "Query": "select 1 from user_extra where user_extra.col = :user_col /* INT16 */" } ] }, @@ -2295,7 +2173,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "R:0", - "TableName": "unsharded_a_`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -2305,14 +2182,12 @@ "Sharded": false }, "FieldQuery": "select 1 from unsharded_a as ua where 1 != 1", - "Query": "select 1 from unsharded_a as ua", - "Table": "unsharded_a" + "Query": "select 1 from unsharded_a as ua" }, { "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:1", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -2322,8 +2197,7 @@ "Sharded": true }, "FieldQuery": "select t.id, t.col1 from (select `user`.id, `user`.col1 from `user` where 1 != 1) as t where 1 != 1", - "Query": "select t.id, t.col1 from (select `user`.id, `user`.col1 from `user`) as t", - "Table": "`user`" + "Query": "select t.id, t.col1 from (select `user`.id, `user`.col1 from `user`) as t" }, { "OperatorType": "Route", @@ -2333,8 +2207,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra", - "Table": "user_extra" + "Query": "select 1 from user_extra" } ] } @@ -2361,7 +2234,6 @@ "JoinVars": { "ua_id": 0 }, - "TableName": "unsharded_a_`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -2371,14 +2243,12 @@ "Sharded": false }, "FieldQuery": "select ua.id from unsharded_a as ua where 1 != 1", - "Query": "select ua.id from unsharded_a as ua", - "Table": "unsharded_a" + "Query": "select ua.id from unsharded_a as ua" }, { "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:1", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -2389,7 +2259,6 @@ }, "FieldQuery": "select t.id, t.col1 from (select `user`.id, `user`.col1 from `user` where 1 != 1) as t where 1 != 1", "Query": "select t.id, t.col1 from (select `user`.id, `user`.col1 from `user` where `user`.id = :ua_id) as t", - "Table": "`user`", "Values": [ ":ua_id" ], @@ -2403,8 +2272,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra", - "Table": "user_extra" + "Query": "select 1 from user_extra" } ] } @@ -2440,8 +2308,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user`", - "Table": "`user`" + "Query": "select col from `user`" }, { "InputName": "Outer", @@ -2452,8 +2319,7 @@ "Sharded": false }, "FieldQuery": "select unsharded_a.col from unsharded_a, unsharded_b where 1 != 1", - "Query": "select unsharded_a.col from unsharded_a, unsharded_b where :__sq1", - "Table": "unsharded_a, unsharded_b" + "Query": "select unsharded_a.col from unsharded_a, unsharded_b where :__sq1" } ] }, @@ -2487,8 +2353,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user`", - "Table": "`user`" + "Query": "select col from `user`" }, { "InputName": "Outer", @@ -2499,8 +2364,7 @@ "Sharded": false }, "FieldQuery": "select unsharded_a.col from unsharded_a, unsharded_b where 1 != 1", - "Query": "select unsharded_a.col from unsharded_a, unsharded_b where unsharded_a.col + :__sq1", - "Table": "unsharded_a, unsharded_b" + "Query": "select unsharded_a.col from unsharded_a, unsharded_b where unsharded_a.col + :__sq1" } ] }, @@ -2535,8 +2399,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user`", - "Table": "`user`" + "Query": "select col from `user`" }, { "InputName": "Outer", @@ -2547,8 +2410,7 @@ "Sharded": false }, "FieldQuery": "select unsharded_a.col from unsharded_a, unsharded_b where 1 != 1", - "Query": "select unsharded_a.col from unsharded_a, unsharded_b where :__sq_has_values and unsharded_a.col in ::__sq1", - "Table": "unsharded_a, unsharded_b" + "Query": "select unsharded_a.col from unsharded_a, unsharded_b where :__sq_has_values and unsharded_a.col in ::__sq1" } ] }, @@ -2583,8 +2445,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user`", - "Table": "`user`" + "Query": "select col from `user`" }, { "InputName": "Outer", @@ -2596,7 +2457,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0", - "TableName": "unsharded_`user`", "Inputs": [ { "OperatorType": "Route", @@ -2606,8 +2466,7 @@ "Sharded": false }, "FieldQuery": "select unsharded.col from unsharded where 1 != 1", - "Query": "select unsharded.col from unsharded", - "Table": "unsharded" + "Query": "select unsharded.col from unsharded" }, { "OperatorType": "Route", @@ -2617,8 +2476,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user` where 1 != 1", - "Query": "select `user`.col from `user`", - "Table": "`user`" + "Query": "select `user`.col from `user`" } ] } @@ -2643,7 +2501,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "unsharded_`user`_unsharded_a", "Inputs": [ { "OperatorType": "UncorrelatedSubquery", @@ -2662,8 +2519,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user`", - "Table": "`user`" + "Query": "select col from `user`" }, { "InputName": "Outer", @@ -2674,7 +2530,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0", - "TableName": "unsharded_`user`", "Inputs": [ { "OperatorType": "Route", @@ -2684,8 +2539,7 @@ "Sharded": false }, "FieldQuery": "select unsharded.col from unsharded where 1 != 1", - "Query": "select unsharded.col from unsharded", - "Table": "unsharded" + "Query": "select unsharded.col from unsharded" }, { "OperatorType": "Route", @@ -2695,8 +2549,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user` where 1 != 1", - "Query": "select `user`.col from `user`", - "Table": "`user`" + "Query": "select `user`.col from `user`" } ] } @@ -2712,8 +2565,7 @@ "Sharded": false }, "FieldQuery": "select 1 from unsharded_a where 1 != 1", - "Query": "select 1 from unsharded_a", - "Table": "unsharded_a" + "Query": "select 1 from unsharded_a" } ] }, @@ -2738,7 +2590,6 @@ "JoinVars": { "user_col2": 1 }, - "TableName": "`user`_unsharded", "Inputs": [ { "OperatorType": "Route", @@ -2748,8 +2599,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col1, `user`.col2 from `user` where 1 != 1", - "Query": "select `user`.col1, `user`.col2 from `user`", - "Table": "`user`" + "Query": "select `user`.col1, `user`.col2 from `user`" }, { "OperatorType": "Route", @@ -2759,8 +2609,7 @@ "Sharded": false }, "FieldQuery": "select unsharded.col1 from unsharded where 1 != 1", - "Query": "select unsharded.col1 from unsharded where unsharded.col2 = :user_col2", - "Table": "unsharded" + "Query": "select unsharded.col1 from unsharded where unsharded.col2 = :user_col2" } ] }, @@ -2785,8 +2634,7 @@ "Sharded": false }, "FieldQuery": "select foo.col from foo where 1 != 1", - "Query": "select foo.col from foo", - "Table": "foo" + "Query": "select foo.col from foo" }, "TablesUsed": [ "main.foo" @@ -2808,8 +2656,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user`, user_extra where 1 != 1", - "Query": "select `user`.col from `user`, user_extra where `user`.ID = user_extra.User_Id", - "Table": "`user`, user_extra" + "Query": "select `user`.col from `user`, user_extra where `user`.ID = user_extra.User_Id" }, "TablesUsed": [ "user.user", @@ -2828,7 +2675,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,L:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -2838,8 +2684,7 @@ "Sharded": true }, "FieldQuery": "select t.id from (select `user`.id from `user` where 1 != 1) as t where 1 != 1", - "Query": "select t.id from (select `user`.id from `user`) as t", - "Table": "`user`" + "Query": "select t.id from (select `user`.id from `user`) as t" }, { "OperatorType": "Route", @@ -2849,8 +2694,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra", - "Table": "user_extra" + "Query": "select 1 from user_extra" } ] }, @@ -2875,8 +2719,7 @@ "Sharded": false }, "FieldQuery": "select u1.a from unsharded as u1 join unsharded as u2 on database() where 1 != 1", - "Query": "select u1.a from unsharded as u1 join unsharded as u2 on database()", - "Table": "unsharded" + "Query": "select u1.a from unsharded as u1 join unsharded as u2 on database()" }, "TablesUsed": [ "main.unsharded" @@ -2921,8 +2764,7 @@ "Sharded": true }, "FieldQuery": "select :__lastInsertId as `last_insert_id()` from `user` where 1 != 1", - "Query": "select :__lastInsertId as `last_insert_id()` from `user`", - "Table": "`user`" + "Query": "select :__lastInsertId as `last_insert_id()` from `user`" }, "TablesUsed": [ "user.user" @@ -2944,8 +2786,7 @@ "Sharded": false }, "FieldQuery": "select :__lastInsertId as `last_insert_id()` from unsharded where 1 != 1", - "Query": "select :__lastInsertId as `last_insert_id()` from unsharded", - "Table": "unsharded" + "Query": "select :__lastInsertId as `last_insert_id()` from unsharded" }, "TablesUsed": [ "main.unsharded" @@ -2966,7 +2807,6 @@ "JoinVars": { "user_extra_assembly_id": 0 }, - "TableName": "user_extra_`user`", "Inputs": [ { "OperatorType": "Route", @@ -2977,7 +2817,6 @@ }, "FieldQuery": "select user_extra.assembly_id from user_extra where 1 != 1", "Query": "select user_extra.assembly_id from user_extra where user_extra.user_id = 2", - "Table": "user_extra", "Values": [ "2" ], @@ -2992,7 +2831,6 @@ }, "FieldQuery": "select `user`.id from `user` where 1 != 1", "Query": "select `user`.id from `user` where `user`.id = :user_extra_assembly_id", - "Table": "`user`", "Values": [ ":user_extra_assembly_id" ], @@ -3021,8 +2859,7 @@ "Sharded": false }, "FieldQuery": "select u1.a from unsharded as u1, unsharded as u2 join unsharded as u3 on u1.a = u2.a where 1 != 1", - "Query": "select u1.a from unsharded as u1, unsharded as u2 join unsharded as u3 on u1.a = u2.a", - "Table": "unsharded" + "Query": "select u1.a from unsharded as u1, unsharded as u2 join unsharded as u3 on u1.a = u2.a" }, "TablesUsed": [ "main.unsharded" @@ -3049,8 +2886,7 @@ "Sharded": false }, "FieldQuery": "select unsharded.id from unsharded where 1 != 1", - "Query": "select unsharded.id from unsharded where Unsharded.val = 1", - "Table": "unsharded" + "Query": "select unsharded.id from unsharded where Unsharded.val = 1" }, "TablesUsed": [ "main.unsharded" @@ -3102,8 +2938,7 @@ "Sharded": false }, "FieldQuery": "select m1.col from (unsharded as m1, unsharded as m2) where 1 != 1", - "Query": "select m1.col from (unsharded as m1, unsharded as m2)", - "Table": "unsharded" + "Query": "select m1.col from (unsharded as m1, unsharded as m2)" }, "TablesUsed": [ "main.unsharded" @@ -3124,7 +2959,6 @@ "JoinVars": { "ue_id": 1 }, - "TableName": "music, user_extra_`user`", "Inputs": [ { "OperatorType": "Route", @@ -3134,8 +2968,7 @@ "Sharded": true }, "FieldQuery": "select 1, ue.id from user_extra as ue, music as m where 1 != 1", - "Query": "select 1, ue.id from user_extra as ue, music as m where m.user_id = ue.user_id", - "Table": "music, user_extra" + "Query": "select 1, ue.id from user_extra as ue, music as m where m.user_id = ue.user_id" }, { "OperatorType": "Route", @@ -3146,7 +2979,6 @@ }, "FieldQuery": "select 1 from `user` as u where 1 != 1", "Query": "select 1 from `user` as u where u.id = :ue_id", - "Table": "`user`", "Values": [ ":ue_id" ], @@ -3175,7 +3007,6 @@ "JoinVars": { "ue_id": 0 }, - "TableName": "user_extra_`user`", "Inputs": [ { "OperatorType": "Route", @@ -3185,8 +3016,7 @@ "Sharded": true }, "FieldQuery": "select ue.id as ueid from user_extra as ue where 1 != 1", - "Query": "select ue.id as ueid from user_extra as ue", - "Table": "user_extra" + "Query": "select ue.id as ueid from user_extra as ue" }, { "OperatorType": "Route", @@ -3197,7 +3027,6 @@ }, "FieldQuery": "select u.id as uid from `user` as u where 1 != 1", "Query": "select u.id as uid from `user` as u where u.id = :ue_id", - "Table": "`user`", "Values": [ ":ue_id" ], @@ -3224,7 +3053,6 @@ "ComparisonType": "-1", "JoinColumnIndexes": "-1", "Predicate": "u.id = ue.user_id", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Limit", @@ -3238,8 +3066,7 @@ "Sharded": true }, "FieldQuery": "select u.id from (select id from `user` where 1 != 1) as u where 1 != 1", - "Query": "select u.id from (select id from `user`) as u limit 10", - "Table": "`user`" + "Query": "select u.id from (select id from `user`) as u limit 10" } ] }, @@ -3255,8 +3082,7 @@ "Sharded": true }, "FieldQuery": "select ue.user_id from (select user_id from user_extra where 1 != 1) as ue where 1 != 1", - "Query": "select ue.user_id from (select user_id from user_extra) as ue limit 10", - "Table": "user_extra" + "Query": "select ue.user_id from (select user_id from user_extra) as ue limit 10" } ] } @@ -3294,8 +3120,7 @@ "Sharded": true }, "FieldQuery": "select count(*) as a from `user` where 1 != 1", - "Query": "select count(*) as a from `user`", - "Table": "`user`" + "Query": "select count(*) as a from `user`" } ] } @@ -3321,8 +3146,7 @@ "Sharded": false }, "FieldQuery": "select u.* from (select * from unsharded where 1 != 1) as u where 1 != 1", - "Query": "select u.* from (select * from unsharded) as u", - "Table": "unsharded" + "Query": "select u.* from (select * from unsharded) as u" }, "TablesUsed": [ "main.unsharded" @@ -3340,7 +3164,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -3351,7 +3174,6 @@ }, "FieldQuery": "select t.id, t.col from (select `user`.id, `user`.col from `user` where 1 != 1) as t where 1 != 1", "Query": "select t.id, t.col from (select `user`.id, `user`.col from `user` where `user`.id = 5) as t", - "Table": "`user`", "Values": [ "5" ], @@ -3365,8 +3187,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra", - "Table": "user_extra" + "Query": "select 1 from user_extra" } ] }, @@ -3387,7 +3208,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -3397,8 +3217,7 @@ "Sharded": true }, "FieldQuery": "select id + 1 from (select `user`.id, `user`.col from `user` where 1 != 1) as t where 1 != 1", - "Query": "select id + 1 from (select `user`.id, `user`.col from `user`) as t", - "Table": "`user`" + "Query": "select id + 1 from (select `user`.id, `user`.col from `user`) as t" }, { "OperatorType": "Route", @@ -3408,8 +3227,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra", - "Table": "user_extra" + "Query": "select 1 from user_extra" } ] }, @@ -3447,7 +3265,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -3461,8 +3278,7 @@ "Sharded": true }, "FieldQuery": "select u.a from (select id as b, `name` from `user` where 1 != 1) as u(a, n) where 1 != 1", - "Query": "select u.a from (select id as b, `name` from `user` where `name` = 1) as u(a, n)", - "Table": "`user`" + "Query": "select u.a from (select id as b, `name` from `user` where `name` = 1) as u(a, n)" } ] }, @@ -3499,7 +3315,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -3513,8 +3328,7 @@ "Sharded": true }, "FieldQuery": "select u.a from (select id as b, `name` from `user` where 1 != 1) as u(a, n) where 1 != 1", - "Query": "select u.a from (select id as b, `name` from `user` where b = 1 and `name` = 1) as u(a, n)", - "Table": "`user`" + "Query": "select u.a from (select id as b, `name` from `user` where b = 1 and `name` = 1) as u(a, n)" } ] }, @@ -3534,7 +3348,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -3544,8 +3357,7 @@ "Sharded": true }, "FieldQuery": "select i + 1 from (select `user`.id from `user` where 1 != 1) as t(i) where 1 != 1", - "Query": "select i + 1 from (select `user`.id from `user`) as t(i)", - "Table": "`user`" + "Query": "select i + 1 from (select `user`.id from `user`) as t(i)" }, { "OperatorType": "Route", @@ -3555,8 +3367,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra", - "Table": "user_extra" + "Query": "select 1 from user_extra" } ] }, @@ -3593,8 +3404,7 @@ "Sharded": true }, "FieldQuery": "select user_id from user_extra where 1 != 1", - "Query": "select user_id from user_extra limit 1", - "Table": "user_extra" + "Query": "select user_id from user_extra limit 1" } ] }, @@ -3616,8 +3426,7 @@ "Sharded": true }, "FieldQuery": "select id from user_extra where 1 != 1", - "Query": "select id from user_extra", - "Table": "user_extra" + "Query": "select id from user_extra" }, { "InputName": "Outer", @@ -3629,7 +3438,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where :__sq_has_values and id in ::__vals and col = :__sq2", - "Table": "`user`", "Values": [ "::__sq1" ], @@ -3659,7 +3467,6 @@ "JoinVars": { "u_intcol": 1 }, - "TableName": "`user`_`user`", "Inputs": [ { "OperatorType": "Route", @@ -3669,8 +3476,7 @@ "Sharded": true }, "FieldQuery": "select u.id, u.intcol from `user` as u where 1 != 1", - "Query": "select u.id, u.intcol from `user` as u", - "Table": "`user`" + "Query": "select u.id, u.intcol from `user` as u" }, { "OperatorType": "Route", @@ -3680,8 +3486,7 @@ "Sharded": true }, "FieldQuery": "select 1 from `user` as uu where 1 != 1", - "Query": "select 1 from `user` as uu where uu.intcol = :u_intcol /* INT16 */", - "Table": "`user`" + "Query": "select 1 from `user` as uu where uu.intcol = :u_intcol /* INT16 */" } ] }, @@ -3704,13 +3509,11 @@ "JoinVars": { "t_col1": 1 }, - "TableName": "`user`_unsharded_unsharded", "Inputs": [ { "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,L:1", - "TableName": "`user`_unsharded", "Inputs": [ { "OperatorType": "Route", @@ -3720,8 +3523,7 @@ "Sharded": true }, "FieldQuery": "select 0, t.col1 from (select `user`.col1 from `user` where 1 != 1) as t where 1 != 1", - "Query": "select 0, t.col1 from (select `user`.col1 from `user`) as t", - "Table": "`user`" + "Query": "select 0, t.col1 from (select `user`.col1 from `user`) as t" }, { "OperatorType": "Route", @@ -3731,8 +3533,7 @@ "Sharded": false }, "FieldQuery": "select 1 from unsharded where 1 != 1", - "Query": "select 1 from unsharded", - "Table": "unsharded" + "Query": "select 1 from unsharded" } ] }, @@ -3744,8 +3545,7 @@ "Sharded": false }, "FieldQuery": "select 1 from unsharded where 1 != 1", - "Query": "select 1 from unsharded where unsharded.a = :t_col1 and unsharded.col1 = :t_col1", - "Table": "unsharded" + "Query": "select 1 from unsharded where unsharded.a = :t_col1 and unsharded.col1 = :t_col1" } ] }, @@ -3774,7 +3574,6 @@ "JoinVars": { "user_col": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -3784,8 +3583,7 @@ "Sharded": true }, "FieldQuery": "select `user`.id, `user`.col from `user` where 1 != 1", - "Query": "select `user`.id, `user`.col from `user`", - "Table": "`user`" + "Query": "select `user`.id, `user`.col from `user`" }, { "OperatorType": "Route", @@ -3795,8 +3593,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.col from user_extra where 1 != 1", - "Query": "select user_extra.col from user_extra where user_extra.col = :user_col /* INT16 */", - "Table": "user_extra" + "Query": "select user_extra.col from user_extra where user_extra.col = :user_col /* INT16 */" } ] } @@ -3819,7 +3616,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "unsharded_unsharded_tab", "Inputs": [ { "OperatorType": "Route", @@ -3829,8 +3625,7 @@ "Sharded": false }, "FieldQuery": "select 1 from unsharded where 1 != 1", - "Query": "select 1 from unsharded", - "Table": "unsharded" + "Query": "select 1 from unsharded" }, { "OperatorType": "Route", @@ -3840,8 +3635,7 @@ "Sharded": false }, "FieldQuery": "select 1 from unsharded_tab where 1 != 1", - "Query": "select 1 from unsharded_tab", - "Table": "unsharded_tab" + "Query": "select 1 from unsharded_tab" } ] }, @@ -3866,8 +3660,7 @@ "Sharded": false }, "FieldQuery": "select * from unsharded_a join unsharded_b using (propertyId) where 1 != 1", - "Query": "select * from unsharded_a join unsharded_b using (propertyId)", - "Table": "unsharded_a, unsharded_b" + "Query": "select * from unsharded_a join unsharded_b using (propertyId)" }, "TablesUsed": [ "main.unsharded_a", @@ -3890,8 +3683,7 @@ "Sharded": true }, "FieldQuery": "select id2 from (select id from `user` where 1 != 1) as x(id2) where 1 != 1", - "Query": "select id2 from (select id from `user`) as x(id2)", - "Table": "`user`" + "Query": "select id2 from (select id from `user`) as x(id2)" }, "TablesUsed": [ "user.user" @@ -3913,8 +3705,7 @@ "Sharded": false }, "FieldQuery": "select col from (select col from unsharded join unsharded_b where 1 != 1) as u join unsharded_a as ua where 1 != 1", - "Query": "select col from (select col from unsharded join unsharded_b) as u join unsharded_a as ua limit 1", - "Table": "unsharded, unsharded_a, unsharded_b" + "Query": "select col from (select col from unsharded join unsharded_b) as u join unsharded_a as ua limit 1" }, "TablesUsed": [ "main.unsharded", @@ -3938,13 +3729,11 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_user_extra_user_extra", "Inputs": [ { "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -3954,8 +3743,7 @@ "Sharded": true }, "FieldQuery": "select u.col from (select `user`.col from `user` where 1 != 1) as u where 1 != 1", - "Query": "select u.col from (select `user`.col from `user`) as u", - "Table": "`user`" + "Query": "select u.col from (select `user`.col from `user`) as u" }, { "OperatorType": "Route", @@ -3965,8 +3753,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra", - "Table": "user_extra" + "Query": "select 1 from user_extra" } ] }, @@ -3982,8 +3769,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra as ue where 1 != 1", - "Query": "select 1 from user_extra as ue limit 1", - "Table": "user_extra" + "Query": "select 1 from user_extra as ue limit 1" } ] } @@ -4017,7 +3803,6 @@ "JoinVars": { "user_col": 0 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -4027,8 +3812,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user` where 1 != 1", - "Query": "select `user`.col from `user`", - "Table": "`user`" + "Query": "select `user`.col from `user`" }, { "OperatorType": "Route", @@ -4038,8 +3822,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.col from user_extra where 1 != 1", - "Query": "select user_extra.col from user_extra where user_extra.col = :user_col /* INT16 */", - "Table": "user_extra" + "Query": "select user_extra.col from user_extra where user_extra.col = :user_col /* INT16 */" } ] } @@ -4062,7 +3845,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,L:1", - "TableName": "`user`_user_extra_user_extra", "Inputs": [ { "OperatorType": "Projection", @@ -4078,7 +3860,6 @@ "JoinVars": { "user_col": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -4088,8 +3869,7 @@ "Sharded": true }, "FieldQuery": "select `user`.id, `user`.col from `user` where 1 != 1", - "Query": "select `user`.id, `user`.col from `user`", - "Table": "`user`" + "Query": "select `user`.id, `user`.col from `user`" }, { "OperatorType": "Route", @@ -4099,8 +3879,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.col from user_extra where 1 != 1", - "Query": "select user_extra.col from user_extra where user_extra.col = :user_col /* INT16 */", - "Table": "user_extra" + "Query": "select user_extra.col from user_extra where user_extra.col = :user_col /* INT16 */" } ] } @@ -4114,8 +3893,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra as e where 1 != 1", - "Query": "select 1 from user_extra as e", - "Table": "user_extra" + "Query": "select 1 from user_extra as e" } ] }, @@ -4145,7 +3923,6 @@ "JoinVars": { "user_col": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -4155,8 +3932,7 @@ "Sharded": true }, "FieldQuery": "select `user`.foo, `user`.col from `user` where 1 != 1", - "Query": "select `user`.foo, `user`.col from `user`", - "Table": "`user`" + "Query": "select `user`.foo, `user`.col from `user`" }, { "OperatorType": "Route", @@ -4166,8 +3942,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.col from user_extra where 1 != 1", - "Query": "select user_extra.col from user_extra where user_extra.col = :user_col /* INT16 */", - "Table": "user_extra" + "Query": "select user_extra.col from user_extra where user_extra.col = :user_col /* INT16 */" } ] } @@ -4202,8 +3977,7 @@ }, "FieldQuery": "select col1, count(*), weight_string(col1) from (select colC + colD as col1 from `user` where 1 != 1) as tbl where 1 != 1 group by col1, weight_string(col1)", "OrderBy": "(0|2) ASC", - "Query": "select col1, count(*), weight_string(col1) from (select colC + colD as col1 from `user`) as tbl group by col1, weight_string(col1) order by col1 asc", - "Table": "`user`" + "Query": "select col1, count(*), weight_string(col1) from (select colC + colD as col1 from `user`) as tbl group by col1, weight_string(col1) order by col1 asc" } ] }, @@ -4226,7 +4000,6 @@ "JoinVars": { "authoritative_col1": 0 }, - "TableName": "authoritative_unsharded_authoritative", "Inputs": [ { "OperatorType": "Route", @@ -4236,8 +4009,7 @@ "Sharded": true }, "FieldQuery": "select authoritative.col1, authoritative.user_id, authoritative.col2 from authoritative where 1 != 1", - "Query": "select authoritative.col1, authoritative.user_id, authoritative.col2 from authoritative", - "Table": "authoritative" + "Query": "select authoritative.col1, authoritative.user_id, authoritative.col2 from authoritative" }, { "OperatorType": "Route", @@ -4247,8 +4019,7 @@ "Sharded": false }, "FieldQuery": "select unsharded_authoritative.col2 from unsharded_authoritative where 1 != 1", - "Query": "select unsharded_authoritative.col2 from unsharded_authoritative where unsharded_authoritative.col1 = :authoritative_col1 /* VARCHAR */", - "Table": "unsharded_authoritative" + "Query": "select unsharded_authoritative.col2 from unsharded_authoritative where unsharded_authoritative.col1 = :authoritative_col1 /* VARCHAR */" } ] }, @@ -4274,7 +4045,6 @@ }, "FieldQuery": "select push_it from (select bar as push_it from (select foo as bar from (select id as foo from `user` where 1 != 1) as t1 where 1 != 1) as t2 where 1 != 1) as t3 where 1 != 1", "Query": "select push_it from (select bar as push_it from (select foo as bar from (select id as foo from `user` where id = 12) as t1) as t2) as t3", - "Table": "`user`", "Values": [ "12" ], @@ -4300,8 +4070,7 @@ "Sharded": true }, "FieldQuery": "select id, col from (select `user`.id, user_extra.col from `user`, user_extra where 1 != 1) as user_details_view where 1 != 1", - "Query": "select id, col from (select `user`.id, user_extra.col from `user`, user_extra where `user`.id = user_extra.user_id) as user_details_view", - "Table": "`user`, user_extra" + "Query": "select id, col from (select `user`.id, user_extra.col from `user`, user_extra where `user`.id = user_extra.user_id) as user_details_view" }, "TablesUsed": [ "user.user", @@ -4324,8 +4093,7 @@ "Sharded": true }, "FieldQuery": "select id, col from (select `user`.id, user_extra.col from `user`, user_extra where 1 != 1) as user_details_view where 1 != 1", - "Query": "select id, col from (select `user`.id, user_extra.col from `user`, user_extra where `user`.id = user_extra.user_id) as user_details_view", - "Table": "`user`, user_extra" + "Query": "select id, col from (select `user`.id, user_extra.col from `user`, user_extra where `user`.id = user_extra.user_id) as user_details_view" }, "TablesUsed": [ "user.user", @@ -4352,7 +4120,6 @@ "JoinVars": { "user_col": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -4362,8 +4129,7 @@ "Sharded": true }, "FieldQuery": "select `user`.id, `user`.col from `user` where 1 != 1", - "Query": "select `user`.id, `user`.col from `user`", - "Table": "`user`" + "Query": "select `user`.id, `user`.col from `user`" }, { "OperatorType": "Route", @@ -4373,8 +4139,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.col from user_extra where 1 != 1", - "Query": "select user_extra.col from user_extra where user_extra.col = :user_col /* INT16 */", - "Table": "user_extra" + "Query": "select user_extra.col from user_extra where user_extra.col = :user_col /* INT16 */" } ] } @@ -4401,8 +4166,7 @@ "Sharded": false }, "FieldQuery": "select missing_column from unsharded, unsharded_a where 1 != 1", - "Query": "select missing_column from unsharded, unsharded_a", - "Table": "unsharded, unsharded_a" + "Query": "select missing_column from unsharded, unsharded_a" }, "TablesUsed": [ "main.unsharded", @@ -4426,7 +4190,6 @@ "OperatorType": "Join", "Variant": "LeftJoin", "JoinColumnIndexes": "L:0,R:0", - "TableName": "t1_t1", "Inputs": [ { "OperatorType": "Route", @@ -4436,8 +4199,7 @@ "Sharded": true }, "FieldQuery": "select t1.id1 from t1 where 1 != 1", - "Query": "select t1.id1 from t1", - "Table": "t1" + "Query": "select t1.id1 from t1" }, { "OperatorType": "Route", @@ -4447,8 +4209,7 @@ "Sharded": true }, "FieldQuery": "select t2.id1 from t1 as t2 where 1 != 1", - "Query": "select t2.id1 from t1 as t2 where t2.id1 = t2.id2", - "Table": "t1" + "Query": "select t2.id1 from t1 as t2 where t2.id1 = t2.id2" } ] }, @@ -4472,8 +4233,7 @@ "Sharded": false }, "FieldQuery": "select * from unsharded_authoritative as A left join unsharded_authoritative as B using (col1) where 1 != 1", - "Query": "select * from unsharded_authoritative as A left join unsharded_authoritative as B using (col1)", - "Table": "unsharded_authoritative" + "Query": "select * from unsharded_authoritative as A left join unsharded_authoritative as B using (col1)" }, "TablesUsed": [ "main.unsharded_authoritative" @@ -4494,7 +4254,6 @@ "JoinVars": { "m1_cola": 1 }, - "TableName": "multicol_tbl_multicol_tbl", "Inputs": [ { "OperatorType": "Route", @@ -4504,8 +4263,7 @@ "Sharded": true }, "FieldQuery": "select 1, m1.cola from multicol_tbl as m1 where 1 != 1", - "Query": "select 1, m1.cola from multicol_tbl as m1", - "Table": "multicol_tbl" + "Query": "select 1, m1.cola from multicol_tbl as m1" }, { "OperatorType": "Route", @@ -4516,7 +4274,6 @@ }, "FieldQuery": "select 1 from multicol_tbl as m2 where 1 != 1", "Query": "select 1 from multicol_tbl as m2 where m2.cola = :m1_cola", - "Table": "multicol_tbl", "Values": [ ":m1_cola" ], @@ -4548,7 +4305,6 @@ "ComparisonType": "INT16", "JoinColumnIndexes": "-2", "Predicate": "`user`.col = ue.col", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -4558,8 +4314,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col, id from `user` where 1 != 1", - "Query": "select `user`.col, id from `user`", - "Table": "`user`" + "Query": "select `user`.col, id from `user`" }, { "OperatorType": "Limit", @@ -4573,8 +4328,7 @@ "Sharded": true }, "FieldQuery": "select ue.col from (select col from user_extra where 1 != 1) as ue where 1 != 1", - "Query": "select ue.col from (select col from user_extra) as ue limit 10", - "Table": "user_extra" + "Query": "select ue.col from (select col from user_extra) as ue limit 10" } ] } @@ -4600,7 +4354,6 @@ "ComparisonType": "INT16", "JoinColumnIndexes": "-1,2", "Predicate": "u.col = ue.col", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Limit", @@ -4614,8 +4367,7 @@ "Sharded": true }, "FieldQuery": "select u.id, u.col from (select id, col from `user` where 1 != 1) as u where 1 != 1", - "Query": "select u.id, u.col from (select id, col from `user`) as u limit 10", - "Table": "`user`" + "Query": "select u.id, u.col from (select id, col from `user`) as u limit 10" } ] }, @@ -4631,8 +4383,7 @@ "Sharded": true }, "FieldQuery": "select ue.col, ue.user_id from (select col, user_id from user_extra where 1 != 1) as ue where 1 != 1", - "Query": "select ue.col, ue.user_id from (select col, user_id from user_extra) as ue limit 10", - "Table": "user_extra" + "Query": "select ue.col, ue.user_id from (select col, user_id from user_extra) as ue limit 10" } ] } @@ -4660,7 +4411,6 @@ }, "FieldQuery": "select id, user_id from (select id, col from `user` where 1 != 1) as u, (select col, user_id from user_extra where 1 != 1) as ue where 1 != 1", "Query": "select id, user_id from (select id, col from `user` where id = 17 limit 10) as u, (select col, user_id from user_extra where user_id = 17 limit 10) as ue where u.col = ue.col", - "Table": "`user`, user_extra", "Values": [ "17" ], @@ -4693,7 +4443,6 @@ "ComparisonType": "INT16", "JoinColumnIndexes": "-1,2,-3,3", "Predicate": "u.col = ue.col", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -4703,8 +4452,7 @@ "Sharded": true }, "FieldQuery": "select u.id, u.col, weight_string(u.id) from (select id, col from `user` where 1 != 1) as u where 1 != 1", - "Query": "select distinct u.id, u.col, weight_string(u.id) from (select id, col from `user`) as u", - "Table": "`user`" + "Query": "select distinct u.id, u.col, weight_string(u.id) from (select id, col from `user`) as u" }, { "OperatorType": "Limit", @@ -4718,8 +4466,7 @@ "Sharded": true }, "FieldQuery": "select ue.col, ue.user_id, weight_string(ue.user_id) from (select col, user_id from user_extra where 1 != 1) as ue where 1 != 1", - "Query": "select ue.col, ue.user_id, weight_string(ue.user_id) from (select col, user_id from user_extra) as ue limit 10", - "Table": "user_extra" + "Query": "select ue.col, ue.user_id, weight_string(ue.user_id) from (select col, user_id from user_extra) as ue limit 10" } ] } @@ -4748,8 +4495,7 @@ "Sharded": false }, "FieldQuery": "select x from (select t.*, 1 as x from unsharded as t where 1 != 1 union select t.*, 1 as x from unsharded as t where 1 != 1) as x where 1 != 1", - "Query": "select x from (select t.*, 1 as x from unsharded as t union select t.*, 1 as x from unsharded as t) as x", - "Table": "unsharded" + "Query": "select x from (select t.*, 1 as x from unsharded as t union select t.*, 1 as x from unsharded as t) as x" }, "TablesUsed": [ "main.unsharded" @@ -4787,7 +4533,6 @@ "JoinVars": { "m_id": 0 }, - "TableName": "music_`user`, user_extra", "Inputs": [ { "OperatorType": "Route", @@ -4797,8 +4542,7 @@ "Sharded": true }, "FieldQuery": "select subquery_for_count.`m.id` from (select m.id as `m.id` from music as m where 1 != 1) as subquery_for_count where 1 != 1", - "Query": "select distinct subquery_for_count.`m.id` from (select m.id as `m.id` from music as m) as subquery_for_count", - "Table": "music" + "Query": "select distinct subquery_for_count.`m.id` from (select m.id as `m.id` from music as m) as subquery_for_count" }, { "OperatorType": "Route", @@ -4809,7 +4553,6 @@ }, "FieldQuery": "select subquery_for_count.user_id, weight_string(subquery_for_count.user_id) from (select u.user_id from `user` as u, user_extra as ue where 1 != 1) as subquery_for_count where 1 != 1", "Query": "select distinct subquery_for_count.user_id, weight_string(subquery_for_count.user_id) from (select u.user_id from `user` as u, user_extra as ue where u.id = :m_id and u.id = ue.user_id) as subquery_for_count", - "Table": "`user`, user_extra", "Values": [ ":m_id" ], @@ -4844,7 +4587,6 @@ "JoinVars": { "u_col": 2 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "VindexLookup", @@ -4867,7 +4609,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -4881,8 +4622,7 @@ "Sharded": true }, "FieldQuery": "select u.intcol, u.id, u.col from `user` as u where 1 != 1", - "Query": "select u.intcol, u.id, u.col from `user` as u where u.`name` = 'bb' and u.id = 3", - "Table": "`user`" + "Query": "select u.intcol, u.id, u.col from `user` as u where u.`name` = 'bb' and u.id = 3" } ] }, @@ -4907,7 +4647,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -4921,8 +4660,7 @@ "Sharded": true }, "FieldQuery": "select 1 from music as m where 1 != 1", - "Query": "select 1 from music as m where m.user_id = 5 and m.id = 20 and m.col = :u_col /* INT16 */", - "Table": "music" + "Query": "select 1 from music as m where m.user_id = 5 and m.id = 20 and m.col = :u_col /* INT16 */" } ] } @@ -4948,7 +4686,6 @@ "JoinVars": { "t1_id": 1 }, - "TableName": "t1_`user`", "Inputs": [ { "OperatorType": "Route", @@ -4958,8 +4695,7 @@ "Sharded": true }, "FieldQuery": "select 1, t1.id from t1 where 1 != 1", - "Query": "select 1, t1.id from t1", - "Table": "t1" + "Query": "select 1, t1.id from t1" }, { "OperatorType": "Route", @@ -4970,7 +4706,6 @@ }, "FieldQuery": "select 1 from `user` where 1 != 1", "Query": "select 1 from `user` where `user`.id = :t1_id", - "Table": "`user`", "Values": [ ":t1_id" ], @@ -4998,7 +4733,6 @@ "JoinVars": { "u_foo": 0 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -5008,8 +4742,7 @@ "Sharded": true }, "FieldQuery": "select dt.foo from (select u.foo from `user` as u where 1 != 1) as dt where 1 != 1", - "Query": "select dt.foo from (select u.foo from `user` as u) as dt", - "Table": "`user`" + "Query": "select dt.foo from (select u.foo from `user` as u) as dt" }, { "OperatorType": "Route", @@ -5019,8 +4752,7 @@ "Sharded": true }, "FieldQuery": "select dt.`u.foo * ue.bar` from (select :u_foo * ue.bar as `u.foo * ue.bar` from user_extra as ue where 1 != 1) as dt where 1 != 1", - "Query": "select dt.`u.foo * ue.bar` from (select :u_foo * ue.bar as `u.foo * ue.bar` from user_extra as ue) as dt", - "Table": "user_extra" + "Query": "select dt.`u.foo * ue.bar` from (select :u_foo * ue.bar as `u.foo * ue.bar` from user_extra as ue) as dt" } ] }, @@ -5029,5 +4761,47 @@ "user.user_extra" ] } + }, + { + "comment": "case statement in join condition for evaluation - tuple‐expr simplification in CASE", + "query": "select 1 from user u1 join user u2 on u1.col = (case when u2.col = 2 then 0 when u2.col in (1, 2) then 1 else 2 end)", + "plan": { + "Type": "Join", + "QueryType": "SELECT", + "Original": "select 1 from user u1 join user u2 on u1.col = (case when u2.col = 2 then 0 when u2.col in (1, 2) then 1 else 2 end)", + "Instructions": { + "OperatorType": "Join", + "Variant": "Join", + "JoinColumnIndexes": "L:0", + "JoinVars": { + "u1_col": 1 + }, + "Inputs": [ + { + "OperatorType": "Route", + "Variant": "Scatter", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "FieldQuery": "select 1, u1.col from `user` as u1 where 1 != 1", + "Query": "select 1, u1.col from `user` as u1" + }, + { + "OperatorType": "Route", + "Variant": "Scatter", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "FieldQuery": "select 1 from `user` as u2 where 1 != 1", + "Query": "select 1 from `user` as u2 where :u1_col /* INT16 */ = case when u2.col = 2 then 0 when u2.col in (1, 2) then 1 else 2 end" + } + ] + }, + "TablesUsed": [ + "user.user" + ] + } } ] diff --git a/go/vt/vtgate/planbuilder/testdata/info_schema57_cases.json b/go/vt/vtgate/planbuilder/testdata/info_schema57_cases.json index 8c9b0b0dfcb..efed1db91a7 100644 --- a/go/vt/vtgate/planbuilder/testdata/info_schema57_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/info_schema57_cases.json @@ -14,8 +14,7 @@ "Sharded": false }, "FieldQuery": "select `TABLE_NAME` from information_schema.`TABLES` where 1 != 1", - "Query": "select `TABLE_NAME` from information_schema.`TABLES`", - "Table": "information_schema.`TABLES`" + "Query": "select `TABLE_NAME` from information_schema.`TABLES`" } } }, @@ -34,8 +33,7 @@ "Sharded": false }, "FieldQuery": "select a.`ENGINE`, b.DATA_TYPE from information_schema.`TABLES` as a, information_schema.`COLUMNS` as b where 1 != 1", - "Query": "select a.`ENGINE`, b.DATA_TYPE from information_schema.`TABLES` as a, information_schema.`COLUMNS` as b", - "Table": "information_schema.`COLUMNS`, information_schema.`TABLES`" + "Query": "select a.`ENGINE`, b.DATA_TYPE from information_schema.`TABLES` as a, information_schema.`COLUMNS` as b" } } }, @@ -54,8 +52,7 @@ "Sharded": false }, "FieldQuery": "select `column_name` from information_schema.`columns` where 1 != 1", - "Query": "select `column_name` from information_schema.`columns` where table_schema = schema()", - "Table": "information_schema.`columns`" + "Query": "select `column_name` from information_schema.`columns` where table_schema = schema()" } } }, @@ -74,8 +71,7 @@ "Sharded": false }, "FieldQuery": "select `tables`.TABLE_SCHEMA, files.`STATUS` from information_schema.`tables`, information_schema.files where 1 != 1", - "Query": "select `tables`.TABLE_SCHEMA, files.`STATUS` from information_schema.`tables`, information_schema.files", - "Table": "information_schema.`tables`, information_schema.files" + "Query": "select `tables`.TABLE_SCHEMA, files.`STATUS` from information_schema.`tables`, information_schema.files" } } }, @@ -94,8 +90,7 @@ "Sharded": false }, "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, DATETIME_PRECISION, CHARACTER_SET_NAME, COLLATION_NAME, COLUMN_TYPE, COLUMN_KEY, EXTRA, `PRIVILEGES`, COLUMN_COMMENT, GENERATION_EXPRESSION from information_schema.`COLUMNS` where 1 != 1", - "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, DATETIME_PRECISION, CHARACTER_SET_NAME, COLLATION_NAME, COLUMN_TYPE, COLUMN_KEY, EXTRA, `PRIVILEGES`, COLUMN_COMMENT, GENERATION_EXPRESSION from information_schema.`COLUMNS` where `COLUMNS`.`COLUMN_NAME` = 'toto'", - "Table": "information_schema.`COLUMNS`" + "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, DATETIME_PRECISION, CHARACTER_SET_NAME, COLLATION_NAME, COLUMN_TYPE, COLUMN_KEY, EXTRA, `PRIVILEGES`, COLUMN_COMMENT, GENERATION_EXPRESSION from information_schema.`COLUMNS` where `COLUMNS`.`COLUMN_NAME` = 'toto'" } } }, @@ -123,8 +118,7 @@ "Sharded": false }, "FieldQuery": "select `TABLE_NAME` from information_schema.`columns` where 1 != 1", - "Query": "select distinct `TABLE_NAME` from information_schema.`columns`", - "Table": "information_schema.`columns`" + "Query": "select distinct `TABLE_NAME` from information_schema.`columns`" }, { "OperatorType": "Route", @@ -134,8 +128,7 @@ "Sharded": false }, "FieldQuery": "select table_schema from information_schema.`tables` where 1 != 1", - "Query": "select distinct table_schema from information_schema.`tables`", - "Table": "information_schema.`tables`" + "Query": "select distinct table_schema from information_schema.`tables`" } ] } @@ -188,8 +181,7 @@ }, "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where 1 != 1", "Query": "select distinct TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "['user']", - "Table": "information_schema.`tables`" + "SysTableTableSchema": "['user']" }, { "OperatorType": "Route", @@ -200,8 +192,7 @@ }, "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where 1 != 1", "Query": "select distinct TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "['main']", - "Table": "information_schema.`tables`" + "SysTableTableSchema": "['main']" } ] } @@ -226,8 +217,7 @@ "FieldQuery": "select RC.`CONSTRAINT_NAME`, ORDINAL_POSITION from INFORMATION_SCHEMA.KEY_COLUMN_USAGE as KCU, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as RC where 1 != 1", "Query": "select RC.`CONSTRAINT_NAME`, ORDINAL_POSITION from INFORMATION_SCHEMA.KEY_COLUMN_USAGE as KCU, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as RC where KCU.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and KCU.`TABLE_NAME` = :KCU_TABLE_NAME /* VARCHAR */ and KCU.`COLUMN_NAME` = 'id' and KCU.REFERENCED_TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and KCU.`CONSTRAINT_NAME` = 'data_type_table_id_fkey' and KCU.`CONSTRAINT_NAME` = RC.`CONSTRAINT_NAME` order by KCU.`CONSTRAINT_NAME` asc, KCU.`COLUMN_NAME` asc", "SysTableTableName": "[KCU_TABLE_NAME:'data_type_table']", - "SysTableTableSchema": "['test']", - "Table": "INFORMATION_SCHEMA.KEY_COLUMN_USAGE, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS" + "SysTableTableSchema": "['test']" } } }, @@ -248,8 +238,7 @@ "FieldQuery": "select KCU.`TABLE_NAME`, S.`TABLE_NAME` from INFORMATION_SCHEMA.KEY_COLUMN_USAGE as KCU, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as RC, INFORMATION_SCHEMA.`TABLES` as S where 1 != 1", "Query": "select KCU.`TABLE_NAME`, S.`TABLE_NAME` from INFORMATION_SCHEMA.KEY_COLUMN_USAGE as KCU, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as RC, INFORMATION_SCHEMA.`TABLES` as S where S.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and S.`TABLE_NAME` = :S_TABLE_NAME /* VARCHAR */ and KCU.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and KCU.`TABLE_NAME` = :KCU_TABLE_NAME /* VARCHAR */ and KCU.`CONSTRAINT_NAME` = RC.`CONSTRAINT_NAME` order by KCU.`CONSTRAINT_NAME` asc, KCU.`COLUMN_NAME` asc", "SysTableTableName": "[KCU_TABLE_NAME:'data_type_table', S_TABLE_NAME:'sc']", - "SysTableTableSchema": "['test']", - "Table": "INFORMATION_SCHEMA.KEY_COLUMN_USAGE, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS, INFORMATION_SCHEMA.`TABLES`" + "SysTableTableSchema": "['test']" } } }, @@ -269,8 +258,7 @@ }, "FieldQuery": "select routine_name as `name`, routine_definition as definition from information_schema.routines where 1 != 1", "Query": "select routine_name as `name`, routine_definition as definition from information_schema.routines where ROUTINE_SCHEMA = :__vtschemaname /* VARCHAR */ and ROUTINE_TYPE = 'PROCEDURE'", - "SysTableTableSchema": "[:v1]", - "Table": "information_schema.routines" + "SysTableTableSchema": "[:v1]" } } }, @@ -290,8 +278,7 @@ }, "FieldQuery": "select sum(data_length + index_length) as size from information_schema.`TABLES` where 1 != 1", "Query": "select sum(data_length + index_length) as size from information_schema.`TABLES` where table_schema = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "[:v1]", - "Table": "information_schema.`TABLES`" + "SysTableTableSchema": "[:v1]" } } }, @@ -309,7 +296,6 @@ "JoinVars": { "kcu_constraint_name": 0 }, - "TableName": "information_schema.key_column_usage_information_schema.referential_constraints", "Inputs": [ { "OperatorType": "Route", @@ -320,8 +306,7 @@ }, "FieldQuery": "select kcu.`constraint_name` as `constraint_name`, kcu.`column_name` as `column_name`, kcu.referenced_table_name as referenced_table_name, kcu.referenced_column_name as referenced_column_name, kcu.ordinal_position as ordinal_position, kcu.`table_name` as `table_name` from information_schema.key_column_usage as kcu where 1 != 1", "Query": "select kcu.`constraint_name` as `constraint_name`, kcu.`column_name` as `column_name`, kcu.referenced_table_name as referenced_table_name, kcu.referenced_column_name as referenced_column_name, kcu.ordinal_position as ordinal_position, kcu.`table_name` as `table_name` from information_schema.key_column_usage as kcu where kcu.table_schema = :__vtschemaname /* VARCHAR */ and kcu.referenced_column_name is not null order by kcu.ordinal_position asc", - "SysTableTableSchema": "[:v1]", - "Table": "information_schema.key_column_usage" + "SysTableTableSchema": "[:v1]" }, { "OperatorType": "Route", @@ -332,8 +317,7 @@ }, "FieldQuery": "select rc.delete_rule as delete_rule, rc.update_rule as update_rule from information_schema.referential_constraints as rc where 1 != 1", "Query": "select rc.delete_rule as delete_rule, rc.update_rule as update_rule from information_schema.referential_constraints as rc where rc.`constraint_schema` = :__vtschemaname /* VARCHAR */ and rc.`constraint_name` = :kcu_constraint_name /* VARCHAR(64) */", - "SysTableTableSchema": "[:v2]", - "Table": "information_schema.referential_constraints" + "SysTableTableSchema": "[:v2]" } ] } @@ -355,8 +339,7 @@ }, "FieldQuery": "select fk.referenced_table_name as to_table, fk.referenced_column_name as primary_key, fk.`column_name` as `column`, fk.`constraint_name` as `name`, rc.update_rule as on_update, rc.delete_rule as on_delete from information_schema.referential_constraints as rc, information_schema.key_column_usage as fk where 1 != 1", "Query": "select fk.referenced_table_name as to_table, fk.referenced_column_name as primary_key, fk.`column_name` as `column`, fk.`constraint_name` as `name`, rc.update_rule as on_update, rc.delete_rule as on_delete from information_schema.referential_constraints as rc, information_schema.key_column_usage as fk where rc.`constraint_schema` = database() and rc.`table_name` = :rc_table_name /* VARCHAR */ and fk.referenced_column_name is not null and fk.table_schema = database() and fk.`table_name` = :fk_table_name /* VARCHAR */ and rc.`constraint_schema` = fk.`constraint_schema` and rc.`constraint_name` = fk.`constraint_name`", - "SysTableTableName": "[fk_table_name:':vtg1', rc_table_name:':vtg1']", - "Table": "information_schema.key_column_usage, information_schema.referential_constraints" + "SysTableTableName": "[fk_table_name:':vtg1', rc_table_name:':vtg1']" } } }, @@ -376,8 +359,7 @@ }, "FieldQuery": "select `CATALOG_NAME`, `SCHEMA_NAME`, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME, SQL_PATH from information_schema.schemata where 1 != 1", "Query": "select `CATALOG_NAME`, `SCHEMA_NAME`, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME, SQL_PATH from information_schema.schemata where `schema_name` = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "['user']", - "Table": "information_schema.schemata" + "SysTableTableSchema": "['user']" } } }, @@ -398,8 +380,7 @@ "FieldQuery": "select table_comment from information_schema.`tables` where 1 != 1", "Query": "select table_comment from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */ and `table_name` = :table_name /* VARCHAR */", "SysTableTableName": "[table_name:'table_name']", - "SysTableTableSchema": "['schema_name']", - "Table": "information_schema.`tables`" + "SysTableTableSchema": "['schema_name']" } } }, @@ -420,8 +401,7 @@ "FieldQuery": "select fk.referenced_table_name as to_table, fk.referenced_column_name as primary_key, fk.`column_name` as `column`, fk.`constraint_name` as `name`, rc.update_rule as on_update, rc.delete_rule as on_delete from information_schema.referential_constraints as rc, information_schema.key_column_usage as fk where 1 != 1", "Query": "select fk.referenced_table_name as to_table, fk.referenced_column_name as primary_key, fk.`column_name` as `column`, fk.`constraint_name` as `name`, rc.update_rule as on_update, rc.delete_rule as on_delete from information_schema.referential_constraints as rc, information_schema.key_column_usage as fk where rc.`constraint_schema` = :__vtschemaname /* VARCHAR */ and rc.`table_name` = :rc_table_name /* VARCHAR */ and fk.referenced_column_name is not null and fk.table_schema = :__vtschemaname /* VARCHAR */ and fk.`table_name` = :fk_table_name /* VARCHAR */ and rc.`constraint_schema` = fk.`constraint_schema` and rc.`constraint_name` = fk.`constraint_name`", "SysTableTableName": "[fk_table_name:'table_name', rc_table_name:'table_name']", - "SysTableTableSchema": "['table_schema']", - "Table": "information_schema.key_column_usage, information_schema.referential_constraints" + "SysTableTableSchema": "['table_schema']" } } }, @@ -442,8 +422,7 @@ "FieldQuery": "select `column_name` from information_schema.statistics where 1 != 1", "Query": "select `column_name` from information_schema.statistics where index_name = 'PRIMARY' and table_schema = :__vtschemaname /* VARCHAR */ and `table_name` = :table_name /* VARCHAR */ order by seq_in_index asc", "SysTableTableName": "[table_name:'table_name']", - "SysTableTableSchema": "['table_schema']", - "Table": "information_schema.statistics" + "SysTableTableSchema": "['table_schema']" } } }, @@ -464,8 +443,7 @@ "FieldQuery": "select generation_expression from information_schema.`columns` where 1 != 1", "Query": "select generation_expression from information_schema.`columns` where table_schema = :__vtschemaname /* VARCHAR */ and `table_name` = :table_name /* VARCHAR */ and `column_name` = 'column_name'", "SysTableTableName": "[table_name:'table_name']", - "SysTableTableSchema": "['table_schema']", - "Table": "information_schema.`columns`" + "SysTableTableSchema": "['table_schema']" } } }, @@ -484,8 +462,7 @@ "Sharded": false }, "FieldQuery": "select id from information_schema.`processlist` where 1 != 1", - "Query": "select id from information_schema.`processlist` where info like '% FOR UPDATE'", - "Table": "information_schema.`processlist`" + "Query": "select id from information_schema.`processlist` where info like '% FOR UPDATE'" } } }, @@ -505,8 +482,7 @@ }, "FieldQuery": "select `table_name` from (select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where 1 != 1) as _subquery where 1 != 1", "Query": "select `table_name` from (select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */) as _subquery", - "SysTableTableSchema": "['table_schema']", - "Table": "information_schema.`tables`" + "SysTableTableSchema": "['table_schema']" } } }, @@ -526,8 +502,7 @@ }, "FieldQuery": "select `table_name` from (select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where 1 != 1) as _subquery where 1 != 1", "Query": "select `table_name` from (select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */ and table_type = 'table_type' and `table_name` = 'table_name') as _subquery", - "SysTableTableSchema": "['table_schema']", - "Table": "information_schema.`tables`" + "SysTableTableSchema": "['table_schema']" } } }, @@ -548,8 +523,7 @@ "FieldQuery": "select count(*) from INFORMATION_SCHEMA.`TABLES` where 1 != 1", "Query": "select count(*) from INFORMATION_SCHEMA.`TABLES` where table_schema = :__vtschemaname /* VARCHAR */ and `table_name` = :table_name /* VARCHAR */", "SysTableTableName": "[table_name:'foo']", - "SysTableTableSchema": "['performance_schema']", - "Table": "INFORMATION_SCHEMA.`TABLES`" + "SysTableTableSchema": "['performance_schema']" } } }, @@ -568,8 +542,7 @@ "Sharded": false }, "FieldQuery": "select `TABLES`.`CHECKSUM` from information_schema.`TABLES` where 1 != 1", - "Query": "select `TABLES`.`CHECKSUM` from information_schema.`TABLES` where `TABLE_NAME` in (select `TABLE_NAME` from information_schema.`COLUMNS`)", - "Table": "information_schema.`TABLES`" + "Query": "select `TABLES`.`CHECKSUM` from information_schema.`TABLES` where `TABLE_NAME` in (select `TABLE_NAME` from information_schema.`COLUMNS`)" } } }, @@ -589,8 +562,7 @@ }, "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and TABLE_SCHEMA = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "['user', 'main']", - "Table": "INFORMATION_SCHEMA.`TABLES`" + "SysTableTableSchema": "['user', 'main']" } } }, @@ -609,8 +581,7 @@ "Sharded": false }, "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", - "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = database()", - "Table": "INFORMATION_SCHEMA.`TABLES`" + "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = database()" } } }, @@ -630,8 +601,7 @@ }, "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "['ks']", - "Table": "INFORMATION_SCHEMA.`TABLES`" + "SysTableTableSchema": "['ks']" } } }, @@ -652,8 +622,7 @@ "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and `TABLE_NAME` = :TABLE_NAME /* VARCHAR */", "SysTableTableName": "[TABLE_NAME:'route1']", - "SysTableTableSchema": "['ks']", - "Table": "INFORMATION_SCHEMA.`TABLES`" + "SysTableTableSchema": "['ks']" } } }, @@ -673,8 +642,7 @@ }, "FieldQuery": "select `TABLE_NAME` from INFORMATION_SCHEMA.`TABLES` where 1 != 1", "Query": "select `TABLE_NAME` from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and DATA_FREE = 42", - "SysTableTableSchema": "['ks']", - "Table": "INFORMATION_SCHEMA.`TABLES`" + "SysTableTableSchema": "['ks']" } } }, @@ -694,8 +662,7 @@ }, "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and (DATA_FREE = 42 or `CHECKSUM` = 'value')", - "SysTableTableSchema": "['ks']", - "Table": "INFORMATION_SCHEMA.`TABLES`" + "SysTableTableSchema": "['ks']" } } }, @@ -714,8 +681,7 @@ "Sharded": false }, "FieldQuery": "select x.`table_name` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a where 1 != 1) as x where 1 != 1", - "Query": "select x.`table_name` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a) as x", - "Table": "information_schema.key_column_usage" + "Query": "select x.`table_name` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a) as x" } } }, @@ -733,7 +699,6 @@ "JoinVars": { "x_COLUMN_NAME": 1 }, - "TableName": "information_schema.key_column_usage_`user`", "Inputs": [ { "OperatorType": "Route", @@ -743,8 +708,7 @@ "Sharded": false }, "FieldQuery": "select x.`table_name`, x.`COLUMN_NAME` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a where 1 != 1) as x where 1 != 1", - "Query": "select x.`table_name`, x.`COLUMN_NAME` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a) as x", - "Table": "information_schema.key_column_usage" + "Query": "select x.`table_name`, x.`COLUMN_NAME` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a) as x" }, { "OperatorType": "Route", @@ -755,7 +719,6 @@ }, "FieldQuery": "select 1 from `user` where 1 != 1", "Query": "select 1 from `user` where `user`.id = :x_COLUMN_NAME /* VARCHAR(64) */", - "Table": "`user`", "Values": [ ":x_COLUMN_NAME" ], @@ -783,8 +746,7 @@ "Sharded": false }, "FieldQuery": "select a.VARIABLE_NAME, a.VARIABLE_VALUE, b.CHARACTER_SET_NAME, b.DEFAULT_COLLATE_NAME, b.DESCRIPTION, b.MAXLEN from information_schema.GLOBAL_STATUS as a, information_schema.CHARACTER_SETS as b where 1 != 1", - "Query": "select a.VARIABLE_NAME, a.VARIABLE_VALUE, b.CHARACTER_SET_NAME, b.DEFAULT_COLLATE_NAME, b.DESCRIPTION, b.MAXLEN from information_schema.GLOBAL_STATUS as a, information_schema.CHARACTER_SETS as b", - "Table": "information_schema.CHARACTER_SETS, information_schema.GLOBAL_STATUS" + "Query": "select a.VARIABLE_NAME, a.VARIABLE_VALUE, b.CHARACTER_SET_NAME, b.DEFAULT_COLLATE_NAME, b.DESCRIPTION, b.MAXLEN from information_schema.GLOBAL_STATUS as a, information_schema.CHARACTER_SETS as b" } } }, @@ -804,8 +766,7 @@ }, "FieldQuery": "select a.`table_name` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a where 1 != 1) as a, (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, UNIQUE_CONSTRAINT_CATALOG, UNIQUE_CONSTRAINT_SCHEMA, UNIQUE_CONSTRAINT_NAME, MATCH_OPTION, UPDATE_RULE, DELETE_RULE, `TABLE_NAME`, REFERENCED_TABLE_NAME from information_schema.referential_constraints where 1 != 1) as b where 1 != 1", "Query": "select a.`table_name` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a where a.`table_name` = :a_table_name /* VARCHAR */) as a, (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, UNIQUE_CONSTRAINT_CATALOG, UNIQUE_CONSTRAINT_SCHEMA, UNIQUE_CONSTRAINT_NAME, MATCH_OPTION, UPDATE_RULE, DELETE_RULE, `TABLE_NAME`, REFERENCED_TABLE_NAME from information_schema.referential_constraints where `table_name` = :table_name /* VARCHAR */) as b", - "SysTableTableName": "[a_table_name:'users', table_name:'users']", - "Table": "information_schema.key_column_usage, information_schema.referential_constraints" + "SysTableTableName": "[a_table_name:'users', table_name:'users']" } } }, @@ -833,8 +794,7 @@ }, "FieldQuery": "select 1 as `found` from information_schema.`tables` where 1 != 1", "Query": "select 1 as `found` from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "['music']", - "Table": "information_schema.`tables`" + "SysTableTableSchema": "['music']" }, { "OperatorType": "Route", @@ -845,8 +805,7 @@ }, "FieldQuery": "select 1 as `found` from information_schema.views where 1 != 1", "Query": "select 1 as `found` from information_schema.views where table_schema = :__vtschemaname /* VARCHAR */ limit 1", - "SysTableTableSchema": "['music']", - "Table": "information_schema.views" + "SysTableTableSchema": "['music']" } ] } @@ -873,8 +832,7 @@ }, "FieldQuery": "select 1 as `found` from information_schema.`tables` where 1 != 1", "Query": "select 1 as `found` from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "['music']", - "Table": "information_schema.`tables`" + "SysTableTableSchema": "['music']" }, { "OperatorType": "Route", @@ -885,8 +843,7 @@ }, "FieldQuery": "select 1 as `found` from information_schema.views where 1 != 1", "Query": "select 1 as `found` from information_schema.views where table_schema = :__vtschemaname /* VARCHAR */ limit 1", - "SysTableTableSchema": "['music']", - "Table": "information_schema.views" + "SysTableTableSchema": "['music']" } ] } @@ -911,8 +868,7 @@ }, "FieldQuery": "select 1 as `found` from information_schema.`tables` where 1 != 1", "Query": "select 1 as `found` from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */ and table_schema = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "['music', 'Music']", - "Table": "information_schema.`tables`" + "SysTableTableSchema": "['music', 'Music']" }, { "OperatorType": "Route", @@ -923,8 +879,7 @@ }, "FieldQuery": "select 1 as `found` from information_schema.views where 1 != 1", "Query": "select 1 as `found` from information_schema.views where table_schema = :__vtschemaname /* VARCHAR */ and table_schema = :__vtschemaname /* VARCHAR */ limit 1", - "SysTableTableSchema": "['music', 'user']", - "Table": "information_schema.views" + "SysTableTableSchema": "['music', 'user']" } ] } @@ -949,8 +904,7 @@ }, "FieldQuery": "select 1 as `found` from information_schema.`tables` where 1 != 1", "Query": "select 1 as `found` from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */ and table_schema = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "['music', 'Music']", - "Table": "information_schema.`tables`" + "SysTableTableSchema": "['music', 'Music']" }, { "OperatorType": "Route", @@ -961,8 +915,7 @@ }, "FieldQuery": "select 1 as `found` from information_schema.views where 1 != 1", "Query": "select 1 as `found` from information_schema.views where table_schema = :__vtschemaname /* VARCHAR */ and table_schema = :__vtschemaname /* VARCHAR */ limit 1", - "SysTableTableSchema": "['music', 'user']", - "Table": "information_schema.views" + "SysTableTableSchema": "['music', 'user']" } ] } @@ -999,8 +952,7 @@ }, "FieldQuery": "select 1 as `found` from information_schema.`tables` where 1 != 1", "Query": "select 1 as `found` from information_schema.`tables` where `table_name` = :table_name1 /* VARCHAR */ and `table_name` = :table_name1 /* VARCHAR */ limit :__upper_limit", - "SysTableTableName": "[table_name1:'Music']", - "Table": "information_schema.`tables`" + "SysTableTableName": "[table_name1:'Music']" }, { "OperatorType": "Route", @@ -1011,8 +963,7 @@ }, "FieldQuery": "select 1 as `found` from information_schema.views where 1 != 1", "Query": "select 1 as `found` from information_schema.views where `table_name` = :table_name2 /* VARCHAR */ and `table_name` = :table_name2 /* VARCHAR */ limit :__upper_limit", - "SysTableTableName": "[table_name2:'user']", - "Table": "information_schema.views" + "SysTableTableName": "[table_name2:'user']" } ] } @@ -1028,8 +979,7 @@ }, "FieldQuery": "select 1 as `found` from information_schema.`tables` where 1 != 1", "Query": "select 1 as `found` from information_schema.`tables` where `table_name` = :table_name /* VARCHAR */ and `table_name` = :table_name /* VARCHAR */ and :__sq_has_values", - "SysTableTableName": "[table_name:'Music']", - "Table": "information_schema.`tables`" + "SysTableTableName": "[table_name:'Music']" } ] } @@ -1060,8 +1010,7 @@ }, "FieldQuery": "select `TABLE_NAME` from information_schema.`tables` as t where 1 != 1", "Query": "select distinct `TABLE_NAME` from information_schema.`tables` as t where t.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "['a']", - "Table": "information_schema.`tables`" + "SysTableTableSchema": "['a']" }, { "OperatorType": "Route", @@ -1071,8 +1020,7 @@ "Sharded": false }, "FieldQuery": "select `TABLE_NAME` from information_schema.`columns` where 1 != 1", - "Query": "select distinct `TABLE_NAME` from information_schema.`columns`", - "Table": "information_schema.`columns`" + "Query": "select distinct `TABLE_NAME` from information_schema.`columns`" } ] } @@ -1114,8 +1062,7 @@ }, "FieldQuery": "select `TABLE_NAME` from information_schema.`tables` as t where 1 != 1", "Query": "select distinct `TABLE_NAME` from information_schema.`tables` as t where t.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "['a']", - "Table": "information_schema.`tables`" + "SysTableTableSchema": "['a']" }, { "OperatorType": "Route", @@ -1125,8 +1072,7 @@ "Sharded": false }, "FieldQuery": "select `COLUMN_NAME` from information_schema.`columns` where 1 != 1", - "Query": "select distinct `COLUMN_NAME` from information_schema.`columns`", - "Table": "information_schema.`columns`" + "Query": "select distinct `COLUMN_NAME` from information_schema.`columns`" } ] } @@ -1141,8 +1087,7 @@ "Sharded": false }, "FieldQuery": "select COLLATION_NAME from information_schema.`COLUMNS` as t where 1 != 1", - "Query": "select COLLATION_NAME from information_schema.`COLUMNS` as t where :__sq_has_values and `COLUMN_NAME` in ::__sq1", - "Table": "information_schema.`COLUMNS`" + "Query": "select COLLATION_NAME from information_schema.`COLUMNS` as t where :__sq_has_values and `COLUMN_NAME` in ::__sq1" } ] } @@ -1163,8 +1108,7 @@ "Sharded": false }, "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", - "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = 'ks' or TABLE_SCHEMA = 'main'", - "Table": "INFORMATION_SCHEMA.`TABLES`" + "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = 'ks' or TABLE_SCHEMA = 'main'" } } }, @@ -1183,8 +1127,7 @@ "Sharded": false }, "FieldQuery": "select `TABLE_NAME` from information_schema.apa where 1 != 1", - "Query": "select `TABLE_NAME` from information_schema.apa", - "Table": "information_schema.apa" + "Query": "select `TABLE_NAME` from information_schema.apa" } } }, @@ -1203,8 +1146,7 @@ "Sharded": false }, "FieldQuery": "select c.`column_name` from (select `table_name` from information_schema.`tables` where 1 != 1) as `tables`, information_schema.`columns` as c where 1 != 1", - "Query": "select c.`column_name` from (select `table_name` from information_schema.`tables` where table_schema != 'information_schema' limit 1) as `tables`, information_schema.`columns` as c where `tables`.`table_name` = c.`table_name`", - "Table": "information_schema.`columns`, information_schema.`tables`" + "Query": "select c.`column_name` from (select `table_name` from information_schema.`tables` where table_schema != 'information_schema' limit 1) as `tables`, information_schema.`columns` as c where `tables`.`table_name` = c.`table_name`" } } } diff --git a/go/vt/vtgate/planbuilder/testdata/info_schema80_cases.json b/go/vt/vtgate/planbuilder/testdata/info_schema80_cases.json index f803cce648b..fcf78c4159f 100644 --- a/go/vt/vtgate/planbuilder/testdata/info_schema80_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/info_schema80_cases.json @@ -14,8 +14,7 @@ "Sharded": false }, "FieldQuery": "select `TABLE_NAME` from information_schema.`TABLES` where 1 != 1", - "Query": "select `TABLE_NAME` from information_schema.`TABLES`", - "Table": "information_schema.`TABLES`" + "Query": "select `TABLE_NAME` from information_schema.`TABLES`" } } }, @@ -34,8 +33,7 @@ "Sharded": false }, "FieldQuery": "select a.`ENGINE`, b.DATA_TYPE from information_schema.`TABLES` as a, information_schema.`COLUMNS` as b where 1 != 1", - "Query": "select a.`ENGINE`, b.DATA_TYPE from information_schema.`TABLES` as a, information_schema.`COLUMNS` as b", - "Table": "information_schema.`COLUMNS`, information_schema.`TABLES`" + "Query": "select a.`ENGINE`, b.DATA_TYPE from information_schema.`TABLES` as a, information_schema.`COLUMNS` as b" } } }, @@ -54,8 +52,7 @@ "Sharded": false }, "FieldQuery": "select `column_name` from information_schema.`columns` where 1 != 1", - "Query": "select `column_name` from information_schema.`columns` where table_schema = schema()", - "Table": "information_schema.`columns`" + "Query": "select `column_name` from information_schema.`columns` where table_schema = schema()" } } }, @@ -74,8 +71,7 @@ "Sharded": false }, "FieldQuery": "select `tables`.TABLE_SCHEMA, files.`STATUS` from information_schema.`tables`, information_schema.files where 1 != 1", - "Query": "select `tables`.TABLE_SCHEMA, files.`STATUS` from information_schema.`tables`, information_schema.files", - "Table": "information_schema.`tables`, information_schema.files" + "Query": "select `tables`.TABLE_SCHEMA, files.`STATUS` from information_schema.`tables`, information_schema.files" } } }, @@ -94,8 +90,7 @@ "Sharded": false }, "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, DATETIME_PRECISION, CHARACTER_SET_NAME, COLLATION_NAME, COLUMN_TYPE, COLUMN_KEY, EXTRA, `PRIVILEGES`, COLUMN_COMMENT, GENERATION_EXPRESSION, SRS_ID from information_schema.`COLUMNS` where 1 != 1", - "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, DATETIME_PRECISION, CHARACTER_SET_NAME, COLLATION_NAME, COLUMN_TYPE, COLUMN_KEY, EXTRA, `PRIVILEGES`, COLUMN_COMMENT, GENERATION_EXPRESSION, SRS_ID from information_schema.`COLUMNS` where `COLUMNS`.`COLUMN_NAME` = 'toto'", - "Table": "information_schema.`COLUMNS`" + "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, DATETIME_PRECISION, CHARACTER_SET_NAME, COLLATION_NAME, COLUMN_TYPE, COLUMN_KEY, EXTRA, `PRIVILEGES`, COLUMN_COMMENT, GENERATION_EXPRESSION, SRS_ID from information_schema.`COLUMNS` where `COLUMNS`.`COLUMN_NAME` = 'toto'" } } }, @@ -123,8 +118,7 @@ "Sharded": false }, "FieldQuery": "select `TABLE_NAME` from information_schema.`columns` where 1 != 1", - "Query": "select distinct `TABLE_NAME` from information_schema.`columns`", - "Table": "information_schema.`columns`" + "Query": "select distinct `TABLE_NAME` from information_schema.`columns`" }, { "OperatorType": "Route", @@ -134,8 +128,7 @@ "Sharded": false }, "FieldQuery": "select table_schema from information_schema.`tables` where 1 != 1", - "Query": "select distinct table_schema from information_schema.`tables`", - "Table": "information_schema.`tables`" + "Query": "select distinct table_schema from information_schema.`tables`" } ] } @@ -188,8 +181,7 @@ }, "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where 1 != 1", "Query": "select distinct TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "['user']", - "Table": "information_schema.`tables`" + "SysTableTableSchema": "['user']" }, { "OperatorType": "Route", @@ -200,8 +192,7 @@ }, "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where 1 != 1", "Query": "select distinct TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "['main']", - "Table": "information_schema.`tables`" + "SysTableTableSchema": "['main']" } ] } @@ -226,8 +217,7 @@ "FieldQuery": "select RC.`CONSTRAINT_NAME`, ORDINAL_POSITION from INFORMATION_SCHEMA.KEY_COLUMN_USAGE as KCU, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as RC where 1 != 1", "Query": "select RC.`CONSTRAINT_NAME`, ORDINAL_POSITION from INFORMATION_SCHEMA.KEY_COLUMN_USAGE as KCU, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as RC where KCU.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and KCU.`TABLE_NAME` = :KCU_TABLE_NAME /* VARCHAR */ and KCU.`COLUMN_NAME` = 'id' and KCU.REFERENCED_TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and KCU.`CONSTRAINT_NAME` = 'data_type_table_id_fkey' and KCU.`CONSTRAINT_NAME` = RC.`CONSTRAINT_NAME` order by KCU.`CONSTRAINT_NAME` asc, KCU.`COLUMN_NAME` asc", "SysTableTableName": "[KCU_TABLE_NAME:'data_type_table']", - "SysTableTableSchema": "['test']", - "Table": "INFORMATION_SCHEMA.KEY_COLUMN_USAGE, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS" + "SysTableTableSchema": "['test']" } } }, @@ -248,8 +238,7 @@ "FieldQuery": "select KCU.`TABLE_NAME`, S.`TABLE_NAME` from INFORMATION_SCHEMA.KEY_COLUMN_USAGE as KCU, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as RC, INFORMATION_SCHEMA.`TABLES` as S where 1 != 1", "Query": "select KCU.`TABLE_NAME`, S.`TABLE_NAME` from INFORMATION_SCHEMA.KEY_COLUMN_USAGE as KCU, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as RC, INFORMATION_SCHEMA.`TABLES` as S where S.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and S.`TABLE_NAME` = :S_TABLE_NAME /* VARCHAR */ and KCU.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and KCU.`TABLE_NAME` = :KCU_TABLE_NAME /* VARCHAR */ and KCU.`CONSTRAINT_NAME` = RC.`CONSTRAINT_NAME` order by KCU.`CONSTRAINT_NAME` asc, KCU.`COLUMN_NAME` asc", "SysTableTableName": "[KCU_TABLE_NAME:'data_type_table', S_TABLE_NAME:'sc']", - "SysTableTableSchema": "['test']", - "Table": "INFORMATION_SCHEMA.KEY_COLUMN_USAGE, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS, INFORMATION_SCHEMA.`TABLES`" + "SysTableTableSchema": "['test']" } } }, @@ -269,8 +258,7 @@ }, "FieldQuery": "select routine_name as `name`, routine_definition as definition from information_schema.routines where 1 != 1", "Query": "select routine_name as `name`, routine_definition as definition from information_schema.routines where ROUTINE_SCHEMA = :__vtschemaname /* VARCHAR */ and ROUTINE_TYPE = 'PROCEDURE'", - "SysTableTableSchema": "[:v1]", - "Table": "information_schema.routines" + "SysTableTableSchema": "[:v1]" } } }, @@ -290,8 +278,7 @@ }, "FieldQuery": "select sum(data_length + index_length) as size from information_schema.`TABLES` where 1 != 1", "Query": "select sum(data_length + index_length) as size from information_schema.`TABLES` where table_schema = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "[:v1]", - "Table": "information_schema.`TABLES`" + "SysTableTableSchema": "[:v1]" } } }, @@ -309,7 +296,6 @@ "JoinVars": { "kcu_constraint_name": 0 }, - "TableName": "information_schema.key_column_usage_information_schema.referential_constraints", "Inputs": [ { "OperatorType": "Route", @@ -320,8 +306,7 @@ }, "FieldQuery": "select kcu.`constraint_name` as `constraint_name`, kcu.`column_name` as `column_name`, kcu.referenced_table_name as referenced_table_name, kcu.referenced_column_name as referenced_column_name, kcu.ordinal_position as ordinal_position, kcu.`table_name` as `table_name` from information_schema.key_column_usage as kcu where 1 != 1", "Query": "select kcu.`constraint_name` as `constraint_name`, kcu.`column_name` as `column_name`, kcu.referenced_table_name as referenced_table_name, kcu.referenced_column_name as referenced_column_name, kcu.ordinal_position as ordinal_position, kcu.`table_name` as `table_name` from information_schema.key_column_usage as kcu where kcu.table_schema = :__vtschemaname /* VARCHAR */ and kcu.referenced_column_name is not null order by kcu.ordinal_position asc", - "SysTableTableSchema": "[:v1]", - "Table": "information_schema.key_column_usage" + "SysTableTableSchema": "[:v1]" }, { "OperatorType": "Route", @@ -332,8 +317,7 @@ }, "FieldQuery": "select rc.delete_rule as delete_rule, rc.update_rule as update_rule from information_schema.referential_constraints as rc where 1 != 1", "Query": "select rc.delete_rule as delete_rule, rc.update_rule as update_rule from information_schema.referential_constraints as rc where rc.`constraint_schema` = :__vtschemaname /* VARCHAR */ and rc.`constraint_name` = :kcu_constraint_name /* VARCHAR(64) */", - "SysTableTableSchema": "[:v2]", - "Table": "information_schema.referential_constraints" + "SysTableTableSchema": "[:v2]" } ] } @@ -355,8 +339,7 @@ }, "FieldQuery": "select fk.referenced_table_name as to_table, fk.referenced_column_name as primary_key, fk.`column_name` as `column`, fk.`constraint_name` as `name`, rc.update_rule as on_update, rc.delete_rule as on_delete from information_schema.referential_constraints as rc, information_schema.key_column_usage as fk where 1 != 1", "Query": "select fk.referenced_table_name as to_table, fk.referenced_column_name as primary_key, fk.`column_name` as `column`, fk.`constraint_name` as `name`, rc.update_rule as on_update, rc.delete_rule as on_delete from information_schema.referential_constraints as rc, information_schema.key_column_usage as fk where rc.`constraint_schema` = database() and rc.`table_name` = :rc_table_name /* VARCHAR */ and fk.referenced_column_name is not null and fk.table_schema = database() and fk.`table_name` = :fk_table_name /* VARCHAR */ and rc.`constraint_schema` = fk.`constraint_schema` and rc.`constraint_name` = fk.`constraint_name`", - "SysTableTableName": "[fk_table_name:':vtg1', rc_table_name:':vtg1']", - "Table": "information_schema.key_column_usage, information_schema.referential_constraints" + "SysTableTableName": "[fk_table_name:':vtg1', rc_table_name:':vtg1']" } } }, @@ -376,8 +359,7 @@ }, "FieldQuery": "select `CATALOG_NAME`, `SCHEMA_NAME`, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME, SQL_PATH, DEFAULT_ENCRYPTION from information_schema.schemata where 1 != 1", "Query": "select `CATALOG_NAME`, `SCHEMA_NAME`, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME, SQL_PATH, DEFAULT_ENCRYPTION from information_schema.schemata where `schema_name` = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "['user']", - "Table": "information_schema.schemata" + "SysTableTableSchema": "['user']" } } }, @@ -398,8 +380,7 @@ "FieldQuery": "select table_comment from information_schema.`tables` where 1 != 1", "Query": "select table_comment from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */ and `table_name` = :table_name /* VARCHAR */", "SysTableTableName": "[table_name:'table_name']", - "SysTableTableSchema": "['schema_name']", - "Table": "information_schema.`tables`" + "SysTableTableSchema": "['schema_name']" } } }, @@ -420,8 +401,7 @@ "FieldQuery": "select fk.referenced_table_name as to_table, fk.referenced_column_name as primary_key, fk.`column_name` as `column`, fk.`constraint_name` as `name`, rc.update_rule as on_update, rc.delete_rule as on_delete from information_schema.referential_constraints as rc, information_schema.key_column_usage as fk where 1 != 1", "Query": "select fk.referenced_table_name as to_table, fk.referenced_column_name as primary_key, fk.`column_name` as `column`, fk.`constraint_name` as `name`, rc.update_rule as on_update, rc.delete_rule as on_delete from information_schema.referential_constraints as rc, information_schema.key_column_usage as fk where rc.`constraint_schema` = :__vtschemaname /* VARCHAR */ and rc.`table_name` = :rc_table_name /* VARCHAR */ and fk.referenced_column_name is not null and fk.table_schema = :__vtschemaname /* VARCHAR */ and fk.`table_name` = :fk_table_name /* VARCHAR */ and rc.`constraint_schema` = fk.`constraint_schema` and rc.`constraint_name` = fk.`constraint_name`", "SysTableTableName": "[fk_table_name:'table_name', rc_table_name:'table_name']", - "SysTableTableSchema": "['table_schema']", - "Table": "information_schema.key_column_usage, information_schema.referential_constraints" + "SysTableTableSchema": "['table_schema']" } } }, @@ -440,7 +420,6 @@ "cc_constraint_name": 0, "cc_constraint_schema": 2 }, - "TableName": "information_schema.check_constraints_information_schema.table_constraints", "Inputs": [ { "OperatorType": "Route", @@ -451,8 +430,7 @@ }, "FieldQuery": "select cc.`constraint_name` as `name`, cc.check_clause as expression, cc.`constraint_schema` from information_schema.check_constraints as cc where 1 != 1", "Query": "select cc.`constraint_name` as `name`, cc.check_clause as expression, cc.`constraint_schema` from information_schema.check_constraints as cc where cc.`constraint_schema` = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "['constraint_schema']", - "Table": "information_schema.check_constraints" + "SysTableTableSchema": "['constraint_schema']" }, { "OperatorType": "Route", @@ -464,8 +442,7 @@ "FieldQuery": "select 1 from information_schema.table_constraints as tc where 1 != 1", "Query": "select 1 from information_schema.table_constraints as tc where tc.table_schema = :__vtschemaname /* VARCHAR */ and tc.`table_name` = :tc_table_name /* VARCHAR */ and tc.`constraint_name` = :cc_constraint_name /* VARCHAR(64) */ and tc.`constraint_schema` = :cc_constraint_schema /* VARCHAR(64) */", "SysTableTableName": "[tc_table_name:'table_name']", - "SysTableTableSchema": "['table_schema']", - "Table": "information_schema.table_constraints" + "SysTableTableSchema": "['table_schema']" } ] } @@ -488,8 +465,7 @@ "FieldQuery": "select `column_name` from information_schema.statistics where 1 != 1", "Query": "select `column_name` from information_schema.statistics where index_name = 'PRIMARY' and table_schema = :__vtschemaname /* VARCHAR */ and `table_name` = :table_name /* VARCHAR */ order by seq_in_index asc", "SysTableTableName": "[table_name:'table_name']", - "SysTableTableSchema": "['table_schema']", - "Table": "information_schema.statistics" + "SysTableTableSchema": "['table_schema']" } } }, @@ -510,8 +486,7 @@ "FieldQuery": "select generation_expression from information_schema.`columns` where 1 != 1", "Query": "select generation_expression from information_schema.`columns` where table_schema = :__vtschemaname /* VARCHAR */ and `table_name` = :table_name /* VARCHAR */ and `column_name` = 'column_name'", "SysTableTableName": "[table_name:'table_name']", - "SysTableTableSchema": "['table_schema']", - "Table": "information_schema.`columns`" + "SysTableTableSchema": "['table_schema']" } } }, @@ -530,8 +505,7 @@ "Sharded": false }, "FieldQuery": "select id from information_schema.`processlist` where 1 != 1", - "Query": "select id from information_schema.`processlist` where info like '% FOR UPDATE'", - "Table": "information_schema.`processlist`" + "Query": "select id from information_schema.`processlist` where info like '% FOR UPDATE'" } } }, @@ -551,8 +525,7 @@ }, "FieldQuery": "select `table_name` from (select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where 1 != 1) as _subquery where 1 != 1", "Query": "select `table_name` from (select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */) as _subquery", - "SysTableTableSchema": "['table_schema']", - "Table": "information_schema.`tables`" + "SysTableTableSchema": "['table_schema']" } } }, @@ -572,8 +545,7 @@ }, "FieldQuery": "select `table_name` from (select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where 1 != 1) as _subquery where 1 != 1", "Query": "select `table_name` from (select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */ and table_type = 'table_type' and `table_name` = 'table_name') as _subquery", - "SysTableTableSchema": "['table_schema']", - "Table": "information_schema.`tables`" + "SysTableTableSchema": "['table_schema']" } } }, @@ -593,8 +565,7 @@ }, "FieldQuery": "select cc.`constraint_name` as `name` from information_schema.check_constraints as cc where 1 != 1", "Query": "select cc.`constraint_name` as `name` from information_schema.check_constraints as cc where cc.`constraint_schema` = :__vtschemaname /* VARCHAR */ and cc.`CONSTRAINT_CATALOG` = 'a'", - "SysTableTableSchema": "['a']", - "Table": "information_schema.check_constraints" + "SysTableTableSchema": "['a']" } } }, @@ -615,8 +586,7 @@ "FieldQuery": "select count(*) from INFORMATION_SCHEMA.`TABLES` where 1 != 1", "Query": "select count(*) from INFORMATION_SCHEMA.`TABLES` where table_schema = :__vtschemaname /* VARCHAR */ and `table_name` = :table_name /* VARCHAR */", "SysTableTableName": "[table_name:'foo']", - "SysTableTableSchema": "['performance_schema']", - "Table": "INFORMATION_SCHEMA.`TABLES`" + "SysTableTableSchema": "['performance_schema']" } } }, @@ -635,8 +605,7 @@ "Sharded": false }, "FieldQuery": "select `TABLES`.`CHECKSUM` from information_schema.`TABLES` where 1 != 1", - "Query": "select `TABLES`.`CHECKSUM` from information_schema.`TABLES` where `TABLE_NAME` in (select `TABLE_NAME` from information_schema.`COLUMNS`)", - "Table": "information_schema.`TABLES`" + "Query": "select `TABLES`.`CHECKSUM` from information_schema.`TABLES` where `TABLE_NAME` in (select `TABLE_NAME` from information_schema.`COLUMNS`)" } } }, @@ -656,8 +625,7 @@ }, "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and TABLE_SCHEMA = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "['user', 'main']", - "Table": "INFORMATION_SCHEMA.`TABLES`" + "SysTableTableSchema": "['user', 'main']" } } }, @@ -676,8 +644,7 @@ "Sharded": false }, "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", - "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = database()", - "Table": "INFORMATION_SCHEMA.`TABLES`" + "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = database()" } } }, @@ -697,8 +664,7 @@ }, "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "['ks']", - "Table": "INFORMATION_SCHEMA.`TABLES`" + "SysTableTableSchema": "['ks']" } } }, @@ -719,8 +685,7 @@ "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and `TABLE_NAME` = :TABLE_NAME /* VARCHAR */", "SysTableTableName": "[TABLE_NAME:'route1']", - "SysTableTableSchema": "['ks']", - "Table": "INFORMATION_SCHEMA.`TABLES`" + "SysTableTableSchema": "['ks']" } } }, @@ -740,8 +705,7 @@ }, "FieldQuery": "select `TABLE_NAME` from INFORMATION_SCHEMA.`TABLES` where 1 != 1", "Query": "select `TABLE_NAME` from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and DATA_FREE = 42", - "SysTableTableSchema": "['ks']", - "Table": "INFORMATION_SCHEMA.`TABLES`" + "SysTableTableSchema": "['ks']" } } }, @@ -761,8 +725,7 @@ }, "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and (DATA_FREE = 42 or `CHECKSUM` = 'value')", - "SysTableTableSchema": "['ks']", - "Table": "INFORMATION_SCHEMA.`TABLES`" + "SysTableTableSchema": "['ks']" } } }, @@ -781,8 +744,7 @@ "Sharded": false }, "FieldQuery": "select x.`table_name` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a where 1 != 1) as x where 1 != 1", - "Query": "select x.`table_name` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a) as x", - "Table": "information_schema.key_column_usage" + "Query": "select x.`table_name` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a) as x" } } }, @@ -800,7 +762,6 @@ "JoinVars": { "x_COLUMN_NAME": 1 }, - "TableName": "information_schema.key_column_usage_`user`", "Inputs": [ { "OperatorType": "Route", @@ -810,8 +771,7 @@ "Sharded": false }, "FieldQuery": "select x.`table_name`, x.`COLUMN_NAME` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a where 1 != 1) as x where 1 != 1", - "Query": "select x.`table_name`, x.`COLUMN_NAME` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a) as x", - "Table": "information_schema.key_column_usage" + "Query": "select x.`table_name`, x.`COLUMN_NAME` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a) as x" }, { "OperatorType": "Route", @@ -822,7 +782,6 @@ }, "FieldQuery": "select 1 from `user` where 1 != 1", "Query": "select 1 from `user` where `user`.id = :x_COLUMN_NAME /* VARCHAR(64) */", - "Table": "`user`", "Values": [ ":x_COLUMN_NAME" ], @@ -850,8 +809,7 @@ "Sharded": false }, "FieldQuery": "select a.`CONSTRAINT_CATALOG`, a.`CONSTRAINT_SCHEMA`, a.`CONSTRAINT_NAME`, a.CHECK_CLAUSE, b.CHARACTER_SET_NAME, b.DEFAULT_COLLATE_NAME, b.DESCRIPTION, b.MAXLEN from information_schema.CHECK_CONSTRAINTS as a, information_schema.CHARACTER_SETS as b where 1 != 1", - "Query": "select a.`CONSTRAINT_CATALOG`, a.`CONSTRAINT_SCHEMA`, a.`CONSTRAINT_NAME`, a.CHECK_CLAUSE, b.CHARACTER_SET_NAME, b.DEFAULT_COLLATE_NAME, b.DESCRIPTION, b.MAXLEN from information_schema.CHECK_CONSTRAINTS as a, information_schema.CHARACTER_SETS as b", - "Table": "information_schema.CHARACTER_SETS, information_schema.CHECK_CONSTRAINTS" + "Query": "select a.`CONSTRAINT_CATALOG`, a.`CONSTRAINT_SCHEMA`, a.`CONSTRAINT_NAME`, a.CHECK_CLAUSE, b.CHARACTER_SET_NAME, b.DEFAULT_COLLATE_NAME, b.DESCRIPTION, b.MAXLEN from information_schema.CHECK_CONSTRAINTS as a, information_schema.CHARACTER_SETS as b" } } }, @@ -871,8 +829,7 @@ }, "FieldQuery": "select a.`table_name` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a where 1 != 1) as a, (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, UNIQUE_CONSTRAINT_CATALOG, UNIQUE_CONSTRAINT_SCHEMA, UNIQUE_CONSTRAINT_NAME, MATCH_OPTION, UPDATE_RULE, DELETE_RULE, `TABLE_NAME`, REFERENCED_TABLE_NAME from information_schema.referential_constraints where 1 != 1) as b where 1 != 1", "Query": "select a.`table_name` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a where a.`table_name` = :a_table_name /* VARCHAR */) as a, (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, UNIQUE_CONSTRAINT_CATALOG, UNIQUE_CONSTRAINT_SCHEMA, UNIQUE_CONSTRAINT_NAME, MATCH_OPTION, UPDATE_RULE, DELETE_RULE, `TABLE_NAME`, REFERENCED_TABLE_NAME from information_schema.referential_constraints where `table_name` = :table_name /* VARCHAR */) as b", - "SysTableTableName": "[a_table_name:'users', table_name:'users']", - "Table": "information_schema.key_column_usage, information_schema.referential_constraints" + "SysTableTableName": "[a_table_name:'users', table_name:'users']" } } }, @@ -900,8 +857,7 @@ }, "FieldQuery": "select 1 as `found` from information_schema.`tables` where 1 != 1", "Query": "select 1 as `found` from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "['music']", - "Table": "information_schema.`tables`" + "SysTableTableSchema": "['music']" }, { "OperatorType": "Route", @@ -912,8 +868,7 @@ }, "FieldQuery": "select 1 as `found` from information_schema.views where 1 != 1", "Query": "select 1 as `found` from information_schema.views where table_schema = :__vtschemaname /* VARCHAR */ limit 1", - "SysTableTableSchema": "['music']", - "Table": "information_schema.views" + "SysTableTableSchema": "['music']" } ] } @@ -940,8 +895,7 @@ }, "FieldQuery": "select 1 as `found` from information_schema.`tables` where 1 != 1", "Query": "select 1 as `found` from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "['music']", - "Table": "information_schema.`tables`" + "SysTableTableSchema": "['music']" }, { "OperatorType": "Route", @@ -952,8 +906,7 @@ }, "FieldQuery": "select 1 as `found` from information_schema.views where 1 != 1", "Query": "select 1 as `found` from information_schema.views where table_schema = :__vtschemaname /* VARCHAR */ limit 1", - "SysTableTableSchema": "['music']", - "Table": "information_schema.views" + "SysTableTableSchema": "['music']" } ] } @@ -978,8 +931,7 @@ }, "FieldQuery": "select 1 as `found` from information_schema.`tables` where 1 != 1", "Query": "select 1 as `found` from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */ and table_schema = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "['music', 'Music']", - "Table": "information_schema.`tables`" + "SysTableTableSchema": "['music', 'Music']" }, { "OperatorType": "Route", @@ -990,8 +942,7 @@ }, "FieldQuery": "select 1 as `found` from information_schema.views where 1 != 1", "Query": "select 1 as `found` from information_schema.views where table_schema = :__vtschemaname /* VARCHAR */ and table_schema = :__vtschemaname /* VARCHAR */ limit 1", - "SysTableTableSchema": "['music', 'user']", - "Table": "information_schema.views" + "SysTableTableSchema": "['music', 'user']" } ] } @@ -1016,8 +967,7 @@ }, "FieldQuery": "select 1 as `found` from information_schema.`tables` where 1 != 1", "Query": "select 1 as `found` from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */ and table_schema = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "['music', 'Music']", - "Table": "information_schema.`tables`" + "SysTableTableSchema": "['music', 'Music']" }, { "OperatorType": "Route", @@ -1028,8 +978,7 @@ }, "FieldQuery": "select 1 as `found` from information_schema.views where 1 != 1", "Query": "select 1 as `found` from information_schema.views where table_schema = :__vtschemaname /* VARCHAR */ and table_schema = :__vtschemaname /* VARCHAR */ limit 1", - "SysTableTableSchema": "['music', 'user']", - "Table": "information_schema.views" + "SysTableTableSchema": "['music', 'user']" } ] } @@ -1066,8 +1015,7 @@ }, "FieldQuery": "select 1 as `found` from information_schema.`tables` where 1 != 1", "Query": "select 1 as `found` from information_schema.`tables` where `table_name` = :table_name1 /* VARCHAR */ and `table_name` = :table_name1 /* VARCHAR */ limit :__upper_limit", - "SysTableTableName": "[table_name1:'Music']", - "Table": "information_schema.`tables`" + "SysTableTableName": "[table_name1:'Music']" }, { "OperatorType": "Route", @@ -1078,8 +1026,7 @@ }, "FieldQuery": "select 1 as `found` from information_schema.views where 1 != 1", "Query": "select 1 as `found` from information_schema.views where `table_name` = :table_name2 /* VARCHAR */ and `table_name` = :table_name2 /* VARCHAR */ limit :__upper_limit", - "SysTableTableName": "[table_name2:'user']", - "Table": "information_schema.views" + "SysTableTableName": "[table_name2:'user']" } ] } @@ -1095,8 +1042,7 @@ }, "FieldQuery": "select 1 as `found` from information_schema.`tables` where 1 != 1", "Query": "select 1 as `found` from information_schema.`tables` where `table_name` = :table_name /* VARCHAR */ and `table_name` = :table_name /* VARCHAR */ and :__sq_has_values", - "SysTableTableName": "[table_name:'Music']", - "Table": "information_schema.`tables`" + "SysTableTableName": "[table_name:'Music']" } ] } @@ -1127,8 +1073,7 @@ }, "FieldQuery": "select `TABLE_NAME` from information_schema.`tables` as t where 1 != 1", "Query": "select distinct `TABLE_NAME` from information_schema.`tables` as t where t.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "['a']", - "Table": "information_schema.`tables`" + "SysTableTableSchema": "['a']" }, { "OperatorType": "Route", @@ -1138,8 +1083,7 @@ "Sharded": false }, "FieldQuery": "select `TABLE_NAME` from information_schema.`columns` where 1 != 1", - "Query": "select distinct `TABLE_NAME` from information_schema.`columns`", - "Table": "information_schema.`columns`" + "Query": "select distinct `TABLE_NAME` from information_schema.`columns`" } ] } @@ -1181,8 +1125,7 @@ }, "FieldQuery": "select `TABLE_NAME` from information_schema.`tables` as t where 1 != 1", "Query": "select distinct `TABLE_NAME` from information_schema.`tables` as t where t.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */", - "SysTableTableSchema": "['a']", - "Table": "information_schema.`tables`" + "SysTableTableSchema": "['a']" }, { "OperatorType": "Route", @@ -1192,8 +1135,7 @@ "Sharded": false }, "FieldQuery": "select `COLUMN_NAME` from information_schema.`columns` where 1 != 1", - "Query": "select distinct `COLUMN_NAME` from information_schema.`columns`", - "Table": "information_schema.`columns`" + "Query": "select distinct `COLUMN_NAME` from information_schema.`columns`" } ] } @@ -1208,8 +1150,7 @@ "Sharded": false }, "FieldQuery": "select COLLATION_NAME from information_schema.`COLUMNS` as t where 1 != 1", - "Query": "select COLLATION_NAME from information_schema.`COLUMNS` as t where :__sq_has_values and `COLUMN_NAME` in ::__sq1", - "Table": "information_schema.`COLUMNS`" + "Query": "select COLLATION_NAME from information_schema.`COLUMNS` as t where :__sq_has_values and `COLUMN_NAME` in ::__sq1" } ] } @@ -1230,8 +1171,7 @@ "Sharded": false }, "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", - "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = 'ks' or TABLE_SCHEMA = 'main'", - "Table": "INFORMATION_SCHEMA.`TABLES`" + "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = 'ks' or TABLE_SCHEMA = 'main'" } } }, @@ -1249,9 +1189,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select variable, value from sys.sys_config where 1 != 1", - "Query": "select variable, value from sys.sys_config", - "Table": "sys.sys_config" + "FieldQuery": "select variable, `value` from sys.sys_config where 1 != 1", + "Query": "select variable, `value` from sys.sys_config" } } }, @@ -1270,8 +1209,7 @@ "Sharded": false }, "FieldQuery": "select host, db from mysql.db where 1 != 1", - "Query": "select host, db from mysql.db", - "Table": "mysql.db" + "Query": "select host, db from mysql.db" } } }, @@ -1290,8 +1228,7 @@ "Sharded": false }, "FieldQuery": "select logged, prio from performance_schema.error_log where 1 != 1", - "Query": "select logged, prio from performance_schema.error_log", - "Table": "performance_schema.error_log" + "Query": "select logged, prio from performance_schema.error_log" } } }, @@ -1310,8 +1247,7 @@ "Sharded": false }, "FieldQuery": "select `TABLE_NAME` from information_schema.apa where 1 != 1", - "Query": "select `TABLE_NAME` from information_schema.apa", - "Table": "information_schema.apa" + "Query": "select `TABLE_NAME` from information_schema.apa" } } }, @@ -1330,8 +1266,7 @@ "Sharded": false }, "FieldQuery": "select c.`column_name` from (select `table_name` from information_schema.`tables` where 1 != 1) as `tables`, information_schema.`columns` as c where 1 != 1", - "Query": "select c.`column_name` from (select `table_name` from information_schema.`tables` where table_schema != 'information_schema' limit 1) as `tables`, information_schema.`columns` as c where `tables`.`table_name` = c.`table_name`", - "Table": "information_schema.`columns`, information_schema.`tables`" + "Query": "select c.`column_name` from (select `table_name` from information_schema.`tables` where table_schema != 'information_schema' limit 1) as `tables`, information_schema.`columns` as c where `tables`.`table_name` = c.`table_name`" } } } diff --git a/go/vt/vtgate/planbuilder/testdata/large_cases.json b/go/vt/vtgate/planbuilder/testdata/large_cases.json index bcbc46853ed..fedaa6aaa58 100644 --- a/go/vt/vtgate/planbuilder/testdata/large_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/large_cases.json @@ -10,7 +10,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "R:0", - "TableName": "music, music_extra_`user`, user_extra, user_metadata_unsharded, unsharded_a, unsharded_auto, unsharded_b", "Inputs": [ { "OperatorType": "Route", @@ -20,14 +19,12 @@ "Sharded": true }, "FieldQuery": "select 1 from music, music_extra where 1 != 1", - "Query": "select 1 from music, music_extra where music.id = music_extra.music_id", - "Table": "music, music_extra" + "Query": "select 1 from music, music_extra where music.id = music_extra.music_id" }, { "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`, user_extra, user_metadata_unsharded, unsharded_a, unsharded_auto, unsharded_b", "Inputs": [ { "OperatorType": "Route", @@ -37,8 +34,7 @@ "Sharded": true }, "FieldQuery": "select `user`.id from `user`, user_extra, user_metadata where 1 != 1", - "Query": "select `user`.id from `user`, user_extra, user_metadata where `user`.id = user_extra.user_id and user_metadata.user_id = user_extra.user_id", - "Table": "`user`, user_extra, user_metadata" + "Query": "select `user`.id from `user`, user_extra, user_metadata where `user`.id = user_extra.user_id and user_metadata.user_id = user_extra.user_id" }, { "OperatorType": "Route", @@ -48,8 +44,7 @@ "Sharded": false }, "FieldQuery": "select 1 from unsharded, unsharded_a, unsharded_b, unsharded_auto where 1 != 1", - "Query": "select 1 from unsharded, unsharded_a, unsharded_b, unsharded_auto where unsharded.x = unsharded_a.y", - "Table": "unsharded, unsharded_a, unsharded_auto, unsharded_b" + "Query": "select 1 from unsharded, unsharded_a, unsharded_b, unsharded_auto where unsharded.x = unsharded_a.y" } ] } diff --git a/go/vt/vtgate/planbuilder/testdata/large_union_cases.json b/go/vt/vtgate/planbuilder/testdata/large_union_cases.json index 5ae3554c3eb..7dcfff4378e 100644 --- a/go/vt/vtgate/planbuilder/testdata/large_union_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/large_union_cases.json @@ -26,7 +26,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from ((select content, user_id from music where 1 != 1) union (select content, user_id from music where 1 != 1)) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from ((select content, user_id from music where user_id = 1270698330 order by created_at asc, id asc limit 11) union (select content, user_id from music where user_id = 1270698330 order by created_at asc, id asc limit 11)) as dt(c0, c1)", - "Table": "music", "Values": [ "1270698330" ], @@ -41,7 +40,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from ((select content, user_id from music where 1 != 1) union (select content, user_id from music where 1 != 1)) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from ((select content, user_id from music where user_id = 1270699497 order by created_at asc, id asc limit 11) union (select content, user_id from music where user_id = 1270699497 order by created_at asc, id asc limit 11)) as dt(c0, c1)", - "Table": "music", "Values": [ "1270699497" ], @@ -56,7 +54,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1270703806 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1270703806" ], @@ -71,7 +68,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1270707364 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1270707364" ], @@ -86,7 +82,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1270714657 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1270714657" ], @@ -101,7 +96,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1270721330 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1270721330" ], @@ -116,7 +110,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1270812079 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1270812079" ], @@ -131,7 +124,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271011532 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271011532" ], @@ -146,7 +138,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271034164 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271034164" ], @@ -161,7 +152,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271034177 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271034177" ], @@ -176,7 +166,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271066849 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271066849" ], @@ -191,7 +180,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271098740 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271098740" ], @@ -206,7 +194,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271355000 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271355000" ], @@ -221,7 +208,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271639345 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271639345" ], @@ -236,7 +222,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271914117 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271914117" ], @@ -251,7 +236,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271924504 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271924504" ], @@ -266,7 +250,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1272086055 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1272086055" ], @@ -281,7 +264,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1272127855 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1272127855" ], @@ -296,7 +278,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1272191137 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1272191137" ], @@ -311,7 +292,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1272468271 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1272468271" ], @@ -326,7 +306,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1270637436 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1270637436" ], @@ -341,7 +320,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1270644941 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1270644941" ], @@ -356,7 +334,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1270650576 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1270650576" ], @@ -371,7 +348,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1270652906 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1270652906" ], @@ -386,7 +362,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1270660650 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1270660650" ], @@ -401,7 +376,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1270670201 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1270670201" ], @@ -416,7 +390,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1270707364 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1270707364" ], @@ -431,7 +404,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271365691 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271365691" ], @@ -446,7 +418,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271799956 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271799956" ], @@ -461,7 +432,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271914117 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271914117" ], @@ -476,7 +446,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1270637436 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1270637436" ], @@ -491,7 +460,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271799956 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271799956" ], @@ -506,7 +474,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1270637436 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1270637436" ], @@ -521,7 +488,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271639345 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271639345" ], @@ -536,7 +502,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1270644941 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1270644941" ], @@ -551,7 +516,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1270649256 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1270649256" ], @@ -566,7 +530,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1270653671 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1270653671" ], @@ -581,7 +544,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1270670201 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1270670201" ], @@ -596,7 +558,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1270717223 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1270717223" ], @@ -611,7 +572,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1270720898 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1270720898" ], @@ -626,7 +586,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1270982590 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1270982590" ], @@ -641,7 +600,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271346411 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271346411" ], @@ -656,7 +614,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271352121 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271352121" ], @@ -671,7 +628,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271354908 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271354908" ], @@ -686,7 +642,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271365691 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271365691" ], @@ -701,7 +656,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271367516 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271367516" ], @@ -716,7 +670,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271472522 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271472522" ], @@ -731,7 +684,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271607757 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271607757" ], @@ -746,7 +698,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271639345 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271639345" ], @@ -761,7 +712,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271821733 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271821733" ], @@ -776,7 +726,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271914117 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271914117" ], @@ -791,7 +740,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1272068709 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1272068709" ], @@ -806,7 +754,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1272127855 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1272127855" ], @@ -821,7 +768,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1272191137 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1272191137" ], @@ -836,7 +782,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1272244005 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1272244005" ], @@ -851,7 +796,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1272468271 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1272468271" ], @@ -866,7 +810,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1270982590 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1270982590" ], @@ -881,7 +824,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271365691 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271365691" ], @@ -896,7 +838,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271607757 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271607757" ], @@ -911,7 +852,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1270982590 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1270982590" ], @@ -926,7 +866,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271365691 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271365691" ], @@ -941,7 +880,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1271607757 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1271607757" ], @@ -956,7 +894,6 @@ }, "FieldQuery": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select content, user_id from music where 1 != 1) as dt(c0, c1) where 1 != 1", "Query": "select dt.c0 as content, dt.c1 as user_id, weight_string(dt.c0), weight_string(dt.c1) from (select distinct content, user_id from music where user_id = 1272244005 order by created_at asc, id asc limit 11) as dt(c0, c1)", - "Table": "music", "Values": [ "1272244005" ], diff --git a/go/vt/vtgate/planbuilder/testdata/lock_cases.json b/go/vt/vtgate/planbuilder/testdata/lock_cases.json index 9aa454ae43f..3e1f10c77ba 100644 --- a/go/vt/vtgate/planbuilder/testdata/lock_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/lock_cases.json @@ -146,7 +146,6 @@ "JoinVars": { "u_foo": 2 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -156,8 +155,7 @@ "Sharded": true }, "FieldQuery": "select u.col, u.bar, u.foo from `user` as u where 1 != 1", - "Query": "select u.col, u.bar, u.foo from `user` as u for update nowait", - "Table": "`user`" + "Query": "select u.col, u.bar, u.foo from `user` as u for update nowait" }, { "OperatorType": "Route", @@ -167,8 +165,7 @@ "Sharded": true }, "FieldQuery": "select 1 from music as m where 1 != 1", - "Query": "select 1 from music as m where m.foo = :u_foo for update nowait", - "Table": "music" + "Query": "select 1 from music as m where m.foo = :u_foo for update nowait" } ] }, @@ -192,7 +189,6 @@ "JoinVars": { "u_foo": 2 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -202,8 +198,7 @@ "Sharded": true }, "FieldQuery": "select u.col, u.bar, u.foo from `user` as u where 1 != 1", - "Query": "select u.col, u.bar, u.foo from `user` as u for share skip locked", - "Table": "`user`" + "Query": "select u.col, u.bar, u.foo from `user` as u for share skip locked" }, { "OperatorType": "Route", @@ -213,8 +208,7 @@ "Sharded": true }, "FieldQuery": "select 1 from music as m where 1 != 1", - "Query": "select 1 from music as m where m.foo = :u_foo for share skip locked", - "Table": "music" + "Query": "select 1 from music as m where m.foo = :u_foo for share skip locked" } ] }, diff --git a/go/vt/vtgate/planbuilder/testdata/memory_sort_cases.json b/go/vt/vtgate/planbuilder/testdata/memory_sort_cases.json index a2d9c555135..d62fc32beab 100644 --- a/go/vt/vtgate/planbuilder/testdata/memory_sort_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/memory_sort_cases.json @@ -27,8 +27,7 @@ }, "FieldQuery": "select dt.c0 as a, dt.c1 as b, dt.c2 as `count(*)`, dt.c3 as `weight_string(a)`, weight_string(dt.c1) from (select a, b, count(*), weight_string(a) from `user` where 1 != 1 group by a, weight_string(a)) as dt(c0, c1, c2, c3) where 1 != 1", "OrderBy": "(0|3) ASC", - "Query": "select dt.c0 as a, dt.c1 as b, dt.c2 as `count(*)`, dt.c3 as `weight_string(a)`, weight_string(dt.c1) from (select a, b, count(*), weight_string(a) from `user` group by a, weight_string(a) order by a asc) as dt(c0, c1, c2, c3)", - "Table": "`user`" + "Query": "select dt.c0 as a, dt.c1 as b, dt.c2 as `count(*)`, dt.c3 as `weight_string(a)`, weight_string(dt.c1) from (select a, b, count(*), weight_string(a) from `user` group by a, weight_string(a) order by a asc) as dt(c0, c1, c2, c3)" } ] } @@ -67,8 +66,7 @@ }, "FieldQuery": "select a, b, count(*) as k, weight_string(a) from `user` where 1 != 1 group by a, weight_string(a)", "OrderBy": "(0|3) ASC", - "Query": "select a, b, count(*) as k, weight_string(a) from `user` group by a, weight_string(a) order by a asc", - "Table": "`user`" + "Query": "select a, b, count(*) as k, weight_string(a) from `user` group by a, weight_string(a) order by a asc" } ] } @@ -107,8 +105,7 @@ }, "FieldQuery": "select dt.c0 as a, dt.c1 as b, dt.c2 as k, dt.c3 as `weight_string(a)`, weight_string(dt.c1) from (select a, b, count(*) as k, weight_string(a) from `user` where 1 != 1 group by a, weight_string(a)) as dt(c0, c1, c2, c3) where 1 != 1", "OrderBy": "(0|3) ASC", - "Query": "select dt.c0 as a, dt.c1 as b, dt.c2 as k, dt.c3 as `weight_string(a)`, weight_string(dt.c1) from (select a, b, count(*) as k, weight_string(a) from `user` group by a, weight_string(a) order by a asc) as dt(c0, c1, c2, c3)", - "Table": "`user`" + "Query": "select dt.c0 as a, dt.c1 as b, dt.c2 as k, dt.c3 as `weight_string(a)`, weight_string(dt.c1) from (select a, b, count(*) as k, weight_string(a) from `user` group by a, weight_string(a) order by a asc) as dt(c0, c1, c2, c3)" } ] } @@ -151,8 +148,7 @@ }, "FieldQuery": "select a, b, count(*) as k, weight_string(a) from `user` where 1 != 1 group by a, weight_string(a)", "OrderBy": "(0|3) ASC", - "Query": "select a, b, count(*) as k, weight_string(a) from `user` group by a, weight_string(a) order by a asc", - "Table": "`user`" + "Query": "select a, b, count(*) as k, weight_string(a) from `user` group by a, weight_string(a) order by a asc" } ] } @@ -193,8 +189,7 @@ }, "FieldQuery": "select a, b, count(*) as k, weight_string(a) from `user` where 1 != 1 group by a, weight_string(a)", "OrderBy": "(0|3) ASC", - "Query": "select a, b, count(*) as k, weight_string(a) from `user` group by a, weight_string(a) order by a asc", - "Table": "`user`" + "Query": "select a, b, count(*) as k, weight_string(a) from `user` group by a, weight_string(a) order by a asc" } ] } @@ -232,8 +227,7 @@ }, "FieldQuery": "select textcol1 as t, count(*) as k from `user` where 1 != 1 group by textcol1", "OrderBy": "0 ASC COLLATE latin1_swedish_ci", - "Query": "select textcol1 as t, count(*) as k from `user` group by textcol1 order by textcol1 asc", - "Table": "`user`" + "Query": "select textcol1 as t, count(*) as k from `user` group by textcol1 order by textcol1 asc" } ] } @@ -255,7 +249,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -266,8 +259,7 @@ }, "FieldQuery": "select t.id, t.col, weight_string(t.id) from (select `user`.id, `user`.col from `user` where 1 != 1) as t where 1 != 1", "OrderBy": "(0|2) ASC", - "Query": "select t.id, t.col, weight_string(t.id) from (select `user`.id, `user`.col from `user`) as t order by t.id asc", - "Table": "`user`" + "Query": "select t.id, t.col, weight_string(t.id) from (select `user`.id, `user`.col from `user`) as t order by t.id asc" }, { "OperatorType": "Route", @@ -277,8 +269,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra", - "Table": "user_extra" + "Query": "select 1 from user_extra" } ] }, @@ -308,7 +299,6 @@ "JoinVars": { "user_id": 2 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -319,7 +309,6 @@ }, "FieldQuery": "select `user`.col1 as a, `user`.col2 as b, `user`.id from `user` where 1 != 1", "Query": "select `user`.col1 as a, `user`.col2 as b, `user`.id from `user` where `user`.id = 1", - "Table": "`user`", "Values": [ "1" ], @@ -346,7 +335,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -360,8 +348,7 @@ "Sharded": true }, "FieldQuery": "select music.col3 as c, weight_string(music.col3) from music where 1 != 1", - "Query": "select music.col3 as c, weight_string(music.col3) from music where music.id = :user_id", - "Table": "music" + "Query": "select music.col3 as c, weight_string(music.col3) from music where music.id = :user_id" } ] } @@ -395,7 +382,6 @@ "JoinVars": { "user_id": 2 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -406,7 +392,6 @@ }, "FieldQuery": "select `user`.col1 as a, `user`.col2, `user`.id, weight_string(`user`.col1), weight_string(`user`.col2) from `user` where 1 != 1", "Query": "select `user`.col1 as a, `user`.col2, `user`.id, weight_string(`user`.col1), weight_string(`user`.col2) from `user` where `user`.id = 1", - "Table": "`user`", "Values": [ "1" ], @@ -433,7 +418,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -447,8 +431,7 @@ "Sharded": true }, "FieldQuery": "select music.col3, weight_string(music.col3) from music where 1 != 1", - "Query": "select music.col3, weight_string(music.col3) from music where music.id = :user_id", - "Table": "music" + "Query": "select music.col3, weight_string(music.col3) from music where music.id = :user_id" } ] } @@ -479,7 +462,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,L:1,R:0,R:1", - "TableName": "`user`_unsharded", "Inputs": [ { "OperatorType": "Route", @@ -489,8 +471,7 @@ "Sharded": true }, "FieldQuery": "select u.a, u.textcol1 from `user` as u where 1 != 1", - "Query": "select u.a, u.textcol1 from `user` as u", - "Table": "`user`" + "Query": "select u.a, u.textcol1 from `user` as u" }, { "OperatorType": "Route", @@ -500,8 +481,7 @@ "Sharded": false }, "FieldQuery": "select un.col2, weight_string(un.col2) from unsharded as un where 1 != 1", - "Query": "select un.col2, weight_string(un.col2) from unsharded as un", - "Table": "unsharded" + "Query": "select un.col2, weight_string(un.col2) from unsharded as un" } ] } @@ -530,7 +510,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "R:0,R:1,L:0,L:1", - "TableName": "unsharded_`user`", "Inputs": [ { "OperatorType": "Route", @@ -540,8 +519,7 @@ "Sharded": false }, "FieldQuery": "select un.col2, weight_string(un.col2) from unsharded as un where 1 != 1", - "Query": "select un.col2, weight_string(un.col2) from unsharded as un", - "Table": "unsharded" + "Query": "select un.col2, weight_string(un.col2) from unsharded as un" }, { "OperatorType": "Route", @@ -551,8 +529,7 @@ "Sharded": true }, "FieldQuery": "select u.a, u.textcol1 from `user` as u where 1 != 1", - "Query": "select u.a, u.textcol1 from `user` as u", - "Table": "`user`" + "Query": "select u.a, u.textcol1 from `user` as u" } ] } @@ -618,8 +595,7 @@ "FieldQuery": "select a, convert(`user`.a, binary), weight_string(convert(`user`.a, binary)) from `user` where 1 != 1", "OrderBy": "(1|2) DESC", "Query": "select a, convert(`user`.a, binary), weight_string(convert(`user`.a, binary)) from `user` order by convert(`user`.a, binary) desc", - "ResultColumns": 1, - "Table": "`user`" + "ResultColumns": 1 }, "TablesUsed": [ "user.user" @@ -640,7 +616,6 @@ "JoinVars": { "u_a": 0 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -651,8 +626,7 @@ }, "FieldQuery": "select u.a, convert(u.a, binary), weight_string(convert(u.a, binary)) from `user` as u where 1 != 1", "OrderBy": "(1|2) DESC", - "Query": "select u.a, convert(u.a, binary), weight_string(convert(u.a, binary)) from `user` as u order by convert(u.a, binary) desc", - "Table": "`user`" + "Query": "select u.a, convert(u.a, binary), weight_string(convert(u.a, binary)) from `user` as u order by convert(u.a, binary) desc" }, { "OperatorType": "Route", @@ -662,8 +636,7 @@ "Sharded": true }, "FieldQuery": "select 1 from music as m where 1 != 1", - "Query": "select 1 from music as m where m.a = :u_a", - "Table": "music" + "Query": "select 1 from music as m where m.a = :u_a" } ] }, @@ -689,8 +662,7 @@ }, "FieldQuery": "select id, intcol from `user` where 1 != 1", "OrderBy": "1 ASC", - "Query": "select id, intcol from `user` order by `user`.intcol asc", - "Table": "`user`" + "Query": "select id, intcol from `user` order by `user`.intcol asc" }, "TablesUsed": [ "user.user" @@ -714,8 +686,7 @@ "FieldQuery": "select col, id, weight_string(id) from `user` where 1 != 1", "OrderBy": "(1|2) ASC", "Query": "select col, id, weight_string(id) from `user` order by id asc", - "ResultColumns": 1, - "Table": "`user`" + "ResultColumns": 1 }, "TablesUsed": [ "user.user" @@ -739,7 +710,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0,R:1,L:1", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -749,8 +719,7 @@ "Sharded": true }, "FieldQuery": "select tbl.foo, weight_string(tbl.foo) from (select u.foo from `user` as u where 1 != 1) as tbl where 1 != 1", - "Query": "select tbl.foo, weight_string(tbl.foo) from (select u.foo from `user` as u) as tbl", - "Table": "`user`" + "Query": "select tbl.foo, weight_string(tbl.foo) from (select u.foo from `user` as u) as tbl" }, { "OperatorType": "Route", @@ -760,8 +729,7 @@ "Sharded": true }, "FieldQuery": "select tbl.bar, weight_string(tbl.bar) from (select ue.bar from user_extra as ue where 1 != 1) as tbl where 1 != 1", - "Query": "select tbl.bar, weight_string(tbl.bar) from (select ue.bar from user_extra as ue) as tbl", - "Table": "user_extra" + "Query": "select tbl.bar, weight_string(tbl.bar) from (select ue.bar from user_extra as ue) as tbl" } ] } diff --git a/go/vt/vtgate/planbuilder/testdata/mirror_cases.json b/go/vt/vtgate/planbuilder/testdata/mirror_cases.json index be292b7cb72..23f88e3d673 100644 --- a/go/vt/vtgate/planbuilder/testdata/mirror_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/mirror_cases.json @@ -19,8 +19,7 @@ "Sharded": false }, "FieldQuery": "select t1.id from t1 where 1 != 1", - "Query": "select t1.id from t1 where t1.id = 1", - "Table": "t1" + "Query": "select t1.id from t1 where t1.id = 1" }, { "OperatorType": "Route", @@ -30,8 +29,7 @@ "Sharded": false }, "FieldQuery": "select t1.id from t1 where 1 != 1", - "Query": "select t1.id from t1 where t1.id = 1", - "Table": "t1" + "Query": "select t1.id from t1 where t1.id = 1" } ] }, @@ -61,8 +59,7 @@ "Sharded": false }, "FieldQuery": "select t4.id from t4 where 1 != 1", - "Query": "select t4.id from t4 where t4.id = 1", - "Table": "t4" + "Query": "select t4.id from t4 where t4.id = 1" }, { "OperatorType": "Route", @@ -72,8 +69,7 @@ "Sharded": false }, "FieldQuery": "select t4.id from t4 where 1 != 1", - "Query": "select t4.id from t4 where t4.id = 1", - "Table": "t4" + "Query": "select t4.id from t4 where t4.id = 1" } ] }, @@ -103,8 +99,7 @@ "Sharded": false }, "FieldQuery": "select t4.id from t4 where 1 != 1", - "Query": "select t4.id from t4 where t4.id = 1", - "Table": "t4" + "Query": "select t4.id from t4 where t4.id = 1" }, { "OperatorType": "Route", @@ -114,8 +109,7 @@ "Sharded": false }, "FieldQuery": "select t4.id from t4 where 1 != 1", - "Query": "select t4.id from t4 where t4.id = 1", - "Table": "t4" + "Query": "select t4.id from t4 where t4.id = 1" } ] }, @@ -145,8 +139,7 @@ "Sharded": false }, "FieldQuery": "select t4.id from t4 where 1 != 1", - "Query": "select t4.id from t4 where t4.id = 1", - "Table": "t4" + "Query": "select t4.id from t4 where t4.id = 1" }, { "OperatorType": "Route", @@ -156,8 +149,7 @@ "Sharded": false }, "FieldQuery": "select t4.id from t4 where 1 != 1", - "Query": "select t4.id from t4 where t4.id = 1", - "Table": "t4" + "Query": "select t4.id from t4 where t4.id = 1" } ] }, @@ -182,8 +174,7 @@ "Sharded": false }, "FieldQuery": "select t3.id from t3 where 1 != 1", - "Query": "select t3.id from t3 where t3.id = 1", - "Table": "t3" + "Query": "select t3.id from t3 where t3.id = 1" }, "TablesUsed": [ "unsharded_src1.t3" @@ -210,8 +201,7 @@ "Sharded": false }, "FieldQuery": "select t2.id from t2 where 1 != 1", - "Query": "select t2.id from t2 where t2.id = 1", - "Table": "t2" + "Query": "select t2.id from t2 where t2.id = 1" }, { "OperatorType": "Route", @@ -222,7 +212,6 @@ }, "FieldQuery": "select t2.id from t1 as t2 where 1 != 1", "Query": "select t2.id from t1 as t2 where t2.id = 1", - "Table": "t1", "Values": [ "1" ], @@ -256,8 +245,7 @@ "Sharded": false }, "FieldQuery": "select t1.id, t2.id from t1, t2 where 1 != 1", - "Query": "select t1.id, t2.id from t1, t2 where t1.id = t2.id", - "Table": "t1, t2" + "Query": "select t1.id, t2.id from t1, t2 where t1.id = t2.id" }, { "OperatorType": "Join", @@ -266,7 +254,6 @@ "JoinVars": { "t1_id1": 0 }, - "TableName": "t1_t1", "Inputs": [ { "OperatorType": "Route", @@ -276,8 +263,7 @@ "Sharded": false }, "FieldQuery": "select t1.id from t1 where 1 != 1", - "Query": "select t1.id from t1", - "Table": "t1" + "Query": "select t1.id from t1" }, { "OperatorType": "Route", @@ -288,7 +274,6 @@ }, "FieldQuery": "select t2.id from t1 as t2 where 1 != 1", "Query": "select t2.id from t1 as t2 where t2.id = :t1_id1", - "Table": "t1", "Values": [ ":t1_id1" ], @@ -326,8 +311,7 @@ "Sharded": false }, "FieldQuery": "select t1.id from t1 where 1 != 1 union select t2.id from t2 where 1 != 1", - "Query": "select t1.id from t1 union select t2.id from t2", - "Table": "t1, t2" + "Query": "select t1.id from t1 union select t2.id from t2" }, { "OperatorType": "Distinct", @@ -346,8 +330,7 @@ "Sharded": false }, "FieldQuery": "select dt.c0 as id, weight_string(dt.c0) from (select t1.id from t1 where 1 != 1) as dt(c0) where 1 != 1", - "Query": "select dt.c0 as id, weight_string(dt.c0) from (select distinct t1.id from t1) as dt(c0)", - "Table": "t1" + "Query": "select dt.c0 as id, weight_string(dt.c0) from (select distinct t1.id from t1) as dt(c0)" }, { "OperatorType": "Route", @@ -357,8 +340,7 @@ "Sharded": true }, "FieldQuery": "select dt.c0 as id, weight_string(dt.c0) from (select t2.id from t1 as t2 where 1 != 1) as dt(c0) where 1 != 1", - "Query": "select dt.c0 as id, weight_string(dt.c0) from (select distinct t2.id from t1 as t2) as dt(c0)", - "Table": "t1" + "Query": "select dt.c0 as id, weight_string(dt.c0) from (select distinct t2.id from t1 as t2) as dt(c0)" } ] } @@ -388,8 +370,7 @@ "Name": "unsharded_src1", "Sharded": false }, - "Query": "insert into t1(id) values (1)", - "TableName": "t1" + "Query": "insert into t1(id) values (1)" }, "TablesUsed": [ "unsharded_src1.t1" @@ -410,8 +391,7 @@ "Name": "unsharded_src1", "Sharded": false }, - "Query": "update t1 set `data` = 'a' where id = 1", - "Table": "t1" + "Query": "update t1 set `data` = 'a' where id = 1" }, "TablesUsed": [ "unsharded_src1.t1" @@ -432,8 +412,7 @@ "Name": "unsharded_src1", "Sharded": false }, - "Query": "delete from t1 where id = 1", - "Table": "t1" + "Query": "delete from t1 where id = 1" }, "TablesUsed": [ "unsharded_src1.t1" @@ -455,8 +434,7 @@ "Sharded": false }, "FieldQuery": "select t1.id from t1 where 1 != 1", - "Query": "select t1.id from t1", - "Table": "t1" + "Query": "select t1.id from t1" }, "TablesUsed": [ "unsharded_src2.t1" @@ -483,8 +461,7 @@ "Sharded": false }, "FieldQuery": "select t2.id from t2 where 1 != 1", - "Query": "select t2.id from t2", - "Table": "t2" + "Query": "select t2.id from t2" }, { "OperatorType": "Route", @@ -494,8 +471,7 @@ "Sharded": false }, "FieldQuery": "select t2.id from t2 where 1 != 1", - "Query": "select t2.id from t2", - "Table": "t2" + "Query": "select t2.id from t2" } ] }, @@ -520,8 +496,7 @@ "Sharded": false }, "FieldQuery": "select t1.id from t1 where 1 != 1", - "Query": "select t1.id from t1", - "Table": "t1" + "Query": "select t1.id from t1" }, "TablesUsed": [ "unsharded_src3.t1" diff --git a/go/vt/vtgate/planbuilder/testdata/misc_cases.json b/go/vt/vtgate/planbuilder/testdata/misc_cases.json index 709b61636ca..c21ce22a5a0 100644 --- a/go/vt/vtgate/planbuilder/testdata/misc_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/misc_cases.json @@ -91,7 +91,6 @@ }, "FieldQuery": "select 1 from `user` where 1 != 1", "Query": "select 1 from `user` where id = :v1", - "Table": "`user`", "Values": [ ":v1" ], @@ -127,7 +126,6 @@ }, "FieldQuery": "select 1 from `user` where 1 != 1", "Query": "select 1 from `user` where id in ::__vals", - "Table": "`user`", "Values": [ "(:v1, :v2)" ], @@ -159,8 +157,7 @@ "Sharded": true }, "FieldQuery": "select 1 from `user` where 1 != 1", - "Query": "select 1 from `user`", - "Table": "`user`" + "Query": "select 1 from `user`" } ] }, diff --git a/go/vt/vtgate/planbuilder/testdata/oltp_cases.json b/go/vt/vtgate/planbuilder/testdata/oltp_cases.json index 8db0ef3cafb..8d154fee68c 100644 --- a/go/vt/vtgate/planbuilder/testdata/oltp_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/oltp_cases.json @@ -15,7 +15,6 @@ }, "FieldQuery": "select c from sbtest34 where 1 != 1", "Query": "select c from sbtest34 where id = 15", - "Table": "sbtest34", "Values": [ "15" ], @@ -41,8 +40,7 @@ "Sharded": true }, "FieldQuery": "select c from sbtest12 where 1 != 1", - "Query": "select c from sbtest12 where id between 1 and 10", - "Table": "sbtest12" + "Query": "select c from sbtest12 where id between 1 and 10" }, "TablesUsed": [ "main.sbtest12" @@ -69,8 +67,7 @@ "Sharded": true }, "FieldQuery": "select sum(k) from sbtest43 where 1 != 1", - "Query": "select sum(k) from sbtest43 where id between 90 and 990", - "Table": "sbtest43" + "Query": "select sum(k) from sbtest43 where id between 90 and 990" } ] }, @@ -95,8 +92,7 @@ }, "FieldQuery": "select c from sbtest1 where 1 != 1", "OrderBy": "0 ASC COLLATE latin1_swedish_ci", - "Query": "select c from sbtest1 where id between 50 and 235 order by sbtest1.c asc", - "Table": "sbtest1" + "Query": "select c from sbtest1 where id between 50 and 235 order by sbtest1.c asc" }, "TablesUsed": [ "main.sbtest1" @@ -124,8 +120,7 @@ }, "FieldQuery": "select c from sbtest30 where 1 != 1 group by c", "OrderBy": "0 ASC COLLATE latin1_swedish_ci", - "Query": "select c from sbtest30 where id between 1 and 10 group by c order by sbtest30.c asc", - "Table": "sbtest30" + "Query": "select c from sbtest30 where id between 1 and 10 group by c order by sbtest30.c asc" } ] }, @@ -149,7 +144,6 @@ "Sharded": true }, "Query": "update sbtest6 set k = k + 1 where id = 5", - "Table": "sbtest6", "Values": [ "5" ], @@ -175,7 +169,6 @@ "Sharded": true }, "Query": "update sbtest9 set c = 7 where id = 8", - "Table": "sbtest9", "Values": [ "8" ], @@ -201,7 +194,6 @@ "Sharded": true }, "Query": "delete from sbtest15 where id = 7525", - "Table": "sbtest15", "Values": [ "7525" ], @@ -227,7 +219,6 @@ "Sharded": true }, "Query": "insert into sbtest16(id, k, c, pad) values (:_id_0, 1, 2, 50)", - "TableName": "sbtest16", "VindexValues": { "hash": "42" } diff --git a/go/vt/vtgate/planbuilder/testdata/postprocess_cases.json b/go/vt/vtgate/planbuilder/testdata/postprocess_cases.json index e515c165fe0..ac9ba186729 100644 --- a/go/vt/vtgate/planbuilder/testdata/postprocess_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/postprocess_cases.json @@ -14,8 +14,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col1 from `user` where 1 != 1", - "Query": "select `user`.col1 from `user` where col2 = 2", - "Table": "`user`" + "Query": "select `user`.col1 from `user` where col2 = 2" }, "TablesUsed": [ "user.user" @@ -38,7 +37,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -48,8 +46,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col1 from `user` where 1 != 1", - "Query": "select `user`.col1 from `user`", - "Table": "`user`" + "Query": "select `user`.col1 from `user`" }, { "OperatorType": "Route", @@ -59,8 +56,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.col1 from user_extra where 1 != 1", - "Query": "select user_extra.col1 from user_extra where user_extra.col1 = 2", - "Table": "user_extra" + "Query": "select user_extra.col1 from user_extra where user_extra.col1 = 2" } ] }, @@ -81,7 +77,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,L:1,R:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -91,8 +86,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col1 as a, `user`.col2 from `user` where 1 != 1", - "Query": "select `user`.col1 as a, `user`.col2 from `user` where `user`.col1 = 1 and `user`.col1 = `user`.col2", - "Table": "`user`" + "Query": "select `user`.col1 as a, `user`.col2 from `user` where `user`.col1 = 1 and `user`.col1 = `user`.col2" }, { "OperatorType": "Route", @@ -102,8 +96,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.col3 from user_extra where 1 != 1", - "Query": "select user_extra.col3 from user_extra where user_extra.col3 = 1", - "Table": "user_extra" + "Query": "select user_extra.col3 from user_extra where user_extra.col3 = 1" } ] }, @@ -137,8 +130,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user`", - "Table": "`user`" + "Query": "select col from `user`" }, { "InputName": "Outer", @@ -150,7 +142,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where :__sq_has_values and `user`.id in ::__vals", - "Table": "`user`", "Values": [ "::__sq1" ], @@ -179,7 +170,6 @@ }, "FieldQuery": "select col from `user` where 1 != 1", "Query": "select col from `user` where id = 5 order by aa asc", - "Table": "`user`", "Values": [ "5" ], @@ -206,7 +196,6 @@ }, "FieldQuery": "select col from `user` where 1 != 1", "Query": "select col from `user` where id = 1 order by col asc", - "Table": "`user`", "Values": [ "1" ], @@ -233,8 +222,7 @@ }, "FieldQuery": "select col from `user` where 1 != 1", "OrderBy": "0 ASC", - "Query": "select col from `user` order by `user`.col asc", - "Table": "`user`" + "Query": "select col from `user` order by `user`.col asc" }, "TablesUsed": [ "user.user" @@ -258,8 +246,7 @@ "FieldQuery": "select user_id, col1, col2, weight_string(user_id) from authoritative where 1 != 1", "OrderBy": "(0|3) ASC", "Query": "select user_id, col1, col2, weight_string(user_id) from authoritative order by authoritative.user_id asc", - "ResultColumns": 3, - "Table": "authoritative" + "ResultColumns": 3 }, "TablesUsed": [ "user.authoritative" @@ -284,7 +271,6 @@ "JoinVars": { "user_c": 0 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Limit", @@ -298,8 +284,7 @@ "Sharded": true }, "FieldQuery": "select `user`.c from `user` where 1 != 1", - "Query": "select `user`.c from `user` where `user`.a = 1 limit 1", - "Table": "`user`" + "Query": "select `user`.c from `user` where `user`.a = 1 limit 1" } ] }, @@ -315,8 +300,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.id from user_extra where 1 != 1", - "Query": "select user_extra.id from user_extra where user_extra.c = :user_c and user_extra.b = 2 limit 1", - "Table": "user_extra" + "Query": "select user_extra.id from user_extra where user_extra.c = :user_c and user_extra.b = 2 limit 1" } ] } @@ -346,8 +330,7 @@ }, "FieldQuery": "select user_id, col1, col2 from authoritative where 1 != 1", "OrderBy": "1 ASC COLLATE latin1_swedish_ci", - "Query": "select user_id, col1, col2 from authoritative order by authoritative.col1 asc", - "Table": "authoritative" + "Query": "select user_id, col1, col2 from authoritative order by authoritative.col1 asc" }, "TablesUsed": [ "user.authoritative" @@ -371,8 +354,7 @@ "FieldQuery": "select a, textcol1, b, weight_string(a), weight_string(b) from `user` where 1 != 1", "OrderBy": "(0|3) ASC, 1 ASC COLLATE latin1_swedish_ci, (2|4) ASC", "Query": "select a, textcol1, b, weight_string(a), weight_string(b) from `user` order by `user`.a asc, `user`.textcol1 asc, `user`.b asc", - "ResultColumns": 3, - "Table": "`user`" + "ResultColumns": 3 }, "TablesUsed": [ "user.user" @@ -396,8 +378,7 @@ "FieldQuery": "select a, `user`.textcol1, b, weight_string(a), weight_string(b) from `user` where 1 != 1", "OrderBy": "(0|3) ASC, 1 ASC COLLATE latin1_swedish_ci, (2|4) ASC", "Query": "select a, `user`.textcol1, b, weight_string(a), weight_string(b) from `user` order by `user`.a asc, `user`.textcol1 asc, `user`.b asc", - "ResultColumns": 3, - "Table": "`user`" + "ResultColumns": 3 }, "TablesUsed": [ "user.user" @@ -421,8 +402,7 @@ "FieldQuery": "select a, textcol1, b, textcol2, weight_string(a), weight_string(b), weight_string(textcol2) from `user` where 1 != 1", "OrderBy": "(0|4) ASC, 1 ASC COLLATE latin1_swedish_ci, (2|5) ASC, (3|6) ASC COLLATE ", "Query": "select a, textcol1, b, textcol2, weight_string(a), weight_string(b), weight_string(textcol2) from `user` order by `user`.a asc, `user`.textcol1 asc, `user`.b asc, `user`.textcol2 asc", - "ResultColumns": 4, - "Table": "`user`" + "ResultColumns": 4 }, "TablesUsed": [ "user.user" @@ -451,8 +431,7 @@ "FieldQuery": "select id as foo, weight_string(id) from music where 1 != 1", "OrderBy": "(0|1) ASC", "Query": "select id as foo, weight_string(id) from music order by id asc", - "ResultColumns": 1, - "Table": "music" + "ResultColumns": 1 }, "TablesUsed": [ "user.music" @@ -474,8 +453,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user` order by null", - "Table": "`user`" + "Query": "select col from `user` order by null" }, "TablesUsed": [ "user.user" @@ -506,8 +484,7 @@ "Sharded": true }, "FieldQuery": "select col2 from `user` where 1 != 1", - "Query": "select col2 from `user`", - "Table": "`user`" + "Query": "select col2 from `user`" }, { "InputName": "Outer", @@ -519,8 +496,7 @@ }, "FieldQuery": "select col from `user` where 1 != 1", "OrderBy": "0 ASC", - "Query": "select col from `user` where :__sq_has_values and col in ::__sq1 order by `user`.col asc", - "Table": "`user`" + "Query": "select col from `user` where :__sq_has_values and col in ::__sq1 order by `user`.col asc" } ] }, @@ -543,7 +519,6 @@ "JoinVars": { "user_id": 2 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -554,7 +529,6 @@ }, "FieldQuery": "select `user`.col1 as a, `user`.col2, `user`.id from `user` where 1 != 1", "Query": "select `user`.col1 as a, `user`.col2, `user`.id from `user` where `user`.id = 1", - "Table": "`user`", "Values": [ "1" ], @@ -581,7 +555,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -595,8 +568,7 @@ "Sharded": true }, "FieldQuery": "select music.col3 from music where 1 != 1", - "Query": "select music.col3 from music where music.id = :user_id", - "Table": "music" + "Query": "select music.col3 from music where music.id = :user_id" } ] } @@ -622,7 +594,6 @@ "JoinVars": { "user_id": 2 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -633,7 +604,6 @@ }, "FieldQuery": "select `user`.col1 as a, `user`.col2, `user`.id from `user` where 1 != 1", "Query": "select `user`.col1 as a, `user`.col2, `user`.id from `user` where `user`.id = 1 order by `user`.col1 asc", - "Table": "`user`", "Values": [ "1" ], @@ -660,7 +630,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -674,8 +643,7 @@ "Sharded": true }, "FieldQuery": "select music.col3 from music where 1 != 1", - "Query": "select music.col3 from music where music.id = :user_id", - "Table": "music" + "Query": "select music.col3 from music where music.id = :user_id" } ] } @@ -701,7 +669,6 @@ "JoinVars": { "user_id": 2 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -712,7 +679,6 @@ }, "FieldQuery": "select `user`.col1 as a, `user`.col2, `user`.id from `user` where 1 != 1", "Query": "select `user`.col1 as a, `user`.col2, `user`.id from `user` where `user`.id = 1 order by `user`.col1 asc", - "Table": "`user`", "Values": [ "1" ], @@ -739,7 +705,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -753,8 +718,7 @@ "Sharded": true }, "FieldQuery": "select music.col3 from music where 1 != 1", - "Query": "select music.col3 from music where music.id = :user_id", - "Table": "music" + "Query": "select music.col3 from music where music.id = :user_id" } ] } @@ -790,8 +754,7 @@ "Sharded": true }, "FieldQuery": "select col2 from `user` where 1 != 1", - "Query": "select col2 from `user`", - "Table": "`user`" + "Query": "select col2 from `user`" }, { "InputName": "Outer", @@ -802,8 +765,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user` where :__sq_has_values and col in ::__sq1", - "Table": "`user`" + "Query": "select col from `user` where :__sq_has_values and col in ::__sq1" } ] }, @@ -827,8 +789,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user` order by RAND()", - "Table": "`user`" + "Query": "select col from `user` order by RAND()" }, "TablesUsed": [ "user.user" @@ -849,7 +810,6 @@ "JoinVars": { "user_id": 2 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -860,7 +820,6 @@ }, "FieldQuery": "select `user`.col1 as a, `user`.col2, `user`.id from `user` where 1 != 1", "Query": "select `user`.col1 as a, `user`.col2, `user`.id from `user` where `user`.id = 1 order by RAND()", - "Table": "`user`", "Values": [ "1" ], @@ -887,7 +846,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -901,8 +859,7 @@ "Sharded": true }, "FieldQuery": "select music.col3 from music where 1 != 1", - "Query": "select music.col3 from music where music.id = :user_id", - "Table": "music" + "Query": "select music.col3 from music where music.id = :user_id" } ] } @@ -938,8 +895,7 @@ "Sharded": true }, "FieldQuery": "select col2 from `user` where 1 != 1", - "Query": "select col2 from `user`", - "Table": "`user`" + "Query": "select col2 from `user`" }, { "InputName": "Outer", @@ -950,8 +906,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user` where :__sq_has_values and col in ::__sq1 order by rand()", - "Table": "`user`" + "Query": "select col from `user` where :__sq_has_values and col in ::__sq1 order by rand()" } ] }, @@ -976,7 +931,6 @@ }, "FieldQuery": "select * from `user` where 1 != 1", "Query": "select * from `user` where id = 5 order by col asc", - "Table": "`user`", "Values": [ "5" ], @@ -1003,7 +957,6 @@ }, "FieldQuery": "select `user`.* from `user` where 1 != 1", "Query": "select `user`.* from `user` where id = 5 order by `user`.col asc", - "Table": "`user`", "Values": [ "5" ], @@ -1030,7 +983,6 @@ }, "FieldQuery": "select * from `user` where 1 != 1", "Query": "select * from `user` where id = 5 order by `user`.col asc", - "Table": "`user`", "Values": [ "5" ], @@ -1055,7 +1007,6 @@ "JoinVars": { "u_col": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1065,8 +1016,7 @@ "Sharded": true }, "FieldQuery": "select u.id, u.col from `user` as u where 1 != 1", - "Query": "select u.id, u.col from `user` as u where u.col in (select * from `user` where `user`.id = u.id order by col asc)", - "Table": "`user`" + "Query": "select u.id, u.col from `user` as u where u.col in (select * from `user` where `user`.id = u.id order by col asc)" }, { "OperatorType": "Route", @@ -1076,8 +1026,7 @@ "Sharded": true }, "FieldQuery": "select e.id from user_extra as e where 1 != 1", - "Query": "select e.id from user_extra as e where e.col = :u_col /* INT16 */", - "Table": "user_extra" + "Query": "select e.id from user_extra as e where e.col = :u_col /* INT16 */" } ] }, @@ -1102,8 +1051,7 @@ "Sharded": true }, "FieldQuery": "select u.id from `user` as u where 1 != 1", - "Query": "select u.id from `user` as u where u.id in (select col2 from `user` where `user`.id = u.id order by u.col asc)", - "Table": "`user`" + "Query": "select u.id from `user` as u where u.id in (select col2 from `user` where `user`.id = u.id order by u.col asc)" }, "TablesUsed": [ "user.user" @@ -1141,7 +1089,6 @@ }, "FieldQuery": "select * from `user` where 1 != 1", "Query": "select * from `user` where id = 5 order by `user`.col collate utf8_general_ci asc", - "Table": "`user`", "Values": [ "5" ], @@ -1168,7 +1115,6 @@ }, "FieldQuery": "select * from `user` where 1 != 1", "Query": "select * from `user` where id = 5 order by -col1 asc", - "Table": "`user`", "Values": [ "5" ], @@ -1195,7 +1141,6 @@ }, "FieldQuery": "select * from `user` where 1 != 1", "Query": "select * from `user` where id = 5 order by concat(col, col1) collate utf8_general_ci desc", - "Table": "`user`", "Values": [ "5" ], @@ -1222,7 +1167,6 @@ }, "FieldQuery": "select * from `user` where 1 != 1", "Query": "select * from `user` where id = 5 order by id + col collate utf8_general_ci desc", - "Table": "`user`", "Values": [ "5" ], @@ -1249,7 +1193,6 @@ }, "FieldQuery": "select * from (select user_id from user_extra where 1 != 1) as eu, `user` as u where 1 != 1", "Query": "select * from (select user_id from user_extra where user_id = 5) as eu, `user` as u where u.id = 5 and u.id = eu.user_id order by eu.user_id asc", - "Table": "`user`, user_extra", "Values": [ "5" ], @@ -1277,7 +1220,6 @@ }, "FieldQuery": "select col from `user` as route1 where 1 != 1", "Query": "select col from `user` as route1 where id = 1 order by route1.col asc", - "Table": "`user`", "Values": [ "1" ], @@ -1304,7 +1246,6 @@ }, "FieldQuery": "select col1 from `user` where 1 != 1", "Query": "select col1 from `user` where id = 1 limit 1", - "Table": "`user`", "Values": [ "1" ], @@ -1330,7 +1271,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1340,8 +1280,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user` where 1 != 1", - "Query": "select `user`.col from `user`", - "Table": "`user`" + "Query": "select `user`.col from `user`" }, { "OperatorType": "Limit", @@ -1355,8 +1294,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra limit 1", - "Table": "user_extra" + "Query": "select 1 from user_extra limit 1" } ] } @@ -1389,8 +1327,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user` limit 1", - "Table": "`user`" + "Query": "select col from `user` limit 1" } ] }, @@ -1418,8 +1355,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user` limit :a", - "Table": "`user`" + "Query": "select col from `user` limit :a" } ] }, @@ -1447,8 +1383,7 @@ "Sharded": true }, "FieldQuery": "select * from `user` where 1 != 1", - "Query": "select * from `user` where id1 = 4 and name1 = 'abc' limit 5", - "Table": "`user`" + "Query": "select * from `user` where id1 = 4 and name1 = 'abc' limit 5" } ] }, @@ -1485,8 +1420,7 @@ "Sharded": true }, "FieldQuery": "select col1 from `user` where 1 != 1", - "Query": "select col1 from `user`", - "Table": "`user`" + "Query": "select col1 from `user`" }, { "InputName": "Outer", @@ -1497,8 +1431,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user` where :__sq_has_values and col in ::__sq1", - "Table": "`user`" + "Query": "select col from `user` where :__sq_has_values and col in ::__sq1" } ] } @@ -1524,8 +1457,7 @@ "Sharded": true }, "FieldQuery": "select col from ref where 1 != 1", - "Query": "select col from ref limit 1", - "Table": "ref" + "Query": "select col from ref limit 1" }, "TablesUsed": [ "user.ref" @@ -1551,8 +1483,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user` limit 1 + 1", - "Table": "`user`" + "Query": "select id from `user` limit 1 + 1" } ] }, @@ -1578,8 +1509,7 @@ "FieldQuery": "select id as foo, weight_string(id) from music where 1 != 1", "OrderBy": "(0|1) ASC", "Query": "select id as foo, weight_string(id) from music order by music.id asc", - "ResultColumns": 1, - "Table": "music" + "ResultColumns": 1 }, "TablesUsed": [ "user.music" @@ -1603,8 +1533,7 @@ "FieldQuery": "select id as foo, id2 as id, weight_string(id2) from music where 1 != 1", "OrderBy": "(1|2) ASC", "Query": "select id as foo, id2 as id, weight_string(id2) from music order by music.id2 asc", - "ResultColumns": 2, - "Table": "music" + "ResultColumns": 2 }, "TablesUsed": [ "user.music" @@ -1622,7 +1551,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -1633,8 +1561,7 @@ }, "FieldQuery": "select `name`, weight_string(`name`) from `user` where 1 != 1", "OrderBy": "(0|1) ASC", - "Query": "select `name`, weight_string(`name`) from `user` order by `user`.`name` asc", - "Table": "`user`" + "Query": "select `name`, weight_string(`name`) from `user` order by `user`.`name` asc" }, { "OperatorType": "Route", @@ -1644,8 +1571,7 @@ "Sharded": true }, "FieldQuery": "select 1 from music where 1 != 1", - "Query": "select 1 from music", - "Table": "music" + "Query": "select 1 from music" } ] }, @@ -1675,8 +1601,7 @@ "Sharded": true }, "FieldQuery": "select count(id), num from `user` where 1 != 1", - "Query": "select count(id), num from `user`", - "Table": "`user`" + "Query": "select count(id), num from `user`" } ] }, @@ -1711,8 +1636,7 @@ "Sharded": true }, "FieldQuery": "select count(id), num, weight_string(num) from `user` where 1 != 1", - "Query": "select count(id), num, weight_string(num) from `user`", - "Table": "`user`" + "Query": "select count(id), num, weight_string(num) from `user`" } ] } @@ -1746,8 +1670,7 @@ }, "FieldQuery": "select count(id), num, weight_string(num) from `user` where 1 != 1 group by num, weight_string(num)", "OrderBy": "(1|2) ASC", - "Query": "select count(id), num, weight_string(num) from `user` group by num, weight_string(num) order by num asc", - "Table": "`user`" + "Query": "select count(id), num, weight_string(num) from `user` group by num, weight_string(num) order by num asc" } ] }, @@ -1784,8 +1707,7 @@ }, "FieldQuery": "select count(id), num, weight_string(num) from `user` where 1 != 1 group by num, weight_string(num)", "OrderBy": "(1|2) ASC", - "Query": "select count(id), num, weight_string(num) from `user` group by num, weight_string(num) order by num asc", - "Table": "`user`" + "Query": "select count(id), num, weight_string(num) from `user` group by num, weight_string(num) order by num asc" } ] } @@ -1807,7 +1729,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,L:0", - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -1818,8 +1739,7 @@ }, "FieldQuery": "select `name`, `name`, weight_string(`name`) from `user` where 1 != 1", "OrderBy": "(0|2) ASC", - "Query": "select `name`, `name`, weight_string(`name`) from `user` order by `user`.`name` asc", - "Table": "`user`" + "Query": "select `name`, `name`, weight_string(`name`) from `user` order by `user`.`name` asc" }, { "OperatorType": "Route", @@ -1829,8 +1749,7 @@ "Sharded": true }, "FieldQuery": "select 1 from music where 1 != 1", - "Query": "select 1 from music", - "Table": "music" + "Query": "select 1 from music" } ] }, @@ -1857,8 +1776,7 @@ "FieldQuery": "select id, id, weight_string(id) from `user` where 1 != 1", "OrderBy": "(0|2) ASC", "Query": "select id, id, weight_string(id) from `user` order by `user`.id asc", - "ResultColumns": 2, - "Table": "`user`" + "ResultColumns": 2 }, "TablesUsed": [ "user.user" @@ -1893,8 +1811,7 @@ }, "FieldQuery": "select dt.c0 as col, dt.c1 as `count(*)`, dt.c2 as c1, weight_string(dt.c2) from (select col, count(*), c1 from `user` where 1 != 1 group by col) as dt(c0, c1, c2) where 1 != 1", "OrderBy": "0 ASC", - "Query": "select dt.c0 as col, dt.c1 as `count(*)`, dt.c2 as c1, weight_string(dt.c2) from (select col, count(*), c1 from `user` group by col order by col asc) as dt(c0, c1, c2)", - "Table": "`user`" + "Query": "select dt.c0 as col, dt.c1 as `count(*)`, dt.c2 as c1, weight_string(dt.c2) from (select col, count(*), c1 from `user` group by col order by col asc) as dt(c0, c1, c2)" } ] } @@ -1923,7 +1840,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,L:1", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1933,8 +1849,7 @@ "Sharded": true }, "FieldQuery": "select `user`.a, weight_string(`user`.a) from `user` where 1 != 1", - "Query": "select distinct `user`.a, weight_string(`user`.a) from `user`", - "Table": "`user`" + "Query": "select distinct `user`.a, weight_string(`user`.a) from `user`" }, { "OperatorType": "Route", @@ -1944,8 +1859,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select distinct 1 from user_extra", - "Table": "user_extra" + "Query": "select distinct 1 from user_extra" } ] } @@ -1980,8 +1894,7 @@ "Sharded": true }, "FieldQuery": "select a as c, a, weight_string(a) from `user` where 1 != 1", - "Query": "select distinct a as c, a, weight_string(a) from `user`", - "Table": "`user`" + "Query": "select distinct a as c, a, weight_string(a) from `user`" } ] }, @@ -2013,8 +1926,7 @@ "Sharded": true }, "FieldQuery": "select a, a, weight_string(a) from `user` where 1 != 1", - "Query": "select distinct a, a, weight_string(a) from `user`", - "Table": "`user`" + "Query": "select distinct a, a, weight_string(a) from `user`" } ] }, @@ -2038,8 +1950,7 @@ "Sharded": false }, "FieldQuery": "select id from unsharded where 1 != 1", - "Query": "select id from unsharded order by (select id from unsharded) asc", - "Table": "unsharded" + "Query": "select id from unsharded order by (select id from unsharded) asc" }, "TablesUsed": [ "main.unsharded" @@ -2070,8 +1981,7 @@ "Sharded": true }, "FieldQuery": "select count(*) as a from `user` where 1 != 1", - "Query": "select count(*) as a from `user`", - "Table": "`user`" + "Query": "select count(*) as a from `user`" } ] } @@ -2099,8 +2009,7 @@ "FieldQuery": "select id, id + 1, weight_string(id + 1) from `user` where 1 != 1", "OrderBy": "(1|2) ASC", "Query": "select id, id + 1, weight_string(id + 1) from `user` order by id + 1 asc", - "ResultColumns": 1, - "Table": "`user`" + "ResultColumns": 1 }, "TablesUsed": [ "user.user" @@ -2124,8 +2033,7 @@ "FieldQuery": "select `user`.col1 as a, `user`.col1 collate utf8_general_ci, weight_string(`user`.col1 collate utf8_general_ci) from `user` where 1 != 1", "OrderBy": "(1|2) ASC", "Query": "select `user`.col1 as a, `user`.col1 collate utf8_general_ci, weight_string(`user`.col1 collate utf8_general_ci) from `user` order by `user`.col1 collate utf8_general_ci asc", - "ResultColumns": 1, - "Table": "`user`" + "ResultColumns": 1 }, "TablesUsed": [ "user.user" @@ -2149,8 +2057,7 @@ "FieldQuery": "select id, id + 1, weight_string(id + 1) from `user` where 1 != 1", "OrderBy": "(1|2) ASC", "Query": "select id, id + 1, weight_string(id + 1) from `user` order by id + 1 asc", - "ResultColumns": 1, - "Table": "`user`" + "ResultColumns": 1 }, "TablesUsed": [ "user.user" @@ -2174,8 +2081,7 @@ "FieldQuery": "select `user`.col1 as a, `user`.col1 collate utf8_general_ci, weight_string(`user`.col1 collate utf8_general_ci) from `user` where 1 != 1", "OrderBy": "(1|2) ASC", "Query": "select `user`.col1 as a, `user`.col1 collate utf8_general_ci, weight_string(`user`.col1 collate utf8_general_ci) from `user` order by `user`.col1 collate utf8_general_ci asc", - "ResultColumns": 1, - "Table": "`user`" + "ResultColumns": 1 }, "TablesUsed": [ "user.user" @@ -2202,7 +2108,6 @@ "JoinVars": { "user_col": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -2212,8 +2117,7 @@ "Sharded": true }, "FieldQuery": "select id, `user`.col from `user` where 1 != 1", - "Query": "select id, `user`.col from `user`", - "Table": "`user`" + "Query": "select id, `user`.col from `user`" }, { "OperatorType": "Route", @@ -2223,8 +2127,7 @@ "Sharded": true }, "FieldQuery": "select coalesce(:user_col /* INT16 */, user_extra.col) from user_extra where 1 != 1", - "Query": "select coalesce(:user_col /* INT16 */, user_extra.col) from user_extra", - "Table": "user_extra" + "Query": "select coalesce(:user_col /* INT16 */, user_extra.col) from user_extra" } ] } @@ -2261,7 +2164,6 @@ "JoinVars": { "a_tcol1": 1 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Route", @@ -2272,8 +2174,7 @@ }, "FieldQuery": "select min(a.id), a.tcol1, weight_string(a.tcol1), weight_string(a.id) from `user` as a where 1 != 1 group by a.tcol1, weight_string(a.tcol1), weight_string(a.id)", "OrderBy": "(1|2) ASC", - "Query": "select min(a.id), a.tcol1, weight_string(a.tcol1), weight_string(a.id) from `user` as a group by a.tcol1, weight_string(a.tcol1), weight_string(a.id) order by a.tcol1 asc", - "Table": "`user`" + "Query": "select min(a.id), a.tcol1, weight_string(a.tcol1), weight_string(a.id) from `user` as a group by a.tcol1, weight_string(a.tcol1), weight_string(a.id) order by a.tcol1 asc" }, { "OperatorType": "Route", @@ -2283,8 +2184,7 @@ "Sharded": true }, "FieldQuery": "select 1 from music as b where 1 != 1 group by .0", - "Query": "select 1 from music as b where b.tcol2 = :a_tcol1 group by .0", - "Table": "music" + "Query": "select 1 from music as b where b.tcol2 = :a_tcol1 group by .0" } ] } @@ -2319,8 +2219,7 @@ }, "FieldQuery": "select col from `user` where 1 != 1 group by col", "OrderBy": "0 ASC", - "Query": "select col from `user` where id between :vtg1 and :vtg2 group by col order by `user`.col asc", - "Table": "`user`" + "Query": "select col from `user` where id between :vtg1 and :vtg2 group by col order by `user`.col asc" } ] }, @@ -2351,8 +2250,7 @@ }, "FieldQuery": "select foo, col, weight_string(foo) from `user` where 1 != 1 group by foo, col, weight_string(foo)", "OrderBy": "1 ASC, (0|2) ASC", - "Query": "select foo, col, weight_string(foo) from `user` where id between :vtg1 and :vtg2 group by foo, col, weight_string(foo) order by `user`.col asc, foo asc", - "Table": "`user`" + "Query": "select foo, col, weight_string(foo) from `user` where id between :vtg1 and :vtg2 group by foo, col, weight_string(foo) order by `user`.col asc, foo asc" } ] }, @@ -2389,8 +2287,7 @@ "Sharded": true }, "FieldQuery": "select foo, col, weight_string(foo) from `user` where 1 != 1", - "Query": "select distinct foo, col, weight_string(foo) from `user` where id between :vtg1 and :vtg2", - "Table": "`user`" + "Query": "select distinct foo, col, weight_string(foo) from `user` where id between :vtg1 and :vtg2" } ] } @@ -2423,8 +2320,7 @@ "Sharded": true }, "FieldQuery": "select textcol2, weight_string(textcol2) from `user` where 1 != 1", - "Query": "select distinct textcol2, weight_string(textcol2) from `user`", - "Table": "`user`" + "Query": "select distinct textcol2, weight_string(textcol2) from `user`" } ] }, @@ -2454,8 +2350,7 @@ "Sharded": true }, "FieldQuery": "select textcol1 from `user` where 1 != 1 union select textcol1 from `user` where 1 != 1", - "Query": "select textcol1 from `user` union select textcol1 from `user`", - "Table": "`user`" + "Query": "select textcol1 from `user` union select textcol1 from `user`" } ] }, @@ -2484,7 +2379,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0,L:1", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -2494,8 +2388,7 @@ "Sharded": true }, "FieldQuery": "select a.id, weight_string(a.id) from `user` as a where 1 != 1", - "Query": "select a.id, weight_string(a.id) from `user` as a", - "Table": "`user`" + "Query": "select a.id, weight_string(a.id) from `user` as a" }, { "OperatorType": "Route", @@ -2505,8 +2398,7 @@ "Sharded": true }, "FieldQuery": "select b.id from user_extra as b where 1 != 1", - "Query": "select b.id from user_extra as b", - "Table": "user_extra" + "Query": "select b.id from user_extra as b" } ] }, @@ -2518,8 +2410,7 @@ "Sharded": false }, "FieldQuery": "select dt.c0 as `1`, dt.c1 as `2`, weight_string(dt.c0) from (select 1, 2 from dual where 1 != 1) as dt(c0, c1) where 1 != 1", - "Query": "select dt.c0 as `1`, dt.c1 as `2`, weight_string(dt.c0) from (select 1, 2 from dual) as dt(c0, c1)", - "Table": "dual" + "Query": "select dt.c0 as `1`, dt.c1 as `2`, weight_string(dt.c0) from (select 1, 2 from dual) as dt(c0, c1)" } ] } @@ -2552,7 +2443,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0,R:1", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -2562,8 +2452,7 @@ "Sharded": true }, "FieldQuery": "select a.id from `user` as a where 1 != 1", - "Query": "select a.id from `user` as a", - "Table": "`user`" + "Query": "select a.id from `user` as a" }, { "OperatorType": "Route", @@ -2573,8 +2462,7 @@ "Sharded": true }, "FieldQuery": "select b.id, weight_string(b.id) from user_extra as b where 1 != 1", - "Query": "select b.id, weight_string(b.id) from user_extra as b", - "Table": "user_extra" + "Query": "select b.id, weight_string(b.id) from user_extra as b" } ] }, @@ -2586,8 +2474,7 @@ "Sharded": false }, "FieldQuery": "select dt.c0 as `1`, dt.c1 as `2`, weight_string(dt.c1) from (select 1, 2 from dual where 1 != 1) as dt(c0, c1) where 1 != 1", - "Query": "select dt.c0 as `1`, dt.c1 as `2`, weight_string(dt.c1) from (select 1, 2 from dual) as dt(c0, c1)", - "Table": "dual" + "Query": "select dt.c0 as `1`, dt.c1 as `2`, weight_string(dt.c1) from (select 1, 2 from dual) as dt(c0, c1)" } ] } diff --git a/go/vt/vtgate/planbuilder/testdata/rails_cases.json b/go/vt/vtgate/planbuilder/testdata/rails_cases.json index c3b820e3118..c259feab956 100644 --- a/go/vt/vtgate/planbuilder/testdata/rails_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/rails_cases.json @@ -13,7 +13,6 @@ "JoinVars": { "order2s_id": 0 }, - "TableName": "customer2s, order2s_author5s, book6s_book6s_order2s_supplier5s", "Inputs": [ { "OperatorType": "Route", @@ -23,8 +22,7 @@ "Sharded": true }, "FieldQuery": "select order2s.id from order2s, customer2s where 1 != 1", - "Query": "select order2s.id from order2s, customer2s where customer2s.id = order2s.customer2_id", - "Table": "customer2s, order2s" + "Query": "select order2s.id from order2s, customer2s where customer2s.id = order2s.customer2_id" }, { "OperatorType": "Join", @@ -33,7 +31,6 @@ "JoinVars": { "book6s_supplier5_id": 4 }, - "TableName": "author5s, book6s_book6s_order2s_supplier5s", "Inputs": [ { "OperatorType": "Join", @@ -42,7 +39,6 @@ "JoinVars": { "book6s_id": 5 }, - "TableName": "author5s, book6s_book6s_order2s", "Inputs": [ { "OperatorType": "Route", @@ -52,8 +48,7 @@ "Sharded": true }, "FieldQuery": "select author5s.id, author5s.`name`, author5s.created_at, author5s.updated_at, book6s.supplier5_id, book6s.id from author5s, book6s where 1 != 1", - "Query": "select author5s.id, author5s.`name`, author5s.created_at, author5s.updated_at, book6s.supplier5_id, book6s.id from author5s, book6s where book6s.author5_id = author5s.id", - "Table": "author5s, book6s" + "Query": "select author5s.id, author5s.`name`, author5s.created_at, author5s.updated_at, book6s.supplier5_id, book6s.id from author5s, book6s where book6s.author5_id = author5s.id" }, { "OperatorType": "Route", @@ -64,7 +59,6 @@ }, "FieldQuery": "select 1 from book6s_order2s where 1 != 1", "Query": "select 1 from book6s_order2s where book6s_order2s.order2_id = :order2s_id /* INT64 */ and book6s_order2s.book6_id = :book6s_id /* INT64 */", - "Table": "book6s_order2s", "Values": [ ":book6s_id" ], @@ -81,7 +75,6 @@ }, "FieldQuery": "select 1 from supplier5s where 1 != 1", "Query": "select 1 from supplier5s where supplier5s.id = :book6s_supplier5_id /* INT64 */", - "Table": "supplier5s", "Values": [ ":book6s_supplier5_id" ], diff --git a/go/vt/vtgate/planbuilder/testdata/reference_cases.json b/go/vt/vtgate/planbuilder/testdata/reference_cases.json index 424f80417f9..cb36a8de23c 100644 --- a/go/vt/vtgate/planbuilder/testdata/reference_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/reference_cases.json @@ -14,8 +14,7 @@ "Sharded": false }, "FieldQuery": "select * from ambiguous_ref_with_source where 1 != 1", - "Query": "select * from ambiguous_ref_with_source", - "Table": "ambiguous_ref_with_source" + "Query": "select * from ambiguous_ref_with_source" }, "TablesUsed": [ "main.ambiguous_ref_with_source" @@ -38,8 +37,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user`, ambiguous_ref_with_source where 1 != 1", - "Query": "select `user`.col from `user`, ambiguous_ref_with_source", - "Table": "`user`, ambiguous_ref_with_source" + "Query": "select `user`.col from `user`, ambiguous_ref_with_source" }, "TablesUsed": [ "user.ambiguous_ref_with_source", @@ -63,8 +61,7 @@ "Sharded": false }, "FieldQuery": "select r1.col from ambiguous_ref_with_source as r1 join ambiguous_ref_with_source where 1 != 1", - "Query": "select r1.col from ambiguous_ref_with_source as r1 join ambiguous_ref_with_source", - "Table": "ambiguous_ref_with_source" + "Query": "select r1.col from ambiguous_ref_with_source as r1 join ambiguous_ref_with_source" }, "TablesUsed": [ "main.ambiguous_ref_with_source" @@ -87,8 +84,7 @@ "Sharded": true }, "FieldQuery": "select ambiguous_ref_with_source.col from ambiguous_ref_with_source, `user` where 1 != 1", - "Query": "select ambiguous_ref_with_source.col from ambiguous_ref_with_source, `user`", - "Table": "`user`, ambiguous_ref_with_source" + "Query": "select ambiguous_ref_with_source.col from ambiguous_ref_with_source, `user`" }, "TablesUsed": [ "user.ambiguous_ref_with_source", @@ -113,7 +109,6 @@ }, "FieldQuery": "select ambiguous_ref_with_source.col from (select aa from `user` where 1 != 1) as `user`, ambiguous_ref_with_source where 1 != 1", "Query": "select ambiguous_ref_with_source.col from (select aa from `user` where `user`.id = 1) as `user`, ambiguous_ref_with_source", - "Table": "`user`, ambiguous_ref_with_source", "Values": [ "1" ], @@ -141,8 +136,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user`, ambiguous_ref_with_source where 1 != 1", - "Query": "select `user`.col from `user`, ambiguous_ref_with_source", - "Table": "`user`, ambiguous_ref_with_source" + "Query": "select `user`.col from `user`, ambiguous_ref_with_source" }, "TablesUsed": [ "user.ambiguous_ref_with_source", @@ -165,8 +159,7 @@ "Name": "main", "Sharded": false }, - "Query": "insert into ambiguous_ref_with_source(col) values (1)", - "TableName": "ambiguous_ref_with_source" + "Query": "insert into ambiguous_ref_with_source(col) values (1)" }, "TablesUsed": [ "main.ambiguous_ref_with_source" @@ -189,8 +182,7 @@ "Sharded": true }, "FieldQuery": "select u.id from (select a.id, a.u_id from ref_with_source as a where 1 != 1) as u left join ref_with_source as u0 on u.u_id = u0.u_uid where 1 != 1", - "Query": "select u.id from (select a.id, a.u_id from ref_with_source as a where a.id in (3) order by a.d_at asc limit 1) as u left join ref_with_source as u0 on u.u_id = u0.u_uid order by u.id asc", - "Table": "ref_with_source" + "Query": "select u.id from (select a.id, a.u_id from ref_with_source as a where a.id in (3) order by a.d_at asc limit 1) as u left join ref_with_source as u0 on u.u_id = u0.u_uid order by u.id asc" }, "TablesUsed": [ "user.ref_with_source" @@ -212,8 +204,7 @@ "Name": "main", "Sharded": false }, - "Query": "insert into ambiguous_ref_with_source(col) values (1)", - "TableName": "ambiguous_ref_with_source" + "Query": "insert into ambiguous_ref_with_source(col) values (1)" }, "TablesUsed": [ "main.ambiguous_ref_with_source" @@ -235,8 +226,7 @@ "Name": "main", "Sharded": false }, - "Query": "update ambiguous_ref_with_source set col = 1", - "Table": "ambiguous_ref_with_source" + "Query": "update ambiguous_ref_with_source set col = 1" }, "TablesUsed": [ "main.ambiguous_ref_with_source" @@ -258,8 +248,7 @@ "Name": "main", "Sharded": false }, - "Query": "update ambiguous_ref_with_source set col = 1", - "Table": "ambiguous_ref_with_source" + "Query": "update ambiguous_ref_with_source set col = 1" }, "TablesUsed": [ "main.ambiguous_ref_with_source" @@ -281,8 +270,7 @@ "Name": "main", "Sharded": false }, - "Query": "delete from ambiguous_ref_with_source where col = 1", - "Table": "ambiguous_ref_with_source" + "Query": "delete from ambiguous_ref_with_source where col = 1" }, "TablesUsed": [ "main.ambiguous_ref_with_source" @@ -304,8 +292,7 @@ "Name": "main", "Sharded": false }, - "Query": "delete from ambiguous_ref_with_source where col = 1", - "Table": "ambiguous_ref_with_source" + "Query": "delete from ambiguous_ref_with_source where col = 1" }, "TablesUsed": [ "main.ambiguous_ref_with_source" @@ -328,8 +315,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user`, ref_with_source where 1 != 1", - "Query": "select `user`.col from `user`, ref_with_source", - "Table": "`user`, ref_with_source" + "Query": "select `user`.col from `user`, ref_with_source" }, "TablesUsed": [ "user.ref_with_source", @@ -353,8 +339,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user`, ref_with_source as source_of_ref where 1 != 1", - "Query": "select `user`.col from `user`, ref_with_source as source_of_ref", - "Table": "`user`, ref_with_source" + "Query": "select `user`.col from `user`, ref_with_source as source_of_ref" }, "TablesUsed": [ "user.ref_with_source", @@ -378,8 +363,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user`, ref as rerouted_ref where 1 != 1", - "Query": "select `user`.col from `user`, ref as rerouted_ref", - "Table": "`user`, ref" + "Query": "select `user`.col from `user`, ref as rerouted_ref" }, "TablesUsed": [ "user.ref", @@ -403,8 +387,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user`, global_ref where 1 != 1", - "Query": "select `user`.col from `user`, global_ref", - "Table": "`user`, global_ref" + "Query": "select `user`.col from `user`, global_ref" }, "TablesUsed": [ "user.global_ref", @@ -427,8 +410,7 @@ "Name": "main", "Sharded": false }, - "Query": "insert into global_ref(col) values (1)", - "TableName": "global_ref" + "Query": "insert into global_ref(col) values (1)" }, "TablesUsed": [ "main.global_ref" @@ -450,8 +432,7 @@ "Name": "main", "Sharded": false }, - "Query": "delete from source_of_ref where col = 1", - "Table": "source_of_ref" + "Query": "delete from source_of_ref where col = 1" }, "TablesUsed": [ "main.source_of_ref" @@ -473,8 +454,7 @@ "Name": "main", "Sharded": false }, - "Query": "update source_of_ref set x = 4 where col = 1", - "Table": "source_of_ref" + "Query": "update source_of_ref set x = 4 where col = 1" }, "TablesUsed": [ "main.source_of_ref" @@ -496,8 +476,7 @@ "Name": "main", "Sharded": false }, - "Query": "insert into source_of_ref(x) values (4)", - "TableName": "source_of_ref" + "Query": "insert into source_of_ref(x) values (4)" }, "TablesUsed": [ "main.source_of_ref" @@ -519,8 +498,7 @@ "Name": "main", "Sharded": false }, - "Query": "delete from source_of_ref where col = 1", - "Table": "source_of_ref" + "Query": "delete from source_of_ref where col = 1" }, "TablesUsed": [ "main.source_of_ref" @@ -542,8 +520,7 @@ "Name": "main", "Sharded": false }, - "Query": "update source_of_ref set x = 4 where col = 1", - "Table": "source_of_ref" + "Query": "update source_of_ref set x = 4 where col = 1" }, "TablesUsed": [ "main.source_of_ref" @@ -565,8 +542,7 @@ "Name": "main", "Sharded": false }, - "Query": "insert into source_of_ref(x) values (4)", - "TableName": "source_of_ref" + "Query": "insert into source_of_ref(x) values (4)" }, "TablesUsed": [ "main.source_of_ref" @@ -588,8 +564,7 @@ "Name": "main", "Sharded": false }, - "Query": "delete from source_of_ref where col = 1", - "Table": "source_of_ref" + "Query": "delete from source_of_ref where col = 1" }, "TablesUsed": [ "main.source_of_ref" @@ -611,8 +586,7 @@ "Name": "main", "Sharded": false }, - "Query": "update source_of_ref set x = 4 where col = 1", - "Table": "source_of_ref" + "Query": "update source_of_ref set x = 4 where col = 1" }, "TablesUsed": [ "main.source_of_ref" @@ -634,8 +608,7 @@ "Name": "main", "Sharded": false }, - "Query": "insert into source_of_ref(x) values (4)", - "TableName": "source_of_ref" + "Query": "insert into source_of_ref(x) values (4)" }, "TablesUsed": [ "main.source_of_ref" @@ -657,8 +630,7 @@ "Name": "main", "Sharded": false }, - "Query": "delete from source_of_ref where col = 1", - "Table": "source_of_ref" + "Query": "delete from source_of_ref where col = 1" }, "TablesUsed": [ "main.source_of_ref" @@ -680,8 +652,7 @@ "Name": "main", "Sharded": false }, - "Query": "update source_of_ref set x = 4 where col = 1", - "Table": "source_of_ref" + "Query": "update source_of_ref set x = 4 where col = 1" }, "TablesUsed": [ "main.source_of_ref" @@ -703,8 +674,7 @@ "Name": "main", "Sharded": false }, - "Query": "insert into source_of_ref(x) values (4)", - "TableName": "source_of_ref" + "Query": "insert into source_of_ref(x) values (4)" }, "TablesUsed": [ "main.source_of_ref" @@ -728,7 +698,6 @@ }, "FieldQuery": "select * from ref_with_source as ref, `user` as u where 1 != 1", "Query": "select * from ref_with_source as ref, `user` as u where u.id = 2 and ref.id = u.ref_id", - "Table": "`user`, ref_with_source", "Values": [ "2" ], @@ -757,7 +726,6 @@ }, "FieldQuery": "select * from ref_with_source as ref, `user` as u where 1 != 1", "Query": "select * from ref_with_source as ref, `user` as u where u.id = 2 and ref.id = u.ref_id", - "Table": "`user`, ref_with_source", "Values": [ "2" ], @@ -785,8 +753,7 @@ "Sharded": true }, "FieldQuery": "select 1 from `user` as u, user_extra as ue, ref_with_source as sr, ref as rr where 1 != 1", - "Query": "select 1 from `user` as u, user_extra as ue, ref_with_source as sr, ref as rr where rr.bar = sr.bar and u.id = ue.user_id and sr.foo = ue.foo", - "Table": "`user`, ref, ref_with_source, user_extra" + "Query": "select 1 from `user` as u, user_extra as ue, ref_with_source as sr, ref as rr where rr.bar = sr.bar and u.id = ue.user_id and sr.foo = ue.foo" }, "TablesUsed": [ "user.ref", @@ -817,7 +784,6 @@ "JoinVars": { "m_col": 0 }, - "TableName": "music_rerouted_ref, source_of_ref", "Inputs": [ { "OperatorType": "Route", @@ -828,7 +794,6 @@ }, "FieldQuery": "select m.col from music as m where 1 != 1", "Query": "select m.col from music as m where m.user_id = 1 lock in share mode", - "Table": "music", "Values": [ "1" ], @@ -842,8 +807,7 @@ "Sharded": false }, "FieldQuery": "select sr.id from source_of_ref as sr, rerouted_ref as rr where 1 != 1", - "Query": "select sr.id from source_of_ref as sr, rerouted_ref as rr where sr.col = :m_col and sr.id = rr.id lock in share mode", - "Table": "rerouted_ref, source_of_ref" + "Query": "select sr.id from source_of_ref as sr, rerouted_ref as rr where sr.col = :m_col and sr.id = rr.id lock in share mode" } ] }, @@ -854,8 +818,7 @@ "Name": "main", "Sharded": false }, - "Query": "update source_of_ref as sr set sr.tt = 5 where sr.id in ::dml_vals", - "Table": "source_of_ref" + "Query": "update source_of_ref as sr set sr.tt = 5 where sr.id in ::dml_vals" } ] }, @@ -886,7 +849,6 @@ "JoinVars": { "m_col": 0 }, - "TableName": "music_rerouted_ref, source_of_ref", "Inputs": [ { "OperatorType": "Route", @@ -897,7 +859,6 @@ }, "FieldQuery": "select m.col from music as m where 1 != 1", "Query": "select m.col from music as m where m.user_id = 1", - "Table": "music", "Values": [ "1" ], @@ -911,8 +872,7 @@ "Sharded": false }, "FieldQuery": "select sr.id from source_of_ref as sr, rerouted_ref as rr where 1 != 1", - "Query": "select sr.id from source_of_ref as sr, rerouted_ref as rr where sr.col = :m_col and sr.id = rr.id", - "Table": "rerouted_ref, source_of_ref" + "Query": "select sr.id from source_of_ref as sr, rerouted_ref as rr where sr.col = :m_col and sr.id = rr.id" } ] }, @@ -923,8 +883,7 @@ "Name": "main", "Sharded": false }, - "Query": "delete from source_of_ref as sr where sr.id in ::dml_vals", - "Table": "source_of_ref" + "Query": "delete from source_of_ref as sr where sr.id in ::dml_vals" } ] }, diff --git a/go/vt/vtgate/planbuilder/testdata/select_cases.json b/go/vt/vtgate/planbuilder/testdata/select_cases.json index f794e250801..7fdad1b78d0 100644 --- a/go/vt/vtgate/planbuilder/testdata/select_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/select_cases.json @@ -14,8 +14,7 @@ "Sharded": true }, "FieldQuery": "select 1 from `user` where 1 != 1", - "Query": "select 1 from `user`", - "Table": "`user`" + "Query": "select 1 from `user`" }, "TablesUsed": [ "user.user" @@ -37,8 +36,7 @@ "Sharded": true }, "FieldQuery": "select `user`.* from `user` where 1 != 1", - "Query": "select `user`.* from `user`", - "Table": "`user`" + "Query": "select `user`.* from `user`" }, "TablesUsed": [ "user.user" @@ -60,8 +58,7 @@ "Sharded": true }, "FieldQuery": "select * from `user` where 1 != 1", - "Query": "select * from `user`", - "Table": "`user`" + "Query": "select * from `user`" }, "TablesUsed": [ "user.user" @@ -87,8 +84,7 @@ "Sharded": true }, "FieldQuery": "select * from `user` as u, user_metadata as um where 1 != 1", - "Query": "select * from `user` as u, user_metadata as um where foo = 41 and u.id = um.user_id limit 20", - "Table": "`user`, user_metadata" + "Query": "select * from `user` as u, user_metadata as um where foo = 41 and u.id = um.user_id limit 20" } ] }, @@ -115,8 +111,7 @@ }, "FieldQuery": "select * from `user` where 1 != 1", "Query": "select /*vt+ QUERY_TIMEOUT_MS=1000 */ * from `user`", - "QueryTimeout": 1000, - "Table": "`user`" + "QueryTimeout": 1000 }, "TablesUsed": [ "user.user" @@ -144,8 +139,7 @@ }, "FieldQuery": "select count(*) from `user` where 1 != 1", "Query": "select /*vt+ QUERY_TIMEOUT_MS=1000 */ count(*) from `user`", - "QueryTimeout": 1000, - "Table": "`user`" + "QueryTimeout": 1000 } ] }, @@ -174,8 +168,7 @@ }, "FieldQuery": "select * from `user` where 1 != 1", "Query": "select /*vt+ QUERY_TIMEOUT_MS=1000 */ * from `user` limit 10", - "QueryTimeout": 1000, - "Table": "`user`" + "QueryTimeout": 1000 } ] }, @@ -200,8 +193,7 @@ }, "FieldQuery": "select * from unsharded where 1 != 1", "Query": "select /*vt+ QUERY_TIMEOUT_MS=1000 */ * from unsharded limit 10", - "QueryTimeout": 1000, - "Table": "unsharded" + "QueryTimeout": 1000 }, "TablesUsed": [ "main.unsharded" @@ -225,8 +217,7 @@ }, "FieldQuery": "select * from `user` where 1 != 1", "Query": "select /*vt+ SCATTER_ERRORS_AS_WARNINGS */ * from `user`", - "ScatterErrorsAsWarnings": true, - "Table": "`user`" + "ScatterErrorsAsWarnings": true }, "TablesUsed": [ "user.user" @@ -254,8 +245,7 @@ }, "FieldQuery": "select count(*) from `user` where 1 != 1", "Query": "select /*vt+ SCATTER_ERRORS_AS_WARNINGS=1 */ count(*) from `user`", - "ScatterErrorsAsWarnings": true, - "Table": "`user`" + "ScatterErrorsAsWarnings": true } ] }, @@ -285,8 +275,7 @@ }, "FieldQuery": "select count(*) from `user` where 1 != 1", "Query": "select /*vt+ SCATTER_ERRORS_AS_WARNINGS=1 */ count(*) from `user`", - "ScatterErrorsAsWarnings": true, - "Table": "`user`" + "ScatterErrorsAsWarnings": true } ] }, @@ -315,8 +304,7 @@ }, "FieldQuery": "select * from `user` where 1 != 1", "Query": "select /*vt+ SCATTER_ERRORS_AS_WARNINGS=1 */ * from `user` limit 10", - "ScatterErrorsAsWarnings": true, - "Table": "`user`" + "ScatterErrorsAsWarnings": true } ] }, @@ -340,8 +328,7 @@ "Sharded": true }, "FieldQuery": "select `user`.* from `user` where 1 != 1", - "Query": "select `user`.* from `user`", - "Table": "`user`" + "Query": "select `user`.* from `user`" }, "TablesUsed": [ "user.user" @@ -363,8 +350,7 @@ "Sharded": true }, "FieldQuery": "select `user`.* from `user` where 1 != 1", - "Query": "select `user`.* from `user`", - "Table": "`user`" + "Query": "select `user`.* from `user`" }, "TablesUsed": [ "user.user" @@ -386,8 +372,7 @@ "Sharded": true }, "FieldQuery": "select user_id, col1, col2 from authoritative where 1 != 1", - "Query": "select user_id, col1, col2 from authoritative", - "Table": "authoritative" + "Query": "select user_id, col1, col2 from authoritative" }, "TablesUsed": [ "user.authoritative" @@ -409,8 +394,7 @@ "Sharded": true }, "FieldQuery": "select a.user_id, a.col1, a.col2, b.user_id, b.col1, b.col2 from authoritative as a, authoritative as b where 1 != 1", - "Query": "select a.user_id, a.col1, a.col2, b.user_id, b.col1, b.col2 from authoritative as a, authoritative as b where a.user_id = b.user_id", - "Table": "authoritative" + "Query": "select a.user_id, a.col1, a.col2, b.user_id, b.col1, b.col2 from authoritative as a, authoritative as b where a.user_id = b.user_id" }, "TablesUsed": [ "user.authoritative" @@ -438,8 +422,7 @@ "Sharded": true }, "FieldQuery": "select user_id, col1, col2 from authoritative as a where 1 != 1", - "Query": "select user_id, col1, col2 from authoritative as a", - "Table": "authoritative" + "Query": "select user_id, col1, col2 from authoritative as a" }, "TablesUsed": [ "user.authoritative" @@ -461,8 +444,7 @@ "Sharded": true }, "FieldQuery": "select * from authoritative, `user` where 1 != 1", - "Query": "select * from authoritative, `user` where authoritative.user_id = `user`.id", - "Table": "`user`, authoritative" + "Query": "select * from authoritative, `user` where authoritative.user_id = `user`.id" }, "TablesUsed": [ "user.authoritative", @@ -485,8 +467,7 @@ "Sharded": true }, "FieldQuery": "select `user`.id, a.user_id, a.col1, a.col2, `user`.col1 from authoritative as a, `user` where 1 != 1", - "Query": "select `user`.id, a.user_id, a.col1, a.col2, `user`.col1 from authoritative as a, `user` where a.user_id = `user`.id", - "Table": "`user`, authoritative" + "Query": "select `user`.id, a.user_id, a.col1, a.col2, `user`.col1 from authoritative as a, `user` where a.user_id = `user`.id" }, "TablesUsed": [ "user.authoritative", @@ -510,8 +491,7 @@ "Sharded": true }, "FieldQuery": "select anon_col from `user`, user_extra where 1 != 1", - "Query": "select anon_col from `user`, user_extra where `user`.id = user_extra.user_id", - "Table": "`user`, user_extra" + "Query": "select anon_col from `user`, user_extra where `user`.id = user_extra.user_id" }, "TablesUsed": [ "user.user", @@ -536,7 +516,6 @@ }, "FieldQuery": "select count(1) from `user` where 1 != 1 group by n_id", "Query": "select count(1) from `user` where id = 'abc' group by n_id having json_arrayagg(a_id) = '[]'", - "Table": "`user`", "Values": [ "'abc'" ], @@ -564,7 +543,6 @@ }, "FieldQuery": "select count(1) from `user` where 1 != 1 group by n_id", "Query": "select count(1) from `user` where id = 'abc' group by n_id having json_objectagg(a_id, b_id) = '[]'", - "Table": "`user`", "Values": [ "'abc'" ], @@ -599,7 +577,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -609,8 +586,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1", - "Query": "select id from `user`", - "Table": "`user`" + "Query": "select id from `user`" }, { "OperatorType": "Route", @@ -620,8 +596,7 @@ "Sharded": true }, "FieldQuery": "select user_id from user_extra where 1 != 1", - "Query": "select user_id from user_extra", - "Table": "user_extra" + "Query": "select user_id from user_extra" } ] }, @@ -671,8 +646,7 @@ "Sharded": false }, "FieldQuery": "select :__lastInsertId as x from unsharded where 1 != 1", - "Query": "select :__lastInsertId as x from unsharded", - "Table": "unsharded" + "Query": "select :__lastInsertId as x from unsharded" }, "TablesUsed": [ "main.unsharded" @@ -695,8 +669,7 @@ "Sharded": false }, "FieldQuery": "select @@auto_increment_increment from dual where 1 != 1", - "Query": "select @@auto_increment_increment from dual", - "Table": "dual" + "Query": "select @@auto_increment_increment from dual" }, "TablesUsed": [ "main.dual" @@ -719,7 +692,6 @@ }, "FieldQuery": "select * from pin_test where 1 != 1", "Query": "select * from pin_test", - "Table": "pin_test", "Values": [ "'\ufffd'" ], @@ -747,7 +719,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "R:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -757,8 +728,7 @@ "Sharded": true }, "FieldQuery": "select 1 from `user` where 1 != 1", - "Query": "select 1 from `user`", - "Table": "`user`" + "Query": "select 1 from `user`" }, { "OperatorType": "Route", @@ -768,8 +738,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.id from user_extra where 1 != 1", - "Query": "select user_extra.id from user_extra", - "Table": "user_extra" + "Query": "select user_extra.id from user_extra" } ] }, @@ -791,7 +760,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -801,8 +769,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user` where 1 != 1", - "Query": "select `user`.col from `user`", - "Table": "`user`" + "Query": "select `user`.col from `user`" }, { "OperatorType": "Route", @@ -812,8 +779,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.id from user_extra where 1 != 1", - "Query": "select user_extra.id from user_extra", - "Table": "user_extra" + "Query": "select user_extra.id from user_extra" } ] }, @@ -835,7 +801,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -845,8 +810,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user` where 1 != 1", - "Query": "select `user`.col from `user`", - "Table": "`user`" + "Query": "select `user`.col from `user`" }, { "OperatorType": "Route", @@ -856,8 +820,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.id + user_extra.col from user_extra where 1 != 1", - "Query": "select user_extra.id + user_extra.col from user_extra", - "Table": "user_extra" + "Query": "select user_extra.id + user_extra.col from user_extra" } ] }, @@ -884,7 +847,6 @@ }, "FieldQuery": "select col, trim((select user_name from `user` where 1 != 1)) as val from user_extra where 1 != 1 group by col", "Query": "select col, trim((select user_name from `user` where id = 3)) as val from user_extra where user_id = 3 group by col order by trim((select `user`.user_name from `user` where `user`.id = 3)) asc", - "Table": "user_extra", "Values": [ "3" ], @@ -908,7 +870,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0,L:1", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -918,8 +879,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col, `user`.col2 from `user` where 1 != 1", - "Query": "select `user`.col, `user`.col2 from `user`", - "Table": "`user`" + "Query": "select `user`.col, `user`.col2 from `user`" }, { "OperatorType": "Route", @@ -929,8 +889,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.id from user_extra where 1 != 1", - "Query": "select user_extra.id from user_extra", - "Table": "user_extra" + "Query": "select user_extra.id from user_extra" } ] }, @@ -952,7 +911,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -962,8 +920,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user` where 1 != 1", - "Query": "select /* comment */ `user`.col from `user`", - "Table": "`user`" + "Query": "select /* comment */ `user`.col from `user`" }, { "OperatorType": "Route", @@ -973,8 +930,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select /* comment */ 1 from user_extra", - "Table": "user_extra" + "Query": "select /* comment */ 1 from user_extra" } ] }, @@ -996,7 +952,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1006,8 +961,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user` where 1 != 1", - "Query": "select `user`.col from `user` for update", - "Table": "`user`" + "Query": "select `user`.col from `user` for update" }, { "OperatorType": "Route", @@ -1017,8 +971,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra for update", - "Table": "user_extra" + "Query": "select 1 from user_extra for update" } ] }, @@ -1043,7 +996,6 @@ "JoinVars": { "user_id": 0 }, - "TableName": "`user`_unsharded", "Inputs": [ { "OperatorType": "Route", @@ -1053,8 +1005,7 @@ "Sharded": true }, "FieldQuery": "select `user`.id, `user`.id from `user` where 1 != 1", - "Query": "select `user`.id, `user`.id from `user`", - "Table": "`user`" + "Query": "select `user`.id, `user`.id from `user`" }, { "OperatorType": "Route", @@ -1064,8 +1015,7 @@ "Sharded": false }, "FieldQuery": "select (select :user_id + outm.m + unsharded.m from unsharded where 1 != 1) as `(select ``user``.id + outm.m + unsharded.m from unsharded)` from unsharded as outm where 1 != 1", - "Query": "select (select :user_id + outm.m + unsharded.m from unsharded) as `(select ``user``.id + outm.m + unsharded.m from unsharded)` from unsharded as outm", - "Table": "unsharded" + "Query": "select (select :user_id + outm.m + unsharded.m from unsharded) as `(select ``user``.id + outm.m + unsharded.m from unsharded)` from unsharded as outm" } ] }, @@ -1087,7 +1037,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1097,8 +1046,7 @@ "Sharded": true }, "FieldQuery": "select `user`.Col from `user` where 1 != 1", - "Query": "select `user`.Col from `user`", - "Table": "`user`" + "Query": "select `user`.Col from `user`" }, { "OperatorType": "Route", @@ -1108,8 +1056,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.Id from user_extra where 1 != 1", - "Query": "select user_extra.Id from user_extra", - "Table": "user_extra" + "Query": "select user_extra.Id from user_extra" } ] }, @@ -1142,7 +1089,6 @@ }, "FieldQuery": "select * from `user` where 1 != 1", "Query": "select * from `user` where id = 0x04", - "Table": "`user`", "Values": [ "_binary'\u0004'" ], @@ -1168,8 +1114,7 @@ "Sharded": true }, "FieldQuery": "select * from `user` where 1 != 1", - "Query": "select * from `user` where id = 1", - "Table": "`user`" + "Query": "select * from `user` where id = 1" }, "TablesUsed": [ "user.user" @@ -1205,7 +1150,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -1219,8 +1163,7 @@ "Sharded": true }, "FieldQuery": "select intcol, id from `user` where 1 != 1", - "Query": "select intcol, id from `user` where costly = 'aa' and `name` = 'bb' and id = 3", - "Table": "`user`" + "Query": "select intcol, id from `user` where costly = 'aa' and `name` = 'bb' and id = 3" } ] }, @@ -1258,8 +1201,7 @@ "FieldQuery": "select user_id, weight_string(user_id) from music where 1 != 1", "OrderBy": "(0|1) ASC", "Query": "select user_id, weight_string(user_id) from music order by music.user_id asc limit 30", - "ResultColumns": 1, - "Table": "music" + "ResultColumns": 1 } ] }, @@ -1290,8 +1232,7 @@ "FieldQuery": "select user_id, weight_string(user_id) from music where 1 != 1", "OrderBy": "(0|1) ASC", "Query": "select user_id, weight_string(user_id) from music order by music.user_id asc limit :__upper_limit", - "ResultColumns": 1, - "Table": "music" + "ResultColumns": 1 } ] }, @@ -1317,7 +1258,6 @@ }, "FieldQuery": "select * from `user` where 1 != 1", "Query": "select * from `user` where `name` = 'abc' and id = 4 limit 5", - "Table": "`user`", "Values": [ "4" ], @@ -1345,7 +1285,6 @@ }, "FieldQuery": "select * from `user` where 1 != 1", "Query": "select * from `user` where id = 4 and `name` = 'abc' limit 5", - "Table": "`user`", "Values": [ "4" ], @@ -1373,7 +1312,6 @@ }, "FieldQuery": "select (select (select col from `user` where 1 != 1) from `user` where 1 != 1) from `user` where 1 != 1", "Query": "select (select (select col from `user` where id = 1) from `user` where id = 1) from `user` where id = 1", - "Table": "`user`", "Values": [ "1" ], @@ -1400,7 +1338,6 @@ }, "FieldQuery": "select 1 from `user` where 1 != 1", "Query": "select 1 from `user` where id = 1 and 1 = (select (select intcol from `user` where id = 1) from `user` where id = 1)", - "Table": "`user`", "Values": [ "1" ], @@ -1427,7 +1364,6 @@ }, "FieldQuery": "select * from `user` where 1 != 1", "Query": "select * from `user` where id = 4 and `name` = 'abc' limit 5", - "Table": "`user`", "Values": [ "4" ], @@ -1455,7 +1391,6 @@ }, "FieldQuery": "select user0_.col as col0_ from `user` as user0_ where 1 != 1", "Query": "select user0_.col as col0_ from `user` as user0_ where id = 1 order by user0_.col desc limit 2", - "Table": "`user`", "Values": [ "1" ], @@ -1482,7 +1417,6 @@ }, "FieldQuery": "select user0_.col as col0_ from `user` as user0_ where 1 != 1", "Query": "select user0_.col as col0_ from `user` as user0_ where id = 1 order by user0_.col desc limit 3", - "Table": "`user`", "Values": [ "1" ], @@ -1509,7 +1443,6 @@ }, "FieldQuery": "select * from `user` where 1 != 1", "Query": "select * from `user` where id = 1 and `name` = true limit 5", - "Table": "`user`", "Values": [ "1" ], @@ -1537,7 +1470,6 @@ }, "FieldQuery": "select * from `user` where 1 != 1", "Query": "select * from `user` where id = 1 and `name` limit 5", - "Table": "`user`", "Values": [ "1" ], @@ -1565,7 +1497,6 @@ }, "FieldQuery": "select * from `user` where 1 != 1", "Query": "select * from `user` where id = 5 and `name` = true limit 5", - "Table": "`user`", "Values": [ "5" ], @@ -1600,8 +1531,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user`", - "Table": "`user`" + "Query": "select col from `user`" }, { "InputName": "Outer", @@ -1612,8 +1542,7 @@ "Sharded": false }, "FieldQuery": "select a, :__sq1 /* INT16 */ as `(select col from ``user``)` from unsharded where 1 != 1", - "Query": "select a, :__sq1 /* INT16 */ as `(select col from ``user``)` from unsharded", - "Table": "unsharded" + "Query": "select a, :__sq1 /* INT16 */ as `(select col from ``user``)` from unsharded" } ] }, @@ -1647,8 +1576,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user`", - "Table": "`user`" + "Query": "select col from `user`" }, { "InputName": "Outer", @@ -1659,8 +1587,7 @@ "Sharded": false }, "FieldQuery": "select a, 1 + :__sq1 /* INT16 */ as `1 + (select col from ``user``)` from unsharded where 1 != 1", - "Query": "select a, 1 + :__sq1 /* INT16 */ as `1 + (select col from ``user``)` from unsharded", - "Table": "unsharded" + "Query": "select a, 1 + :__sq1 /* INT16 */ as `1 + (select col from ``user``)` from unsharded" } ] }, @@ -1682,7 +1609,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -1692,8 +1618,7 @@ "Sharded": true }, "FieldQuery": "select t.id1 from (select `user`.id as id1 from `user` where 1 != 1) as t where 1 != 1", - "Query": "select t.id1 from (select `user`.id as id1 from `user`) as t", - "Table": "`user`" + "Query": "select t.id1 from (select `user`.id as id1 from `user`) as t" }, { "OperatorType": "Route", @@ -1703,8 +1628,7 @@ "Sharded": true }, "FieldQuery": "select t.id2 from (select user_extra.id as id2 from user_extra where 1 != 1) as t where 1 != 1", - "Query": "select t.id2 from (select user_extra.id as id2 from user_extra) as t", - "Table": "user_extra" + "Query": "select t.id2 from (select user_extra.id as id2 from user_extra) as t" } ] }, @@ -1743,7 +1667,6 @@ }, "FieldQuery": "select * from music where 1 != 1 union select * from `user` where 1 != 1", "Query": "select * from music where user_id = 1 union select * from `user` where id = 1", - "Table": "`user`, music", "Values": [ "1" ], @@ -1756,6 +1679,103 @@ }, "skip_e2e": true }, + { + "comment": "union with the same target shard (using `IN` with multiple matching values)", + "query": "SELECT id FROM music WHERE music.user_id IN (1, 2, 3) UNION SELECT id FROM music WHERE music.user_id IN (1, 2, 3)", + "plan": { + "Type": "Complex", + "QueryType": "SELECT", + "Original": "SELECT id FROM music WHERE music.user_id IN (1, 2, 3) UNION SELECT id FROM music WHERE music.user_id IN (1, 2, 3)", + "Instructions": { + "OperatorType": "Distinct", + "Collations": [ + "(0:1)" + ], + "ResultColumns": 1, + "Inputs": [ + { + "OperatorType": "Route", + "Variant": "IN", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "FieldQuery": "select dt.c0 as id, weight_string(dt.c0) from (select id from music where 1 != 1 union select id from music where 1 != 1) as dt(c0) where 1 != 1", + "Query": "select dt.c0 as id, weight_string(dt.c0) from (select id from music where music.user_id in ::__vals union select id from music where music.user_id in (1, 2, 3)) as dt(c0)", + "Values": [ + "(1, 2, 3)" + ], + "Vindex": "user_index" + } + ] + }, + "TablesUsed": [ + "user.music" + ] + } + }, + { + "comment": "union with the same target shard (using `IN` with the same normalized value)", + "query": "SELECT id FROM music WHERE music.user_id IN ::vtg1 UNION SELECT id FROM music WHERE music.user_id IN ::vtg1", + "plan": { + "Type": "Complex", + "QueryType": "SELECT", + "Original": "SELECT id FROM music WHERE music.user_id IN ::vtg1 UNION SELECT id FROM music WHERE music.user_id IN ::vtg1", + "Instructions": { + "OperatorType": "Distinct", + "Collations": [ + "(0:1)" + ], + "ResultColumns": 1, + "Inputs": [ + { + "OperatorType": "Route", + "Variant": "IN", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "FieldQuery": "select dt.c0 as id, weight_string(dt.c0) from (select id from music where 1 != 1 union select id from music where 1 != 1) as dt(c0) where 1 != 1", + "Query": "select dt.c0 as id, weight_string(dt.c0) from (select id from music where music.user_id in ::__vals union select id from music where music.user_id in ::vtg1) as dt(c0)", + "Values": [ + "::vtg1" + ], + "Vindex": "user_index" + } + ] + }, + "TablesUsed": [ + "user.music" + ] + }, + "skip_e2e": true + }, + { + "comment": "union with the same target shard (using a mix of `IN` and `=` conditions)", + "query": "SELECT id FROM music WHERE music.user_id IN (1) UNION SELECT id FROM music WHERE music.user_id = 1", + "plan": { + "Type": "Passthrough", + "QueryType": "SELECT", + "Original": "SELECT id FROM music WHERE music.user_id IN (1) UNION SELECT id FROM music WHERE music.user_id = 1", + "Instructions": { + "OperatorType": "Route", + "Variant": "EqualUnique", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "FieldQuery": "select id from music where 1 != 1 union select id from music where 1 != 1", + "Query": "select id from music where music.user_id in (1) union select id from music where music.user_id = 1", + "Values": [ + "1" + ], + "Vindex": "user_index" + }, + "TablesUsed": [ + "user.music" + ] + } + }, { "comment": "union with the same target shard last_insert_id", "query": "select *, last_insert_id() from music where user_id = 1 union select * from user where id = 1", @@ -1772,7 +1792,6 @@ }, "FieldQuery": "select *, :__lastInsertId as `last_insert_id()` from music where 1 != 1 union select * from `user` where 1 != 1", "Query": "select *, :__lastInsertId as `last_insert_id()` from music where user_id = 1 union select * from `user` where id = 1", - "Table": "`user`, music", "Values": [ "1" ], @@ -1800,8 +1819,7 @@ "Sharded": false }, "FieldQuery": "select * from (select col1, col2 from unsharded where 1 != 1 union select col1, col2 from unsharded where 1 != 1) as a where 1 != 1", - "Query": "select * from (select col1, col2 from unsharded where id = 1 union select col1, col2 from unsharded where id = 3) as a", - "Table": "unsharded" + "Query": "select * from (select col1, col2 from unsharded where id = 1 union select col1, col2 from unsharded where id = 3) as a" }, "TablesUsed": [ "main.unsharded" @@ -1823,8 +1841,7 @@ "Sharded": false }, "FieldQuery": "select id, `name` from unsharded where 1 != 1", - "Query": "select id, `name` from unsharded where id in (select id from unsharded where id = 1 union select id from unsharded where id = 3)", - "Table": "unsharded" + "Query": "select id, `name` from unsharded where id in (select id from unsharded where id = 1 union select id from unsharded where id = 3)" }, "TablesUsed": [ "main.unsharded" @@ -1846,8 +1863,7 @@ "Sharded": false }, "FieldQuery": "select id from unsharded where 1 != 1 union select id from unsharded_auto where 1 != 1", - "Query": "select id from unsharded union select id from unsharded_auto order by id asc limit 5", - "Table": "unsharded, unsharded_auto" + "Query": "select id from unsharded union select id from unsharded_auto order by id asc limit 5" }, "TablesUsed": [ "main.unsharded", @@ -1870,8 +1886,7 @@ "Sharded": false }, "FieldQuery": "select id from unsharded where 1 != 1 union select id from unsharded_auto where 1 != 1 union select id from unsharded_auto where 1 != 1", - "Query": "select id from unsharded union select id from unsharded_auto union select id from unsharded_auto where id in (132)", - "Table": "unsharded, unsharded_auto" + "Query": "select id from unsharded union select id from unsharded_auto union select id from unsharded_auto where id in (132)" }, "TablesUsed": [ "main.unsharded", @@ -1894,8 +1909,7 @@ "Sharded": false }, "FieldQuery": "select id from unsharded where 1 != 1 union select id from unsharded_auto where 1 != 1 union select id from unsharded_auto where 1 != 1 union select `name` from unsharded where 1 != 1", - "Query": "select id from unsharded union select id from unsharded_auto union select id from unsharded_auto union select `name` from unsharded", - "Table": "unsharded, unsharded_auto" + "Query": "select id from unsharded union select id from unsharded_auto union select id from unsharded_auto union select `name` from unsharded" }, "TablesUsed": [ "main.unsharded", @@ -1918,8 +1932,7 @@ "Sharded": false }, "FieldQuery": "(select id from unsharded where 1 != 1) union (select id from unsharded where 1 != 1)", - "Query": "(select id from unsharded order by id asc limit 1) union (select id from unsharded order by id desc limit 1) order by id asc limit 1", - "Table": "unsharded" + "Query": "(select id from unsharded order by id asc limit 1) union (select id from unsharded order by id desc limit 1) order by id asc limit 1" }, "TablesUsed": [ "main.unsharded" @@ -1942,8 +1955,7 @@ }, "FieldQuery": "select * from unsharded as route2 where 1 != 1", "Query": "select /*vt+ QUERY_TIMEOUT_MS=1000 */ * from unsharded as route2", - "QueryTimeout": 1000, - "Table": "unsharded" + "QueryTimeout": 1000 }, "TablesUsed": [ "main.unsharded" @@ -1966,8 +1978,7 @@ "Sharded": true }, "FieldQuery": "select * from music as bar where 1 != 1", - "Query": "select * from music as bar where id > 2", - "Table": "music" + "Query": "select * from music as bar where id > 2" }, "TablesUsed": [ "user.music" @@ -2035,8 +2046,7 @@ }, "FieldQuery": "select sum(intcol) as avg_col, textcol1, textcol2, count(intcol), weight_string(textcol2) from `user` where 1 != 1 group by textcol1, textcol2, weight_string(textcol2)", "OrderBy": "1 ASC COLLATE latin1_swedish_ci, (2|4) ASC COLLATE ", - "Query": "select sum(intcol) as avg_col, textcol1, textcol2, count(intcol), weight_string(textcol2) from `user` group by textcol1, textcol2, weight_string(textcol2) order by textcol1 asc, textcol2 asc", - "Table": "`user`" + "Query": "select sum(intcol) as avg_col, textcol1, textcol2, count(intcol), weight_string(textcol2) from `user` group by textcol1, textcol2, weight_string(textcol2) order by textcol1 asc, textcol2 asc" } ] } @@ -2064,8 +2074,7 @@ "Sharded": false }, "FieldQuery": "select 42 from dual where 1 != 1", - "Query": "select 42 from dual where 0", - "Table": "dual" + "Query": "select 42 from dual where 0" }, "TablesUsed": [ "main.dual" @@ -2101,8 +2110,7 @@ "Sharded": false }, "FieldQuery": "select id from unsharded_a where 1 != 1", - "Query": "select id from unsharded_a where colb = 2", - "Table": "unsharded_a" + "Query": "select id from unsharded_a where colb = 2" }, { "InputName": "Outer", @@ -2113,8 +2121,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from `user` where 1 != 1", - "Query": "select count(*) from `user` where `user`.id = 2 or :__sq_has_values and `user`.id in ::__sq1", - "Table": "`user`" + "Query": "select count(*) from `user` where `user`.id = 2 or :__sq_has_values and `user`.id in ::__sq1" } ] } @@ -2156,8 +2163,7 @@ "Sharded": false }, "FieldQuery": "select id from unsharded_a where 1 != 1", - "Query": "select id from unsharded_a where colb = 2", - "Table": "unsharded_a" + "Query": "select id from unsharded_a where colb = 2" }, { "InputName": "Outer", @@ -2168,8 +2174,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from `user` where 1 != 1", - "Query": "select count(*) from `user` where `user`.id = 2 or (not :__sq_has_values or `user`.id not in ::__sq1)", - "Table": "`user`" + "Query": "select count(*) from `user` where `user`.id = 2 or (not :__sq_has_values or `user`.id not in ::__sq1)" } ] } @@ -2221,7 +2226,6 @@ }, "FieldQuery": "select * from music where 1 != 1", "Query": "select * from music where user_id = 1", - "Table": "music", "Values": [ "1" ], @@ -2254,8 +2258,7 @@ "Sharded": true }, "FieldQuery": "select * from music where 1 != 1", - "Query": "select * from music limit 100", - "Table": "music" + "Query": "select * from music limit 100" } ] }, @@ -2272,8 +2275,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from music where 1 != 1", - "Query": "select count(*) from music", - "Table": "music" + "Query": "select count(*) from music" } ] } @@ -2303,7 +2305,6 @@ }, "FieldQuery": "select * from music where 1 != 1", "Query": "select * from music where user_id = 1 limit 2", - "Table": "music", "Values": [ "1" ], @@ -2318,7 +2319,6 @@ }, "FieldQuery": "select count(*) from music where 1 != 1", "Query": "select count(*) from music where user_id = 1", - "Table": "music", "Values": [ "1" ], @@ -2355,8 +2355,7 @@ "FieldQuery": "select user_id, count(id), weight_string(user_id) from music where 1 != 1 group by user_id", "OrderBy": "(0|2) ASC", "Query": "select user_id, count(id), weight_string(user_id) from music group by user_id having count(user_id) = 1 order by music.user_id asc limit 2", - "ResultColumns": 2, - "Table": "music" + "ResultColumns": 2 } ] }, @@ -2373,8 +2372,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from (select user_id, count(id) from music where 1 != 1 group by user_id) as t where 1 != 1", - "Query": "select count(*) from (select user_id, count(id) from music group by user_id having count(user_id) = 1) as t", - "Table": "music" + "Query": "select count(*) from (select user_id, count(id) from music group by user_id having count(user_id) = 1) as t" } ] } @@ -2412,8 +2410,7 @@ "Sharded": false }, "FieldQuery": "select * from unsharded where 1 != 1", - "Query": "select * from unsharded into dumpfile 'x.txt'", - "Table": "unsharded" + "Query": "select * from unsharded into dumpfile 'x.txt'" }, "TablesUsed": [ "main.unsharded" @@ -2436,8 +2433,7 @@ "Sharded": false }, "FieldQuery": "select * from unsharded where 1 != 1", - "Query": "select * from unsharded into outfile 'x.txt' character set binary fields terminated by 'term' optionally enclosed by 'c' escaped by 'e' lines starting by 'a' terminated by '\\n'", - "Table": "unsharded" + "Query": "select * from unsharded into outfile 'x.txt' character set binary fields terminated by 'term' optionally enclosed by 'c' escaped by 'e' lines starting by 'a' terminated by '\\n'" }, "TablesUsed": [ "main.unsharded" @@ -2460,8 +2456,7 @@ "Sharded": false }, "FieldQuery": "select * from unsharded where 1 != 1", - "Query": "select * from unsharded into outfile s3 'out_file_name' character set binary format csv header fields terminated by 'term' optionally enclosed by 'c' escaped by 'e' lines starting by 'a' terminated by '\\n' manifest on overwrite off", - "Table": "unsharded" + "Query": "select * from unsharded into outfile s3 'out_file_name' character set binary format csv header fields terminated by 'term' optionally enclosed by 'c' escaped by 'e' lines starting by 'a' terminated by '\\n' manifest on overwrite off" }, "TablesUsed": [ "main.unsharded" @@ -2485,7 +2480,6 @@ }, "FieldQuery": "select t.title, `user`.col from (select 'hello' as title from dual where 1 != 1) as t left join `user` on `user`.id = 1 where 1 != 1", "Query": "select t.title, `user`.col from (select 'hello' as title from dual) as t left join `user` on `user`.id = 1", - "Table": "`user`, dual", "Values": [ "1" ], @@ -2508,7 +2502,6 @@ "OperatorType": "Join", "Variant": "LeftJoin", "JoinColumnIndexes": "L:0,R:0", - "TableName": "dual_`user`", "Inputs": [ { "OperatorType": "Route", @@ -2518,8 +2511,7 @@ "Sharded": false }, "FieldQuery": "select t.title from (select 'hello' as title from dual where 1 != 1) as t where 1 != 1", - "Query": "select t.title from (select 'hello' as title from dual) as t", - "Table": "dual" + "Query": "select t.title from (select 'hello' as title from dual) as t" }, { "OperatorType": "Route", @@ -2529,8 +2521,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user` where 1 != 1", - "Query": "select `user`.col from `user` where `user`.id <= 4", - "Table": "`user`" + "Query": "select `user`.col from `user` where `user`.id <= 4" } ] }, @@ -2554,7 +2545,6 @@ "JoinVars": { "t_title": 0 }, - "TableName": "dual_`user`", "Inputs": [ { "OperatorType": "Route", @@ -2564,8 +2554,7 @@ "Sharded": false }, "FieldQuery": "select t.title from (select 'hello' as title from dual where 1 != 1) as t where 1 != 1", - "Query": "select t.title from (select 'hello' as title from dual) as t", - "Table": "dual" + "Query": "select t.title from (select 'hello' as title from dual) as t" }, { "OperatorType": "Route", @@ -2575,8 +2564,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user` where 1 != 1", - "Query": "select `user`.col from `user` where `user`.col = :t_title /* VARCHAR */ and `user`.id <= 4", - "Table": "`user`" + "Query": "select `user`.col from `user` where `user`.col = :t_title /* VARCHAR */ and `user`.id <= 4" } ] }, @@ -2601,8 +2589,7 @@ "Sharded": true }, "FieldQuery": "select t.title, `user`.col from `user` left join (select 'hello' as title from dual where 1 != 1) as t on `user`.id <= 4 where 1 != 1", - "Query": "select t.title, `user`.col from `user` left join (select 'hello' as title from dual) as t on `user`.id <= 4", - "Table": "`user`, dual" + "Query": "select t.title, `user`.col from `user` left join (select 'hello' as title from dual) as t on `user`.id <= 4" }, "TablesUsed": [ "main.dual", @@ -2626,7 +2613,6 @@ }, "FieldQuery": "select t.title, `user`.col from (select 'hello' as title from dual where 1 != 1) as t left join `user` on `user`.id = 1 where 1 != 1", "Query": "select t.title, `user`.col from (select 'hello' as title from dual) as t left join `user` on `user`.id = 1", - "Table": "`user`, dual", "Values": [ "1" ], @@ -2649,7 +2635,6 @@ "OperatorType": "Join", "Variant": "LeftJoin", "JoinColumnIndexes": "L:0,R:0", - "TableName": "dual_`user`", "Inputs": [ { "OperatorType": "Route", @@ -2659,8 +2644,7 @@ "Sharded": false }, "FieldQuery": "select t.title from (select 'hello' as title from dual where 1 != 1) as t where 1 != 1", - "Query": "select t.title from (select 'hello' as title from dual) as t", - "Table": "dual" + "Query": "select t.title from (select 'hello' as title from dual) as t" }, { "OperatorType": "Route", @@ -2670,8 +2654,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user` where 1 != 1", - "Query": "select `user`.col from `user` where `user`.id >= 4", - "Table": "`user`" + "Query": "select `user`.col from `user` where `user`.id >= 4" } ] }, @@ -2715,7 +2698,6 @@ }, "FieldQuery": "select (select u.id from `user` as u where 1 != 1), a.id from `user` as a where 1 != 1", "Query": "select (select u.id from `user` as u where u.id = 1), a.id from `user` as a where a.id = 1", - "Table": "`user`", "Values": [ "1" ], @@ -2737,7 +2719,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "R:0,R:1", - "TableName": "unsharded_`user`, user_extra", "Inputs": [ { "OperatorType": "Route", @@ -2747,8 +2728,7 @@ "Sharded": false }, "FieldQuery": "select 1 from unsharded where 1 != 1", - "Query": "select 1 from unsharded", - "Table": "unsharded" + "Query": "select 1 from unsharded" }, { "OperatorType": "Route", @@ -2758,8 +2738,7 @@ "Sharded": true }, "FieldQuery": "select t.id, s.id from `user` as t, user_extra as s where 1 != 1", - "Query": "select t.id, s.id from `user` as t, user_extra as s where t.id = s.user_id", - "Table": "`user`, user_extra" + "Query": "select t.id, s.id from `user` as t, user_extra as s where t.id = s.user_id" } ] }, @@ -2809,8 +2788,7 @@ "Sharded": true }, "FieldQuery": "select 42, id from dual, `user` where 1 != 1", - "Query": "select 42, id from dual, `user`", - "Table": "`user`, dual" + "Query": "select 42, id from dual, `user`" }, "TablesUsed": [ "main.dual", @@ -2830,7 +2808,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "UncorrelatedSubquery", @@ -2852,8 +2829,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user` limit 1", - "Table": "`user`" + "Query": "select col from `user` limit 1" } ] }, @@ -2866,8 +2842,7 @@ "Sharded": true }, "FieldQuery": "select t.a from (select :__sq1 /* INT16 */ as a from `user` where 1 != 1) as t where 1 != 1", - "Query": "select t.a from (select :__sq1 /* INT16 */ as a from `user`) as t", - "Table": "`user`" + "Query": "select t.a from (select :__sq1 /* INT16 */ as a from `user`) as t" } ] }, @@ -2879,8 +2854,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra", - "Table": "user_extra" + "Query": "select 1 from user_extra" } ] }, @@ -2902,7 +2876,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "UncorrelatedSubquery", @@ -2924,8 +2897,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user` limit 1", - "Table": "`user`" + "Query": "select col from `user` limit 1" } ] }, @@ -2938,8 +2910,7 @@ "Sharded": true }, "FieldQuery": "select :__sq1 /* INT16 */ as a from `user` where 1 != 1", - "Query": "select :__sq1 /* INT16 */ as a from `user`", - "Table": "`user`" + "Query": "select :__sq1 /* INT16 */ as a from `user`" } ] }, @@ -2951,8 +2922,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra", - "Table": "user_extra" + "Query": "select 1 from user_extra" } ] }, @@ -3000,7 +2970,6 @@ "JoinVars": { "user_id": 0 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -3010,8 +2979,7 @@ "Sharded": true }, "FieldQuery": "select `user`.id from `user` where 1 != 1", - "Query": "select `user`.id from `user`", - "Table": "`user`" + "Query": "select `user`.id from `user`" }, { "OperatorType": "Route", @@ -3021,8 +2989,7 @@ "Sharded": true }, "FieldQuery": "select :user_id * user_id as amount from user_extra where 1 != 1", - "Query": "select :user_id * user_id as amount from user_extra", - "Table": "user_extra" + "Query": "select :user_id * user_id as amount from user_extra" } ] }, @@ -3047,7 +3014,6 @@ "JoinVars": { "user_id": 0 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -3057,8 +3023,7 @@ "Sharded": true }, "FieldQuery": "select `user`.id from `user` where 1 != 1", - "Query": "select `user`.id from `user`", - "Table": "`user`" + "Query": "select `user`.id from `user`" }, { "OperatorType": "Route", @@ -3068,8 +3033,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.user_id from user_extra where 1 != 1", - "Query": "select user_extra.user_id from user_extra where user_extra.foo = :user_id", - "Table": "user_extra" + "Query": "select user_extra.user_id from user_extra where user_extra.foo = :user_id" } ] }, @@ -3131,8 +3095,7 @@ "Sharded": true }, "FieldQuery": "select sum(col) from `user` where 1 != 1", - "Query": "select sum(col) from `user`", - "Table": "`user`" + "Query": "select sum(col) from `user`" } ] }, @@ -3145,8 +3108,7 @@ "Sharded": true }, "FieldQuery": "select CAST(:__sq1 AS DECIMAL(0, 0)) as `(select sum(col) from ``user``)` from user_extra where 1 != 1", - "Query": "select CAST(:__sq1 AS DECIMAL(0, 0)) as `(select sum(col) from ``user``)` from user_extra", - "Table": "user_extra" + "Query": "select CAST(:__sq1 AS DECIMAL(0, 0)) as `(select sum(col) from ``user``)` from user_extra" } ] }, @@ -3172,8 +3134,7 @@ "Sharded": true }, "FieldQuery": "select `user`.id, user_extra.user_id from `user` straight_join user_extra on `user`.id = user_extra.user_id where 1 != 1", - "Query": "select `user`.id, user_extra.user_id from `user` straight_join user_extra on `user`.id = user_extra.user_id", - "Table": "`user`, user_extra" + "Query": "select `user`.id, user_extra.user_id from `user` straight_join user_extra on `user`.id = user_extra.user_id" }, "TablesUsed": [ "user.user", @@ -3201,7 +3162,6 @@ "JoinVars": { "user_id": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "InputName": "Outer", @@ -3212,8 +3172,7 @@ "Sharded": true }, "FieldQuery": "select col, `user`.id from `user` where 1 != 1", - "Query": "select col, `user`.id from `user`", - "Table": "`user`" + "Query": "select col, `user`.id from `user`" }, { "InputName": "SubQuery", @@ -3225,7 +3184,6 @@ }, "FieldQuery": "select 1 from user_extra where 1 != 1", "Query": "select 1 from user_extra where user_id = 3 and user_id < :user_id limit 1", - "Table": "user_extra", "Values": [ "3" ], @@ -3261,7 +3219,6 @@ "JoinVars": { "user_id": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "InputName": "Outer", @@ -3273,8 +3230,7 @@ }, "FieldQuery": "select col, `user`.id from `user` where 1 != 1", "OrderBy": "0 ASC", - "Query": "select col, `user`.id from `user` order by `user`.col asc", - "Table": "`user`" + "Query": "select col, `user`.id from `user` order by `user`.col asc" }, { "InputName": "SubQuery", @@ -3286,7 +3242,6 @@ }, "FieldQuery": "select 1 from user_extra where 1 != 1", "Query": "select 1 from user_extra where user_id = 3 and user_id < :user_id limit 1", - "Table": "user_extra", "Values": [ "3" ], @@ -3317,7 +3272,6 @@ "JoinVars": { "u1_col": 1 }, - "TableName": "`user`_`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -3327,15 +3281,13 @@ "Sharded": true }, "FieldQuery": "select 1, u1.col from `user` as u1 where 1 != 1", - "Query": "select 1, u1.col from `user` as u1", - "Table": "`user`" + "Query": "select 1, u1.col from `user` as u1" }, { "OperatorType": "SemiJoin", "JoinVars": { "u2_col": 0 }, - "TableName": "`user`_user_extra", "Inputs": [ { "InputName": "Outer", @@ -3346,8 +3298,7 @@ "Sharded": true }, "FieldQuery": "select u2.col from `user` as u2 where 1 != 1", - "Query": "select u2.col from `user` as u2", - "Table": "`user`" + "Query": "select u2.col from `user` as u2" }, { "InputName": "SubQuery", @@ -3362,8 +3313,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra as ue where 1 != 1", - "Query": "select 1 from user_extra as ue where ue.col = :u1_col /* INT16 */ and ue.col = :u2_col /* INT16 */ limit 1", - "Table": "user_extra" + "Query": "select 1 from user_extra as ue where ue.col = :u1_col /* INT16 */ and ue.col = :u2_col /* INT16 */ limit 1" } ] } @@ -3394,7 +3344,6 @@ "JoinVars": { "u_col": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "InputName": "Outer", @@ -3405,8 +3354,7 @@ "Sharded": true }, "FieldQuery": "select 1, u.col from `user` as u where 1 != 1", - "Query": "select 1, u.col from `user` as u", - "Table": "`user`" + "Query": "select 1, u.col from `user` as u" }, { "InputName": "SubQuery", @@ -3421,8 +3369,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra as ue where 1 != 1", - "Query": "select 1 from user_extra as ue where ue.col = :u_col /* INT16 */ and ue.col2 = :u_col /* INT16 */ limit 1", - "Table": "user_extra" + "Query": "select 1 from user_extra as ue where ue.col = :u_col /* INT16 */ and ue.col2 = :u_col /* INT16 */ limit 1" } ] } @@ -3453,7 +3400,6 @@ }, "FieldQuery": "select music.id from music, `user` where 1 != 1", "Query": "select music.id from music, `user` where music.user_id = 5 and music.user_id = `user`.id and music.id = (select max(m2.id) from music as m2 where m2.user_id = `user`.id)", - "Table": "`user`, music", "Values": [ "5" ], @@ -3480,8 +3426,7 @@ "Sharded": true }, "FieldQuery": "select 0 from `user` as u, user_extra as s, music as m where 1 != 1", - "Query": "select 0 from `user` as u, user_extra as s, music as m where u.id = s.user_id and m.user_id = u.id and (s.foo or m.bar)", - "Table": "`user`, music, user_extra" + "Query": "select 0 from `user` as u, user_extra as s, music as m where u.id = s.user_id and m.user_id = u.id and (s.foo or m.bar)" }, "TablesUsed": [ "user.music", @@ -3509,8 +3454,7 @@ "Sharded": true }, "FieldQuery": "select id as `found` from `user` where 1 != 1", - "Query": "select id as `found` from `user`", - "Table": "`user`" + "Query": "select id as `found` from `user`" }, { "OperatorType": "Route", @@ -3520,8 +3464,7 @@ "Sharded": false }, "FieldQuery": "select id from unsharded where 1 != 1", - "Query": "select id from unsharded", - "Table": "unsharded" + "Query": "select id from unsharded" } ] }, @@ -3546,7 +3489,6 @@ "user_extra_col": 0, "user_extra_id": 1 }, - "TableName": "user_extra_`user`", "Inputs": [ { "OperatorType": "Route", @@ -3556,8 +3498,7 @@ "Sharded": true }, "FieldQuery": "select user_extra.col, user_extra.id from user_extra where 1 != 1", - "Query": "select user_extra.col, user_extra.id from user_extra", - "Table": "user_extra" + "Query": "select user_extra.col, user_extra.id from user_extra" }, { "OperatorType": "Route", @@ -3568,7 +3509,6 @@ }, "FieldQuery": "select :user_extra_col /* INT16 */ + `user`.col as `user_extra.col + ``user``.col` from `user` where 1 != 1", "Query": "select :user_extra_col /* INT16 */ + `user`.col as `user_extra.col + ``user``.col` from `user` where `user`.id = :user_extra_id", - "Table": "`user`", "Values": [ ":user_extra_id" ], @@ -3598,8 +3538,7 @@ "Sharded": false }, "FieldQuery": "select 1 from (select col from unsharded where 1 != 1) as f left join unsharded as u on f.col = u.id where 1 != 1", - "Query": "select 1 from (select col from unsharded order by unsharded.col1 desc limit 0, 12) as f left join unsharded as u on f.col = u.id", - "Table": "unsharded" + "Query": "select 1 from (select col from unsharded order by unsharded.col1 desc limit 0, 12) as f left join unsharded as u on f.col = u.id" }, "TablesUsed": [ "main.unsharded" @@ -3622,8 +3561,7 @@ "Sharded": false }, "FieldQuery": "select 1 from (select col, count(*) as a from unsharded where 1 != 1 group by col) as f left join unsharded as u on f.col = u.id where 1 != 1", - "Query": "select 1 from (select col, count(*) as a from unsharded group by col having a > 0 limit 0, 12) as f left join unsharded as u on f.col = u.id", - "Table": "unsharded" + "Query": "select 1 from (select col, count(*) as a from unsharded group by col having a > 0 limit 0, 12) as f left join unsharded as u on f.col = u.id" }, "TablesUsed": [ "main.unsharded" @@ -3646,8 +3584,7 @@ "Sharded": true }, "FieldQuery": "select `user`.id, trim(leading 'x' from `user`.`name`) from `user` where 1 != 1", - "Query": "select `user`.id, trim(leading 'x' from `user`.`name`) from `user`", - "Table": "`user`" + "Query": "select `user`.id, trim(leading 'x' from `user`.`name`) from `user`" }, "TablesUsed": [ "user.user" @@ -3670,8 +3607,7 @@ "Sharded": true }, "FieldQuery": "select jcol, json_storage_size(jcol), json_storage_free(jcol), json_pretty(jcol) from `user` where 1 != 1", - "Query": "select jcol, json_storage_size(jcol), json_storage_free(jcol), json_pretty(jcol) from `user`", - "Table": "`user`" + "Query": "select jcol, json_storage_size(jcol), json_storage_free(jcol), json_pretty(jcol) from `user`" }, "TablesUsed": [ "user.user" @@ -3696,8 +3632,7 @@ "FieldQuery": "select 1 from dual where 1 != 1", "Query": "select 1 from dual where exists (select 1 from information_schema.`TABLES` where `TABLES`.`TABLE_NAME` = :TABLES_TABLE_NAME /* VARCHAR */ and `TABLES`.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */)", "SysTableTableName": "[TABLES_TABLE_NAME:'proc']", - "SysTableTableSchema": "['mysql']", - "Table": "dual" + "SysTableTableSchema": "['mysql']" }, "TablesUsed": [ "main.dual" @@ -3719,8 +3654,7 @@ "Sharded": false }, "FieldQuery": "select json_quote('null'), json_quote('\"null\"'), json_object(BIN(1), 2, 'abc', ASCII(4)), json_array(1, 'abc', null, true, curtime()) from dual where 1 != 1", - "Query": "select json_quote('null'), json_quote('\"null\"'), json_object(BIN(1), 2, 'abc', ASCII(4)), json_array(1, 'abc', null, true, curtime()) from dual", - "Table": "dual" + "Query": "select json_quote('null'), json_quote('\"null\"'), json_object(BIN(1), 2, 'abc', ASCII(4)), json_array(1, 'abc', null, true, curtime()) from dual" }, "TablesUsed": [ "main.dual" @@ -3755,8 +3689,7 @@ }, "FieldQuery": "select id, weight_string(id) from `user` where 1 != 1", "OrderBy": "(0|1) ASC", - "Query": "select id, weight_string(id) from `user` order by `user`.id asc limit 1", - "Table": "`user`" + "Query": "select id, weight_string(id) from `user` order by `user`.id asc limit 1" } ] }, @@ -3769,8 +3702,7 @@ "Sharded": true }, "FieldQuery": "select :__sq1 as `(select id from ``user`` order by ``user``.id asc limit 1)` from user_extra where 1 != 1", - "Query": "select :__sq1 as `(select id from ``user`` order by ``user``.id asc limit 1)` from user_extra", - "Table": "user_extra" + "Query": "select :__sq1 as `(select id from ``user`` order by ``user``.id asc limit 1)` from user_extra" } ] }, @@ -3797,7 +3729,6 @@ }, "FieldQuery": "select exists (select 1 from dual where 1 != 1) from `user` where 1 != 1", "Query": "select exists (select 1 from dual) from `user` where id = 5", - "Table": "`user`", "Values": [ "5" ], @@ -3824,8 +3755,7 @@ "Sharded": false }, "FieldQuery": "select json_schema_valid('{\"type\":\"string\",\"pattern\":\"(\"}', '\"abc\"'), json_schema_validation_report('{\"type\":\"string\",\"pattern\":\"(\"}', '\"abc\"') from dual where 1 != 1", - "Query": "select json_schema_valid('{\"type\":\"string\",\"pattern\":\"(\"}', '\"abc\"'), json_schema_validation_report('{\"type\":\"string\",\"pattern\":\"(\"}', '\"abc\"') from dual", - "Table": "dual" + "Query": "select json_schema_valid('{\"type\":\"string\",\"pattern\":\"(\"}', '\"abc\"'), json_schema_validation_report('{\"type\":\"string\",\"pattern\":\"(\"}', '\"abc\"') from dual" }, "TablesUsed": [ "main.dual" @@ -3847,8 +3777,7 @@ "Sharded": false }, "FieldQuery": "select json_contains('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}', '1'), json_contains_path('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}', 'one', '$.a', '$.e'), json_extract('[10, 20, [30, 40]]', '$[1]'), json_unquote(json_extract('[\"a\",\"b\"]', '$[1]')), json_keys('{\"a\": 1, \"b\": {\"c\": 30}}'), json_overlaps('[1,3,5,7]', '[2,5,7]'), json_search('[\"abc\"]', 'one', 'abc'), json_value('{\"fname\": \"Joe\", \"lname\": \"Palmer\"}', '$.fname'), json_array(4, 5) member of ('[[3,4],[4,5]]') from dual where 1 != 1", - "Query": "select json_contains('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}', '1'), json_contains_path('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}', 'one', '$.a', '$.e'), json_extract('[10, 20, [30, 40]]', '$[1]'), json_unquote(json_extract('[\"a\",\"b\"]', '$[1]')), json_keys('{\"a\": 1, \"b\": {\"c\": 30}}'), json_overlaps('[1,3,5,7]', '[2,5,7]'), json_search('[\"abc\"]', 'one', 'abc'), json_value('{\"fname\": \"Joe\", \"lname\": \"Palmer\"}', '$.fname'), json_array(4, 5) member of ('[[3,4],[4,5]]') from dual", - "Table": "dual" + "Query": "select json_contains('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}', '1'), json_contains_path('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}', 'one', '$.a', '$.e'), json_extract('[10, 20, [30, 40]]', '$[1]'), json_unquote(json_extract('[\"a\",\"b\"]', '$[1]')), json_keys('{\"a\": 1, \"b\": {\"c\": 30}}'), json_overlaps('[1,3,5,7]', '[2,5,7]'), json_search('[\"abc\"]', 'one', 'abc'), json_value('{\"fname\": \"Joe\", \"lname\": \"Palmer\"}', '$.fname'), json_array(4, 5) member of ('[[3,4],[4,5]]') from dual" }, "TablesUsed": [ "main.dual" @@ -3870,8 +3799,7 @@ "Sharded": true }, "FieldQuery": "select json_extract(a, '$[4]'), json_unquote(json_extract(a, '$[3]')) from `user` where 1 != 1", - "Query": "select json_extract(a, '$[4]'), json_unquote(json_extract(a, '$[3]')) from `user`", - "Table": "`user`" + "Query": "select json_extract(a, '$[4]'), json_unquote(json_extract(a, '$[3]')) from `user`" }, "TablesUsed": [ "user.user" @@ -3894,8 +3822,7 @@ "Sharded": true }, "FieldQuery": "select u.id, u.age from `user` as u where 1 != 1 group by u.id", - "Query": "select u.id, u.age from `user` as u group by u.id", - "Table": "`user`" + "Query": "select u.id, u.age from `user` as u group by u.id" }, "TablesUsed": [ "user.user" @@ -3918,8 +3845,7 @@ "Sharded": false }, "FieldQuery": "select json_depth('{}'), json_length('{\"a\": 1, \"b\": {\"c\": 30}}', '$.b'), json_type(json_extract('{\"a\": [10, true]}', '$.a')), json_valid('{\"a\": 1}') from dual where 1 != 1", - "Query": "select json_depth('{}'), json_length('{\"a\": 1, \"b\": {\"c\": 30}}', '$.b'), json_type(json_extract('{\"a\": [10, true]}', '$.a')), json_valid('{\"a\": 1}') from dual", - "Table": "dual" + "Query": "select json_depth('{}'), json_length('{\"a\": 1, \"b\": {\"c\": 30}}', '$.b'), json_type(json_extract('{\"a\": [10, true]}', '$.a')), json_valid('{\"a\": 1}') from dual" }, "TablesUsed": [ "main.dual" @@ -3941,8 +3867,7 @@ "Sharded": false }, "FieldQuery": "select json_array_append('{\"a\": 1}', '$', 'z'), json_array_insert('[\"a\", {\"b\": [1, 2]}, [3, 4]]', '$[0]', 'x', '$[2][1]', 'y'), json_insert('{ \"a\": 1, \"b\": [2, 3]}', '$.a', 10, '$.c', cast('[true, false]' as JSON)) from dual where 1 != 1", - "Query": "select json_array_append('{\"a\": 1}', '$', 'z'), json_array_insert('[\"a\", {\"b\": [1, 2]}, [3, 4]]', '$[0]', 'x', '$[2][1]', 'y'), json_insert('{ \"a\": 1, \"b\": [2, 3]}', '$.a', 10, '$.c', cast('[true, false]' as JSON)) from dual", - "Table": "dual" + "Query": "select json_array_append('{\"a\": 1}', '$', 'z'), json_array_insert('[\"a\", {\"b\": [1, 2]}, [3, 4]]', '$[0]', 'x', '$[2][1]', 'y'), json_insert('{ \"a\": 1, \"b\": [2, 3]}', '$.a', 10, '$.c', cast('[true, false]' as JSON)) from dual" }, "TablesUsed": [ "main.dual" @@ -3964,8 +3889,7 @@ "Sharded": false }, "FieldQuery": "select json_merge('[1, 2]', '[true, false]'), json_merge_patch('{\"name\": \"x\"}', '{\"id\": 47}'), json_merge_preserve('[1, 2]', '{\"id\": 47}') from dual where 1 != 1", - "Query": "select json_merge('[1, 2]', '[true, false]'), json_merge_patch('{\"name\": \"x\"}', '{\"id\": 47}'), json_merge_preserve('[1, 2]', '{\"id\": 47}') from dual", - "Table": "dual" + "Query": "select json_merge('[1, 2]', '[true, false]'), json_merge_patch('{\"name\": \"x\"}', '{\"id\": 47}'), json_merge_preserve('[1, 2]', '{\"id\": 47}') from dual" }, "TablesUsed": [ "main.dual" @@ -3987,8 +3911,7 @@ "Sharded": false }, "FieldQuery": "select json_remove('[1, [2, 3], 4]', '$[1]'), json_replace('{ \"a\": 1, \"b\": [2, 3]}', '$.a', 10, '$.c', '[true, false]'), json_set('{ \"a\": 1, \"b\": [2, 3]}', '$.a', 10, '$.c', '[true, false]'), json_unquote('\"abc\"') from dual where 1 != 1", - "Query": "select json_remove('[1, [2, 3], 4]', '$[1]'), json_replace('{ \"a\": 1, \"b\": [2, 3]}', '$.a', 10, '$.c', '[true, false]'), json_set('{ \"a\": 1, \"b\": [2, 3]}', '$.a', 10, '$.c', '[true, false]'), json_unquote('\"abc\"') from dual", - "Table": "dual" + "Query": "select json_remove('[1, [2, 3], 4]', '$[1]'), json_replace('{ \"a\": 1, \"b\": [2, 3]}', '$.a', 10, '$.c', '[true, false]'), json_set('{ \"a\": 1, \"b\": [2, 3]}', '$.a', 10, '$.c', '[true, false]'), json_unquote('\"abc\"') from dual" }, "TablesUsed": [ "main.dual" @@ -4011,7 +3934,6 @@ }, "FieldQuery": "select exists (select 1 from `user` where 1 != 1) from dual where 1 != 1", "Query": "select exists (select 1 from `user` where id = 4) from dual", - "Table": "dual", "Values": [ "4" ], @@ -4047,8 +3969,7 @@ "Sharded": true }, "FieldQuery": "select 1 from `user` where 1 != 1", - "Query": "select 1 from `user`", - "Table": "`user`" + "Query": "select 1 from `user`" }, { "InputName": "Outer", @@ -4059,8 +3980,7 @@ "Sharded": false }, "FieldQuery": "select :__sq_has_values2 as `exists (select 1 from ``user``)` from dual where 1 != 1", - "Query": "select :__sq_has_values2 as `exists (select 1 from ``user``)` from dual", - "Table": "dual" + "Query": "select :__sq_has_values2 as `exists (select 1 from ``user``)` from dual" } ] }, @@ -4108,8 +4028,7 @@ "Sharded": true }, "FieldQuery": "select insert(tcol1, id, 3, tcol2) from `user` where 1 != 1", - "Query": "select insert(tcol1, id, 3, tcol2) from `user`", - "Table": "`user`" + "Query": "select insert(tcol1, id, 3, tcol2) from `user`" }, "TablesUsed": [ "user.user" @@ -4132,8 +4051,7 @@ "Sharded": false }, "FieldQuery": "select gtid_subset('3E11FA47-71CA-11E1-9E33-C80AA9429562:23', '3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57'), gtid_subtract('3E11FA47-71CA-11E1-9E33-C80AA9429562:23', '3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57') from dual where 1 != 1", - "Query": "select gtid_subset('3E11FA47-71CA-11E1-9E33-C80AA9429562:23', '3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57'), gtid_subtract('3E11FA47-71CA-11E1-9E33-C80AA9429562:23', '3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57') from dual", - "Table": "dual" + "Query": "select gtid_subset('3E11FA47-71CA-11E1-9E33-C80AA9429562:23', '3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57'), gtid_subtract('3E11FA47-71CA-11E1-9E33-C80AA9429562:23', '3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57') from dual" }, "TablesUsed": [ "main.dual" @@ -4154,7 +4072,6 @@ "JoinVars": { "user_col": 0 }, - "TableName": "`user`_user_extra, user_metadata", "Inputs": [ { "OperatorType": "Route", @@ -4164,8 +4081,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user` where 1 != 1", - "Query": "select `user`.col from `user` where `user`.textcol1 = 'alice@gmail.com'", - "Table": "`user`" + "Query": "select `user`.col from `user` where `user`.textcol1 = 'alice@gmail.com'" }, { "OperatorType": "Route", @@ -4175,8 +4091,7 @@ "Sharded": true }, "FieldQuery": "select user_metadata.user_id from user_extra, user_metadata where 1 != 1", - "Query": "select user_metadata.user_id from user_extra, user_metadata where user_extra.col = :user_col /* INT16 */ and user_extra.user_id = user_metadata.user_id", - "Table": "user_extra, user_metadata" + "Query": "select user_metadata.user_id from user_extra, user_metadata where user_extra.col = :user_col /* INT16 */ and user_extra.user_id = user_metadata.user_id" } ] }, @@ -4204,7 +4119,6 @@ }, "FieldQuery": "select `user`.id from `user`, music_extra, music where 1 != 1", "Query": "select `user`.id from `user`, music_extra, music where music.id = 456 and `user`.id = 123 and `user`.id = music_extra.user_id and music_extra.user_id = music.user_id", - "Table": "`user`, music, music_extra", "Values": [ "123" ], @@ -4253,7 +4167,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -4269,8 +4182,7 @@ "FieldQuery": "select id, `name`, weight_string(id) from `user` where 1 != 1", "OrderBy": "(0|2) ASC", "Query": "select id, `name`, weight_string(id) from `user` where `name` = 'aa' order by `user`.id asc limit 2", - "ResultColumns": 2, - "Table": "`user`" + "ResultColumns": 2 } ] } @@ -4302,7 +4214,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -4316,8 +4227,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from `user` where 1 != 1", - "Query": "select count(*) from `user` where `name` = 'aa'", - "Table": "`user`" + "Query": "select count(*) from `user` where `name` = 'aa'" } ] } @@ -4346,8 +4256,7 @@ "Sharded": true }, "FieldQuery": "select music.id from music, `user` where 1 != 1", - "Query": "select music.id from music, `user` where music.user_id in (null) and `user`.id = 5 and music.user_id = `user`.id", - "Table": "`user`, music" + "Query": "select music.id from music, `user` where music.user_id in (null) and `user`.id = 5 and music.user_id = `user`.id" }, "TablesUsed": [ "user.music", @@ -4371,7 +4280,6 @@ }, "FieldQuery": "select music.id from music where 1 != 1", "Query": "select music.id from music where music.user_id = 5 and music.id in (select music.id from music where music.user_id in (5))", - "Table": "music", "Values": [ "5" ], @@ -4399,7 +4307,6 @@ }, "FieldQuery": "select music.id from music where 1 != 1", "Query": "select music.id from music where music.id in (select music.id from music where music.user_id in (1, 2, 3))", - "Table": "music", "Values": [ "(1, 2, 3)" ], @@ -4426,7 +4333,6 @@ }, "FieldQuery": "select music.id from music where 1 != 1", "Query": "select music.id from music where music.id in (select id from (select music.id from music where music.user_id in (1, 2, 3)) as _inner)", - "Table": "music", "Values": [ "(1, 2, 3)" ], @@ -4453,7 +4359,6 @@ }, "FieldQuery": "select music.id from music where 1 != 1", "Query": "select music.id from music where music.user_id in ::__vals and music.id in (select music.id from music where music.foo = 'bar')", - "Table": "music", "Values": [ "(3, 4, 5)" ], @@ -4481,7 +4386,6 @@ }, "FieldQuery": "select music.id from music where 1 != 1", "Query": "select music.id from music where music.user_id = 5 and music.id in (select music.id from music where music.user_id in (1, 2, 3))", - "Table": "music", "Values": [ "5" ], @@ -4507,8 +4411,7 @@ "Sharded": true }, "FieldQuery": "select music.id from music where 1 != 1", - "Query": "select music.id from music where music.id in (select music.id from music where music.user_id in (1, 2, 3)) or music.user_id = 5", - "Table": "music" + "Query": "select music.id from music where music.id in (select music.id from music where music.user_id in (1, 2, 3)) or music.user_id = 5" }, "TablesUsed": [ "user.music" @@ -4530,8 +4433,7 @@ "Sharded": true }, "FieldQuery": "select music.id from music where 1 != 1", - "Query": "select music.id from music where music.user_id = 5 and music.id in (select music.id from music where music.user_id in (null))", - "Table": "music" + "Query": "select music.id from music where music.user_id = 5 and music.id in (select music.id from music where music.user_id in (null))" }, "TablesUsed": [ "user.music" @@ -4553,8 +4455,7 @@ "Sharded": true }, "FieldQuery": "select music.id from music where 1 != 1", - "Query": "select music.id from music where music.id in (select music.id from music where music.user_id in (null)) or music.user_id = 5", - "Table": "music" + "Query": "select music.id from music where music.id in (select music.id from music where music.user_id in (null)) or music.user_id = 5" }, "TablesUsed": [ "user.music" @@ -4576,8 +4477,7 @@ "Sharded": true }, "FieldQuery": "select music.id from music where 1 != 1", - "Query": "select music.id from music where music.id in (select music.id from music where music.genre = 'pop')", - "Table": "music" + "Query": "select music.id from music where music.id in (select music.id from music where music.genre = 'pop')" }, "TablesUsed": [ "user.music" @@ -4600,8 +4500,7 @@ "Sharded": true }, "FieldQuery": "select music.id from music where 1 != 1", - "Query": "select music.id from music where music.id in (select music.id from music where music.genre = 'pop' group by music.id)", - "Table": "music" + "Query": "select music.id from music where music.id in (select music.id from music where music.genre = 'pop' group by music.id)" }, "TablesUsed": [ "user.music" @@ -4640,8 +4539,7 @@ }, "FieldQuery": "select music.id, music.genre, weight_string(music.genre) from music where 1 != 1 group by music.genre, weight_string(music.genre)", "OrderBy": "(1|2) ASC", - "Query": "select music.id, music.genre, weight_string(music.genre) from music where music.genre = 'pop' group by music.genre, weight_string(music.genre) order by music.genre asc", - "Table": "music" + "Query": "select music.id, music.genre, weight_string(music.genre) from music where music.genre = 'pop' group by music.genre, weight_string(music.genre) order by music.genre asc" } ] }, @@ -4667,7 +4565,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -4681,8 +4578,7 @@ "Sharded": true }, "FieldQuery": "select music.id from music where 1 != 1", - "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals", - "Table": "music" + "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals" } ] } @@ -4722,8 +4618,7 @@ "Sharded": true }, "FieldQuery": "select music.id from music where 1 != 1", - "Query": "select music.id from music where music.genre = 'pop' limit 10", - "Table": "music" + "Query": "select music.id from music where music.genre = 'pop' limit 10" } ] }, @@ -4749,7 +4644,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -4763,8 +4657,7 @@ "Sharded": true }, "FieldQuery": "select music.id from music where 1 != 1", - "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals", - "Table": "music" + "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals" } ] } @@ -4780,75 +4673,22 @@ "comment": "Mergeable subquery with `MAX` aggregate and grouped by unique vindex", "query": "SELECT music.id FROM music WHERE music.id IN (SELECT MAX(music.id) FROM music WHERE music.user_id IN (5, 6) GROUP BY music.user_id)", "plan": { - "Type": "Complex", + "Type": "MultiShard", "QueryType": "SELECT", "Original": "SELECT music.id FROM music WHERE music.id IN (SELECT MAX(music.id) FROM music WHERE music.user_id IN (5, 6) GROUP BY music.user_id)", "Instructions": { - "OperatorType": "UncorrelatedSubquery", - "Variant": "PulloutIn", - "PulloutVars": [ - "__sq_has_values", - "__sq1" + "OperatorType": "Route", + "Variant": "IN", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "FieldQuery": "select music.id from music where 1 != 1", + "Query": "select music.id from music where music.id in (select max(music.id) from music where music.user_id in (5, 6) group by music.user_id)", + "Values": [ + "(5, 6)" ], - "Inputs": [ - { - "InputName": "SubQuery", - "OperatorType": "Route", - "Variant": "IN", - "Keyspace": { - "Name": "user", - "Sharded": true - }, - "FieldQuery": "select max(music.id) from music where 1 != 1 group by music.user_id", - "Query": "select max(music.id) from music where music.user_id in ::__vals group by music.user_id", - "Table": "music", - "Values": [ - "(5, 6)" - ], - "Vindex": "user_index" - }, - { - "InputName": "Outer", - "OperatorType": "VindexLookup", - "Variant": "IN", - "Keyspace": { - "Name": "user", - "Sharded": true - }, - "Values": [ - "::__sq1" - ], - "Vindex": "music_user_map", - "Inputs": [ - { - "OperatorType": "Route", - "Variant": "IN", - "Keyspace": { - "Name": "user", - "Sharded": true - }, - "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", - "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", - "Values": [ - "::name" - ], - "Vindex": "user_index" - }, - { - "OperatorType": "Route", - "Variant": "ByDestination", - "Keyspace": { - "Name": "user", - "Sharded": true - }, - "FieldQuery": "select music.id from music where 1 != 1", - "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals", - "Table": "music" - } - ] - } - ] + "Vindex": "user_index" }, "TablesUsed": [ "user.music" @@ -4886,7 +4726,6 @@ }, "FieldQuery": "select max(music.id), weight_string(max(music.id)) from music where 1 != 1", "Query": "select max(music.id), weight_string(max(music.id)) from music where music.user_id in ::__vals", - "Table": "music", "Values": [ "(5, 6)" ], @@ -4916,7 +4755,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -4930,8 +4768,7 @@ "Sharded": true }, "FieldQuery": "select music.id from music where 1 != 1", - "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals", - "Table": "music" + "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals" } ] } @@ -4946,75 +4783,22 @@ "comment": "Mergeable subquery with `MAX` aggregate with `EqualUnique` route operator", "query": "SELECT music.id FROM music WHERE music.id IN (SELECT MAX(music.id) FROM music WHERE music.user_id = 5)", "plan": { - "Type": "Complex", + "Type": "Passthrough", "QueryType": "SELECT", "Original": "SELECT music.id FROM music WHERE music.id IN (SELECT MAX(music.id) FROM music WHERE music.user_id = 5)", "Instructions": { - "OperatorType": "UncorrelatedSubquery", - "Variant": "PulloutIn", - "PulloutVars": [ - "__sq_has_values", - "__sq1" + "OperatorType": "Route", + "Variant": "EqualUnique", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "FieldQuery": "select music.id from music where 1 != 1", + "Query": "select music.id from music where music.id in (select max(music.id) from music where music.user_id = 5)", + "Values": [ + "5" ], - "Inputs": [ - { - "InputName": "SubQuery", - "OperatorType": "Route", - "Variant": "EqualUnique", - "Keyspace": { - "Name": "user", - "Sharded": true - }, - "FieldQuery": "select max(music.id) from music where 1 != 1", - "Query": "select max(music.id) from music where music.user_id = 5", - "Table": "music", - "Values": [ - "5" - ], - "Vindex": "user_index" - }, - { - "InputName": "Outer", - "OperatorType": "VindexLookup", - "Variant": "IN", - "Keyspace": { - "Name": "user", - "Sharded": true - }, - "Values": [ - "::__sq1" - ], - "Vindex": "music_user_map", - "Inputs": [ - { - "OperatorType": "Route", - "Variant": "IN", - "Keyspace": { - "Name": "user", - "Sharded": true - }, - "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", - "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", - "Values": [ - "::name" - ], - "Vindex": "user_index" - }, - { - "OperatorType": "Route", - "Variant": "ByDestination", - "Keyspace": { - "Name": "user", - "Sharded": true - }, - "FieldQuery": "select music.id from music where 1 != 1", - "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals", - "Table": "music" - } - ] - } - ] + "Vindex": "user_index" }, "TablesUsed": [ "user.music" @@ -5025,75 +4809,22 @@ "comment": "Mergeable subquery with `LIMIT` due to `EqualUnique` route", "query": "SELECT music.id FROM music WHERE music.id IN (SELECT MAX(music.id) FROM music WHERE music.user_id = 5 LIMIT 10)", "plan": { - "Type": "Complex", + "Type": "Passthrough", "QueryType": "SELECT", "Original": "SELECT music.id FROM music WHERE music.id IN (SELECT MAX(music.id) FROM music WHERE music.user_id = 5 LIMIT 10)", "Instructions": { - "OperatorType": "UncorrelatedSubquery", - "Variant": "PulloutIn", - "PulloutVars": [ - "__sq_has_values", - "__sq1" + "OperatorType": "Route", + "Variant": "EqualUnique", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "FieldQuery": "select music.id from music where 1 != 1", + "Query": "select music.id from music where music.id in (select max(music.id) from music where music.user_id = 5 limit 10)", + "Values": [ + "5" ], - "Inputs": [ - { - "InputName": "SubQuery", - "OperatorType": "Route", - "Variant": "EqualUnique", - "Keyspace": { - "Name": "user", - "Sharded": true - }, - "FieldQuery": "select max(music.id) from music where 1 != 1", - "Query": "select max(music.id) from music where music.user_id = 5 limit 10", - "Table": "music", - "Values": [ - "5" - ], - "Vindex": "user_index" - }, - { - "InputName": "Outer", - "OperatorType": "VindexLookup", - "Variant": "IN", - "Keyspace": { - "Name": "user", - "Sharded": true - }, - "Values": [ - "::__sq1" - ], - "Vindex": "music_user_map", - "Inputs": [ - { - "OperatorType": "Route", - "Variant": "IN", - "Keyspace": { - "Name": "user", - "Sharded": true - }, - "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", - "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", - "Values": [ - "::name" - ], - "Vindex": "user_index" - }, - { - "OperatorType": "Route", - "Variant": "ByDestination", - "Keyspace": { - "Name": "user", - "Sharded": true - }, - "FieldQuery": "select music.id from music where 1 != 1", - "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals", - "Table": "music" - } - ] - } - ] + "Vindex": "user_index" }, "TablesUsed": [ "user.music" @@ -5117,7 +4848,6 @@ }, "FieldQuery": "select music.id from music where 1 != 1", "Query": "select music.id from music where music.id in (select id from (select id from (select music.id from music where music.user_id = 5 limit 10) as subquery_for_limit) as subquery_for_limit)", - "Table": "music", "Values": [ "5" ], @@ -5144,7 +4874,6 @@ }, "FieldQuery": "select music.id from music where 1 != 1", "Query": "select music.id from music where music.id in (select id from (select id from (select music.id from music where music.user_id in (5) limit 10) as subquery_for_limit) as subquery_for_limit)", - "Table": "music", "Values": [ "5" ], @@ -5176,8 +4905,7 @@ }, "FetchLastInsertID": true, "FieldQuery": "select last_insert_id(5) from `user` where 1 != 1", - "Query": "select last_insert_id(5) from `user` limit 12", - "Table": "`user`" + "Query": "select last_insert_id(5) from `user` limit 12" } ] }, @@ -5215,7 +4943,6 @@ }, "FieldQuery": "select id from (select id from (select music.id from music where 1 != 1) as subquery_for_limit where 1 != 1) as subquery_for_limit where 1 != 1", "Query": "select id from (select id from (select music.id from music where music.user_id in ::__vals) as subquery_for_limit limit 10) as subquery_for_limit", - "Table": "music", "Values": [ "(5, 6)" ], @@ -5245,7 +4972,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -5259,8 +4985,7 @@ "Sharded": true }, "FieldQuery": "select music.id from music where 1 != 1", - "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals", - "Table": "music" + "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals" } ] } @@ -5300,8 +5025,7 @@ "Sharded": true }, "FieldQuery": "select id from (select id from (select music.id from music where 1 != 1) as subquery_for_limit where 1 != 1) as subquery_for_limit where 1 != 1", - "Query": "select id from (select id from (select music.id from music) as subquery_for_limit limit 10) as subquery_for_limit", - "Table": "music" + "Query": "select id from (select id from (select music.id from music) as subquery_for_limit limit 10) as subquery_for_limit" } ] }, @@ -5327,7 +5051,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -5341,8 +5064,7 @@ "Sharded": true }, "FieldQuery": "select music.id from music where 1 != 1", - "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals", - "Table": "music" + "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals" } ] } @@ -5369,8 +5091,7 @@ "Sharded": true }, "FieldQuery": "select music.id from music where 1 != 1", - "Query": "select music.id from music where music.id in (select music.id from music where music.user_id in (null))", - "Table": "music" + "Query": "select music.id from music where music.id in (select music.id from music where music.user_id in (null))" }, "TablesUsed": [ "user.music" @@ -5392,8 +5113,7 @@ "Sharded": true }, "FieldQuery": "select music.id from music where 1 != 1", - "Query": "select music.id from music where music.user_id = 5 and music.id in (select music.id from music where music.user_id in (null))", - "Table": "music" + "Query": "select music.id from music where music.user_id = 5 and music.id in (select music.id from music where music.user_id in (null))" }, "TablesUsed": [ "user.music" @@ -5415,8 +5135,7 @@ "Sharded": true }, "FieldQuery": "select music.id from music where 1 != 1", - "Query": "select music.id from music where music.id in (select music.id from music where music.user_id in (null)) or music.user_id = 5", - "Table": "music" + "Query": "select music.id from music where music.id in (select music.id from music where music.user_id in (null)) or music.user_id = 5" }, "TablesUsed": [ "user.music" @@ -5439,7 +5158,6 @@ }, "FieldQuery": "select music.id from (select max(id) as maxt from music where 1 != 1) as other, music where 1 != 1", "Query": "select music.id from (select max(id) as maxt from music where music.user_id = 5) as other, music where other.maxt = music.id", - "Table": "music", "Values": [ "5" ], @@ -5466,7 +5184,6 @@ }, "FieldQuery": "select music.id from (select max(id) as maxt from music where 1 != 1) as other, music where 1 != 1", "Query": "select music.id from (select max(id) as maxt from music where music.user_id = 5 and music.col not in (select col from `user` where `user`.id = 5)) as other, music where other.maxt = music.id", - "Table": "music", "Values": [ "5" ], @@ -5493,7 +5210,6 @@ }, "FieldQuery": "select music.id from (select id from music where 1 != 1) as other, music where 1 != 1", "Query": "select music.id from (select id from music where music.user_id = 5) as other, music where other.id = music.id", - "Table": "music", "Values": [ "5" ], @@ -5520,7 +5236,6 @@ }, "FieldQuery": "select music.id from (select id from music where 1 != 1) as other, music where 1 != 1", "Query": "select music.id from (select id from music where music.user_id in ::__vals) as other, music where other.id = music.id", - "Table": "music", "Values": [ "(5, 6, 7)" ], @@ -5545,7 +5260,6 @@ "JoinVars": { "ue_user_id": 0 }, - "TableName": "user_extra_`user`", "Inputs": [ { "OperatorType": "Limit", @@ -5559,8 +5273,7 @@ "Sharded": true }, "FieldQuery": "select ue.user_id from (select user_id from user_extra where 1 != 1) as ue where 1 != 1", - "Query": "select ue.user_id from (select user_id from user_extra) as ue limit 10", - "Table": "user_extra" + "Query": "select ue.user_id from (select user_id from user_extra) as ue limit 10" } ] }, @@ -5573,7 +5286,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where `user`.id = :ue_user_id", - "Table": "`user`", "Values": [ ":ue_user_id" ], @@ -5602,7 +5314,6 @@ "JoinVars": { "t_id": 1 }, - "TableName": "user_extra_`user`", "Inputs": [ { "OperatorType": "SimpleProjection", @@ -5623,8 +5334,7 @@ }, "FieldQuery": "select id, count(*) as b, req, weight_string(req), weight_string(id) from user_extra where 1 != 1 group by req, id, weight_string(req), weight_string(id)", "OrderBy": "(2|3) ASC, (0|4) ASC", - "Query": "select id, count(*) as b, req, weight_string(req), weight_string(id) from user_extra group by req, id, weight_string(req), weight_string(id) order by req asc, id asc", - "Table": "user_extra" + "Query": "select id, count(*) as b, req, weight_string(req), weight_string(id) from user_extra group by req, id, weight_string(req), weight_string(id) order by req asc, id asc" } ] } @@ -5639,7 +5349,6 @@ }, "FieldQuery": "select `user`.a from `user` where 1 != 1", "Query": "select `user`.a from `user` where `user`.id = :t_id", - "Table": "`user`", "Values": [ ":t_id" ], @@ -5670,7 +5379,6 @@ }, "FieldQuery": "select music.id from (select max(id) as maxt from music where 1 != 1) as other, music where 1 != 1", "Query": "select music.id from (select max(id) as maxt from music where music.user_id = 5) as other, music where other.maxt = music.id", - "Table": "music", "Values": [ "5" ], @@ -5696,8 +5404,7 @@ "Sharded": false }, "FieldQuery": "select 1 as x, (select x from dual where 1 != 1) from dual where 1 != 1", - "Query": "select 1 as x, (select x from dual) from dual", - "Table": "dual" + "Query": "select 1 as x, (select x from dual) from dual" }, "TablesUsed": [ "main.dual" @@ -5720,7 +5427,6 @@ }, "FieldQuery": "select * from `user` where 1 != 1", "Query": "select * from `user` where id = 1", - "Table": "`user`", "Values": [ "1" ], @@ -5747,7 +5453,6 @@ }, "FieldQuery": "select * from `user` where 1 != 1", "Query": "select * from `user` where id = 1", - "Table": "`user`", "Values": [ "1" ], @@ -5773,8 +5478,7 @@ "Sharded": false }, "FieldQuery": "select * from unsharded_a as t1 join (select trim((select max(`name`) from unsharded_a where 1 != 1)) as `name` from dual where 1 != 1) as t2 where 1 != 1", - "Query": "select * from unsharded_a as t1 join (select trim((select max(`name`) from unsharded_a)) as `name` from dual) as t2 where t1.`name` >= t2.`name` order by t1.`name` asc limit 1", - "Table": "dual, unsharded_a" + "Query": "select * from unsharded_a as t1 join (select trim((select max(`name`) from unsharded_a)) as `name` from dual) as t2 where t1.`name` >= t2.`name` order by t1.`name` asc limit 1" }, "TablesUsed": [ "main.dual", @@ -5799,7 +5503,6 @@ }, "FieldQuery": "select (select 1 from `user` as u1 join `user` as u2 on u1.id = u2.id and u1.id = u3.id where 1 != 1) as subquery from `user` as u3 where 1 != 1", "Query": "select (select 1 from `user` as u1 join `user` as u2 on u1.id = u2.id and u1.id = u3.id) as subquery from `user` as u3 where u3.id = 1", - "Table": "`user`", "Values": [ "1" ], @@ -5825,8 +5528,7 @@ "Sharded": false }, "FieldQuery": "select 1 from unsharded where 1 != 1", - "Query": "select 1 from unsharded where foo = any (select 1 from unsharded_a where foo = 1)", - "Table": "unsharded, unsharded_a" + "Query": "select 1 from unsharded where foo = any (select 1 from unsharded_a where foo = 1)" }, "TablesUsed": [ "main.unsharded", @@ -5850,8 +5552,7 @@ "Sharded": false }, "FieldQuery": "select 1 from unsharded where 1 != 1", - "Query": "select 1 from unsharded where foo = all (select 1 from unsharded_a where foo = 1)", - "Table": "unsharded, unsharded_a" + "Query": "select 1 from unsharded where foo = all (select 1 from unsharded_a where foo = 1)" }, "TablesUsed": [ "main.unsharded", @@ -5876,8 +5577,7 @@ }, "FetchLastInsertID": true, "FieldQuery": "select last_insert_id(id) from `user` where 1 != 1", - "Query": "select last_insert_id(id) from `user`", - "Table": "`user`" + "Query": "select last_insert_id(id) from `user`" }, "TablesUsed": [ "user.user" @@ -5899,8 +5599,7 @@ "Sharded": true }, "FieldQuery": "select 1 from `user`, music_extra where 1 != 1", - "Query": "select 1 from `user`, music_extra where `user`.id = music_extra.user_id and music_extra.music_id = (select max(music_id) from music_extra where user_id = `user`.id)", - "Table": "`user`, music_extra" + "Query": "select 1 from `user`, music_extra where `user`.id = music_extra.user_id and music_extra.music_id = (select max(music_id) from music_extra where user_id = `user`.id)" }, "TablesUsed": [ "user.music_extra", @@ -5925,7 +5624,6 @@ }, "FieldQuery": "select * from user_metadata where 1 != 1", "Query": "select * from user_metadata where user_metadata.non_planable = 'foo'", - "Table": "user_metadata", "Values": [ "'foo'" ], @@ -5965,7 +5663,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -5979,8 +5676,7 @@ "Sharded": true }, "FieldQuery": "select u.id from `user` as u, user_metadata as um where 1 != 1", - "Query": "select u.id from `user` as u, user_metadata as um where u.`name` = 'foo' and u.id = um.user_id", - "Table": "`user`, user_metadata" + "Query": "select u.id from `user` as u, user_metadata as um where u.`name` = 'foo' and u.id = um.user_id" } ] }, @@ -6019,7 +5715,6 @@ }, "FieldQuery": "select unq_key, keyspace_id from unq_lkp_idx where 1 != 1", "Query": "select unq_key, keyspace_id from unq_lkp_idx where unq_key in ::__vals", - "Table": "unq_lkp_idx", "Values": [ "::unq_key" ], @@ -6033,8 +5728,7 @@ "Sharded": true }, "FieldQuery": "select * from customer where 1 != 1", - "Query": "select * from customer where email = 'a@mail.com'", - "Table": "customer" + "Query": "select * from customer where email = 'a@mail.com'" } ] }, @@ -6058,8 +5752,7 @@ "Sharded": true }, "FieldQuery": "select * from customer where 1 != 1", - "Query": "select * from customer where phone = 123456", - "Table": "customer" + "Query": "select * from customer where phone = 123456" }, "TablesUsed": [ "user.customer" @@ -6081,8 +5774,7 @@ "Sharded": true }, "FieldQuery": "select * from customer where 1 != 1", - "Query": "select * from customer where `name` = 'x'", - "Table": "customer" + "Query": "select * from customer where `name` = 'x'" }, "TablesUsed": [ "user.customer" @@ -6118,7 +5810,6 @@ }, "FieldQuery": "select unq_key, keyspace_id from unq_lkp_idx where 1 != 1", "Query": "select unq_key, keyspace_id from unq_lkp_idx where unq_key in ::__vals", - "Table": "unq_lkp_idx", "Values": [ "::unq_key" ], @@ -6132,8 +5823,7 @@ "Sharded": true }, "FieldQuery": "select * from customer where 1 != 1", - "Query": "select * from customer where email = 'a@mail.com' and phone = 123456", - "Table": "customer" + "Query": "select * from customer where email = 'a@mail.com' and phone = 123456" } ] }, @@ -6170,7 +5860,6 @@ }, "FieldQuery": "select unq_key, keyspace_id from unq_lkp_idx where 1 != 1", "Query": "select unq_key, keyspace_id from unq_lkp_idx where unq_key in ::__vals", - "Table": "unq_lkp_idx", "Values": [ "::unq_key" ], @@ -6184,8 +5873,7 @@ "Sharded": true }, "FieldQuery": "select * from customer where 1 != 1", - "Query": "select * from customer where phone = 123456 and email = 'a@mail.com'", - "Table": "customer" + "Query": "select * from customer where phone = 123456 and email = 'a@mail.com'" } ] }, @@ -6209,8 +5897,7 @@ "Sharded": true }, "FieldQuery": "select col from samecolvin where 1 != 1", - "Query": "select col from samecolvin where secret = 12", - "Table": "samecolvin" + "Query": "select col from samecolvin where secret = 12" }, "TablesUsed": [ "user.samecolvin" @@ -6229,7 +5916,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -6240,8 +5926,7 @@ }, "FieldQuery": "select u.foo, weight_string(u.foo) from `user` as u where 1 != 1", "OrderBy": "(0|1) ASC", - "Query": "select u.foo, weight_string(u.foo) from `user` as u order by u.foo asc", - "Table": "`user`" + "Query": "select u.foo, weight_string(u.foo) from `user` as u order by u.foo asc" }, { "OperatorType": "Route", @@ -6251,8 +5936,7 @@ "Sharded": true }, "FieldQuery": "select ue.foo as apa from user_extra as ue where 1 != 1", - "Query": "select ue.foo as apa from user_extra as ue", - "Table": "user_extra" + "Query": "select ue.foo as apa from user_extra as ue" } ] }, @@ -6277,7 +5961,6 @@ "JoinVars": { "tables_table_name": 0 }, - "TableName": "unsharded_`user`", "Inputs": [ { "OperatorType": "Route", @@ -6287,8 +5970,7 @@ "Sharded": false }, "FieldQuery": "select `tables`.`table_name` from (select `table_name` from unsharded where 1 != 1) as `tables` where 1 != 1", - "Query": "select `tables`.`table_name` from (select `table_name` from unsharded limit 1) as `tables`", - "Table": "unsharded" + "Query": "select `tables`.`table_name` from (select `table_name` from unsharded limit 1) as `tables`" }, { "OperatorType": "Route", @@ -6298,8 +5980,7 @@ "Sharded": true }, "FieldQuery": "select c.`column_name` from `user` as c where 1 != 1", - "Query": "select c.`column_name` from `user` as c where c.`table_name` = :tables_table_name", - "Table": "`user`" + "Query": "select c.`column_name` from `user` as c where c.`table_name` = :tables_table_name" } ] }, @@ -6332,7 +6013,6 @@ "JoinVars": { "user_cola": 2 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -6342,8 +6022,7 @@ "Sharded": true }, "FieldQuery": "select `name` as t0, `name` as t1, `user`.cola from `user` where 1 != 1", - "Query": "select `name` as t0, `name` as t1, `user`.cola from `user`", - "Table": "`user`" + "Query": "select `name` as t0, `name` as t1, `user`.cola from `user`" }, { "OperatorType": "Route", @@ -6353,8 +6032,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select 1 from user_extra where user_extra.cola = :user_cola", - "Table": "user_extra" + "Query": "select 1 from user_extra where user_extra.cola = :user_cola" } ] } @@ -6382,8 +6060,7 @@ "Sharded": false }, "FieldQuery": "select val, cume_dist() over w, row_number() over w, dense_rank() over w, percent_rank() over w, rank() over w as cd from unsharded_a where 1 != 1", - "Query": "select val, cume_dist() over w, row_number() over w, dense_rank() over w, percent_rank() over w, rank() over w as cd from unsharded_a", - "Table": "unsharded_a" + "Query": "select val, cume_dist() over w, row_number() over w, dense_rank() over w, percent_rank() over w, rank() over w as cd from unsharded_a" }, "TablesUsed": [ "main.unsharded_a" @@ -6391,6 +6068,32 @@ }, "skip_e2e": true }, + { + "comment": "Over clause in a equal unique query going to a single shard", + "query": "SELECT Sum(id) OVER ( PARTITION BY name ) from user where id = 5", + "plan": { + "Type": "Passthrough", + "QueryType": "SELECT", + "Original": "SELECT Sum(id) OVER ( PARTITION BY name ) from user where id = 5", + "Instructions": { + "OperatorType": "Route", + "Variant": "EqualUnique", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "FieldQuery": "select sum(id) over ( partition by `name`) from `user` where 1 != 1", + "Query": "select sum(id) over ( partition by `name`) from `user` where id = 5", + "Values": [ + "5" + ], + "Vindex": "user_index" + }, + "TablesUsed": [ + "user.user" + ] + } + }, { "comment": "join with derived table with alias and join condition - merge into route", "query": "select 1 from user join (select id as uid from user) as t where t.uid = user.id", @@ -6406,8 +6109,7 @@ "Sharded": true }, "FieldQuery": "select 1 from (select id as uid from `user` where 1 != 1) as t, `user` where 1 != 1", - "Query": "select 1 from (select id as uid from `user`) as t, `user` where t.uid = `user`.id", - "Table": "`user`" + "Query": "select 1 from (select id as uid from `user`) as t, `user` where t.uid = `user`.id" }, "TablesUsed": [ "user.user" diff --git a/go/vt/vtgate/planbuilder/testdata/select_cases_with_default.json b/go/vt/vtgate/planbuilder/testdata/select_cases_with_default.json index 6404076a2f4..9008a89efdc 100644 --- a/go/vt/vtgate/planbuilder/testdata/select_cases_with_default.json +++ b/go/vt/vtgate/planbuilder/testdata/select_cases_with_default.json @@ -15,7 +15,6 @@ }, "FieldQuery": "select exists (select 1 from `user` where 1 != 1) from dual where 1 != 1", "Query": "select exists (select 1 from `user` where id = 5) from dual", - "Table": "dual", "Values": [ "5" ], diff --git a/go/vt/vtgate/planbuilder/testdata/select_cases_with_user_as_default.json b/go/vt/vtgate/planbuilder/testdata/select_cases_with_user_as_default.json index a59d0e50c18..73722364f07 100644 --- a/go/vt/vtgate/planbuilder/testdata/select_cases_with_user_as_default.json +++ b/go/vt/vtgate/planbuilder/testdata/select_cases_with_user_as_default.json @@ -15,7 +15,6 @@ }, "FieldQuery": "select exists (select 1 from `user` where 1 != 1) from dual where 1 != 1", "Query": "select exists (select 1 from `user` where id = 5) from dual", - "Table": "dual", "Values": [ "5" ], diff --git a/go/vt/vtgate/planbuilder/testdata/symtab_cases.json b/go/vt/vtgate/planbuilder/testdata/symtab_cases.json index cef8b200441..c555fbc1e20 100644 --- a/go/vt/vtgate/planbuilder/testdata/symtab_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/symtab_cases.json @@ -13,7 +13,6 @@ "JoinVars": { "predef2": 0 }, - "TableName": "`user`_unsharded", "Inputs": [ { "OperatorType": "Route", @@ -23,8 +22,7 @@ "Sharded": true }, "FieldQuery": "select predef2 from `user` where 1 != 1", - "Query": "select predef2 from `user`", - "Table": "`user`" + "Query": "select predef2 from `user`" }, { "OperatorType": "Route", @@ -34,8 +32,7 @@ "Sharded": false }, "FieldQuery": "select predef3 from unsharded where 1 != 1", - "Query": "select predef3 from unsharded where predef3 = :predef2", - "Table": "unsharded" + "Query": "select predef3 from unsharded where predef3 = :predef2" } ] }, diff --git a/go/vt/vtgate/planbuilder/testdata/sysschema_default.json b/go/vt/vtgate/planbuilder/testdata/sysschema_default.json index bc5c23a08b2..fbfaabef581 100644 --- a/go/vt/vtgate/planbuilder/testdata/sysschema_default.json +++ b/go/vt/vtgate/planbuilder/testdata/sysschema_default.json @@ -14,8 +14,7 @@ "Sharded": false }, "FieldQuery": "select @@max_allowed_packet from dual where 1 != 1", - "Query": "select @@max_allowed_packet from dual", - "Table": "dual" + "Query": "select @@max_allowed_packet from dual" }, "TablesUsed": [ "main.dual" @@ -38,8 +37,7 @@ }, "FieldQuery": "select t.table_schema, t.`table_name`, c.`column_name`, c.column_type from information_schema.`tables` as t, information_schema.`columns` as c where 1 != 1", "Query": "select t.table_schema, t.`table_name`, c.`column_name`, c.column_type from information_schema.`tables` as t, information_schema.`columns` as c where t.table_schema = :__vtschemaname /* VARCHAR */ and c.table_schema = :__vtschemaname /* VARCHAR */ and c.table_schema = t.table_schema and c.`table_name` = t.`table_name` order by t.table_schema asc, t.`table_name` asc, c.`column_name` asc", - "SysTableTableSchema": "['user']", - "Table": "information_schema.`columns`, information_schema.`tables`" + "SysTableTableSchema": "['user']" } } }, @@ -59,8 +57,7 @@ }, "FieldQuery": "select (select 1 from information_schema.schemata where 1 != 1) as `(select 1 from information_schema.schemata where ``schema_name`` = 'MyDatabase' limit 1)` from dual where 1 != 1", "Query": "select (select 1 from information_schema.schemata where `schema_name` = :__vtschemaname /* VARCHAR */ limit 1) as `(select 1 from information_schema.schemata where ``schema_name`` = 'MyDatabase' limit 1)` from dual", - "SysTableTableSchema": "['MyDatabase']", - "Table": "dual" + "SysTableTableSchema": "['MyDatabase']" }, "TablesUsed": [ "main.dual" @@ -83,8 +80,7 @@ }, "FieldQuery": "select `1` from (select 1 from information_schema.schemata where 1 != 1) as x where 1 != 1", "Query": "select `1` from (select 1 from information_schema.schemata where `schema_name` = :__vtschemaname /* VARCHAR */ limit 1) as x", - "SysTableTableSchema": "['MyDatabase']", - "Table": "information_schema.schemata" + "SysTableTableSchema": "['MyDatabase']" } } } diff --git a/go/vt/vtgate/planbuilder/testdata/tpcc_cases.json b/go/vt/vtgate/planbuilder/testdata/tpcc_cases.json index 8345b55e936..d8ffcc3ee9d 100644 --- a/go/vt/vtgate/planbuilder/testdata/tpcc_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/tpcc_cases.json @@ -15,7 +15,6 @@ }, "FieldQuery": "select c_discount, c_last, c_credit, w_tax from customer1 as c, warehouse1 as w where 1 != 1", "Query": "select c_discount, c_last, c_credit, w_tax from customer1 as c, warehouse1 as w where c_d_id = 15 and c_id = 10 and w_id = 1 and c_w_id = w_id", - "Table": "customer1, warehouse1", "Values": [ "1" ], @@ -43,7 +42,6 @@ }, "FieldQuery": "select d_next_o_id, d_tax from district1 where 1 != 1", "Query": "select d_next_o_id, d_tax from district1 where d_w_id = 15 and d_id = 95 for update", - "Table": "district1", "Values": [ "15" ], @@ -69,7 +67,6 @@ "Sharded": true }, "Query": "update district1 set d_next_o_id = 56 where d_id = 9842 and d_w_id = 8546", - "Table": "district1", "Values": [ "8546" ], @@ -95,7 +92,6 @@ "Sharded": true }, "Query": "insert into orders1(o_id, o_d_id, o_w_id, o_c_id, o_entry_d, o_ol_cnt, o_all_local) values (334983, 59896, :_o_w_id_0, 156, now(), 781038, 'hello')", - "TableName": "orders1", "VindexValues": { "hash": "99" } @@ -120,7 +116,6 @@ "Sharded": true }, "Query": "insert into new_orders1(no_o_id, no_d_id, no_w_id) values (8, 9, :_no_w_id_0)", - "TableName": "new_orders1", "VindexValues": { "hash": "48" } @@ -146,7 +141,6 @@ }, "FieldQuery": "select i_price, i_name, i_data from item1 where 1 != 1", "Query": "select i_price, i_name, i_data from item1 where i_id = 9654", - "Table": "item1", "Values": [ "9654" ], @@ -173,7 +167,6 @@ }, "FieldQuery": "select s_quantity, s_data, s_dist_01 as s_dist from stock1 where 1 != 1", "Query": "select s_quantity, s_data, s_dist_01 as s_dist from stock1 where s_i_id = 2198 and s_w_id = 89 for update", - "Table": "stock1", "Values": [ "89" ], @@ -199,7 +192,6 @@ "Sharded": true }, "Query": "update stock1 set s_quantity = 894 where s_i_id = 156 and s_w_id = 6", - "Table": "stock1", "Values": [ "6" ], @@ -225,7 +217,6 @@ "Sharded": true }, "Query": "insert into order_line1(ol_o_id, ol_d_id, ol_w_id, ol_number, ol_i_id, ol_supply_w_id, ol_quantity, ol_amount, ol_dist_info) values (648, 36812, :_ol_w_id_0, 4946378, 3, 7, 89, 1, 'info')", - "TableName": "order_line1", "VindexValues": { "hash": "3201" } @@ -250,7 +241,6 @@ "Sharded": true }, "Query": "update warehouse1 set w_ytd = w_ytd + 946879 where w_id = 3", - "Table": "warehouse1", "Values": [ "3" ], @@ -277,7 +267,6 @@ }, "FieldQuery": "select w_street_1, w_street_2, w_city, w_state, w_zip, w_name from warehouse1 where 1 != 1", "Query": "select w_street_1, w_street_2, w_city, w_state, w_zip, w_name from warehouse1 where w_id = 998", - "Table": "warehouse1", "Values": [ "998" ], @@ -303,7 +292,6 @@ "Sharded": true }, "Query": "update district1 set d_ytd = d_ytd + 2 where d_w_id = 89 and d_id = 9", - "Table": "district1", "Values": [ "89" ], @@ -330,7 +318,6 @@ }, "FieldQuery": "select d_street_1, d_street_2, d_city, d_state, d_zip, d_name from district1 where 1 != 1", "Query": "select d_street_1, d_street_2, d_city, d_state, d_zip, d_name from district1 where d_w_id = 896 and d_id = 9", - "Table": "district1", "Values": [ "896" ], @@ -357,7 +344,6 @@ }, "FieldQuery": "select count(c_id) as namecnt from customer1 where 1 != 1", "Query": "select count(c_id) as namecnt from customer1 where c_w_id = 5 and c_d_id = 1 and c_last = 'last'", - "Table": "customer1", "Values": [ "5" ], @@ -384,7 +370,6 @@ }, "FieldQuery": "select c_id from customer1 where 1 != 1", "Query": "select c_id from customer1 where c_w_id = 8 and c_d_id = 5 and c_last = 'item_last' order by c_first asc", - "Table": "customer1", "Values": [ "8" ], @@ -411,7 +396,6 @@ }, "FieldQuery": "select c_first, c_middle, c_last, c_street_1, c_street_2, c_city, c_state, c_zip, c_phone, c_credit, c_credit_lim, c_discount, c_balance, c_ytd_payment, c_since from customer1 where 1 != 1", "Query": "select c_first, c_middle, c_last, c_street_1, c_street_2, c_city, c_state, c_zip, c_phone, c_credit, c_credit_lim, c_discount, c_balance, c_ytd_payment, c_since from customer1 where c_w_id = 8965 and c_d_id = 1 and c_id = 9 for update", - "Table": "customer1", "Values": [ "8965" ], @@ -438,7 +422,6 @@ }, "FieldQuery": "select c_data from customer1 where 1 != 1", "Query": "select c_data from customer1 where c_w_id = 32 and c_d_id = 68 and c_id = 5", - "Table": "customer1", "Values": [ "32" ], @@ -464,7 +447,6 @@ "Sharded": true }, "Query": "update customer1 set c_balance = 508.98, c_ytd_payment = 48941.980301, c_data = 'i am data' where c_w_id = 20 and c_d_id = 387 and c_id = 98", - "Table": "customer1", "Values": [ "20" ], @@ -490,7 +472,6 @@ "Sharded": true }, "Query": "update customer1 set c_balance = 508.98, c_ytd_payment = 48941.980301 where c_w_id = 20 and c_d_id = 387 and c_id = 98", - "Table": "customer1", "Values": [ "20" ], @@ -516,7 +497,6 @@ "Sharded": true }, "Query": "insert into history1(h_c_d_id, h_c_w_id, h_c_id, h_d_id, h_w_id, h_date, h_amount, h_data) values (6809887, 38748, 8746, 210, :_h_w_id_0, now(), 8907, 'data')", - "TableName": "history1", "VindexValues": { "hash": "8" } @@ -542,7 +522,6 @@ }, "FieldQuery": "select count(c_id) as namecnt from customer1 where 1 != 1", "Query": "select count(c_id) as namecnt from customer1 where c_w_id = 870 and c_d_id = 780 and c_last = 'last'", - "Table": "customer1", "Values": [ "870" ], @@ -569,7 +548,6 @@ }, "FieldQuery": "select c_balance, c_first, c_middle, c_id from customer1 where 1 != 1", "Query": "select c_balance, c_first, c_middle, c_id from customer1 where c_w_id = 840 and c_d_id = 1 and c_last = 'test' order by customer1.c_first asc", - "Table": "customer1", "Values": [ "840" ], @@ -596,7 +574,6 @@ }, "FieldQuery": "select c_balance, c_first, c_middle, c_last from customer1 where 1 != 1", "Query": "select c_balance, c_first, c_middle, c_last from customer1 where c_w_id = 15 and c_d_id = 5169 and c_id = 1", - "Table": "customer1", "Values": [ "15" ], @@ -623,7 +600,6 @@ }, "FieldQuery": "select o_id, o_carrier_id, o_entry_d from orders1 where 1 != 1", "Query": "select o_id, o_carrier_id, o_entry_d from orders1 where o_w_id = 9894 and o_d_id = 3 and o_c_id = 159 order by orders1.o_id desc", - "Table": "orders1", "Values": [ "9894" ], @@ -650,7 +626,6 @@ }, "FieldQuery": "select ol_i_id, ol_supply_w_id, ol_quantity, ol_amount, ol_delivery_d from order_line1 where 1 != 1", "Query": "select ol_i_id, ol_supply_w_id, ol_quantity, ol_amount, ol_delivery_d from order_line1 where ol_w_id = 92 and ol_d_id = 5 and ol_o_id = 1", - "Table": "order_line1", "Values": [ "92" ], @@ -677,7 +652,6 @@ }, "FieldQuery": "select no_o_id from new_orders1 where 1 != 1", "Query": "select no_o_id from new_orders1 where no_d_id = 689 and no_w_id = 15 order by new_orders1.no_o_id asc limit 1 for update", - "Table": "new_orders1", "Values": [ "15" ], @@ -703,7 +677,6 @@ "Sharded": true }, "Query": "delete from new_orders1 where no_o_id = 2218 and no_d_id = 358 and no_w_id = 98465", - "Table": "new_orders1", "Values": [ "98465" ], @@ -730,7 +703,6 @@ }, "FieldQuery": "select o_c_id from orders1 where 1 != 1", "Query": "select o_c_id from orders1 where o_id = 6 and o_d_id = 1983 and o_w_id = 894605", - "Table": "orders1", "Values": [ "894605" ], @@ -756,7 +728,6 @@ "Sharded": true }, "Query": "update orders1 set o_carrier_id = 9 where o_id = 56 and o_d_id = 98 and o_w_id = 897", - "Table": "orders1", "Values": [ "897" ], @@ -782,7 +753,6 @@ "Sharded": true }, "Query": "update order_line1 set ol_delivery_d = now() where ol_o_id = 235 and ol_d_id = 315 and ol_w_id = 8", - "Table": "order_line1", "Values": [ "8" ], @@ -809,7 +779,6 @@ }, "FieldQuery": "select sum(ol_amount) as sm from order_line1 where 1 != 1", "Query": "select sum(ol_amount) as sm from order_line1 where ol_o_id = 680 and ol_d_id = 201 and ol_w_id = 87", - "Table": "order_line1", "Values": [ "87" ], @@ -835,7 +804,6 @@ "Sharded": true }, "Query": "update customer1 set c_balance = c_balance + 988.01, c_delivery_cnt = c_delivery_cnt + 1 where c_id = 6 and c_d_id = 5 and c_w_id = 160", - "Table": "customer1", "Values": [ "160" ], @@ -862,7 +830,6 @@ }, "FieldQuery": "select d_next_o_id from district1 where 1 != 1", "Query": "select d_next_o_id from district1 where d_id = 6 and d_w_id = 21", - "Table": "district1", "Values": [ "21" ], @@ -889,7 +856,6 @@ }, "FieldQuery": "select count(distinct s.s_i_id) from stock1 as s, order_line1 as ol where 1 != 1", "Query": "select count(distinct s.s_i_id) from stock1 as s, order_line1 as ol where s.s_w_id = 12 and s.s_quantity < 10 and ol.ol_w_id = 12 and ol.ol_d_id = 1908 and ol.ol_o_id < 30 and ol.ol_o_id >= 15 and ol.ol_w_id = s.s_w_id and ol.ol_i_id = s.s_i_id", - "Table": "order_line1, stock1", "Values": [ "12" ], @@ -917,7 +883,6 @@ }, "FieldQuery": "select ol_i_id from order_line1 where 1 != 1", "Query": "select distinct ol_i_id from order_line1 where ol_w_id = 1 and ol_d_id = 156 and ol_o_id < 500 and ol_o_id >= 56", - "Table": "order_line1", "Values": [ "1" ], @@ -944,7 +909,6 @@ }, "FieldQuery": "select count(*) from stock1 where 1 != 1", "Query": "select count(*) from stock1 where s_w_id = 1 and s_i_id = 8 and s_quantity < 1000", - "Table": "stock1", "Values": [ "1" ], @@ -971,7 +935,6 @@ }, "FieldQuery": "select o.o_id, o.o_d_id from (select o_c_id, o_w_id, o_d_id, count(distinct o_w_id), o_id from orders1 where 1 != 1 group by o_c_id, o_d_id, o_w_id) as t, orders1 as o where 1 != 1", "Query": "select o.o_id, o.o_d_id from (select o_c_id, o_w_id, o_d_id, count(distinct o_w_id), o_id from orders1 where o_w_id = 1 and o_id > 2100 and o_id < 11153 group by o_c_id, o_d_id, o_w_id having count(distinct o_id) > 1 limit 1) as t, orders1 as o where t.o_w_id = o.o_w_id and t.o_d_id = o.o_d_id and t.o_c_id = o.o_c_id limit 1", - "Table": "orders1", "Values": [ "1" ], @@ -997,7 +960,6 @@ "Sharded": true }, "Query": "delete from order_line1 where ol_w_id = 178 and ol_d_id = 1 and ol_o_id = 84", - "Table": "order_line1", "Values": [ "178" ], @@ -1023,7 +985,6 @@ "Sharded": true }, "Query": "delete from orders1 where o_w_id = 1 and o_d_id = 3 and o_id = 384", - "Table": "orders1", "Values": [ "1" ], @@ -1049,7 +1010,6 @@ "Sharded": true }, "Query": "delete from history1 where h_w_id = 75 and h_d_id = 102 limit 10", - "Table": "history1", "Values": [ "75" ], diff --git a/go/vt/vtgate/planbuilder/testdata/tpch_cases.json b/go/vt/vtgate/planbuilder/testdata/tpch_cases.json index 60e6857d53d..19d34e64332 100644 --- a/go/vt/vtgate/planbuilder/testdata/tpch_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/tpch_cases.json @@ -36,8 +36,7 @@ }, "FieldQuery": "select l_returnflag, l_linestatus, sum(l_quantity) as sum_qty, sum(l_extendedprice) as sum_base_price, sum(l_extendedprice * (1 - l_discount)) as sum_disc_price, sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge, sum(l_quantity) as avg_qty, sum(l_extendedprice) as avg_price, sum(l_discount) as avg_disc, count(*) as count_order, count(l_quantity), count(l_extendedprice), count(l_discount), weight_string(l_returnflag), weight_string(l_linestatus) from lineitem where 1 != 1 group by l_returnflag, l_linestatus, weight_string(l_returnflag), weight_string(l_linestatus)", "OrderBy": "(0|13) ASC, (1|14) ASC", - "Query": "select l_returnflag, l_linestatus, sum(l_quantity) as sum_qty, sum(l_extendedprice) as sum_base_price, sum(l_extendedprice * (1 - l_discount)) as sum_disc_price, sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge, sum(l_quantity) as avg_qty, sum(l_extendedprice) as avg_price, sum(l_discount) as avg_disc, count(*) as count_order, count(l_quantity), count(l_extendedprice), count(l_discount), weight_string(l_returnflag), weight_string(l_linestatus) from lineitem where l_shipdate <= '1998-12-01' - interval '108' day group by l_returnflag, l_linestatus, weight_string(l_returnflag), weight_string(l_linestatus) order by lineitem.l_returnflag asc, lineitem.l_linestatus asc", - "Table": "lineitem" + "Query": "select l_returnflag, l_linestatus, sum(l_quantity) as sum_qty, sum(l_extendedprice) as sum_base_price, sum(l_extendedprice * (1 - l_discount)) as sum_disc_price, sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge, sum(l_quantity) as avg_qty, sum(l_extendedprice) as avg_price, sum(l_discount) as avg_disc, count(*) as count_order, count(l_quantity), count(l_extendedprice), count(l_discount), weight_string(l_returnflag), weight_string(l_linestatus) from lineitem where l_shipdate <= '1998-12-01' - interval '108' day group by l_returnflag, l_linestatus, weight_string(l_returnflag), weight_string(l_linestatus) order by lineitem.l_returnflag asc, lineitem.l_linestatus asc" } ] } @@ -100,7 +99,6 @@ "JoinVars": { "l_orderkey": 1 }, - "TableName": "lineitem_orders_customer", "Inputs": [ { "OperatorType": "Route", @@ -110,8 +108,7 @@ "Sharded": true }, "FieldQuery": "select sum(l_extendedprice * (1 - l_discount)) as revenue, l_orderkey, weight_string(l_orderkey) from lineitem where 1 != 1 group by l_orderkey, weight_string(l_orderkey)", - "Query": "select sum(l_extendedprice * (1 - l_discount)) as revenue, l_orderkey, weight_string(l_orderkey) from lineitem where l_shipdate > date('1995-03-15') group by l_orderkey, weight_string(l_orderkey)", - "Table": "lineitem" + "Query": "select sum(l_extendedprice * (1 - l_discount)) as revenue, l_orderkey, weight_string(l_orderkey) from lineitem where l_shipdate > date('1995-03-15') group by l_orderkey, weight_string(l_orderkey)" }, { "OperatorType": "Projection", @@ -130,7 +127,6 @@ "JoinVars": { "o_custkey": 3 }, - "TableName": "orders_customer", "Inputs": [ { "OperatorType": "Route", @@ -141,7 +137,6 @@ }, "FieldQuery": "select count(*), o_orderdate, o_shippriority, o_custkey, weight_string(o_orderdate), weight_string(o_shippriority) from orders where 1 != 1 group by o_orderdate, o_shippriority, o_custkey, weight_string(o_orderdate), weight_string(o_shippriority)", "Query": "select count(*), o_orderdate, o_shippriority, o_custkey, weight_string(o_orderdate), weight_string(o_shippriority) from orders where o_orderdate < date('1995-03-15') and o_orderkey = :l_orderkey group by o_orderdate, o_shippriority, o_custkey, weight_string(o_orderdate), weight_string(o_shippriority)", - "Table": "orders", "Values": [ ":l_orderkey" ], @@ -156,7 +151,6 @@ }, "FieldQuery": "select count(*) from customer where 1 != 1 group by .0", "Query": "select count(*) from customer where c_mktsegment = 'BUILDING' and c_custkey = :o_custkey group by .0", - "Table": "customer", "Values": [ ":o_custkey" ], @@ -204,7 +198,6 @@ "JoinVars": { "o_orderkey": 2 }, - "TableName": "orders_lineitem", "Inputs": [ { "InputName": "Outer", @@ -216,8 +209,7 @@ }, "FieldQuery": "select o_orderpriority, count(*) as order_count, o_orderkey, weight_string(o_orderpriority) from orders where 1 != 1 group by o_orderpriority, o_orderkey, weight_string(o_orderpriority)", "OrderBy": "(0|3) ASC", - "Query": "select o_orderpriority, count(*) as order_count, o_orderkey, weight_string(o_orderpriority) from orders where o_orderdate >= date('1993-07-01') and o_orderdate < date('1993-07-01') + interval '3' month group by o_orderpriority, o_orderkey, weight_string(o_orderpriority) order by orders.o_orderpriority asc", - "Table": "orders" + "Query": "select o_orderpriority, count(*) as order_count, o_orderkey, weight_string(o_orderpriority) from orders where o_orderdate >= date('1993-07-01') and o_orderdate < date('1993-07-01') + interval '3' month group by o_orderpriority, o_orderkey, weight_string(o_orderpriority) order by orders.o_orderpriority asc" }, { "InputName": "SubQuery", @@ -241,7 +233,6 @@ }, "FieldQuery": "select l_orderkey, l_linenumber from lineitem_map where 1 != 1", "Query": "select l_orderkey, l_linenumber from lineitem_map where l_orderkey in ::__vals", - "Table": "lineitem_map", "Values": [ "::l_orderkey" ], @@ -255,8 +246,7 @@ "Sharded": true }, "FieldQuery": "select 1 from lineitem where 1 != 1", - "Query": "select 1 from lineitem where l_orderkey = :o_orderkey and l_commitdate < l_receiptdate limit 1", - "Table": "lineitem" + "Query": "select 1 from lineitem where l_orderkey = :o_orderkey and l_commitdate < l_receiptdate limit 1" } ] } @@ -309,7 +299,6 @@ "JoinVars": { "s_nationkey": 1 }, - "TableName": "orders_customer_lineitem_supplier_nation_region", "Inputs": [ { "OperatorType": "Projection", @@ -326,7 +315,6 @@ "c_nationkey": 2, "o_orderkey": 1 }, - "TableName": "orders_customer_lineitem_supplier", "Inputs": [ { "OperatorType": "Projection", @@ -343,7 +331,6 @@ "JoinVars": { "o_custkey": 2 }, - "TableName": "orders_customer", "Inputs": [ { "OperatorType": "Route", @@ -353,8 +340,7 @@ "Sharded": true }, "FieldQuery": "select count(*), o_orderkey, o_custkey from orders where 1 != 1 group by o_orderkey, o_custkey", - "Query": "select count(*), o_orderkey, o_custkey from orders where o_orderdate >= date('1994-01-01') and o_orderdate < date('1994-01-01') + interval '1' year group by o_orderkey, o_custkey", - "Table": "orders" + "Query": "select count(*), o_orderkey, o_custkey from orders where o_orderdate >= date('1994-01-01') and o_orderdate < date('1994-01-01') + interval '1' year group by o_orderkey, o_custkey" }, { "OperatorType": "Route", @@ -365,7 +351,6 @@ }, "FieldQuery": "select count(*), c_nationkey from customer where 1 != 1 group by c_nationkey", "Query": "select count(*), c_nationkey from customer where c_custkey = :o_custkey group by c_nationkey", - "Table": "customer", "Values": [ ":o_custkey" ], @@ -389,7 +374,6 @@ "JoinVars": { "l_suppkey": 1 }, - "TableName": "lineitem_supplier", "Inputs": [ { "OperatorType": "VindexLookup", @@ -412,7 +396,6 @@ }, "FieldQuery": "select l_orderkey, l_linenumber from lineitem_map where 1 != 1", "Query": "select l_orderkey, l_linenumber from lineitem_map where l_orderkey in ::__vals", - "Table": "lineitem_map", "Values": [ "::l_orderkey" ], @@ -426,8 +409,7 @@ "Sharded": true }, "FieldQuery": "select sum(l_extendedprice * (1 - l_discount)) as revenue, l_suppkey from lineitem where 1 != 1 group by l_suppkey", - "Query": "select sum(l_extendedprice * (1 - l_discount)) as revenue, l_suppkey from lineitem where l_orderkey = :o_orderkey group by l_suppkey", - "Table": "lineitem" + "Query": "select sum(l_extendedprice * (1 - l_discount)) as revenue, l_suppkey from lineitem where l_orderkey = :o_orderkey group by l_suppkey" } ] }, @@ -440,7 +422,6 @@ }, "FieldQuery": "select count(*), s_nationkey from supplier where 1 != 1 group by s_nationkey", "Query": "select count(*), s_nationkey from supplier where s_nationkey = :c_nationkey and s_suppkey = :l_suppkey group by s_nationkey", - "Table": "supplier", "Values": [ ":l_suppkey" ], @@ -469,7 +450,6 @@ "JoinVars": { "n_regionkey": 2 }, - "TableName": "nation_region", "Inputs": [ { "OperatorType": "Route", @@ -480,7 +460,6 @@ }, "FieldQuery": "select count(*), n_name, n_regionkey, weight_string(n_name) from nation where 1 != 1 group by n_name, n_regionkey, weight_string(n_name)", "Query": "select count(*), n_name, n_regionkey, weight_string(n_name) from nation where n_nationkey = :s_nationkey group by n_name, n_regionkey, weight_string(n_name)", - "Table": "nation", "Values": [ ":s_nationkey" ], @@ -495,7 +474,6 @@ }, "FieldQuery": "select count(*) from region where 1 != 1 group by .0", "Query": "select count(*) from region where r_name = 'ASIA' and r_regionkey = :n_regionkey group by .0", - "Table": "region", "Values": [ ":n_regionkey" ], @@ -545,8 +523,7 @@ "Sharded": true }, "FieldQuery": "select sum(l_extendedprice * l_discount) as revenue from lineitem where 1 != 1", - "Query": "select sum(l_extendedprice * l_discount) as revenue from lineitem where l_shipdate >= date('1994-01-01') and l_shipdate < date('1994-01-01') + interval '1' year and l_discount between 0.06 - 0.01 and 0.06 + 0.01 and l_quantity < 24", - "Table": "lineitem" + "Query": "select sum(l_extendedprice * l_discount) as revenue from lineitem where l_shipdate >= date('1994-01-01') and l_shipdate < date('1994-01-01') + interval '1' year and l_discount between 0.06 - 0.01 and 0.06 + 0.01 and l_quantity < 24" } ] }, @@ -594,7 +571,6 @@ "n1_n_name": 1, "o_custkey": 3 }, - "TableName": "lineitem_orders_supplier_nation_customer_nation", "Inputs": [ { "OperatorType": "Projection", @@ -614,7 +590,6 @@ "JoinVars": { "l_suppkey": 3 }, - "TableName": "lineitem_orders_supplier_nation", "Inputs": [ { "OperatorType": "Projection", @@ -633,7 +608,6 @@ "JoinVars": { "l_orderkey": 3 }, - "TableName": "lineitem_orders", "Inputs": [ { "OperatorType": "Route", @@ -643,8 +617,7 @@ "Sharded": true }, "FieldQuery": "select sum(volume) as revenue, l_year, shipping.l_suppkey, shipping.l_orderkey, weight_string(l_year) from (select extract(year from l_shipdate) as l_year, l_extendedprice * (1 - l_discount) as volume, l_suppkey as l_suppkey, l_orderkey as l_orderkey from lineitem where 1 != 1) as shipping where 1 != 1 group by l_year, shipping.l_suppkey, shipping.l_orderkey, weight_string(l_year)", - "Query": "select sum(volume) as revenue, l_year, shipping.l_suppkey, shipping.l_orderkey, weight_string(l_year) from (select extract(year from l_shipdate) as l_year, l_extendedprice * (1 - l_discount) as volume, l_suppkey as l_suppkey, l_orderkey as l_orderkey from lineitem where l_shipdate between date('1995-01-01') and date('1996-12-31')) as shipping group by l_year, shipping.l_suppkey, shipping.l_orderkey, weight_string(l_year)", - "Table": "lineitem" + "Query": "select sum(volume) as revenue, l_year, shipping.l_suppkey, shipping.l_orderkey, weight_string(l_year) from (select extract(year from l_shipdate) as l_year, l_extendedprice * (1 - l_discount) as volume, l_suppkey as l_suppkey, l_orderkey as l_orderkey from lineitem where l_shipdate between date('1995-01-01') and date('1996-12-31')) as shipping group by l_year, shipping.l_suppkey, shipping.l_orderkey, weight_string(l_year)" }, { "OperatorType": "Route", @@ -655,7 +628,6 @@ }, "FieldQuery": "select count(*), shipping.o_custkey from (select o_custkey as o_custkey from orders where 1 != 1) as shipping where 1 != 1 group by shipping.o_custkey", "Query": "select count(*), shipping.o_custkey from (select o_custkey as o_custkey from orders where o_orderkey = :l_orderkey) as shipping group by shipping.o_custkey", - "Table": "orders", "Values": [ ":l_orderkey" ], @@ -680,7 +652,6 @@ "JoinVars": { "s_nationkey": 1 }, - "TableName": "supplier_nation", "Inputs": [ { "OperatorType": "Route", @@ -691,7 +662,6 @@ }, "FieldQuery": "select count(*), shipping.s_nationkey from (select s_nationkey as s_nationkey from supplier where 1 != 1) as shipping where 1 != 1 group by shipping.s_nationkey", "Query": "select count(*), shipping.s_nationkey from (select s_nationkey as s_nationkey from supplier where s_suppkey = :l_suppkey) as shipping group by shipping.s_nationkey", - "Table": "supplier", "Values": [ ":l_suppkey" ], @@ -706,7 +676,6 @@ }, "FieldQuery": "select count(*), supp_nation, weight_string(supp_nation) from (select n1.n_name as supp_nation from nation as n1 where 1 != 1) as shipping where 1 != 1 group by supp_nation, weight_string(supp_nation)", "Query": "select count(*), supp_nation, weight_string(supp_nation) from (select n1.n_name as supp_nation from nation as n1 where n1.n_nationkey = :s_nationkey) as shipping group by supp_nation, weight_string(supp_nation)", - "Table": "nation", "Values": [ ":s_nationkey" ], @@ -735,7 +704,6 @@ "JoinVars": { "c_nationkey": 1 }, - "TableName": "customer_nation", "Inputs": [ { "OperatorType": "Route", @@ -746,7 +714,6 @@ }, "FieldQuery": "select count(*), shipping.c_nationkey from (select c_nationkey as c_nationkey from customer where 1 != 1) as shipping where 1 != 1 group by shipping.c_nationkey", "Query": "select count(*), shipping.c_nationkey from (select c_nationkey as c_nationkey from customer where c_custkey = :o_custkey) as shipping group by shipping.c_nationkey", - "Table": "customer", "Values": [ ":o_custkey" ], @@ -761,7 +728,6 @@ }, "FieldQuery": "select count(*), cust_nation, weight_string(cust_nation) from (select n2.n_name as cust_nation from nation as n2 where 1 != 1) as shipping where 1 != 1 group by cust_nation, weight_string(cust_nation)", "Query": "select count(*), cust_nation, weight_string(cust_nation) from (select n2.n_name as cust_nation from nation as n2 where (:n1_n_name = 'FRANCE' and n2.n_name = 'GERMANY' or :n1_n_name = 'GERMANY' and n2.n_name = 'FRANCE') and n2.n_nationkey = :c_nationkey) as shipping group by cust_nation, weight_string(cust_nation)", - "Table": "nation", "Values": [ ":c_nationkey" ], @@ -829,7 +795,6 @@ "JoinVars": { "l_orderkey": 2 }, - "TableName": "lineitem_part_supplier_nation_orders_customer_nation_region", "Inputs": [ { "OperatorType": "Aggregate", @@ -845,7 +810,6 @@ "l_suppkey": 2, "volume": 0 }, - "TableName": "lineitem_part_supplier_nation", "Inputs": [ { "OperatorType": "Join", @@ -854,7 +818,6 @@ "JoinVars": { "l_partkey": 3 }, - "TableName": "lineitem_part", "Inputs": [ { "OperatorType": "Route", @@ -865,8 +828,7 @@ }, "FieldQuery": "select all_nations.volume, all_nations.l_orderkey, all_nations.l_suppkey, all_nations.l_partkey, weight_string(all_nations.l_orderkey) from (select l_extendedprice * (1 - l_discount) as volume, l_orderkey as l_orderkey, l_suppkey as l_suppkey, l_partkey as l_partkey from lineitem where 1 != 1) as all_nations where 1 != 1", "OrderBy": "(1|4) ASC", - "Query": "select all_nations.volume, all_nations.l_orderkey, all_nations.l_suppkey, all_nations.l_partkey, weight_string(all_nations.l_orderkey) from (select l_extendedprice * (1 - l_discount) as volume, l_orderkey as l_orderkey, l_suppkey as l_suppkey, l_partkey as l_partkey from lineitem) as all_nations order by all_nations.l_orderkey asc", - "Table": "lineitem" + "Query": "select all_nations.volume, all_nations.l_orderkey, all_nations.l_suppkey, all_nations.l_partkey, weight_string(all_nations.l_orderkey) from (select l_extendedprice * (1 - l_discount) as volume, l_orderkey as l_orderkey, l_suppkey as l_suppkey, l_partkey as l_partkey from lineitem) as all_nations order by all_nations.l_orderkey asc" }, { "OperatorType": "Route", @@ -877,7 +839,6 @@ }, "FieldQuery": "select 1 from part where 1 != 1", "Query": "select 1 from part where p_type = 'ECONOMY ANODIZED STEEL' and p_partkey = :l_partkey", - "Table": "part", "Values": [ ":l_partkey" ], @@ -892,7 +853,6 @@ "JoinVars": { "s_nationkey": 0 }, - "TableName": "supplier_nation", "Inputs": [ { "OperatorType": "Route", @@ -903,7 +863,6 @@ }, "FieldQuery": "select all_nations.s_nationkey from (select s_nationkey as s_nationkey from supplier where 1 != 1) as all_nations where 1 != 1", "Query": "select all_nations.s_nationkey from (select s_nationkey as s_nationkey from supplier where s_suppkey = :l_suppkey) as all_nations", - "Table": "supplier", "Values": [ ":l_suppkey" ], @@ -918,7 +877,6 @@ }, "FieldQuery": "select all_nations.nation, case when nation = 'BRAZIL' then :volume else 0 end from (select n2.n_name as nation from nation as n2 where 1 != 1) as all_nations where 1 != 1", "Query": "select all_nations.nation, case when nation = 'BRAZIL' then :volume else 0 end from (select n2.n_name as nation from nation as n2 where n2.n_nationkey = :s_nationkey) as all_nations", - "Table": "nation", "Values": [ ":s_nationkey" ], @@ -945,7 +903,6 @@ "JoinVars": { "c_nationkey": 2 }, - "TableName": "orders_customer_nation_region", "Inputs": [ { "OperatorType": "Projection", @@ -963,7 +920,6 @@ "JoinVars": { "o_custkey": 2 }, - "TableName": "orders_customer", "Inputs": [ { "OperatorType": "Route", @@ -974,7 +930,6 @@ }, "FieldQuery": "select count(*), o_year, all_nations.o_custkey, weight_string(o_year) from (select extract(year from o_orderdate) as o_year, o_custkey as o_custkey from orders where 1 != 1) as all_nations where 1 != 1 group by o_year, all_nations.o_custkey, weight_string(o_year)", "Query": "select count(*), o_year, all_nations.o_custkey, weight_string(o_year) from (select extract(year from o_orderdate) as o_year, o_custkey as o_custkey from orders where o_orderdate between date'1995-01-01' and date('1996-12-31') and o_orderkey = :l_orderkey) as all_nations group by o_year, all_nations.o_custkey, weight_string(o_year)", - "Table": "orders", "Values": [ ":l_orderkey" ], @@ -989,7 +944,6 @@ }, "FieldQuery": "select count(*), all_nations.c_nationkey from (select c_nationkey as c_nationkey from customer where 1 != 1) as all_nations where 1 != 1 group by all_nations.c_nationkey", "Query": "select count(*), all_nations.c_nationkey from (select c_nationkey as c_nationkey from customer where c_custkey = :o_custkey) as all_nations group by all_nations.c_nationkey", - "Table": "customer", "Values": [ ":o_custkey" ], @@ -1012,7 +966,6 @@ "JoinVars": { "n1_n_regionkey": 1 }, - "TableName": "nation_region", "Inputs": [ { "OperatorType": "Route", @@ -1023,7 +976,6 @@ }, "FieldQuery": "select count(*), n1.n_regionkey from nation as n1 where 1 != 1 group by n1.n_regionkey", "Query": "select count(*), n1.n_regionkey from nation as n1 where n1.n_nationkey = :c_nationkey group by n1.n_regionkey", - "Table": "nation", "Values": [ ":c_nationkey" ], @@ -1038,7 +990,6 @@ }, "FieldQuery": "select count(*) from region where 1 != 1 group by .0", "Query": "select count(*) from region where r_name = 'AMERICA' and r_regionkey = :n1_n_regionkey group by .0", - "Table": "region", "Values": [ ":n1_n_regionkey" ], @@ -1109,7 +1060,6 @@ "JoinVars": { "l_suppkey": 2 }, - "TableName": "orders_lineitem_part_partsupp_supplier_nation", "Inputs": [ { "OperatorType": "Aggregate", @@ -1128,7 +1078,6 @@ "l_quantity": 3, "l_suppkey": 4 }, - "TableName": "orders_lineitem_part_partsupp", "Inputs": [ { "OperatorType": "Sort", @@ -1142,7 +1091,6 @@ "JoinVars": { "o_orderkey": 1 }, - "TableName": "orders_lineitem_part", "Inputs": [ { "OperatorType": "Route", @@ -1152,8 +1100,7 @@ "Sharded": true }, "FieldQuery": "select profit.o_year, profit.o_orderkey, weight_string(profit.o_year) from (select extract(year from o_orderdate) as o_year, o_orderkey as o_orderkey from orders where 1 != 1) as profit where 1 != 1", - "Query": "select profit.o_year, profit.o_orderkey, weight_string(profit.o_year) from (select extract(year from o_orderdate) as o_year, o_orderkey as o_orderkey from orders) as profit", - "Table": "orders" + "Query": "select profit.o_year, profit.o_orderkey, weight_string(profit.o_year) from (select extract(year from o_orderdate) as o_year, o_orderkey as o_orderkey from orders) as profit" }, { "OperatorType": "Join", @@ -1162,7 +1109,6 @@ "JoinVars": { "l_partkey": 4 }, - "TableName": "lineitem_part", "Inputs": [ { "OperatorType": "VindexLookup", @@ -1185,7 +1131,6 @@ }, "FieldQuery": "select l_orderkey, l_linenumber from lineitem_map where 1 != 1", "Query": "select l_orderkey, l_linenumber from lineitem_map where l_orderkey in ::__vals", - "Table": "lineitem_map", "Values": [ "::l_orderkey" ], @@ -1199,8 +1144,7 @@ "Sharded": true }, "FieldQuery": "select profit.l_extendedprice, profit.l_discount, profit.l_quantity, profit.l_suppkey, profit.l_partkey, weight_string(profit.l_suppkey) from (select l_extendedprice, l_discount, l_quantity, l_suppkey as l_suppkey, l_partkey as l_partkey from lineitem where 1 != 1) as profit where 1 != 1", - "Query": "select profit.l_extendedprice, profit.l_discount, profit.l_quantity, profit.l_suppkey, profit.l_partkey, weight_string(profit.l_suppkey) from (select l_extendedprice, l_discount, l_quantity, l_suppkey as l_suppkey, l_partkey as l_partkey from lineitem where l_orderkey = :o_orderkey) as profit", - "Table": "lineitem" + "Query": "select profit.l_extendedprice, profit.l_discount, profit.l_quantity, profit.l_suppkey, profit.l_partkey, weight_string(profit.l_suppkey) from (select l_extendedprice, l_discount, l_quantity, l_suppkey as l_suppkey, l_partkey as l_partkey from lineitem where l_orderkey = :o_orderkey) as profit" } ] }, @@ -1213,7 +1157,6 @@ }, "FieldQuery": "select 1 from part where 1 != 1", "Query": "select 1 from part where p_name like '%green%' and p_partkey = :l_partkey", - "Table": "part", "Values": [ ":l_partkey" ], @@ -1246,7 +1189,6 @@ }, "FieldQuery": "select ps_partkey, ps_suppkey from partsupp_map where 1 != 1", "Query": "select ps_partkey, ps_suppkey from partsupp_map where ps_partkey in ::__vals", - "Table": "partsupp_map", "Values": [ "::ps_partkey" ], @@ -1260,8 +1202,7 @@ "Sharded": true }, "FieldQuery": "select profit.amount from (select :l_extendedprice * (1 - :l_discount) - ps_supplycost * :l_quantity as amount from partsupp where 1 != 1) as profit where 1 != 1", - "Query": "select profit.amount from (select :l_extendedprice * (1 - :l_discount) - ps_supplycost * :l_quantity as amount from partsupp where ps_partkey = :l_partkey and ps_suppkey = :l_suppkey) as profit", - "Table": "partsupp" + "Query": "select profit.amount from (select :l_extendedprice * (1 - :l_discount) - ps_supplycost * :l_quantity as amount from partsupp where ps_partkey = :l_partkey and ps_suppkey = :l_suppkey) as profit" } ] } @@ -1284,7 +1225,6 @@ "JoinVars": { "s_nationkey": 1 }, - "TableName": "supplier_nation", "Inputs": [ { "OperatorType": "Route", @@ -1295,7 +1235,6 @@ }, "FieldQuery": "select count(*), profit.s_nationkey from (select s_nationkey as s_nationkey from supplier where 1 != 1) as profit where 1 != 1 group by profit.s_nationkey", "Query": "select count(*), profit.s_nationkey from (select s_nationkey as s_nationkey from supplier where s_suppkey = :l_suppkey) as profit group by profit.s_nationkey", - "Table": "supplier", "Values": [ ":l_suppkey" ], @@ -1310,7 +1249,6 @@ }, "FieldQuery": "select count(*), nation, weight_string(nation) from (select n_name as nation from nation where 1 != 1) as profit where 1 != 1 group by nation, weight_string(nation)", "Query": "select count(*), nation, weight_string(nation) from (select n_name as nation from nation where n_nationkey = :s_nationkey) as profit group by nation, weight_string(nation)", - "Table": "nation", "Values": [ ":s_nationkey" ], @@ -1393,7 +1331,6 @@ "JoinVars": { "o_custkey": 1 }, - "TableName": "orders_lineitem_customer_nation", "Inputs": [ { "OperatorType": "Projection", @@ -1409,7 +1346,6 @@ "JoinVars": { "o_orderkey": 2 }, - "TableName": "orders_lineitem", "Inputs": [ { "OperatorType": "Route", @@ -1419,8 +1355,7 @@ "Sharded": true }, "FieldQuery": "select count(*), o_custkey, o_orderkey from orders where 1 != 1 group by o_custkey, o_orderkey", - "Query": "select count(*), o_custkey, o_orderkey from orders where o_orderdate >= date('1993-10-01') and o_orderdate < date('1993-10-01') + interval '3' month group by o_custkey, o_orderkey", - "Table": "orders" + "Query": "select count(*), o_custkey, o_orderkey from orders where o_orderdate >= date('1993-10-01') and o_orderdate < date('1993-10-01') + interval '3' month group by o_custkey, o_orderkey" }, { "OperatorType": "VindexLookup", @@ -1443,7 +1378,6 @@ }, "FieldQuery": "select l_orderkey, l_linenumber from lineitem_map where 1 != 1", "Query": "select l_orderkey, l_linenumber from lineitem_map where l_orderkey in ::__vals", - "Table": "lineitem_map", "Values": [ "::l_orderkey" ], @@ -1457,8 +1391,7 @@ "Sharded": true }, "FieldQuery": "select sum(l_extendedprice * (1 - l_discount)) as revenue from lineitem where 1 != 1 group by .0", - "Query": "select sum(l_extendedprice * (1 - l_discount)) as revenue from lineitem where l_returnflag = 'R' and l_orderkey = :o_orderkey group by .0", - "Table": "lineitem" + "Query": "select sum(l_extendedprice * (1 - l_discount)) as revenue from lineitem where l_returnflag = 'R' and l_orderkey = :o_orderkey group by .0" } ] } @@ -1493,7 +1426,6 @@ "JoinVars": { "c_nationkey": 7 }, - "TableName": "customer_nation", "Inputs": [ { "OperatorType": "Route", @@ -1504,7 +1436,6 @@ }, "FieldQuery": "select count(*), c_custkey, c_name, c_acctbal, c_phone, c_address, c_comment, c_nationkey, weight_string(c_custkey), weight_string(c_name), weight_string(c_acctbal), weight_string(c_phone), weight_string(c_address), weight_string(c_comment) from customer where 1 != 1 group by c_custkey, c_name, c_acctbal, c_phone, c_address, c_comment, c_nationkey, weight_string(c_custkey), weight_string(c_name), weight_string(c_acctbal), weight_string(c_phone), weight_string(c_address), weight_string(c_comment)", "Query": "select count(*), c_custkey, c_name, c_acctbal, c_phone, c_address, c_comment, c_nationkey, weight_string(c_custkey), weight_string(c_name), weight_string(c_acctbal), weight_string(c_phone), weight_string(c_address), weight_string(c_comment) from customer where c_custkey = :o_custkey group by c_custkey, c_name, c_acctbal, c_phone, c_address, c_comment, c_nationkey, weight_string(c_custkey), weight_string(c_name), weight_string(c_acctbal), weight_string(c_phone), weight_string(c_address), weight_string(c_comment)", - "Table": "customer", "Values": [ ":o_custkey" ], @@ -1519,7 +1450,6 @@ }, "FieldQuery": "select count(*), n_name, weight_string(n_name) from nation where 1 != 1 group by n_name, weight_string(n_name)", "Query": "select count(*), n_name, weight_string(n_name) from nation where n_nationkey = :c_nationkey group by n_name, weight_string(n_name)", - "Table": "nation", "Values": [ ":c_nationkey" ], @@ -1589,7 +1519,6 @@ "JoinVars": { "s_nationkey1": 2 }, - "TableName": "partsupp_supplier_nation", "Inputs": [ { "OperatorType": "Projection", @@ -1606,7 +1535,6 @@ "JoinVars": { "ps_suppkey1": 2 }, - "TableName": "partsupp_supplier", "Inputs": [ { "OperatorType": "Route", @@ -1616,8 +1544,7 @@ "Sharded": true }, "FieldQuery": "select sum(ps_supplycost * ps_availqty), 0.00001000000, ps_suppkey from partsupp where 1 != 1 group by ps_suppkey", - "Query": "select sum(ps_supplycost * ps_availqty), 0.00001000000, ps_suppkey from partsupp group by ps_suppkey", - "Table": "partsupp" + "Query": "select sum(ps_supplycost * ps_availqty), 0.00001000000, ps_suppkey from partsupp group by ps_suppkey" }, { "OperatorType": "Route", @@ -1628,7 +1555,6 @@ }, "FieldQuery": "select count(*), s_nationkey from supplier where 1 != 1 group by s_nationkey", "Query": "select count(*), s_nationkey from supplier where s_suppkey = :ps_suppkey1 group by s_nationkey", - "Table": "supplier", "Values": [ ":ps_suppkey1" ], @@ -1647,7 +1573,6 @@ }, "FieldQuery": "select count(*) from nation where 1 != 1 group by .0", "Query": "select count(*) from nation where n_name = 'GERMANY' and n_nationkey = :s_nationkey1 group by .0", - "Table": "nation", "Values": [ ":s_nationkey1" ], @@ -1693,7 +1618,6 @@ "JoinVars": { "s_nationkey": 2 }, - "TableName": "partsupp_supplier_nation", "Inputs": [ { "OperatorType": "Projection", @@ -1711,7 +1635,6 @@ "JoinVars": { "ps_suppkey": 2 }, - "TableName": "partsupp_supplier", "Inputs": [ { "OperatorType": "Route", @@ -1720,10 +1643,9 @@ "Name": "main", "Sharded": true }, - "FieldQuery": "select sum(ps_supplycost * ps_availqty) as value, ps_partkey, ps_suppkey, weight_string(ps_partkey) from partsupp where 1 != 1 group by ps_partkey, ps_suppkey, weight_string(ps_partkey)", + "FieldQuery": "select sum(ps_supplycost * ps_availqty) as `value`, ps_partkey, ps_suppkey, weight_string(ps_partkey) from partsupp where 1 != 1 group by ps_partkey, ps_suppkey, weight_string(ps_partkey)", "OrderBy": "(1|3) ASC", - "Query": "select sum(ps_supplycost * ps_availqty) as value, ps_partkey, ps_suppkey, weight_string(ps_partkey) from partsupp group by ps_partkey, ps_suppkey, weight_string(ps_partkey) order by ps_partkey asc", - "Table": "partsupp" + "Query": "select sum(ps_supplycost * ps_availqty) as `value`, ps_partkey, ps_suppkey, weight_string(ps_partkey) from partsupp group by ps_partkey, ps_suppkey, weight_string(ps_partkey) order by ps_partkey asc" }, { "OperatorType": "Route", @@ -1734,7 +1656,6 @@ }, "FieldQuery": "select count(*), s_nationkey from supplier where 1 != 1 group by s_nationkey", "Query": "select count(*), s_nationkey from supplier where s_suppkey = :ps_suppkey group by s_nationkey", - "Table": "supplier", "Values": [ ":ps_suppkey" ], @@ -1753,7 +1674,6 @@ }, "FieldQuery": "select count(*) from nation where 1 != 1 group by .0", "Query": "select count(*) from nation where n_name = 'GERMANY' and n_nationkey = :s_nationkey group by .0", - "Table": "nation", "Values": [ ":s_nationkey" ], @@ -1813,7 +1733,6 @@ "JoinVars": { "o_orderkey": 2 }, - "TableName": "orders_lineitem", "Inputs": [ { "OperatorType": "Route", @@ -1823,8 +1742,7 @@ "Sharded": true }, "FieldQuery": "select sum(case when o_orderpriority = '1-URGENT' or o_orderpriority = '2-HIGH' then 1 else 0 end) as high_line_count, sum(case when o_orderpriority != '1-URGENT' and o_orderpriority != '2-HIGH' then 1 else 0 end) as low_line_count, o_orderkey from orders where 1 != 1 group by o_orderkey", - "Query": "select sum(case when o_orderpriority = '1-URGENT' or o_orderpriority = '2-HIGH' then 1 else 0 end) as high_line_count, sum(case when o_orderpriority != '1-URGENT' and o_orderpriority != '2-HIGH' then 1 else 0 end) as low_line_count, o_orderkey from orders group by o_orderkey", - "Table": "orders" + "Query": "select sum(case when o_orderpriority = '1-URGENT' or o_orderpriority = '2-HIGH' then 1 else 0 end) as high_line_count, sum(case when o_orderpriority != '1-URGENT' and o_orderpriority != '2-HIGH' then 1 else 0 end) as low_line_count, o_orderkey from orders group by o_orderkey" }, { "OperatorType": "VindexLookup", @@ -1847,7 +1765,6 @@ }, "FieldQuery": "select l_orderkey, l_linenumber from lineitem_map where 1 != 1", "Query": "select l_orderkey, l_linenumber from lineitem_map where l_orderkey in ::__vals", - "Table": "lineitem_map", "Values": [ "::l_orderkey" ], @@ -1861,8 +1778,7 @@ "Sharded": true }, "FieldQuery": "select count(*), l_shipmode, weight_string(l_shipmode) from lineitem where 1 != 1 group by l_shipmode, weight_string(l_shipmode)", - "Query": "select count(*), l_shipmode, weight_string(l_shipmode) from lineitem where l_shipmode in ('MAIL', 'SHIP') and l_commitdate < l_receiptdate and l_shipdate < l_commitdate and l_receiptdate >= date('1994-01-01') and l_receiptdate < date('1994-01-01') + interval '1' year and l_orderkey = :o_orderkey group by l_shipmode, weight_string(l_shipmode)", - "Table": "lineitem" + "Query": "select count(*), l_shipmode, weight_string(l_shipmode) from lineitem where l_shipmode in ('MAIL', 'SHIP') and l_commitdate < l_receiptdate and l_shipdate < l_commitdate and l_receiptdate >= date('1994-01-01') and l_receiptdate < date('1994-01-01') + interval '1' year and l_orderkey = :o_orderkey group by l_shipmode, weight_string(l_shipmode)" } ] } @@ -1931,7 +1847,6 @@ "JoinVars": { "c_custkey": 1 }, - "TableName": "customer_orders", "Inputs": [ { "OperatorType": "Route", @@ -1942,8 +1857,7 @@ }, "FieldQuery": "select count(*), c_custkey, weight_string(c_custkey) from customer where 1 != 1 group by c_custkey, weight_string(c_custkey)", "OrderBy": "(1|2) ASC", - "Query": "select count(*), c_custkey, weight_string(c_custkey) from customer group by c_custkey, weight_string(c_custkey) order by c_custkey asc", - "Table": "customer" + "Query": "select count(*), c_custkey, weight_string(c_custkey) from customer group by c_custkey, weight_string(c_custkey) order by c_custkey asc" }, { "OperatorType": "Route", @@ -1953,8 +1867,7 @@ "Sharded": true }, "FieldQuery": "select count(o_orderkey) from orders where 1 != 1 group by .0", - "Query": "select count(o_orderkey) from orders where o_comment not like '%special%requests%' and o_custkey = :c_custkey group by .0", - "Table": "orders" + "Query": "select count(o_orderkey) from orders where o_comment not like '%special%requests%' and o_custkey = :c_custkey group by .0" } ] } @@ -2011,7 +1924,6 @@ "l_extendedprice": 0, "l_partkey": 3 }, - "TableName": "lineitem_part", "Inputs": [ { "OperatorType": "Route", @@ -2021,8 +1933,7 @@ "Sharded": true }, "FieldQuery": "select l_extendedprice, l_discount, l_extendedprice * (1 - l_discount), l_partkey from lineitem where 1 != 1", - "Query": "select l_extendedprice, l_discount, l_extendedprice * (1 - l_discount), l_partkey from lineitem where l_shipdate >= date('1995-09-01') and l_shipdate < date('1995-09-01') + interval '1' month", - "Table": "lineitem" + "Query": "select l_extendedprice, l_discount, l_extendedprice * (1 - l_discount), l_partkey from lineitem where l_shipdate >= date('1995-09-01') and l_shipdate < date('1995-09-01') + interval '1' month" }, { "OperatorType": "Route", @@ -2033,7 +1944,6 @@ }, "FieldQuery": "select case when p_type like 'PROMO%' then :l_extendedprice * (1 - :l_discount) else 0 end from part where 1 != 1", "Query": "select case when p_type like 'PROMO%' then :l_extendedprice * (1 - :l_discount) else 0 end from part where p_partkey = :l_partkey", - "Table": "part", "Values": [ ":l_partkey" ], @@ -2081,8 +1991,7 @@ "Sharded": true }, "FieldQuery": "select max(total_revenue), weight_string(max(total_revenue)) from revenue0 where 1 != 1", - "Query": "select max(total_revenue), weight_string(max(total_revenue)) from revenue0", - "Table": "revenue0" + "Query": "select max(total_revenue), weight_string(max(total_revenue)) from revenue0" } ] }, @@ -2097,8 +2006,7 @@ "FieldQuery": "select s_suppkey, s_name, s_address, s_phone, total_revenue, weight_string(s_suppkey) from supplier, revenue0 where 1 != 1", "OrderBy": "(0|5) ASC", "Query": "select s_suppkey, s_name, s_address, s_phone, total_revenue, weight_string(s_suppkey) from supplier, revenue0 where s_suppkey = supplier_no and total_revenue = :__sq1 order by supplier.s_suppkey asc", - "ResultColumns": 5, - "Table": "revenue0, supplier" + "ResultColumns": 5 } ] }, @@ -2140,7 +2048,6 @@ "ps_partkey": 1, "ps_suppkey": 0 }, - "TableName": "partsupp_part", "Inputs": [ { "OperatorType": "UncorrelatedSubquery", @@ -2159,8 +2066,7 @@ "Sharded": true }, "FieldQuery": "select s_suppkey from supplier where 1 != 1", - "Query": "select s_suppkey from supplier where s_comment like '%Customer%Complaints%'", - "Table": "supplier" + "Query": "select s_suppkey from supplier where s_comment like '%Customer%Complaints%'" }, { "InputName": "Outer", @@ -2171,8 +2077,7 @@ "Sharded": true }, "FieldQuery": "select ps_suppkey, ps_partkey, weight_string(ps_suppkey) from partsupp where 1 != 1", - "Query": "select ps_suppkey, ps_partkey, weight_string(ps_suppkey) from partsupp where not :__sq_has_values or ps_suppkey not in ::__sq1", - "Table": "partsupp" + "Query": "select ps_suppkey, ps_partkey, weight_string(ps_suppkey) from partsupp where not :__sq_has_values or ps_suppkey not in ::__sq1" } ] }, @@ -2185,7 +2090,6 @@ }, "FieldQuery": "select p_brand, p_type, p_size, weight_string(p_brand), weight_string(p_type), weight_string(p_size) from part where 1 != 1", "Query": "select p_brand, p_type, p_size, weight_string(p_brand), weight_string(p_type), weight_string(p_size) from part where p_brand != 'Brand#45' and p_type not like 'MEDIUM POLISHED%' and p_size in (49, 14, 23, 45, 19, 3, 36, 9) and p_partkey = :ps_partkey", - "Table": "part", "Values": [ ":ps_partkey" ], @@ -2246,8 +2150,7 @@ "Sharded": true }, "FieldQuery": "select l_orderkey from lineitem where 1 != 1 group by l_orderkey", - "Query": "select l_orderkey from lineitem group by l_orderkey having sum(l_quantity) > 300", - "Table": "lineitem" + "Query": "select l_orderkey from lineitem group by l_orderkey having sum(l_quantity) > 300" }, { "InputName": "Outer", @@ -2282,7 +2185,6 @@ "JoinVars": { "l_orderkey": 1 }, - "TableName": "lineitem_orders_customer", "Inputs": [ { "OperatorType": "Route", @@ -2292,8 +2194,7 @@ "Sharded": true }, "FieldQuery": "select sum(l_quantity), l_orderkey from lineitem where 1 != 1 group by l_orderkey", - "Query": "select sum(l_quantity), l_orderkey from lineitem group by l_orderkey", - "Table": "lineitem" + "Query": "select sum(l_quantity), l_orderkey from lineitem group by l_orderkey" }, { "OperatorType": "Projection", @@ -2318,7 +2219,6 @@ "JoinVars": { "o_custkey": 4 }, - "TableName": "orders_customer", "Inputs": [ { "OperatorType": "Route", @@ -2329,7 +2229,6 @@ }, "FieldQuery": "select count(*), o_orderkey, o_orderdate, o_totalprice, o_custkey, weight_string(o_totalprice), weight_string(o_orderdate), weight_string(o_orderkey) from orders where 1 != 1 group by o_orderkey, o_orderdate, o_totalprice, o_custkey, weight_string(o_totalprice), weight_string(o_orderdate), weight_string(o_orderkey)", "Query": "select count(*), o_orderkey, o_orderdate, o_totalprice, o_custkey, weight_string(o_totalprice), weight_string(o_orderdate), weight_string(o_orderkey) from orders where o_orderkey = :l_orderkey group by o_orderkey, o_orderdate, o_totalprice, o_custkey, weight_string(o_totalprice), weight_string(o_orderdate), weight_string(o_orderkey)", - "Table": "orders", "Values": [ ":l_orderkey" ], @@ -2344,7 +2243,6 @@ }, "FieldQuery": "select count(*), c_name, c_custkey, weight_string(c_name), weight_string(c_custkey) from customer where 1 != 1 group by c_name, c_custkey, weight_string(c_name), weight_string(c_custkey)", "Query": "select count(*), c_name, c_custkey, weight_string(c_name), weight_string(c_custkey) from customer where c_custkey = :o_custkey group by c_name, c_custkey, weight_string(c_name), weight_string(c_custkey)", - "Table": "customer", "Values": [ ":o_custkey" ], @@ -2403,7 +2301,6 @@ "l_shipinstruct": 4, "l_shipmode": 3 }, - "TableName": "lineitem_part", "Inputs": [ { "OperatorType": "Route", @@ -2413,8 +2310,7 @@ "Sharded": true }, "FieldQuery": "select sum(l_extendedprice * (1 - l_discount)) as revenue, l_partkey, l_quantity, l_shipmode, l_shipinstruct from lineitem where 1 != 1 group by l_partkey, l_quantity, l_shipmode, l_shipinstruct", - "Query": "select sum(l_extendedprice * (1 - l_discount)) as revenue, l_partkey, l_quantity, l_shipmode, l_shipinstruct from lineitem group by l_partkey, l_quantity, l_shipmode, l_shipinstruct", - "Table": "lineitem" + "Query": "select sum(l_extendedprice * (1 - l_discount)) as revenue, l_partkey, l_quantity, l_shipmode, l_shipinstruct from lineitem group by l_partkey, l_quantity, l_shipmode, l_shipinstruct" }, { "OperatorType": "Route", @@ -2424,8 +2320,7 @@ "Sharded": true }, "FieldQuery": "select count(*) from part where 1 != 1 group by .0", - "Query": "select count(*) from part where p_partkey = :l_partkey and p_brand = 'Brand#12' and p_container in ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG') and :l_quantity >= 1 and :l_quantity <= 1 + 10 and p_size between 1 and 5 and :l_shipmode in ('AIR', 'AIR REG') and :l_shipinstruct = 'DELIVER IN PERSON' or p_partkey = :l_partkey and p_brand = 'Brand#23' and p_container in ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK') and :l_quantity >= 10 and :l_quantity <= 10 + 10 and p_size between 1 and 10 and :l_shipmode in ('AIR', 'AIR REG') and :l_shipinstruct = 'DELIVER IN PERSON' or p_partkey = :l_partkey and p_brand = 'Brand#34' and p_container in ('LG CASE', 'LG BOX', 'LG PACK', 'LG PKG') and :l_quantity >= 20 and :l_quantity <= 20 + 10 and p_size between 1 and 15 and :l_shipmode in ('AIR', 'AIR REG') and :l_shipinstruct = 'DELIVER IN PERSON' group by .0", - "Table": "part" + "Query": "select count(*) from part where p_partkey = :l_partkey and p_brand = 'Brand#12' and p_container in ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG') and :l_quantity >= 1 and :l_quantity <= 1 + 10 and p_size between 1 and 5 and :l_shipmode in ('AIR', 'AIR REG') and :l_shipinstruct = 'DELIVER IN PERSON' or p_partkey = :l_partkey and p_brand = 'Brand#23' and p_container in ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK') and :l_quantity >= 10 and :l_quantity <= 10 + 10 and p_size between 1 and 10 and :l_shipmode in ('AIR', 'AIR REG') and :l_shipinstruct = 'DELIVER IN PERSON' or p_partkey = :l_partkey and p_brand = 'Brand#34' and p_container in ('LG CASE', 'LG BOX', 'LG PACK', 'LG PKG') and :l_quantity >= 20 and :l_quantity <= 20 + 10 and p_size between 1 and 15 and :l_shipmode in ('AIR', 'AIR REG') and :l_shipinstruct = 'DELIVER IN PERSON' group by .0" } ] } @@ -2487,7 +2382,6 @@ "JoinVars": { "l1_l_suppkey": 1 }, - "TableName": "lineitem_orders_supplier_nation", "Inputs": [ { "OperatorType": "Projection", @@ -2504,7 +2398,6 @@ "l1_l_orderkey": 2, "l1_l_suppkey": 1 }, - "TableName": "lineitem_orders", "Inputs": [ { "OperatorType": "Route", @@ -2514,8 +2407,7 @@ "Sharded": true }, "FieldQuery": "select count(*), l1.l_suppkey, l1.l_orderkey from lineitem as l1 where 1 != 1 group by l1.l_suppkey, l1.l_orderkey", - "Query": "select count(*), l1.l_suppkey, l1.l_orderkey from lineitem as l1 where l1.l_receiptdate > l1.l_commitdate and exists (select 1 from lineitem as l2 where l2.l_orderkey = l1.l_orderkey and l2.l_suppkey != l1.l_suppkey) and not exists (select 1 from lineitem as l3 where l3.l_orderkey = l1.l_orderkey and l3.l_suppkey != l1.l_suppkey and l3.l_receiptdate > l3.l_commitdate) group by l1.l_suppkey, l1.l_orderkey", - "Table": "lineitem" + "Query": "select count(*), l1.l_suppkey, l1.l_orderkey from lineitem as l1 where l1.l_receiptdate > l1.l_commitdate and exists (select 1 from lineitem as l2 where l2.l_orderkey = l1.l_orderkey and l2.l_suppkey != l1.l_suppkey) and not exists (select 1 from lineitem as l3 where l3.l_orderkey = l1.l_orderkey and l3.l_suppkey != l1.l_suppkey and l3.l_receiptdate > l3.l_commitdate) group by l1.l_suppkey, l1.l_orderkey" }, { "OperatorType": "Route", @@ -2526,7 +2418,6 @@ }, "FieldQuery": "select count(*) from orders where 1 != 1 group by .0", "Query": "select count(*) from orders where o_orderstatus = 'F' and o_orderkey = :l1_l_orderkey group by .0", - "Table": "orders", "Values": [ ":l1_l_orderkey" ], @@ -2551,7 +2442,6 @@ "JoinVars": { "s_nationkey": 2 }, - "TableName": "supplier_nation", "Inputs": [ { "OperatorType": "Route", @@ -2562,7 +2452,6 @@ }, "FieldQuery": "select count(*), s_name, s_nationkey, weight_string(s_name) from supplier where 1 != 1 group by s_name, s_nationkey, weight_string(s_name)", "Query": "select count(*), s_name, s_nationkey, weight_string(s_name) from supplier where s_suppkey = :l1_l_suppkey group by s_name, s_nationkey, weight_string(s_name)", - "Table": "supplier", "Values": [ ":l1_l_suppkey" ], @@ -2577,7 +2466,6 @@ }, "FieldQuery": "select count(*) from nation where 1 != 1 group by .0", "Query": "select count(*) from nation where n_name = 'SAUDI ARABIA' and n_nationkey = :s_nationkey group by .0", - "Table": "nation", "Values": [ ":s_nationkey" ], diff --git a/go/vt/vtgate/planbuilder/testdata/union_cases.json b/go/vt/vtgate/planbuilder/testdata/union_cases.json index f03fae2061e..ddd802f7ab2 100644 --- a/go/vt/vtgate/planbuilder/testdata/union_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/union_cases.json @@ -14,8 +14,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1 union all select id from music where 1 != 1", - "Query": "select id from `user` union all select id from music", - "Table": "`user`, music" + "Query": "select id from `user` union all select id from music" }, "TablesUsed": [ "user.music", @@ -45,8 +44,7 @@ "Sharded": true }, "FieldQuery": "select dt.c0 as id, weight_string(dt.c0) from (select id from `user` where 1 != 1 union select id from music where 1 != 1) as dt(c0) where 1 != 1", - "Query": "select dt.c0 as id, weight_string(dt.c0) from (select id from `user` union select id from music) as dt(c0)", - "Table": "`user`, music" + "Query": "select dt.c0 as id, weight_string(dt.c0) from (select id from `user` union select id from music) as dt(c0)" } ] }, @@ -84,7 +82,6 @@ }, "FieldQuery": "select 1 as col, case when 1 = 1 then 1 else 2 end from `user` where 1 != 1", "Query": "select 1 as col, case when 1 = 1 then 1 else 2 end from `user` where id = 14", - "Table": "`user`", "Values": [ "14" ], @@ -99,7 +96,6 @@ }, "FieldQuery": "select 2, case when 2 = 1 then 1 else 2 end from music where 1 != 1", "Query": "select 2, case when 2 = 1 then 1 else 2 end from music where user_id = 12", - "Table": "music", "Values": [ "12" ], @@ -136,7 +132,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where id = 1", - "Table": "`user`", "Values": [ "1" ], @@ -151,7 +146,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where id = 5", - "Table": "`user`", "Values": [ "5" ], @@ -194,8 +188,7 @@ }, "FieldQuery": "select id, weight_string(id) from `user` where 1 != 1", "OrderBy": "(0|1) DESC", - "Query": "select id, weight_string(id) from `user` order by `user`.id desc limit 1", - "Table": "`user`" + "Query": "select id, weight_string(id) from `user` order by `user`.id desc limit 1" } ] }, @@ -212,8 +205,7 @@ }, "FieldQuery": "select id, weight_string(id) from music where 1 != 1", "OrderBy": "(0|1) DESC", - "Query": "select id, weight_string(id) from music order by music.id desc limit 1", - "Table": "music" + "Query": "select id, weight_string(id) from music order by music.id desc limit 1" } ] } @@ -242,8 +234,7 @@ "Sharded": true }, "FieldQuery": "select col1, col2 from `user` where 1 != 1 union all select col1, col2 from user_extra where 1 != 1", - "Query": "select col1, col2 from `user` union all select col1, col2 from user_extra", - "Table": "`user`, user_extra" + "Query": "select col1, col2 from `user` union all select col1, col2 from user_extra" }, "TablesUsed": [ "user.user", @@ -266,8 +257,7 @@ "Sharded": true }, "FieldQuery": "select * from (select * from `user` where 1 != 1 union all select * from user_extra where 1 != 1) as t where 1 != 1", - "Query": "select * from (select * from `user` union all select * from user_extra) as t", - "Table": "`user`, user_extra" + "Query": "select * from (select * from `user` union all select * from user_extra) as t" }, "TablesUsed": [ "user.user", @@ -290,8 +280,7 @@ "Sharded": true }, "FieldQuery": "select col1, col2 from (select col1, col2 from `user` where 1 != 1 union all select col1, col2 from user_extra where 1 != 1) as t where 1 != 1", - "Query": "select col1, col2 from (select col1, col2 from `user` union all select col1, col2 from user_extra) as t", - "Table": "`user`, user_extra" + "Query": "select col1, col2 from (select col1, col2 from `user` union all select col1, col2 from user_extra) as t" }, "TablesUsed": [ "user.user", @@ -329,8 +318,7 @@ }, "FieldQuery": "select id, weight_string(id) from `user` where 1 != 1", "OrderBy": "(0|1) ASC", - "Query": "select id, weight_string(id) from `user` order by `user`.id asc limit 5", - "Table": "`user`" + "Query": "select id, weight_string(id) from `user` order by `user`.id asc limit 5" } ] }, @@ -347,8 +335,7 @@ }, "FieldQuery": "select id, weight_string(id) from music where 1 != 1", "OrderBy": "(0|1) DESC", - "Query": "select id, weight_string(id) from music order by music.id desc limit 5", - "Table": "music" + "Query": "select id, weight_string(id) from music order by music.id desc limit 5" } ] } @@ -377,8 +364,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1 union select id from `user` where 1 != 1 union all select id from `user` where 1 != 1", - "Query": "select id from `user` where id = 1 union select id from `user` where id = 1 union all select id from `user`", - "Table": "`user`" + "Query": "select id from `user` where id = 1 union select id from `user` where id = 1 union all select id from `user`" }, "TablesUsed": [ "user.user" @@ -410,8 +396,7 @@ "Sharded": false }, "FieldQuery": "select dt.c0 as CHARACTER_SET_NAME, weight_string(dt.c0) from (select CHARACTER_SET_NAME from information_schema.CHARACTER_SETS where 1 != 1) as dt(c0) where 1 != 1", - "Query": "select dt.c0 as CHARACTER_SET_NAME, weight_string(dt.c0) from (select distinct CHARACTER_SET_NAME from information_schema.CHARACTER_SETS) as dt(c0)", - "Table": "information_schema.CHARACTER_SETS" + "Query": "select dt.c0 as CHARACTER_SET_NAME, weight_string(dt.c0) from (select distinct CHARACTER_SET_NAME from information_schema.CHARACTER_SETS) as dt(c0)" }, { "OperatorType": "Route", @@ -421,8 +406,7 @@ "Sharded": false }, "FieldQuery": "select dt.c0 as user_name, weight_string(dt.c0) from (select user_name from unsharded where 1 != 1) as dt(c0) where 1 != 1", - "Query": "select dt.c0 as user_name, weight_string(dt.c0) from (select distinct user_name from unsharded) as dt(c0)", - "Table": "unsharded" + "Query": "select dt.c0 as user_name, weight_string(dt.c0) from (select distinct user_name from unsharded) as dt(c0)" } ] } @@ -459,8 +443,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1 union select id from music where 1 != 1 union select 1 from dual where 1 != 1", - "Query": "select id from `user` union select id from music union select 1 from dual", - "Table": "`user`, dual, music" + "Query": "select id from `user` union select id from music union select 1 from dual" } ] }, @@ -487,7 +470,6 @@ }, "FieldQuery": "select * from music where 1 != 1 union select * from `user` where 1 != 1", "Query": "select * from music where user_id = 1 union select * from `user` where id = 1", - "Table": "`user`, music", "Values": [ "1" ], @@ -541,7 +523,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -555,8 +536,7 @@ "Sharded": true }, "FieldQuery": "select 1 from music where 1 != 1", - "Query": "select distinct 1 from music where id = 1", - "Table": "music" + "Query": "select distinct 1 from music where id = 1" } ] }, @@ -581,7 +561,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -595,8 +574,7 @@ "Sharded": true }, "FieldQuery": "select 1 from music where 1 != 1", - "Query": "select distinct 1 from music where id = 2", - "Table": "music" + "Query": "select distinct 1 from music where id = 2" } ] } @@ -631,8 +609,7 @@ "Sharded": true }, "FieldQuery": "select dt.c0 as id, weight_string(dt.c0) from ((select id from `user` where 1 != 1) union (select id from `user` where 1 != 1)) as dt(c0) where 1 != 1", - "Query": "select dt.c0 as id, weight_string(dt.c0) from ((select id from `user` order by id desc) union (select id from `user` order by id asc)) as dt(c0)", - "Table": "`user`" + "Query": "select dt.c0 as id, weight_string(dt.c0) from ((select id from `user` order by id desc) union (select id from `user` order by id asc)) as dt(c0)" } ] }, @@ -662,8 +639,7 @@ "Sharded": true }, "FieldQuery": "select 1 from dual where 1 != 1 union select null from dual where 1 != 1 union select 1.0 from dual where 1 != 1 union select '1' from dual where 1 != 1 union select 2 from dual where 1 != 1 union select 2.0 from `user` where 1 != 1", - "Query": "select 1 from dual union select null from dual union select 1.0 from dual union select '1' from dual union select 2 from dual union select 2.0 from `user`", - "Table": "`user`, dual" + "Query": "select 1 from dual union select null from dual union select 1.0 from dual union select '1' from dual union select 2 from dual union select 2.0 from `user`" } ] }, @@ -695,7 +671,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,L:1,L:2,L:3", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -705,8 +680,7 @@ "Sharded": true }, "FieldQuery": "select `user`.id, `user`.`name`, weight_string(`user`.id), weight_string(`user`.`name`) from `user` where 1 != 1", - "Query": "select distinct `user`.id, `user`.`name`, weight_string(`user`.id), weight_string(`user`.`name`) from `user`", - "Table": "`user`" + "Query": "select distinct `user`.id, `user`.`name`, weight_string(`user`.id), weight_string(`user`.`name`) from `user`" }, { "OperatorType": "Route", @@ -716,8 +690,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select distinct 1 from user_extra where user_extra.extra = 'asdf'", - "Table": "user_extra" + "Query": "select distinct 1 from user_extra where user_extra.extra = 'asdf'" } ] }, @@ -729,8 +702,7 @@ "Sharded": true }, "FieldQuery": "select dt.c0 as b, dt.c1 as c, weight_string(dt.c0), weight_string(dt.c1) from (select 'b', 'c' from `user` where 1 != 1) as dt(c0, c1) where 1 != 1", - "Query": "select dt.c0 as b, dt.c1 as c, weight_string(dt.c0), weight_string(dt.c1) from (select distinct 'b', 'c' from `user`) as dt(c0, c1)", - "Table": "`user`" + "Query": "select dt.c0 as b, dt.c1 as c, weight_string(dt.c0), weight_string(dt.c1) from (select distinct 'b', 'c' from `user`) as dt(c0, c1)" } ] } @@ -768,14 +740,12 @@ "Sharded": true }, "FieldQuery": "select dt.c0 as b, dt.c1 as c, weight_string(dt.c0), weight_string(dt.c1) from (select 'b', 'c' from `user` where 1 != 1) as dt(c0, c1) where 1 != 1", - "Query": "select dt.c0 as b, dt.c1 as c, weight_string(dt.c0), weight_string(dt.c1) from (select distinct 'b', 'c' from `user`) as dt(c0, c1)", - "Table": "`user`" + "Query": "select dt.c0 as b, dt.c1 as c, weight_string(dt.c0), weight_string(dt.c1) from (select distinct 'b', 'c' from `user`) as dt(c0, c1)" }, { "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,L:1,L:2,L:3", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -785,8 +755,7 @@ "Sharded": true }, "FieldQuery": "select `user`.id, `user`.`name`, weight_string(`user`.id), weight_string(`user`.`name`) from `user` where 1 != 1", - "Query": "select distinct `user`.id, `user`.`name`, weight_string(`user`.id), weight_string(`user`.`name`) from `user`", - "Table": "`user`" + "Query": "select distinct `user`.id, `user`.`name`, weight_string(`user`.id), weight_string(`user`.`name`) from `user`" }, { "OperatorType": "Route", @@ -796,8 +765,7 @@ "Sharded": true }, "FieldQuery": "select 1 from user_extra where 1 != 1", - "Query": "select distinct 1 from user_extra where user_extra.extra = 'asdf'", - "Table": "user_extra" + "Query": "select distinct 1 from user_extra where user_extra.extra = 'asdf'" } ] } @@ -840,8 +808,7 @@ "Sharded": true }, "FieldQuery": "select count(*) as s from `user` where 1 != 1", - "Query": "select count(*) as s from `user`", - "Table": "`user`" + "Query": "select count(*) as s from `user`" } ] }, @@ -858,8 +825,7 @@ "Sharded": true }, "FieldQuery": "select count(*) as s from music where 1 != 1", - "Query": "select count(*) as s from music", - "Table": "music" + "Query": "select count(*) as s from music" } ] } @@ -895,8 +861,7 @@ "Sharded": true }, "FieldQuery": "select dt.c0 as id, weight_string(dt.c0) from (select id from `user` where 1 != 1 union select id + 1 from `user` where 1 != 1 union select user_id from user_extra where 1 != 1) as dt(c0) where 1 != 1", - "Query": "select dt.c0 as id, weight_string(dt.c0) from (select id from `user` union select id + 1 from `user` union select user_id from user_extra) as dt(c0)", - "Table": "`user`, user_extra" + "Query": "select dt.c0 as id, weight_string(dt.c0) from (select id from `user` union select id + 1 from `user` union select user_id from user_extra) as dt(c0)" } ] }, @@ -931,8 +896,7 @@ "Sharded": true }, "FieldQuery": "select dt.c0 as id, weight_string(dt.c0) from (select id from `user` where 1 != 1 union select id from music where 1 != 1) as dt(c0) where 1 != 1", - "Query": "select dt.c0 as id, weight_string(dt.c0) from (select id from `user` union select id from music) as dt(c0)", - "Table": "`user`, music" + "Query": "select dt.c0 as id, weight_string(dt.c0) from (select id from `user` union select id from music) as dt(c0)" }, { "OperatorType": "Route", @@ -942,8 +906,7 @@ "Sharded": false }, "FieldQuery": "select dt.c0 as `1`, weight_string(dt.c0) from (select 1 from unsharded where 1 != 1) as dt(c0) where 1 != 1", - "Query": "select dt.c0 as `1`, weight_string(dt.c0) from (select distinct 1 from unsharded) as dt(c0)", - "Table": "unsharded" + "Query": "select dt.c0 as `1`, weight_string(dt.c0) from (select distinct 1 from unsharded) as dt(c0)" } ] } @@ -981,8 +944,7 @@ "Sharded": true }, "FieldQuery": "select id from `user` where 1 != 1 union select 3 from dual where 1 != 1", - "Query": "select id from `user` union select 3 from dual limit :__upper_limit", - "Table": "`user`, dual" + "Query": "select id from `user` union select 3 from dual limit :__upper_limit" } ] } @@ -1009,8 +971,7 @@ "Sharded": false }, "FieldQuery": "(select 1 from unsharded where 1 != 1 union select 1 from unsharded where 1 != 1 union all select 1 from unsharded where 1 != 1) union select 1 from unsharded where 1 != 1 union all select 1 from unsharded where 1 != 1", - "Query": "(select 1 from unsharded union select 1 from unsharded union all select 1 from unsharded order by 1 asc) union select 1 from unsharded union all select 1 from unsharded order by 1 asc", - "Table": "unsharded" + "Query": "(select 1 from unsharded union select 1 from unsharded union all select 1 from unsharded order by 1 asc) union select 1 from unsharded union all select 1 from unsharded order by 1 asc" }, "TablesUsed": [ "main.unsharded" @@ -1041,8 +1002,7 @@ "Sharded": false }, "FieldQuery": "select table_comment from information_schema.`tables` where 1 != 1", - "Query": "select distinct table_comment from information_schema.`tables`", - "Table": "information_schema.`tables`" + "Query": "select distinct table_comment from information_schema.`tables`" }, { "OperatorType": "Route", @@ -1052,8 +1012,7 @@ "Sharded": false }, "FieldQuery": "select table_comment from information_schema.`tables` where 1 != 1", - "Query": "select distinct table_comment from information_schema.`tables`", - "Table": "information_schema.`tables`" + "Query": "select distinct table_comment from information_schema.`tables`" } ] } @@ -1086,8 +1045,7 @@ "Sharded": false }, "FieldQuery": "select dt.c0 as col, weight_string(dt.c0) from (select col from unsharded where 1 != 1 union select col2 from unsharded where 1 != 1) as dt(c0) where 1 != 1", - "Query": "select dt.c0 as col, weight_string(dt.c0) from (select col from unsharded union select col2 from unsharded) as dt(c0)", - "Table": "unsharded" + "Query": "select dt.c0 as col, weight_string(dt.c0) from (select col from unsharded union select col2 from unsharded) as dt(c0)" }, { "OperatorType": "Route", @@ -1097,8 +1055,7 @@ "Sharded": true }, "FieldQuery": "select dt.c0 as id, weight_string(dt.c0) from (select id from `user` where 1 != 1 union select col from user_extra where 1 != 1) as dt(c0) where 1 != 1", - "Query": "select dt.c0 as id, weight_string(dt.c0) from (select id from `user` union select col from user_extra) as dt(c0)", - "Table": "`user`, user_extra" + "Query": "select dt.c0 as id, weight_string(dt.c0) from (select id from `user` union select col from user_extra) as dt(c0)" } ] } @@ -1125,7 +1082,6 @@ "JoinVars": { "tbl1_id": 0 }, - "TableName": "`user`_`user`", "Inputs": [ { "OperatorType": "Concatenate", @@ -1143,8 +1099,7 @@ }, "FieldQuery": "select id, weight_string(id) from `user` where 1 != 1", "OrderBy": "(0|1) ASC", - "Query": "select id, weight_string(id) from `user` order by `user`.id asc limit 5", - "Table": "`user`" + "Query": "select id, weight_string(id) from `user` order by `user`.id asc limit 5" } ] }, @@ -1161,8 +1116,7 @@ }, "FieldQuery": "select id, weight_string(id) from `user` where 1 != 1", "OrderBy": "(0|1) DESC", - "Query": "select id, weight_string(id) from `user` order by `user`.id desc limit 5", - "Table": "`user`" + "Query": "select id, weight_string(id) from `user` order by `user`.id desc limit 5" } ] } @@ -1177,7 +1131,6 @@ }, "FieldQuery": "select tbl2.id from `user` as tbl2 where 1 != 1", "Query": "select tbl2.id from `user` as tbl2 where tbl2.id = :tbl1_id", - "Table": "`user`", "Values": [ ":tbl1_id" ], @@ -1238,8 +1191,7 @@ "Sharded": true }, "FieldQuery": "select dt.c0 as id, weight_string(dt.c0) from (select id from `user` where 1 != 1 union select 3 from dual where 1 != 1) as dt(c0) where 1 != 1", - "Query": "select dt.c0 as id, weight_string(dt.c0) from (select id from `user` union select 3 from dual) as dt(c0)", - "Table": "`user`, dual" + "Query": "select dt.c0 as id, weight_string(dt.c0) from (select id from `user` union select 3 from dual) as dt(c0)" } ] } @@ -1280,8 +1232,7 @@ "Sharded": true }, "FieldQuery": "select dt.c0 as id, dt.c1 as id, weight_string(dt.c0), weight_string(dt.c1) from (select id, id from `user` where 1 != 1 union select id, bar from user_extra where 1 != 1) as dt(c0, c1) where 1 != 1", - "Query": "select dt.c0 as id, dt.c1 as id, weight_string(dt.c0), weight_string(dt.c1) from (select id, id from `user` union select id, bar from user_extra) as dt(c0, c1)", - "Table": "`user`, user_extra" + "Query": "select dt.c0 as id, dt.c1 as id, weight_string(dt.c0), weight_string(dt.c1) from (select id, id from `user` union select id, bar from user_extra) as dt(c0, c1)" } ] } @@ -1323,8 +1274,7 @@ "Sharded": true }, "FieldQuery": "select dt.c0 as foo, weight_string(dt.c0) from (select id + 42 as foo from `user` where 1 != 1) as dt(c0) where 1 != 1", - "Query": "select dt.c0 as foo, weight_string(dt.c0) from (select distinct id + 42 as foo from `user`) as dt(c0)", - "Table": "`user`" + "Query": "select dt.c0 as foo, weight_string(dt.c0) from (select distinct id + 42 as foo from `user`) as dt(c0)" }, { "OperatorType": "Route", @@ -1334,8 +1284,7 @@ "Sharded": false }, "FieldQuery": "select dt.c0 as foo, weight_string(dt.c0) from (select 1 + id as foo from unsharded where 1 != 1) as dt(c0) where 1 != 1", - "Query": "select dt.c0 as foo, weight_string(dt.c0) from (select distinct 1 + id as foo from unsharded) as dt(c0)", - "Table": "unsharded" + "Query": "select dt.c0 as foo, weight_string(dt.c0) from (select distinct 1 + id as foo from unsharded) as dt(c0)" } ] } @@ -1379,8 +1328,7 @@ "FieldQuery": "select kcu.`COLUMN_NAME` from information_schema.key_column_usage as kcu where 1 != 1", "Query": "select distinct kcu.`COLUMN_NAME` from information_schema.key_column_usage as kcu where kcu.table_schema = :__vtschemaname /* VARCHAR */ and kcu.`table_name` = :kcu_table_name /* VARCHAR */", "SysTableTableName": "[kcu_table_name:'user_extra']", - "SysTableTableSchema": "['user']", - "Table": "information_schema.key_column_usage" + "SysTableTableSchema": "['user']" }, { "OperatorType": "Route", @@ -1392,8 +1340,7 @@ "FieldQuery": "select kcu.`COLUMN_NAME` from information_schema.key_column_usage as kcu where 1 != 1", "Query": "select distinct kcu.`COLUMN_NAME` from information_schema.key_column_usage as kcu where kcu.table_schema = :__vtschemaname /* VARCHAR */ and kcu.`table_name` = :kcu_table_name1 /* VARCHAR */", "SysTableTableName": "[kcu_table_name1:'music']", - "SysTableTableSchema": "['user']", - "Table": "information_schema.key_column_usage" + "SysTableTableSchema": "['user']" } ] } @@ -1419,7 +1366,6 @@ }, "FieldQuery": "select `name`, foo from (select `name`, id as foo from `user` where 1 != 1 union select 'extra', user_id from user_extra where 1 != 1) as X where 1 != 1", "Query": "select `name`, foo from (select `name`, id as foo from `user` where id = 3 union select 'extra', user_id from user_extra where user_id = 3) as X", - "Table": "`user`, user_extra", "Values": [ "3" ], @@ -1472,8 +1418,7 @@ "FieldQuery": "select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as kcu where 1 != 1", "Query": "select distinct `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as kcu where kcu.table_schema = :__vtschemaname /* VARCHAR */ and kcu.`table_name` = :kcu_table_name /* VARCHAR */", "SysTableTableName": "[kcu_table_name:'user_extra']", - "SysTableTableSchema": "['user']", - "Table": "information_schema.key_column_usage" + "SysTableTableSchema": "['user']" }, { "OperatorType": "Route", @@ -1485,8 +1430,7 @@ "FieldQuery": "select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as kcu where 1 != 1", "Query": "select distinct `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as kcu where kcu.table_schema = :__vtschemaname /* VARCHAR */ and kcu.`table_name` = :kcu_table_name1 /* VARCHAR */", "SysTableTableName": "[kcu_table_name1:'music']", - "SysTableTableSchema": "['user']", - "Table": "information_schema.key_column_usage" + "SysTableTableSchema": "['user']" } ] } @@ -1511,8 +1455,7 @@ "Sharded": false }, "FieldQuery": "select * from (select * from unsharded where 1 != 1) as last_failed where 1 != 1 union all select * from (select * from unsharded where 1 != 1) as last_succeeded where 1 != 1", - "Query": "select * from (select * from unsharded where branchId = 203622 and buildNumber <= 113893 and state = 'FAILED' order by buildNumber desc limit 1) as last_failed union all select * from (select * from unsharded where branchId = 203622 and buildNumber <= 113893 and state = 'SUCCEEDED' order by buildNumber desc limit 1) as last_succeeded order by buildNumber desc limit 1", - "Table": "unsharded" + "Query": "select * from (select * from unsharded where branchId = 203622 and buildNumber <= 113893 and state = 'FAILED' order by buildNumber desc limit 1) as last_failed union all select * from (select * from unsharded where branchId = 203622 and buildNumber <= 113893 and state = 'SUCCEEDED' order by buildNumber desc limit 1) as last_succeeded order by buildNumber desc limit 1" }, "TablesUsed": [ "main.unsharded" @@ -1546,14 +1489,12 @@ "Sharded": false }, "FieldQuery": "select dt.c0 as id, dt.c1 as foo, dt.c2 as bar, weight_string(dt.c0), weight_string(dt.c1), weight_string(dt.c2) from (select id, foo, bar from unsharded where 1 != 1) as dt(c0, c1, c2) where 1 != 1", - "Query": "select dt.c0 as id, dt.c1 as foo, dt.c2 as bar, weight_string(dt.c0), weight_string(dt.c1), weight_string(dt.c2) from (select distinct id, foo, bar from unsharded) as dt(c0, c1, c2)", - "Table": "unsharded" + "Query": "select dt.c0 as id, dt.c1 as foo, dt.c2 as bar, weight_string(dt.c0), weight_string(dt.c1), weight_string(dt.c2) from (select distinct id, foo, bar from unsharded) as dt(c0, c1, c2)" }, { "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,L:1,R:0,L:2,L:3,R:1", - "TableName": "`user`_authoritative", "Inputs": [ { "OperatorType": "Route", @@ -1563,8 +1504,7 @@ "Sharded": true }, "FieldQuery": "select `user`.intcol, `user`.textcol2, weight_string(`user`.intcol), weight_string(`user`.textcol2) from `user` where 1 != 1", - "Query": "select distinct `user`.intcol, `user`.textcol2, weight_string(`user`.intcol), weight_string(`user`.textcol2) from `user`", - "Table": "`user`" + "Query": "select distinct `user`.intcol, `user`.textcol2, weight_string(`user`.intcol), weight_string(`user`.textcol2) from `user`" }, { "OperatorType": "Route", @@ -1574,8 +1514,7 @@ "Sharded": true }, "FieldQuery": "select authoritative.col2, weight_string(authoritative.col2) from authoritative where 1 != 1", - "Query": "select distinct authoritative.col2, weight_string(authoritative.col2) from authoritative", - "Table": "authoritative" + "Query": "select distinct authoritative.col2, weight_string(authoritative.col2) from authoritative" } ] } @@ -1605,8 +1544,7 @@ "Sharded": true }, "FieldQuery": "select foo, foo, foo from `user` where 1 != 1 union all select bar, baz, toto from music where 1 != 1", - "Query": "select foo, foo, foo from `user` union all select bar, baz, toto from music", - "Table": "`user`, music" + "Query": "select foo, foo, foo from `user` union all select bar, baz, toto from music" }, "TablesUsed": [ "user.music", @@ -1629,8 +1567,7 @@ "Sharded": true }, "FieldQuery": "select bar, baz, toto from music where 1 != 1 union all select foo, foo, foo from `user` where 1 != 1", - "Query": "select bar, baz, toto from music union all select foo, foo, foo from `user`", - "Table": "`user`, music" + "Query": "select bar, baz, toto from music union all select foo, foo, foo from `user`" }, "TablesUsed": [ "user.music", @@ -1662,8 +1599,7 @@ "Sharded": true }, "FieldQuery": "select dt.c0 as bar, dt.c1 as baz, dt.c2 as toto, weight_string(dt.c0), weight_string(dt.c1), weight_string(dt.c2) from (select bar, baz, toto from music where 1 != 1 union select foo, foo, foo from `user` where 1 != 1) as dt(c0, c1, c2) where 1 != 1", - "Query": "select dt.c0 as bar, dt.c1 as baz, dt.c2 as toto, weight_string(dt.c0), weight_string(dt.c1), weight_string(dt.c2) from (select bar, baz, toto from music union select foo, foo, foo from `user`) as dt(c0, c1, c2)", - "Table": "`user`, music" + "Query": "select dt.c0 as bar, dt.c1 as baz, dt.c2 as toto, weight_string(dt.c0), weight_string(dt.c1), weight_string(dt.c2) from (select bar, baz, toto from music union select foo, foo, foo from `user`) as dt(c0, c1, c2)" } ] }, @@ -1697,8 +1633,7 @@ "Sharded": true }, "FieldQuery": "select dt.c0 as foo, dt.c1 as foo, dt.c2 as foo, weight_string(dt.c0), weight_string(dt.c1), weight_string(dt.c2) from (select foo, foo, foo from `user` where 1 != 1 union select bar, baz, toto from music where 1 != 1) as dt(c0, c1, c2) where 1 != 1", - "Query": "select dt.c0 as foo, dt.c1 as foo, dt.c2 as foo, weight_string(dt.c0), weight_string(dt.c1), weight_string(dt.c2) from (select foo, foo, foo from `user` union select bar, baz, toto from music) as dt(c0, c1, c2)", - "Table": "`user`, music" + "Query": "select dt.c0 as foo, dt.c1 as foo, dt.c2 as foo, weight_string(dt.c0), weight_string(dt.c1), weight_string(dt.c2) from (select foo, foo, foo from `user` union select bar, baz, toto from music) as dt(c0, c1, c2)" } ] }, @@ -1722,7 +1657,6 @@ "JoinVars": { "t1_foo": 0 }, - "TableName": "`user`_music", "Inputs": [ { "OperatorType": "Distinct", @@ -1738,8 +1672,7 @@ "Sharded": true }, "FieldQuery": "select dt.c0 as foo, weight_string(dt.c0) from (select foo from `user` where 1 != 1 union select foo from `user` where 1 != 1) as dt(c0) where 1 != 1", - "Query": "select dt.c0 as foo, weight_string(dt.c0) from (select foo from `user` where bar = 12 union select foo from `user` where bar = 134) as dt(c0)", - "Table": "`user`" + "Query": "select dt.c0 as foo, weight_string(dt.c0) from (select foo from `user` where bar = 12 union select foo from `user` where bar = 134) as dt(c0)" } ] }, @@ -1757,8 +1690,7 @@ "Sharded": true }, "FieldQuery": "select dt.c0 as bar, weight_string(dt.c0) from (select bar from music where 1 != 1 union select bar from music where 1 != 1) as dt(c0) where 1 != 1", - "Query": "select dt.c0 as bar, weight_string(dt.c0) from (select bar from music where foo = 12 and bar = :t1_foo union select bar from music where foo = 1234 and bar = :t1_foo) as dt(c0)", - "Table": "music" + "Query": "select dt.c0 as bar, weight_string(dt.c0) from (select bar from music where foo = 12 and bar = :t1_foo union select bar from music where foo = 1234 and bar = :t1_foo) as dt(c0)" } ] } @@ -1791,8 +1723,7 @@ "Sharded": true }, "FieldQuery": "select 1 from `user` where 1 != 1 union select 2 from `user` where 1 != 1", - "Query": "select 1 from `user` union select 2 from `user`", - "Table": "`user`" + "Query": "select 1 from `user` union select 2 from `user`" } ] }, @@ -1822,8 +1753,7 @@ "Sharded": true }, "FieldQuery": "select col1 from `user` where 1 != 1 union select 3 from `user` where 1 != 1", - "Query": "select col1 from `user` union select 3 from `user`", - "Table": "`user`" + "Query": "select col1 from `user` union select 3 from `user`" } ] }, @@ -1853,8 +1783,7 @@ "Sharded": true }, "FieldQuery": "select 3 from `user` where 1 != 1 union select col1 from `user` where 1 != 1", - "Query": "select 3 from `user` union select col1 from `user`", - "Table": "`user`" + "Query": "select 3 from `user` union select col1 from `user`" } ] }, @@ -1884,8 +1813,7 @@ "Sharded": true }, "FieldQuery": "select 3 from `user` where 1 != 1 union select now() from `user` where 1 != 1", - "Query": "select 3 from `user` union select now() from `user`", - "Table": "`user`" + "Query": "select 3 from `user` union select now() from `user`" } ] }, @@ -1915,8 +1843,7 @@ "Sharded": true }, "FieldQuery": "select now() from `user` where 1 != 1 union select 3 from `user` where 1 != 1", - "Query": "select now() from `user` union select 3 from `user`", - "Table": "`user`" + "Query": "select now() from `user` union select 3 from `user`" } ] }, @@ -1946,8 +1873,7 @@ "Sharded": true }, "FieldQuery": "select now() from `user` where 1 != 1 union select id from `user` where 1 != 1", - "Query": "select now() from `user` union select id from `user`", - "Table": "`user`" + "Query": "select now() from `user` union select id from `user`" } ] }, @@ -1982,8 +1908,7 @@ }, "FieldQuery": "select 'a' as type, 0 as id, '' from `user` where 1 != 1 group by ''", "OrderBy": "2 ASC COLLATE utf8mb4_0900_ai_ci", - "Query": "select 'a' as type, 0 as id, '' from `user` group by '' order by '' asc", - "Table": "`user`" + "Query": "select 'a' as type, 0 as id, '' from `user` group by '' order by '' asc" } ] }, @@ -1995,8 +1920,7 @@ "Sharded": true }, "FieldQuery": "select 'c' as type, 0 as id from user_extra as t where 1 != 1", - "Query": "select 'c' as type, 0 as id from user_extra as t", - "Table": "user_extra" + "Query": "select 'c' as type, 0 as id from user_extra as t" } ] }, diff --git a/go/vt/vtgate/planbuilder/testdata/vexplain_cases.json b/go/vt/vtgate/planbuilder/testdata/vexplain_cases.json index 6453127045c..07b17f19617 100644 --- a/go/vt/vtgate/planbuilder/testdata/vexplain_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/vexplain_cases.json @@ -34,8 +34,7 @@ "Sharded": true }, "FieldQuery": "select * from `user` where 1 != 1", - "Query": "select * from `user`", - "Table": "`user`" + "Query": "select * from `user`" } ] }, @@ -63,8 +62,7 @@ "Sharded": true }, "FieldQuery": "select * from `user` where 1 != 1", - "Query": "select * from `user`", - "Table": "`user`" + "Query": "select * from `user`" } ] }, diff --git a/go/vt/vtgate/planbuilder/testdata/vindex_func_cases.json b/go/vt/vtgate/planbuilder/testdata/vindex_func_cases.json index 5d62aa7258c..71c71929f61 100644 --- a/go/vt/vtgate/planbuilder/testdata/vindex_func_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/vindex_func_cases.json @@ -157,7 +157,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0,R:0", - "TableName": "_unsharded", "Inputs": [ { "OperatorType": "VindexFunc", @@ -179,8 +178,7 @@ "Sharded": false }, "FieldQuery": "select unsharded.id from unsharded where 1 != 1", - "Query": "select unsharded.id from unsharded", - "Table": "unsharded" + "Query": "select unsharded.id from unsharded" } ] }, @@ -201,7 +199,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "R:0,L:0", - "TableName": "unsharded_", "Inputs": [ { "OperatorType": "Route", @@ -211,8 +208,7 @@ "Sharded": false }, "FieldQuery": "select unsharded.id from unsharded where 1 != 1", - "Query": "select unsharded.id from unsharded", - "Table": "unsharded" + "Query": "select unsharded.id from unsharded" }, { "OperatorType": "VindexFunc", @@ -248,7 +244,6 @@ "JoinVars": { "user_index_id": 0 }, - "TableName": "_unsharded", "Inputs": [ { "OperatorType": "VindexFunc", @@ -272,8 +267,7 @@ "Sharded": false }, "FieldQuery": "select unsharded.id from unsharded where 1 != 1", - "Query": "select unsharded.id from unsharded where unsharded.id = :user_index_id /* VARBINARY */", - "Table": "unsharded" + "Query": "select unsharded.id from unsharded where unsharded.id = :user_index_id /* VARBINARY */" } ] }, @@ -297,7 +291,6 @@ "JoinVars": { "user_index_id": 1 }, - "TableName": "_unsharded", "Inputs": [ { "OperatorType": "VindexFunc", @@ -321,8 +314,7 @@ "Sharded": false }, "FieldQuery": "select unsharded.id from unsharded where 1 != 1", - "Query": "select unsharded.id from unsharded where unsharded.id = :user_index_id /* VARBINARY */", - "Table": "unsharded" + "Query": "select unsharded.id from unsharded where unsharded.id = :user_index_id /* VARBINARY */" } ] }, @@ -346,7 +338,6 @@ "JoinVars": { "user_index_id": 1 }, - "TableName": "_unsharded", "Inputs": [ { "OperatorType": "VindexFunc", @@ -370,8 +361,7 @@ "Sharded": false }, "FieldQuery": "select unsharded.id from unsharded where 1 != 1", - "Query": "select unsharded.id from unsharded where unsharded.id = :user_index_id /* VARBINARY */", - "Table": "unsharded" + "Query": "select unsharded.id from unsharded where unsharded.id = :user_index_id /* VARBINARY */" } ] }, @@ -395,7 +385,6 @@ "JoinVars": { "ui_id": 1 }, - "TableName": "_unsharded", "Inputs": [ { "OperatorType": "VindexFunc", @@ -419,8 +408,7 @@ "Sharded": false }, "FieldQuery": "select unsharded.id from unsharded where 1 != 1", - "Query": "select unsharded.id from unsharded where unsharded.id = :ui_id /* VARBINARY */", - "Table": "unsharded" + "Query": "select unsharded.id from unsharded where unsharded.id = :ui_id /* VARBINARY */" } ] }, diff --git a/go/vt/vtgate/planbuilder/testdata/wireup_cases.json b/go/vt/vtgate/planbuilder/testdata/wireup_cases.json index 4b2ea65923f..00d8470d094 100644 --- a/go/vt/vtgate/planbuilder/testdata/wireup_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/wireup_cases.json @@ -13,7 +13,6 @@ "JoinVars": { "e_id": 1 }, - "TableName": "user_extra_`user`", "Inputs": [ { "OperatorType": "Route", @@ -23,8 +22,7 @@ "Sharded": true }, "FieldQuery": "select e.col, e.id as eid from user_extra as e where 1 != 1", - "Query": "select e.col, e.id as eid from user_extra as e", - "Table": "user_extra" + "Query": "select e.col, e.id as eid from user_extra as e" }, { "OperatorType": "Route", @@ -35,7 +33,6 @@ }, "FieldQuery": "select u.id as uid from `user` as u where 1 != 1", "Query": "select u.id as uid from `user` as u where u.id = :e_id", - "Table": "`user`", "Values": [ ":e_id" ], @@ -63,7 +60,6 @@ "JoinVars": { "e_id": 1 }, - "TableName": "user_extra_`user`", "Inputs": [ { "OperatorType": "Route", @@ -73,8 +69,7 @@ "Sharded": true }, "FieldQuery": "select e.col, e.id as eid from user_extra as e where 1 != 1", - "Query": "select e.col, e.id as eid from user_extra as e where e.col = :uid", - "Table": "user_extra" + "Query": "select e.col, e.id as eid from user_extra as e where e.col = :uid" }, { "OperatorType": "Route", @@ -85,7 +80,6 @@ }, "FieldQuery": "select u.id as uid from `user` as u where 1 != 1", "Query": "select u.id as uid from `user` as u where u.id = :e_id", - "Table": "`user`", "Values": [ ":e_id" ], @@ -110,7 +104,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "R:0", - "TableName": "`user`_`user`_`user`", "Inputs": [ { "OperatorType": "Route", @@ -120,8 +113,7 @@ "Sharded": true }, "FieldQuery": "select 1 from `user` as u2 where 1 != 1", - "Query": "select 1 from `user` as u2", - "Table": "`user`" + "Query": "select 1 from `user` as u2" }, { "OperatorType": "Join", @@ -130,7 +122,6 @@ "JoinVars": { "u1_col": 1 }, - "TableName": "`user`_`user`", "Inputs": [ { "OperatorType": "Route", @@ -140,8 +131,7 @@ "Sharded": true }, "FieldQuery": "select u1.id, u1.col from `user` as u1 where 1 != 1", - "Query": "select u1.id, u1.col from `user` as u1", - "Table": "`user`" + "Query": "select u1.id, u1.col from `user` as u1" }, { "OperatorType": "Route", @@ -151,8 +141,7 @@ "Sharded": true }, "FieldQuery": "select 1 from `user` as u3 where 1 != 1", - "Query": "select 1 from `user` as u3 where u3.col = :u1_col /* INT16 */", - "Table": "`user`" + "Query": "select 1 from `user` as u3 where u3.col = :u1_col /* INT16 */" } ] } @@ -174,7 +163,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_`user`_`user`", "Inputs": [ { "OperatorType": "Route", @@ -184,8 +172,7 @@ "Sharded": true }, "FieldQuery": "select u1.id from `user` as u1 where 1 != 1", - "Query": "select u1.id from `user` as u1", - "Table": "`user`" + "Query": "select u1.id from `user` as u1" }, { "OperatorType": "Join", @@ -193,7 +180,6 @@ "JoinVars": { "u2_col": 0 }, - "TableName": "`user`_`user`", "Inputs": [ { "OperatorType": "Route", @@ -203,8 +189,7 @@ "Sharded": true }, "FieldQuery": "select u2.col from `user` as u2 where 1 != 1", - "Query": "select u2.col from `user` as u2", - "Table": "`user`" + "Query": "select u2.col from `user` as u2" }, { "OperatorType": "Route", @@ -214,8 +199,7 @@ "Sharded": true }, "FieldQuery": "select 1 from `user` as u3 where 1 != 1", - "Query": "select 1 from `user` as u3 where u3.col = :u2_col /* INT16 */", - "Table": "`user`" + "Query": "select 1 from `user` as u3 where u3.col = :u2_col /* INT16 */" } ] } @@ -240,7 +224,6 @@ "JoinVars": { "u3_col": 0 }, - "TableName": "`user`_`user`_`user`", "Inputs": [ { "OperatorType": "Route", @@ -250,8 +233,7 @@ "Sharded": true }, "FieldQuery": "select u3.col from `user` as u3 where 1 != 1", - "Query": "select u3.col from `user` as u3", - "Table": "`user`" + "Query": "select u3.col from `user` as u3" }, { "OperatorType": "Join", @@ -260,7 +242,6 @@ "JoinVars": { "u1_col": 1 }, - "TableName": "`user`_`user`", "Inputs": [ { "OperatorType": "Route", @@ -270,8 +251,7 @@ "Sharded": true }, "FieldQuery": "select u1.id, u1.col from `user` as u1 where 1 != 1", - "Query": "select u1.id, u1.col from `user` as u1 where u1.col = :u3_col /* INT16 */", - "Table": "`user`" + "Query": "select u1.id, u1.col from `user` as u1 where u1.col = :u3_col /* INT16 */" }, { "OperatorType": "Route", @@ -281,8 +261,7 @@ "Sharded": true }, "FieldQuery": "select 1 from `user` as u2 where 1 != 1", - "Query": "select 1 from `user` as u2 where u2.col = :u1_col /* INT16 */", - "Table": "`user`" + "Query": "select 1 from `user` as u2 where u2.col = :u1_col /* INT16 */" } ] } @@ -304,7 +283,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "R:0", - "TableName": "`user`_`user`_`user`_`user`", "Inputs": [ { "OperatorType": "Route", @@ -314,8 +292,7 @@ "Sharded": true }, "FieldQuery": "select 1 from `user` as u2 where 1 != 1", - "Query": "select 1 from `user` as u2", - "Table": "`user`" + "Query": "select 1 from `user` as u2" }, { "OperatorType": "Join", @@ -324,7 +301,6 @@ "JoinVars": { "u4_col": 0 }, - "TableName": "`user`_`user`_`user`", "Inputs": [ { "OperatorType": "Route", @@ -334,8 +310,7 @@ "Sharded": true }, "FieldQuery": "select u4.col from `user` as u4 where 1 != 1", - "Query": "select u4.col from `user` as u4", - "Table": "`user`" + "Query": "select u4.col from `user` as u4" }, { "OperatorType": "Join", @@ -344,7 +319,6 @@ "JoinVars": { "u1_col": 1 }, - "TableName": "`user`_`user`", "Inputs": [ { "OperatorType": "Route", @@ -354,8 +328,7 @@ "Sharded": true }, "FieldQuery": "select u1.id, u1.col from `user` as u1 where 1 != 1", - "Query": "select u1.id, u1.col from `user` as u1 where u1.col = :u4_col /* INT16 */", - "Table": "`user`" + "Query": "select u1.id, u1.col from `user` as u1 where u1.col = :u4_col /* INT16 */" }, { "OperatorType": "Route", @@ -366,7 +339,6 @@ }, "FieldQuery": "select 1 from `user` as u3 where 1 != 1", "Query": "select 1 from `user` as u3 where u3.id = :u1_col /* INT16 */", - "Table": "`user`", "Values": [ ":u1_col" ], @@ -397,7 +369,6 @@ "JoinVars": { "u1_col": 1 }, - "TableName": "`user`_`user`_`user`", "Inputs": [ { "OperatorType": "Join", @@ -406,7 +377,6 @@ "JoinVars": { "u1_col": 1 }, - "TableName": "`user`_`user`", "Inputs": [ { "OperatorType": "Route", @@ -416,8 +386,7 @@ "Sharded": true }, "FieldQuery": "select u1.id, u1.col from `user` as u1 where 1 != 1", - "Query": "select u1.id, u1.col from `user` as u1", - "Table": "`user`" + "Query": "select u1.id, u1.col from `user` as u1" }, { "OperatorType": "Route", @@ -428,7 +397,6 @@ }, "FieldQuery": "select 1 from `user` as u2 where 1 != 1", "Query": "select 1 from `user` as u2 where u2.id = :u1_col /* INT16 */", - "Table": "`user`", "Values": [ ":u1_col" ], @@ -445,7 +413,6 @@ }, "FieldQuery": "select 1 from `user` as u3 where 1 != 1", "Query": "select 1 from `user` as u3 where u3.id = :u1_col /* INT16 */", - "Table": "`user`", "Values": [ ":u1_col" ], @@ -472,7 +439,6 @@ "JoinVars": { "unsharded_id": 1 }, - "TableName": "unsharded_`weird``name`", "Inputs": [ { "OperatorType": "Route", @@ -482,8 +448,7 @@ "Sharded": false }, "FieldQuery": "select unsharded.b, unsharded.id from unsharded where 1 != 1", - "Query": "select unsharded.b, unsharded.id from unsharded", - "Table": "unsharded" + "Query": "select unsharded.b, unsharded.id from unsharded" }, { "OperatorType": "Route", @@ -494,7 +459,6 @@ }, "FieldQuery": "select `weird``name`.a from `weird``name` where 1 != 1", "Query": "select `weird``name`.a from `weird``name` where `weird``name`.`a``b*c` = :unsharded_id", - "Table": "`weird``name`", "Values": [ ":unsharded_id" ], @@ -522,7 +486,6 @@ "JoinVars": { "unsharded_id": 1 }, - "TableName": "unsharded_`weird``name`", "Inputs": [ { "OperatorType": "Route", @@ -532,8 +495,7 @@ "Sharded": false }, "FieldQuery": "select unsharded.b, unsharded.id from unsharded where 1 != 1", - "Query": "select unsharded.b, unsharded.id from unsharded", - "Table": "unsharded" + "Query": "select unsharded.b, unsharded.id from unsharded" }, { "OperatorType": "Route", @@ -544,7 +506,6 @@ }, "FieldQuery": "select 1 from `weird``name` where 1 != 1", "Query": "select 1 from `weird``name` where `weird``name`.`a``b*c` = :unsharded_id", - "Table": "`weird``name`", "Values": [ ":unsharded_id" ], @@ -576,7 +537,6 @@ "JoinVars": { "u_col": 1 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -586,8 +546,7 @@ "Sharded": true }, "FieldQuery": "select u.id, u.col from `user` as u where 1 != 1", - "Query": "select u.id, u.col from `user` as u", - "Table": "`user`" + "Query": "select u.id, u.col from `user` as u" }, { "OperatorType": "Limit", @@ -601,8 +560,7 @@ "Sharded": true }, "FieldQuery": "select e.id from user_extra as e where 1 != 1", - "Query": "select e.id from user_extra as e where e.id = :u_col /* INT16 */ limit 10", - "Table": "user_extra" + "Query": "select e.id from user_extra as e where e.id = :u_col /* INT16 */ limit 10" } ] } @@ -644,7 +602,6 @@ "u_col": 1, "u_id": 0 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -654,8 +611,7 @@ "Sharded": true }, "FieldQuery": "select u.id, u.col from `user` as u where 1 != 1", - "Query": "select u.id, u.col from `user` as u", - "Table": "`user`" + "Query": "select u.id, u.col from `user` as u" }, { "OperatorType": "Limit", @@ -669,8 +625,7 @@ "Sharded": true }, "FieldQuery": "select :u_id + e.id as `u.id + e.id` from user_extra as e where 1 != 1", - "Query": "select :u_id + e.id as `u.id + e.id` from user_extra as e where e.id = :u_col /* INT16 */ limit 10", - "Table": "user_extra" + "Query": "select :u_id + e.id as `u.id + e.id` from user_extra as e where e.id = :u_col /* INT16 */ limit 10" } ] } @@ -688,7 +643,6 @@ }, "FieldQuery": "select 1 from `user` where 1 != 1", "Query": "select 1 from `user` where :__sq_has_values and id in ::__vals", - "Table": "`user`", "Values": [ "::__sq1" ], @@ -720,7 +674,6 @@ "JoinVars": { "u_col": 2 }, - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "UncorrelatedSubquery", @@ -738,8 +691,7 @@ "Sharded": true }, "FieldQuery": "select col from `user` where 1 != 1", - "Query": "select col from `user`", - "Table": "`user`" + "Query": "select col from `user`" }, { "InputName": "Outer", @@ -750,8 +702,7 @@ "Sharded": true }, "FieldQuery": "select u.id, :__sq1 /* INT16 */ as `(select col from ``user``)`, u.col from `user` as u where 1 != 1", - "Query": "select u.id, :__sq1 /* INT16 */ as `(select col from ``user``)`, u.col from `user` as u", - "Table": "`user`" + "Query": "select u.id, :__sq1 /* INT16 */ as `(select col from ``user``)`, u.col from `user` as u" } ] }, @@ -763,8 +714,7 @@ "Sharded": true }, "FieldQuery": "select e.id from user_extra as e where 1 != 1", - "Query": "select e.id from user_extra as e where e.id = :u_col /* INT16 */", - "Table": "user_extra" + "Query": "select e.id from user_extra as e where e.id = :u_col /* INT16 */" } ] } @@ -792,7 +742,6 @@ }, "FieldQuery": "select id from `user` where 1 != 1", "Query": "select id from `user` where id in ::__vals", - "Table": "`user`", "Values": [ "(18446744073709551616, 1)" ], @@ -814,7 +763,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_`user`", "Inputs": [ { "OperatorType": "Route", @@ -825,7 +773,6 @@ }, "FieldQuery": "select u1.id from `user` as u1 where 1 != 1", "Query": "select u1.id from `user` as u1 where u1.id = 18446744073709551616", - "Table": "`user`", "Values": [ "18446744073709551616" ], @@ -839,8 +786,7 @@ "Sharded": true }, "FieldQuery": "select 1 from `user` as u2 where 1 != 1", - "Query": "select 1 from `user` as u2", - "Table": "`user`" + "Query": "select 1 from `user` as u2" } ] }, @@ -860,7 +806,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_`user`", "Inputs": [ { "OperatorType": "Route", @@ -870,8 +815,7 @@ "Sharded": true }, "FieldQuery": "select u1.id from `user` as u1 where 1 != 1", - "Query": "select u1.id from `user` as u1", - "Table": "`user`" + "Query": "select u1.id from `user` as u1" }, { "OperatorType": "Route", @@ -882,7 +826,6 @@ }, "FieldQuery": "select 1 from `user` as u2 where 1 != 1", "Query": "select 1 from `user` as u2 where u2.id = 18446744073709551616", - "Table": "`user`", "Values": [ "18446744073709551616" ], @@ -923,7 +866,6 @@ }, "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", - "Table": "name_user_vdx", "Values": [ "::name" ], @@ -937,8 +879,7 @@ "Sharded": true }, "FieldQuery": "select u.a from (select id as b, `name` from `user` where 1 != 1) as u(a, n) where 1 != 1", - "Query": "select u.a from (select id as b, `name` from `user` where `name` = 1) as u(a, n)", - "Table": "`user`" + "Query": "select u.a from (select id as b, `name` from `user` where `name` = 1) as u(a, n)" } ] }, @@ -958,13 +899,11 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_unsharded_unsharded", "Inputs": [ { "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_unsharded", "Inputs": [ { "OperatorType": "Route", @@ -974,8 +913,7 @@ "Sharded": true }, "FieldQuery": "select `user`.col from `user` where 1 != 1", - "Query": "select /*vt+ PLANNER=left2right */ `user`.col from `user`", - "Table": "`user`" + "Query": "select /*vt+ PLANNER=left2right */ `user`.col from `user`" }, { "OperatorType": "Route", @@ -985,8 +923,7 @@ "Sharded": false }, "FieldQuery": "select 1 from unsharded as m1 where 1 != 1", - "Query": "select /*vt+ PLANNER=left2right */ 1 from unsharded as m1", - "Table": "unsharded" + "Query": "select /*vt+ PLANNER=left2right */ 1 from unsharded as m1" } ] }, @@ -998,8 +935,7 @@ "Sharded": false }, "FieldQuery": "select 1 from unsharded as m2 where 1 != 1", - "Query": "select /*vt+ PLANNER=left2right */ 1 from unsharded as m2", - "Table": "unsharded" + "Query": "select /*vt+ PLANNER=left2right */ 1 from unsharded as m2" } ] }, diff --git a/go/vt/vtgate/plantests/prepared_statements.json b/go/vt/vtgate/plantests/prepared_statements.json index 7c7ea8f9ac9..63581648ab1 100644 --- a/go/vt/vtgate/plantests/prepared_statements.json +++ b/go/vt/vtgate/plantests/prepared_statements.json @@ -32,7 +32,6 @@ }, "FieldQuery": "select 1 from `user` where 1 != 1", "Query": "select distinct 1 from `user` where id = :v1", - "Table": "`user`", "Values": [ ":v1" ], @@ -47,7 +46,6 @@ }, "FieldQuery": "select 1 from user_extra where 1 != 1", "Query": "select distinct 1 from user_extra where user_id = :v2", - "Table": "user_extra", "Values": [ ":v2" ], @@ -68,7 +66,6 @@ "Conditions": "v1=v2", "FieldQuery": "select 1 from `user` where 1 != 1 union select 1 from user_extra where 1 != 1", "Query": "select 1 from `user` where id = :v1 union select 1 from user_extra where user_id = :v2", - "Table": "`user`, user_extra", "Values": [ ":v1" ], @@ -111,7 +108,6 @@ }, "FieldQuery": "select 1 from `user` where 1 != 1", "Query": "select distinct 1 from `user` where id = :v1", - "Table": "`user`", "Values": [ ":v1" ], @@ -126,7 +122,6 @@ }, "FieldQuery": "select 1 from user_extra where 1 != 1", "Query": "select distinct 1 from user_extra where user_id = :v2", - "Table": "user_extra", "Values": [ ":v2" ], @@ -161,7 +156,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -172,7 +166,6 @@ }, "FieldQuery": "select 1 from `user` where 1 != 1", "Query": "select 1 from `user` where `user`.id = :v1", - "Table": "`user`", "Values": [ ":v1" ], @@ -187,7 +180,6 @@ }, "FieldQuery": "select 1 from user_extra where 1 != 1", "Query": "select 1 from user_extra where user_extra.user_id = :v2", - "Table": "user_extra", "Values": [ ":v2" ], @@ -206,7 +198,6 @@ "Conditions": "v1=v2", "FieldQuery": "select 1 from `user`, user_extra where 1 != 1", "Query": "select 1 from `user`, user_extra where `user`.id = :v1 and user_extra.user_id = :v2", - "Table": "`user`, user_extra", "Values": [ ":v1" ], @@ -235,7 +226,6 @@ "OperatorType": "Join", "Variant": "Join", "JoinColumnIndexes": "L:0", - "TableName": "`user`_user_extra", "Inputs": [ { "OperatorType": "Route", @@ -246,7 +236,6 @@ }, "FieldQuery": "select 1 from `user` where 1 != 1", "Query": "select 1 from `user` where `user`.id = :v1", - "Table": "`user`", "Values": [ ":v1" ], @@ -261,7 +250,6 @@ }, "FieldQuery": "select 1 from user_extra where 1 != 1", "Query": "select 1 from user_extra where user_extra.user_id = :v2", - "Table": "user_extra", "Values": [ ":v2" ], @@ -307,7 +295,6 @@ }, "FieldQuery": "select count(*) from user_extra where 1 != 1", "Query": "select count(*) from user_extra where user_id = :v1", - "Table": "user_extra", "Values": [ ":v1" ], @@ -323,7 +310,6 @@ }, "FieldQuery": "select :__sq1 /* INT64 */ as `(select count(*) from user_extra where user_id = :v1)` from `user` where 1 != 1", "Query": "select :__sq1 /* INT64 */ as `(select count(*) from user_extra where user_id = :v1)` from `user` where id = :v2", - "Table": "`user`", "Values": [ ":v2" ], @@ -342,7 +328,6 @@ "Conditions": "v1=v2", "FieldQuery": "select (select count(*) from user_extra where 1 != 1) from `user` where 1 != 1", "Query": "select (select count(*) from user_extra where user_id = :v1) from `user` where id = :v2", - "Table": "`user`", "Values": [ ":v2" ], @@ -384,7 +369,6 @@ }, "FieldQuery": "select count(*) from user_extra where 1 != 1", "Query": "select count(*) from user_extra where user_id = :v1", - "Table": "user_extra", "Values": [ ":v1" ], @@ -400,7 +384,6 @@ }, "FieldQuery": "select :__sq1 /* INT64 */ as `(select count(*) from user_extra where user_id = :v1)` from `user` where 1 != 1", "Query": "select :__sq1 /* INT64 */ as `(select count(*) from user_extra where user_id = :v1)` from `user` where id = :v2", - "Table": "`user`", "Values": [ ":v2" ], @@ -442,7 +425,6 @@ }, "FieldQuery": "select count(*) from user_extra where 1 != 1", "Query": "select count(*) from user_extra where user_id = :v1", - "Table": "user_extra", "Values": [ ":v1" ], @@ -458,7 +440,6 @@ }, "FieldQuery": "select :__sq1 /* INT64 */ as `(select count(*) from user_extra where user_id = :v1)` from `user` where 1 != 1", "Query": "select :__sq1 /* INT64 */ as `(select count(*) from user_extra where user_id = :v1)` from `user` where id = :v2", - "Table": "`user`", "Values": [ ":v2" ], @@ -498,7 +479,6 @@ "Conditions": "v1=v2", "FieldQuery": "select (select count(*) from user_extra where 1 != 1) from `user` where 1 != 1", "Query": "select (select count(*) from user_extra where user_id = :v1 and foo = `user`.bar) from `user` where id = :v2", - "Table": "`user`", "Values": [ ":v2" ], diff --git a/go/vt/vtgate/plugin_mysql_server.go b/go/vt/vtgate/plugin_mysql_server.go index 512a278e0ff..3b2b4a0c76d 100644 --- a/go/vt/vtgate/plugin_mysql_server.go +++ b/go/vt/vtgate/plugin_mysql_server.go @@ -45,6 +45,7 @@ import ( vtgatepb "vitess.io/vitess/go/vt/proto/vtgate" "vitess.io/vitess/go/vt/servenv" "vitess.io/vitess/go/vt/sqlparser" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtenv" "vitess.io/vitess/go/vt/vterrors" "vitess.io/vitess/go/vt/vttls" @@ -81,29 +82,29 @@ var ( ) func registerPluginFlags(fs *pflag.FlagSet) { - fs.IntVar(&mysqlServerPort, "mysql_server_port", mysqlServerPort, "If set, also listen for MySQL binary protocol connections on this port.") - fs.StringVar(&mysqlServerBindAddress, "mysql_server_bind_address", mysqlServerBindAddress, "Binds on this address when listening to MySQL binary protocol. Useful to restrict listening to 'localhost' only for instance.") - fs.StringVar(&mysqlServerSocketPath, "mysql_server_socket_path", mysqlServerSocketPath, "This option specifies the Unix socket file to use when listening for local connections. By default it will be empty and it won't listen to a unix socket") - fs.StringVar(&mysqlTCPVersion, "mysql_tcp_version", mysqlTCPVersion, "Select tcp, tcp4, or tcp6 to control the socket type.") - fs.StringVar(&mysqlAuthServerImpl, "mysql_auth_server_impl", mysqlAuthServerImpl, "Which auth server implementation to use. Options: none, ldap, clientcert, static, vault.") - fs.BoolVar(&mysqlAllowClearTextWithoutTLS, "mysql_allow_clear_text_without_tls", mysqlAllowClearTextWithoutTLS, "If set, the server will allow the use of a clear text password over non-SSL connections.") - fs.BoolVar(&mysqlProxyProtocol, "proxy_protocol", mysqlProxyProtocol, "Enable HAProxy PROXY protocol on MySQL listener socket") - fs.BoolVar(&mysqlServerRequireSecureTransport, "mysql_server_require_secure_transport", mysqlServerRequireSecureTransport, "Reject insecure connections but only if mysql_server_ssl_cert and mysql_server_ssl_key are provided") - fs.StringVar(&mysqlSslCert, "mysql_server_ssl_cert", mysqlSslCert, "Path to the ssl cert for mysql server plugin SSL") - fs.StringVar(&mysqlSslKey, "mysql_server_ssl_key", mysqlSslKey, "Path to ssl key for mysql server plugin SSL") - fs.StringVar(&mysqlSslCa, "mysql_server_ssl_ca", mysqlSslCa, "Path to ssl CA for mysql server plugin SSL. If specified, server will require and validate client certs.") - fs.StringVar(&mysqlSslCrl, "mysql_server_ssl_crl", mysqlSslCrl, "Path to ssl CRL for mysql server plugin SSL") - fs.StringVar(&mysqlTLSMinVersion, "mysql_server_tls_min_version", mysqlTLSMinVersion, "Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3.") - fs.StringVar(&mysqlSslServerCA, "mysql_server_ssl_server_ca", mysqlSslServerCA, "path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients") - fs.DurationVar(&mysqlSlowConnectWarnThreshold, "mysql_slow_connect_warn_threshold", mysqlSlowConnectWarnThreshold, "Warn if it takes more than the given threshold for a mysql connection to establish") - fs.DurationVar(&mysqlConnReadTimeout, "mysql_server_read_timeout", mysqlConnReadTimeout, "connection read timeout") - fs.DurationVar(&mysqlConnWriteTimeout, "mysql_server_write_timeout", mysqlConnWriteTimeout, "connection write timeout") - fs.DurationVar(&mysqlQueryTimeout, "mysql_server_query_timeout", mysqlQueryTimeout, "mysql query timeout") + utils.SetFlagIntVar(fs, &mysqlServerPort, "mysql-server-port", mysqlServerPort, "If set, also listen for MySQL binary protocol connections on this port.") + utils.SetFlagStringVar(fs, &mysqlServerBindAddress, "mysql-server-bind-address", mysqlServerBindAddress, "Binds on this address when listening to MySQL binary protocol. Useful to restrict listening to 'localhost' only for instance.") + utils.SetFlagStringVar(fs, &mysqlServerSocketPath, "mysql-server-socket-path", mysqlServerSocketPath, "This option specifies the Unix socket file to use when listening for local connections. By default it will be empty and it won't listen to a unix socket") + utils.SetFlagStringVar(fs, &mysqlTCPVersion, "mysql-tcp-version", mysqlTCPVersion, "Select tcp, tcp4, or tcp6 to control the socket type.") + utils.SetFlagStringVar(fs, &mysqlAuthServerImpl, "mysql-auth-server-impl", mysqlAuthServerImpl, "Which auth server implementation to use. Options: none, ldap, clientcert, static, vault.") + utils.SetFlagBoolVar(fs, &mysqlAllowClearTextWithoutTLS, "mysql-allow-clear-text-without-tls", mysqlAllowClearTextWithoutTLS, "If set, the server will allow the use of a clear text password over non-SSL connections.") + utils.SetFlagBoolVar(fs, &mysqlProxyProtocol, "proxy-protocol", mysqlProxyProtocol, "Enable HAProxy PROXY protocol on MySQL listener socket") + utils.SetFlagBoolVar(fs, &mysqlServerRequireSecureTransport, "mysql-server-require-secure-transport", mysqlServerRequireSecureTransport, "Reject insecure connections but only if mysql-server-ssl-cert and mysql-server-ssl-key are provided") + utils.SetFlagStringVar(fs, &mysqlSslCert, "mysql-server-ssl-cert", mysqlSslCert, "Path to the ssl cert for mysql server plugin SSL") + utils.SetFlagStringVar(fs, &mysqlSslKey, "mysql-server-ssl-key", mysqlSslKey, "Path to ssl key for mysql server plugin SSL") + utils.SetFlagStringVar(fs, &mysqlSslCa, "mysql-server-ssl-ca", mysqlSslCa, "Path to ssl CA for mysql server plugin SSL. If specified, server will require and validate client certs.") + utils.SetFlagStringVar(fs, &mysqlSslCrl, "mysql-server-ssl-crl", mysqlSslCrl, "Path to ssl CRL for mysql server plugin SSL") + utils.SetFlagStringVar(fs, &mysqlTLSMinVersion, "mysql-server-tls-min-version", mysqlTLSMinVersion, "Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3.") + utils.SetFlagStringVar(fs, &mysqlSslServerCA, "mysql-server-ssl-server-ca", mysqlSslServerCA, "path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients") + utils.SetFlagDurationVar(fs, &mysqlSlowConnectWarnThreshold, "mysql-slow-connect-warn-threshold", mysqlSlowConnectWarnThreshold, "Warn if it takes more than the given threshold for a mysql connection to establish") + utils.SetFlagDurationVar(fs, &mysqlConnReadTimeout, "mysql-server-read-timeout", mysqlConnReadTimeout, "connection read timeout") + utils.SetFlagDurationVar(fs, &mysqlConnWriteTimeout, "mysql-server-write-timeout", mysqlConnWriteTimeout, "connection write timeout") + utils.SetFlagDurationVar(fs, &mysqlQueryTimeout, "mysql-server-query-timeout", mysqlQueryTimeout, "mysql query timeout") fs.BoolVar(&mysqlConnBufferPooling, "mysql-server-pool-conn-read-buffers", mysqlConnBufferPooling, "If set, the server will pool incoming connection read buffers") fs.DurationVar(&mysqlKeepAlivePeriod, "mysql-server-keepalive-period", mysqlKeepAlivePeriod, "TCP period between keep-alives") - fs.DurationVar(&mysqlServerFlushDelay, "mysql_server_flush_delay", mysqlServerFlushDelay, "Delay after which buffered response will be flushed to the client.") - fs.StringVar(&mysqlDefaultWorkloadName, "mysql_default_workload", mysqlDefaultWorkloadName, "Default session workload (OLTP, OLAP, DBA)") - fs.BoolVar(&mysqlDrainOnTerm, "mysql-server-drain-onterm", mysqlDrainOnTerm, "If set, the server waits for --onterm_timeout for already connected clients to complete their in flight work") + utils.SetFlagDurationVar(fs, &mysqlServerFlushDelay, "mysql-server-flush-delay", mysqlServerFlushDelay, "Delay after which buffered response will be flushed to the client.") + utils.SetFlagStringVar(fs, &mysqlDefaultWorkloadName, "mysql-default-workload", mysqlDefaultWorkloadName, "Default session workload (OLTP, OLAP, DBA)") + fs.BoolVar(&mysqlDrainOnTerm, "mysql-server-drain-onterm", mysqlDrainOnTerm, "If set, the server waits for --onterm-timeout for already connected clients to complete their in flight work") } // vtgateHandler implements the Listener interface. @@ -267,6 +268,89 @@ func (vh *vtgateHandler) ComQuery(c *mysql.Conn, query string, callback func(*sq return callback(result) } +// ComQueryMulti is a newer version of ComQuery that supports running multiple queries in a single call. +func (vh *vtgateHandler) ComQueryMulti(c *mysql.Conn, sql string, callback func(qr sqltypes.QueryResponse, more bool, firstPacket bool) error) error { + session := vh.session(c) + if c.IsShuttingDown() && !session.InTransaction { + c.MarkForClose() + return sqlerror.NewSQLError(sqlerror.ERServerShutdown, sqlerror.SSNetError, "Server shutdown in progress") + } + + ctx, cancel := context.WithCancel(context.Background()) + c.UpdateCancelCtx(cancel) + + span, ctx, err := startSpan(ctx, sql, "vtgateHandler.ComQueryMulti") + if err != nil { + return vterrors.Wrap(err, "failed to extract span") + } + defer span.Finish() + + ctx = callinfo.MysqlCallInfo(ctx, c) + + // Fill in the ImmediateCallerID with the UserData returned by + // the AuthServer plugin for that user. If nothing was + // returned, use the User. This lets the plugin map a MySQL + // user used for authentication to a Vitess User used for + // Table ACLs and Vitess authentication in general. + im := c.UserData.Get() + ef := callerid.NewEffectiveCallerID( + c.User, /* principal: who */ + c.RemoteAddr().String(), /* component: running client process */ + "VTGate MySQL Connector" /* subcomponent: part of the client */) + ctx = callerid.NewContext(ctx, ef, im) + + if !session.InTransaction { + vh.busyConnections.Add(1) + } + defer func() { + if !session.InTransaction { + vh.busyConnections.Add(-1) + } + }() + + if session.Options.Workload == querypb.ExecuteOptions_OLAP { + if c.Capabilities&mysql.CapabilityClientMultiStatements != 0 { + session, err = vh.vtg.StreamExecuteMulti(ctx, vh, session, sql, callback) + } else { + firstPacket := true + session, err = vh.vtg.StreamExecute(ctx, vh, session, sql, make(map[string]*querypb.BindVariable), func(result *sqltypes.Result) error { + defer func() { + firstPacket = false + }() + return callback(sqltypes.QueryResponse{QueryResult: result}, false, firstPacket) + }) + } + if err != nil { + return sqlerror.NewSQLErrorFromError(err) + } + fillInTxStatusFlags(c, session) + return nil + } + var results []*sqltypes.Result + var result *sqltypes.Result + var queryResults []sqltypes.QueryResponse + if c.Capabilities&mysql.CapabilityClientMultiStatements != 0 { + session, results, err = vh.vtg.ExecuteMulti(ctx, vh, session, sql) + for _, res := range results { + queryResults = append(queryResults, sqltypes.QueryResponse{QueryResult: res}) + } + if err != nil { + queryResults = append(queryResults, sqltypes.QueryResponse{QueryError: sqlerror.NewSQLErrorFromError(err)}) + } + } else { + session, result, err = vh.vtg.Execute(ctx, vh, session, sql, make(map[string]*querypb.BindVariable), false) + queryResults = append(queryResults, sqltypes.QueryResponse{QueryResult: result, QueryError: sqlerror.NewSQLErrorFromError(err)}) + } + + fillInTxStatusFlags(c, session) + for idx, res := range queryResults { + if callbackErr := callback(res, idx < len(queryResults)-1, true); callbackErr != nil { + return callbackErr + } + } + return nil +} + func fillInTxStatusFlags(c *mysql.Conn, session *vtgatepb.Session) { if session.InTransaction { c.StatusFlags |= mysql.ServerStatusInTrans @@ -508,17 +592,17 @@ func initMySQLProtocol(vtgate *VTGate) *mysqlServer { } authServer := mysql.GetAuthServer(mysqlAuthServerImpl) - // Check mysql_default_workload + // Check mysql-default-workload var ok bool if mysqlDefaultWorkload, ok = querypb.ExecuteOptions_Workload_value[strings.ToUpper(mysqlDefaultWorkloadName)]; !ok { - log.Exitf("-mysql_default_workload must be one of [OLTP, OLAP, DBA, UNSPECIFIED]") + log.Exitf("-mysql-default-workload must be one of [OLTP, OLAP, DBA, UNSPECIFIED]") } switch mysqlTCPVersion { case "tcp", "tcp4", "tcp6": // Valid flag value. default: - log.Exitf("-mysql_tcp_version must be one of [tcp, tcp4, tcp6]") + log.Exitf("-mysql-tcp-version must be one of [tcp, tcp4, tcp6]") } // Create a Listener. diff --git a/go/vt/vtgate/plugin_mysql_server_test.go b/go/vt/vtgate/plugin_mysql_server_test.go index 73636f3463b..a311790d771 100644 --- a/go/vt/vtgate/plugin_mysql_server_test.go +++ b/go/vt/vtgate/plugin_mysql_server_test.go @@ -19,6 +19,7 @@ package vtgate import ( "context" "crypto/tls" + "errors" "fmt" "os" "path" @@ -31,11 +32,14 @@ import ( "github.com/stretchr/testify/require" "vitess.io/vitess/go/mysql" + "vitess.io/vitess/go/mysql/collations" "vitess.io/vitess/go/mysql/replication" + "vitess.io/vitess/go/mysql/sqlerror" "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/test/utils" "vitess.io/vitess/go/trace" querypb "vitess.io/vitess/go/vt/proto/query" + "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/tlstest" "vitess.io/vitess/go/vt/vtenv" ) @@ -58,6 +62,25 @@ func (th *testHandler) ComQuery(c *mysql.Conn, q string, callback func(*sqltypes return callback(&sqltypes.Result{Fields: []*querypb.Field{}, Rows: [][]sqltypes.Value{}}) } +func (th *testHandler) ComQueryMulti(c *mysql.Conn, sql string, callback func(qr sqltypes.QueryResponse, more bool, firstPacket bool) error) error { + qries, err := th.Env().Parser().SplitStatementToPieces(sql) + if err != nil { + return err + } + for i, query := range qries { + firstPacket := true + err = th.ComQuery(c, query, func(result *sqltypes.Result) error { + err = callback(sqltypes.QueryResponse{QueryResult: result}, i < len(qries)-1, firstPacket) + firstPacket = false + return err + }) + if err != nil { + return err + } + } + return nil +} + func (th *testHandler) ComPrepare(*mysql.Conn, string) ([]*querypb.Field, uint16, error) { return nil, 0, nil } @@ -346,6 +369,457 @@ func TestKillMethods(t *testing.T) { require.True(t, mysqlConn.IsMarkedForClose()) } +func TestComQueryMulti(t *testing.T) { + testcases := []struct { + name string + sql string + olap bool + queryResponses []sqltypes.QueryResponse + more []bool + firstPacket []bool + errExpected bool + }{ + { + name: "Empty query", + sql: "", + queryResponses: []sqltypes.QueryResponse{ + {QueryResult: nil, QueryError: sqlerror.NewSQLErrorFromError(sqlparser.ErrEmpty)}, + }, + more: []bool{false}, + firstPacket: []bool{true}, + errExpected: false, + }, { + name: "Single query", + sql: "select 1", + queryResponses: []sqltypes.QueryResponse{ + { + QueryResult: &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Name: "1", + Type: sqltypes.Int64, + Flags: uint32(querypb.MySqlFlag_NUM_FLAG | querypb.MySqlFlag_NOT_NULL_FLAG), + Charset: collations.CollationBinaryID, + }, + }, + Rows: [][]sqltypes.Value{ + { + sqltypes.NewInt64(1), + }, + }, + }, + QueryError: nil, + }, + }, + more: []bool{false}, + firstPacket: []bool{true}, + errExpected: false, + }, { + name: "Multiple queries - success", + sql: "select 1; select 2; select 3;", + queryResponses: []sqltypes.QueryResponse{ + { + QueryResult: &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Name: "1", + Type: sqltypes.Int64, + Flags: uint32(querypb.MySqlFlag_NUM_FLAG | querypb.MySqlFlag_NOT_NULL_FLAG), + Charset: collations.CollationBinaryID, + }, + }, + Rows: [][]sqltypes.Value{ + { + sqltypes.NewInt64(1), + }, + }, + }, + QueryError: nil, + }, + { + QueryResult: &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Name: "2", + Type: sqltypes.Int64, + Flags: uint32(querypb.MySqlFlag_NUM_FLAG | querypb.MySqlFlag_NOT_NULL_FLAG), + Charset: collations.CollationBinaryID, + }, + }, + Rows: [][]sqltypes.Value{ + { + sqltypes.NewInt64(2), + }, + }, + }, + QueryError: nil, + }, + { + QueryResult: &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Name: "3", + Type: sqltypes.Int64, + Flags: uint32(querypb.MySqlFlag_NUM_FLAG | querypb.MySqlFlag_NOT_NULL_FLAG), + Charset: collations.CollationBinaryID, + }, + }, + Rows: [][]sqltypes.Value{ + { + sqltypes.NewInt64(3), + }, + }, + }, + QueryError: nil, + }, + }, + more: []bool{true, true, false}, + firstPacket: []bool{true, true, true}, + errExpected: false, + }, { + name: "Multiple queries - failure", + sql: "select 1; select 2; parsing error; select 3;", + queryResponses: []sqltypes.QueryResponse{ + { + QueryResult: &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Name: "1", + Type: sqltypes.Int64, + Flags: uint32(querypb.MySqlFlag_NUM_FLAG | querypb.MySqlFlag_NOT_NULL_FLAG), + Charset: collations.CollationBinaryID, + }, + }, + Rows: [][]sqltypes.Value{ + { + sqltypes.NewInt64(1), + }, + }, + }, + QueryError: nil, + }, + { + QueryResult: &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Name: "2", + Type: sqltypes.Int64, + Flags: uint32(querypb.MySqlFlag_NUM_FLAG | querypb.MySqlFlag_NOT_NULL_FLAG), + Charset: collations.CollationBinaryID, + }, + }, + Rows: [][]sqltypes.Value{ + { + sqltypes.NewInt64(2), + }, + }, + }, + QueryError: nil, + }, + { + QueryResult: nil, + QueryError: errors.New("syntax error at position 8 near 'parsing' (errno 1105) (sqlstate HY000)"), + }, + }, + more: []bool{true, true, false}, + firstPacket: []bool{true, true, true}, + errExpected: false, + }, { + name: "Empty query - olap", + sql: "", + olap: true, + queryResponses: []sqltypes.QueryResponse{}, + more: []bool{false}, + firstPacket: []bool{true}, + errExpected: true, + }, { + name: "Single query - olap", + sql: "select 1", + olap: true, + queryResponses: []sqltypes.QueryResponse{ + { + QueryResult: &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Name: "1", + Type: sqltypes.Int64, + Flags: uint32(querypb.MySqlFlag_NUM_FLAG | querypb.MySqlFlag_NOT_NULL_FLAG), + Charset: collations.CollationBinaryID, + }, + }, + }, + QueryError: nil, + }, + { + QueryResult: &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Name: "1", + Type: sqltypes.Int64, + Flags: uint32(querypb.MySqlFlag_NUM_FLAG | querypb.MySqlFlag_NOT_NULL_FLAG), + Charset: collations.CollationBinaryID, + }, + }, + }, + QueryError: nil, + }, + { + QueryResult: &sqltypes.Result{ + Rows: [][]sqltypes.Value{ + { + sqltypes.NewInt64(1), + }, + }, + }, + QueryError: nil, + }, + }, + more: []bool{false, false, false}, + firstPacket: []bool{true, false, false}, + errExpected: false, + }, { + name: "Multiple queries - olap - success", + sql: "select 1; select 2; select 3;", + olap: true, + queryResponses: []sqltypes.QueryResponse{ + { + QueryResult: &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Name: "1", + Type: sqltypes.Int64, + Flags: uint32(querypb.MySqlFlag_NUM_FLAG | querypb.MySqlFlag_NOT_NULL_FLAG), + Charset: collations.CollationBinaryID, + }, + }, + }, + QueryError: nil, + }, + { + QueryResult: &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Name: "1", + Type: sqltypes.Int64, + Flags: uint32(querypb.MySqlFlag_NUM_FLAG | querypb.MySqlFlag_NOT_NULL_FLAG), + Charset: collations.CollationBinaryID, + }, + }, + }, + QueryError: nil, + }, + { + QueryResult: &sqltypes.Result{ + Rows: [][]sqltypes.Value{ + { + sqltypes.NewInt64(1), + }, + }, + }, + QueryError: nil, + }, + { + QueryResult: &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Name: "2", + Type: sqltypes.Int64, + Flags: uint32(querypb.MySqlFlag_NUM_FLAG | querypb.MySqlFlag_NOT_NULL_FLAG), + Charset: collations.CollationBinaryID, + }, + }, + }, + QueryError: nil, + }, + { + QueryResult: &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Name: "2", + Type: sqltypes.Int64, + Flags: uint32(querypb.MySqlFlag_NUM_FLAG | querypb.MySqlFlag_NOT_NULL_FLAG), + Charset: collations.CollationBinaryID, + }, + }, + }, + QueryError: nil, + }, + { + QueryResult: &sqltypes.Result{ + Rows: [][]sqltypes.Value{ + { + sqltypes.NewInt64(2), + }, + }, + }, + QueryError: nil, + }, + { + QueryResult: &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Name: "3", + Type: sqltypes.Int64, + Flags: uint32(querypb.MySqlFlag_NUM_FLAG | querypb.MySqlFlag_NOT_NULL_FLAG), + Charset: collations.CollationBinaryID, + }, + }, + }, + QueryError: nil, + }, + { + QueryResult: &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Name: "3", + Type: sqltypes.Int64, + Flags: uint32(querypb.MySqlFlag_NUM_FLAG | querypb.MySqlFlag_NOT_NULL_FLAG), + Charset: collations.CollationBinaryID, + }, + }, + }, + QueryError: nil, + }, + { + QueryResult: &sqltypes.Result{ + Rows: [][]sqltypes.Value{ + { + sqltypes.NewInt64(3), + }, + }, + }, + QueryError: nil, + }, + }, + more: []bool{true, true, true, true, true, true, false, false, false}, + firstPacket: []bool{true, false, false, true, false, false, true, false, false}, + errExpected: false, + }, { + name: "Multiple queries - olap - failure", + sql: "select 1; select 2; parsing error; select 3;", + olap: true, + queryResponses: []sqltypes.QueryResponse{ + { + QueryResult: &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Name: "1", + Type: sqltypes.Int64, + Flags: uint32(querypb.MySqlFlag_NUM_FLAG | querypb.MySqlFlag_NOT_NULL_FLAG), + Charset: collations.CollationBinaryID, + }, + }, + }, + QueryError: nil, + }, + { + QueryResult: &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Name: "1", + Type: sqltypes.Int64, + Flags: uint32(querypb.MySqlFlag_NUM_FLAG | querypb.MySqlFlag_NOT_NULL_FLAG), + Charset: collations.CollationBinaryID, + }, + }, + }, + QueryError: nil, + }, + { + QueryResult: &sqltypes.Result{ + Rows: [][]sqltypes.Value{ + { + sqltypes.NewInt64(1), + }, + }, + }, + QueryError: nil, + }, + { + QueryResult: &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Name: "2", + Type: sqltypes.Int64, + Flags: uint32(querypb.MySqlFlag_NUM_FLAG | querypb.MySqlFlag_NOT_NULL_FLAG), + Charset: collations.CollationBinaryID, + }, + }, + }, + QueryError: nil, + }, + { + QueryResult: &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Name: "2", + Type: sqltypes.Int64, + Flags: uint32(querypb.MySqlFlag_NUM_FLAG | querypb.MySqlFlag_NOT_NULL_FLAG), + Charset: collations.CollationBinaryID, + }, + }, + }, + QueryError: nil, + }, + { + QueryResult: &sqltypes.Result{ + Rows: [][]sqltypes.Value{ + { + sqltypes.NewInt64(2), + }, + }, + }, + QueryError: nil, + }, + { + QueryResult: nil, + QueryError: errors.New("syntax error at position 8 near 'parsing' (errno 1105) (sqlstate HY000)"), + }, + }, + more: []bool{true, true, true, true, true, true, false}, + firstPacket: []bool{true, false, false, true, false, false, true}, + errExpected: false, + }, + } + + executor, _, _, _, _ := createExecutorEnv(t) + th := &testHandler{} + listener, err := mysql.NewListener("tcp", "127.0.0.1:", mysql.NewAuthServerNone(), th, 0, 0, false, false, 0, 0) + require.NoError(t, err) + defer listener.Close() + + // add a connection + mysqlConn := mysql.GetTestServerConn(listener) + mysqlConn.ConnectionID = 1 + mysqlConn.UserData = &mysql.StaticUserData{} + mysqlConn.Capabilities = mysqlConn.Capabilities | mysql.CapabilityClientMultiStatements + vh := newVtgateHandler(newVTGate(executor, nil, nil, nil, nil)) + vh.connections[1] = mysqlConn + for _, tt := range testcases { + t.Run(tt.name, func(t *testing.T) { + vh.session(mysqlConn).Options.Workload = querypb.ExecuteOptions_OLTP + if tt.olap { + vh.session(mysqlConn).Options.Workload = querypb.ExecuteOptions_OLAP + } + idx := 0 + err = vh.ComQueryMulti(mysqlConn, tt.sql, func(qr sqltypes.QueryResponse, more bool, firstPacket bool) error { + assert.True(t, tt.queryResponses[idx].QueryResult.Equal(qr.QueryResult), "Result Got: %v", qr.QueryResult) + if tt.queryResponses[idx].QueryError != nil { + assert.Equal(t, tt.queryResponses[idx].QueryError.Error(), qr.QueryError.Error(), "Error Got: %v", qr.QueryError) + } else { + assert.Nil(t, qr.QueryError, "Error Got: %v", qr.QueryError) + } + assert.Equal(t, tt.more[idx], more, idx) + assert.Equal(t, tt.firstPacket[idx], firstPacket, idx) + idx++ + return nil + }) + assert.Equal(t, tt.errExpected, err != nil) + assert.Equal(t, len(tt.queryResponses), idx) + }) + } +} + func TestGracefulShutdown(t *testing.T) { executor, _, _, _, _ := createExecutorEnv(t) @@ -365,6 +839,10 @@ func TestGracefulShutdown(t *testing.T) { return nil }) assert.NoError(t, err) + err = vh.ComQueryMulti(mysqlConn, "select 1", func(res sqltypes.QueryResponse, more bool, firstPacket bool) error { + return nil + }) + assert.NoError(t, err) listener.Shutdown() @@ -372,6 +850,10 @@ func TestGracefulShutdown(t *testing.T) { return nil }) require.EqualError(t, err, "Server shutdown in progress (errno 1053) (sqlstate 08S01)") + err = vh.ComQueryMulti(mysqlConn, "select 1", func(res sqltypes.QueryResponse, more bool, firstPacket bool) error { + return nil + }) + require.EqualError(t, err, "Server shutdown in progress (errno 1053) (sqlstate 08S01)") require.True(t, mysqlConn.IsMarkedForClose()) } diff --git a/go/vt/vtgate/schema/tracker_test.go b/go/vt/vtgate/schema/tracker_test.go index 6feeacb6864..90235ab4583 100644 --- a/go/vt/vtgate/schema/tracker_test.go +++ b/go/vt/vtgate/schema/tracker_test.go @@ -194,7 +194,7 @@ func TestTrackerNoLock(t *testing.T) { for i := 0; i < 500000; i++ { select { case ch <- th: - case <-time.After(10 * time.Millisecond): + case <-time.After(50 * time.Millisecond): t.Fatalf("failed to send health check to tracker") } } diff --git a/go/vt/vtgate/semantics/analyzer.go b/go/vt/vtgate/semantics/analyzer.go index 5d14c2633b4..0408eaf7699 100644 --- a/go/vt/vtgate/semantics/analyzer.go +++ b/go/vt/vtgate/semantics/analyzer.go @@ -44,6 +44,7 @@ type analyzer struct { inProjection int notSingleRouteErr error + notSingleShardErr error unshardedErr error warning string canShortcut bool @@ -144,6 +145,7 @@ func (a *analyzer) newSemTable( Collation: coll, ExprTypes: map[sqlparser.Expr]evalengine.Type{}, NotSingleRouteErr: a.notSingleRouteErr, + NotSingleShardErr: a.notSingleShardErr, NotUnshardedErr: a.unshardedErr, Recursive: ExprDependencies{}, Direct: ExprDependencies{}, @@ -177,6 +179,7 @@ func (a *analyzer) newSemTable( DMLTargets: a.binder.targets, NotSingleRouteErr: a.notSingleRouteErr, NotUnshardedErr: a.unshardedErr, + NotSingleShardErr: a.notSingleShardErr, Warning: a.warning, Comments: comments, ExprEqualities: NewTransitiveClosures(), @@ -198,6 +201,8 @@ func (a *analyzer) setError(err error) { a.notSingleRouteErr = err.Inner case ShardedError: a.unshardedErr = err.Inner + case NotSingleShardError: + a.notSingleShardErr = err.Inner default: if a.inProjection > 0 && vterrors.ErrState(err) == vterrors.NonUniqError { a.notSingleRouteErr = err @@ -491,26 +496,37 @@ func (a *analyzer) getError() error { return a.err } -// NotSingleRouteErr is used to mark an error as something that should only be returned -// if the planner fails to merge everything down to a single route -type NotSingleRouteErr struct { - Inner error -} +type ( + // NotSingleRouteErr is used to mark an error as something that should only be returned + // if the planner fails to merge everything down to a single route + NotSingleRouteErr struct { + Inner error + } + // ShardedError is used to mark an error as something that should only be returned + // if the query is not unsharded + ShardedError struct { + Inner error + } + // NotSingleShardError is used to mark an error as something that should only be returned + // if the query fails to be planned into a single shard query + NotSingleShardError struct { + Inner error + } +) func (p NotSingleRouteErr) Error() string { return p.Inner.Error() } +func (p NotSingleRouteErr) Unwrap() error { return p.Inner } -// ShardedError is used to mark an error as something that should only be returned -// if the query is not unsharded -type ShardedError struct { - Inner error +func (p ShardedError) Error() string { + return p.Inner.Error() } - func (p ShardedError) Unwrap() error { return p.Inner } -func (p ShardedError) Error() string { +func (p NotSingleShardError) Error() string { return p.Inner.Error() } +func (p NotSingleShardError) Unwrap() error { return p.Inner } diff --git a/go/vt/vtgate/semantics/binder.go b/go/vt/vtgate/semantics/binder.go index b59b50159b7..1356fd41730 100644 --- a/go/vt/vtgate/semantics/binder.go +++ b/go/vt/vtgate/semantics/binder.go @@ -17,6 +17,7 @@ limitations under the License. package semantics import ( + "errors" "strings" "vitess.io/vitess/go/vt/sqlparser" @@ -303,22 +304,11 @@ func (b *binder) resolveColumn(colName *sqlparser.ColName, current *scope, allow return dependency{}, ShardedError{ColumnNotFoundError{Column: colName, Table: tableName}} } -func isColumnNotFound(err error) bool { - switch err := err.(type) { - case ColumnNotFoundError: - return true - case ShardedError: - return isColumnNotFound(err.Inner) - default: - return false - } -} - func (b *binder) resolveColumnInHaving(colName *sqlparser.ColName, current *scope, allowMulti bool) (dependency, error) { if current.inHavingAggr { // when inside an aggregation, we'll search the FROM clause before the SELECT expressions deps, err := b.resolveColumn(colName, current.parent, allowMulti, true) - if deps.direct.NotEmpty() || (err != nil && !isColumnNotFound(err)) { + if deps.direct.NotEmpty() || (err != nil && !errors.As(err, &ColumnNotFoundError{})) { return deps, err } } @@ -354,7 +344,7 @@ func (b *binder) resolveColumnInHaving(colName *sqlparser.ColName, current *scop if !current.inHavingAggr && sel.GroupBy == nil { // if we are not inside an aggregation, and there is no GROUP BY, we consider the FROM clause before failing - if deps.direct.NotEmpty() || (err != nil && !isColumnNotFound(err)) { + if deps.direct.NotEmpty() || (err != nil && !errors.As(err, &ColumnNotFoundError{})) { return deps, err } } @@ -429,7 +419,7 @@ func (b *binder) resolveColInGroupBy( return dependency{}, err } if dependencies.empty() { - if isColumnNotFound(firstErr) { + if errors.As(firstErr, &ColumnNotFoundError{}) { return dependency{}, &ColumnNotFoundClauseError{Column: colName.Name.String(), Clause: "group statement"} } return deps, firstErr diff --git a/go/vt/vtgate/semantics/check_invalid.go b/go/vt/vtgate/semantics/check_invalid.go index e2519208caa..ec2ceb279bb 100644 --- a/go/vt/vtgate/semantics/check_invalid.go +++ b/go/vt/vtgate/semantics/check_invalid.go @@ -54,7 +54,7 @@ func (a *analyzer) checkForInvalidConstructs(cursor *sqlparser.Cursor) error { } case *sqlparser.OverClause: if !a.singleUnshardedKeyspace { - return ShardedError{Inner: &UnsupportedConstruct{errString: "OVER CLAUSE with sharded keyspace"}} + return NotSingleShardError{Inner: &UnsupportedConstruct{errString: "OVER CLAUSE with sharded keyspace"}} } } diff --git a/go/vt/vtgate/semantics/semantic_table.go b/go/vt/vtgate/semantics/semantic_table.go index fc56b5dd23a..27d4b0b7534 100644 --- a/go/vt/vtgate/semantics/semantic_table.go +++ b/go/vt/vtgate/semantics/semantic_table.go @@ -122,6 +122,10 @@ type ( // MySQL engine to handle errors appropriately. NotUnshardedErr error + // If there are constructs in this query that we know we only support if we can push them down + // unbroken to mysql, this field will contain an error that is produced when we fail to do so. + NotSingleShardErr error + // Recursive contains dependencies from the expression to the actual tables // in the query (excluding derived tables). For columns in derived tables, // this map holds the accumulated dependencies for the column expression. diff --git a/go/vt/vtgate/tx_conn.go b/go/vt/vtgate/tx_conn.go index 4da63c055ad..a60a0a70cff 100644 --- a/go/vt/vtgate/tx_conn.go +++ b/go/vt/vtgate/tx_conn.go @@ -62,6 +62,29 @@ var txAccessModeToEOTxAccessMode = map[sqlparser.TxAccessMode]querypb.ExecuteOpt sqlparser.ReadOnly: querypb.ExecuteOptions_READ_ONLY, } +const ( + SingleShardTransaction = "Single" + CrossShardTransaction = "Cross" +) + +type txType int + +const ( + TXReadOnly txType = iota + TXReadWrite +) + +func (tt txType) String() string { + switch tt { + case TXReadOnly: + return "ReadOnly" + case TXReadWrite: + return "ReadWrite" + default: + return "Unknown" + } +} + type commitPhase int const ( @@ -126,10 +149,12 @@ func (txc *TxConn) Commit(ctx context.Context, session *econtext.SafeSession) er return err } + shardDistribution := getShardDistribution(session.ShardSessions) + var txnType txType if twopc { - err = txc.commit2PC(ctx, session) + txnType, err = txc.commit2PC(ctx, session) } else { - err = txc.commitNormal(ctx, session) + txnType, err = txc.commitNormal(ctx, session) } if err != nil { @@ -146,9 +171,17 @@ func (txc *TxConn) Commit(ctx context.Context, session *econtext.SafeSession) er _ = txc.Release(ctx, session) } } + txProcessed.Add([]string{shardDistribution, txnType.String()}, 1) return nil } +func getShardDistribution(sessions []*vtgatepb.Session_ShardSession) string { + if len(sessions) > 1 { + return CrossShardTransaction + } + return SingleShardTransaction +} + func recordCommitTime(session *econtext.SafeSession, twopc bool, startTime time.Time) { switch { case len(session.ShardSessions) == 0: @@ -193,9 +226,13 @@ func (txc *TxConn) commitShard(ctx context.Context, s *vtgatepb.Session_ShardSes return nil } -func (txc *TxConn) commitNormal(ctx context.Context, session *econtext.SafeSession) error { +func (txc *TxConn) commitNormal(ctx context.Context, session *econtext.SafeSession) (txType, error) { + txnType := TXReadOnly // Retain backward compatibility on commit order for the normal session. for i, shardSession := range session.ShardSessions { + if txnType == TXReadOnly && shardSession.RowsAffected { + txnType = TXReadWrite + } if err := txc.commitShard(ctx, shardSession, session.GetLogger()); err != nil { if i > 0 { nShards := i @@ -217,14 +254,14 @@ func (txc *TxConn) commitNormal(ctx context.Context, session *econtext.SafeSessi }) warnings.Add("NonAtomicCommit", 1) } - return err + return txnType, err } } - return nil + return txnType, nil } // commit2PC will not used the pinned tablets - to make sure we use the current source, we need to use the gateway's queryservice -func (txc *TxConn) commit2PC(ctx context.Context, session *econtext.SafeSession) (err error) { +func (txc *TxConn) commit2PC(ctx context.Context, session *econtext.SafeSession) (txnType txType, err error) { // If the number of participants is one or less, then it's a normal commit. if len(session.ShardSessions) <= 1 { return txc.commitNormal(ctx, session) @@ -233,8 +270,14 @@ func (txc *TxConn) commit2PC(ctx context.Context, session *econtext.SafeSession) mmShard := session.ShardSessions[0] rmShards := session.ShardSessions[1:] dtid := dtids.New(mmShard) + if mmShard.RowsAffected { + txnType = TXReadWrite + } participants := make([]*querypb.Target, len(rmShards)) for i, s := range rmShards { + if s.RowsAffected { + txnType = TXReadWrite + } participants[i] = s.Target } @@ -249,12 +292,12 @@ func (txc *TxConn) commit2PC(ctx context.Context, session *econtext.SafeSession) txPhase = Commit2pcCreateTransaction if err = txc.tabletGateway.CreateTransaction(ctx, mmShard.Target, dtid, participants); err != nil { - return err + return txnType, err } if DebugTwoPc { // Test code to simulate a failure after RM prepare if terr := checkTestFailure(ctx, "TRCreated_FailNow", nil); terr != nil { - return terr + return txnType, terr } } @@ -268,24 +311,24 @@ func (txc *TxConn) commit2PC(ctx context.Context, session *econtext.SafeSession) return txc.tabletGateway.Prepare(ctx, s.Target, s.TransactionId, dtid) } if err = txc.runSessions(ctx, rmShards, session.GetLogger(), prepareAction); err != nil { - return err + return txnType, err } if DebugTwoPc { // Test code to simulate a failure after RM prepare if terr := checkTestFailure(ctx, "RMPrepared_FailNow", nil); terr != nil { - return terr + return txnType, terr } } txPhase = Commit2pcStartCommit startCommitState, err = txc.tabletGateway.StartCommit(ctx, mmShard.Target, mmShard.TransactionId, dtid) if err != nil { - return err + return txnType, err } if DebugTwoPc { // Test code to simulate a failure after MM commit if terr := checkTestFailure(ctx, "MMCommitted_FailNow", nil); terr != nil { - return terr + return txnType, terr } } @@ -299,7 +342,7 @@ func (txc *TxConn) commit2PC(ctx context.Context, session *econtext.SafeSession) return txc.tabletGateway.CommitPrepared(ctx, s.Target, dtid) } if err = txc.runSessions(ctx, rmShards, session.GetLogger(), prepareCommitAction); err != nil { - return err + return txnType, err } // At this point, application can continue forward. @@ -307,7 +350,7 @@ func (txc *TxConn) commit2PC(ctx context.Context, session *econtext.SafeSession) // This step is to clean up the transaction metadata. txPhase = Commit2pcConclude _ = txc.tabletGateway.ConcludeTransaction(ctx, mmShard.Target, dtid) - return nil + return txnType, nil } func (txc *TxConn) errActionAndLogWarn( diff --git a/go/vt/vtgate/tx_conn_test.go b/go/vt/vtgate/tx_conn_test.go index 6d31aa4e543..ec215b2e521 100644 --- a/go/vt/vtgate/tx_conn_test.go +++ b/go/vt/vtgate/tx_conn_test.go @@ -1554,6 +1554,69 @@ func TestTxConnAccessModeReset(t *testing.T) { } } +// TestTxConnMetrics tests the `TransactionProcessed` metrics. +func TestTxConnMetrics(t *testing.T) { + ctx := utils.LeakCheckContext(t) + + sc, _, _, rss0, rss1, _ := newTestTxConnEnv(t, ctx, "TestTxConn") + session := &vtgatepb.Session{} + + tcases := []struct { + name string + queries []*querypb.BoundQuery + rss []*srvtopo.ResolvedShard + expMetric string + expVal int + }{{ + name: "oneReadQuery", + queries: []*querypb.BoundQuery{{Sql: "select 1"}}, + rss: rss0, + expMetric: "Single.ReadOnly", + expVal: 1, + }, { + name: "twoReadQuery", + queries: []*querypb.BoundQuery{{Sql: "select 2"}, {Sql: "select 3"}}, + rss: append(rss0, rss1...), + expMetric: "Cross.ReadOnly", + expVal: 1, + }, { + name: "oneWriteQuery", + queries: []*querypb.BoundQuery{{Sql: "update t set col = 1"}}, + rss: rss0, + expMetric: "Single.ReadWrite", + expVal: 1, + }, { + name: "twoWriteQuery", + queries: []*querypb.BoundQuery{{Sql: "update t set col = 2"}, {Sql: "update t set col = 3"}}, + rss: append(rss0, rss1...), + expMetric: "Cross.ReadWrite", + expVal: 1, + }, { + name: "oneReadOneWriteQuery", + queries: []*querypb.BoundQuery{{Sql: "select 4"}, {Sql: "update t set col = 4"}}, + rss: append(rss0, rss1...), + expMetric: "Cross.ReadWrite", + expVal: 2, + }} + + txProcessed.ResetAll() + for _, tc := range tcases { + t.Run(tc.name, func(t *testing.T) { + // begin + safeSession := econtext.NewAutocommitSession(session) + err := sc.txConn.Begin(ctx, safeSession, nil) + require.NoError(t, err) + _, errors := sc.ExecuteMultiShard(ctx, nil, tc.rss, tc.queries, safeSession, false, false, nullResultsObserver{}, false) + require.Empty(t, errors) + require.NoError(t, + sc.txConn.Commit(ctx, safeSession)) + txCountMap := txProcessed.Counts() + fmt.Printf("%v", txCountMap) + assert.EqualValues(t, tc.expVal, txCountMap[tc.expMetric]) + }) + } +} + func newTestTxConnEnv(t *testing.T, ctx context.Context, name string) (sc *ScatterConn, sbc0, sbc1 *sandboxconn.SandboxConn, rss0, rss1, rss01 []*srvtopo.ResolvedShard) { t.Helper() createSandbox(name) diff --git a/go/vt/vtgate/vindexes/lookup_internal.go b/go/vt/vtgate/vindexes/lookup_internal.go index 5e224259d1d..6293209f31f 100644 --- a/go/vt/vtgate/vindexes/lookup_internal.go +++ b/go/vt/vtgate/vindexes/lookup_internal.go @@ -223,7 +223,7 @@ func (lkp *lookupInternal) VerifyCustom(ctx context.Context, vcursor VCursor, id if err != nil { return nil, vterrors.Wrap(err, "lookup.Verify") } - out[i] = (len(result.Rows) != 0) + out[i] = len(result.Rows) != 0 } return out, nil } diff --git a/go/vt/vtgate/vindexes/vschema.go b/go/vt/vtgate/vindexes/vschema.go index 686c3edcb4e..793ad8ca383 100644 --- a/go/vt/vtgate/vindexes/vschema.go +++ b/go/vt/vtgate/vindexes/vschema.go @@ -163,7 +163,7 @@ func (t *BaseTable) GetTableName() sqlparser.TableName { return sqlparser.NewTableNameWithQualifier(t.Name.String(), t.Keyspace.Name) } -// Keyspace contains the keyspcae info for each Table. +// Keyspace contains the keyspace info for each Table. type Keyspace struct { Name string Sharded bool diff --git a/go/vt/vtgate/vstream_manager.go b/go/vt/vtgate/vstream_manager.go index 9328b50dd25..dc0f9ad329a 100644 --- a/go/vt/vtgate/vstream_manager.go +++ b/go/vt/vtgate/vstream_manager.go @@ -351,6 +351,7 @@ func (vs *vstream) sendEvents(ctx context.Context) { send := func(evs []*binlogdatapb.VEvent) error { if err := vs.send(evs); err != nil { + log.Infof("Error in vstream send (wrapper) to client: %v", err) vs.once.Do(func() { vs.setError(err, "error sending events") }) @@ -361,12 +362,14 @@ func (vs *vstream) sendEvents(ctx context.Context) { for { select { case <-ctx.Done(): + log.Infof("vstream context canceled") vs.once.Do(func() { vs.setError(ctx.Err(), "context ended while sending events") }) return case evs := <-vs.eventCh: if err := send(evs); err != nil { + log.Infof("Error in vstream send events to client: %v", err) vs.once.Do(func() { vs.setError(err, "error sending events") }) @@ -381,6 +384,7 @@ func (vs *vstream) sendEvents(ctx context.Context) { CurrentTime: now, }} if err := send(evs); err != nil { + log.Infof("Error in vstream sending heartbeat to client: %v", err) vs.once.Do(func() { vs.setError(err, "error sending heartbeat") }) @@ -406,7 +410,7 @@ func (vs *vstream) startOneStream(ctx context.Context, sgtid *binlogdatapb.Shard // Set the error on exit. First one wins. if err != nil { - log.Errorf("Error in vstream for %+v: %s", sgtid, err) + log.Errorf("Error in vstream for %+v: %v", sgtid, err) // Get the original/base error. uerr := vterrors.UnwrapAll(err) if !errors.Is(uerr, context.Canceled) && !errors.Is(uerr, context.DeadlineExceeded) { @@ -638,6 +642,14 @@ func (vs *vstream) streamFromTablet(ctx context.Context, sgtid *binlogdatapb.Sha } } + if options != nil { + options.TablesToCopy = vs.flags.GetTablesToCopy() + } else { + options = &binlogdatapb.VStreamOptions{ + TablesToCopy: vs.flags.GetTablesToCopy(), + } + } + // Safe to access sgtid.Gtid here (because it can't change until streaming begins). req := &binlogdatapb.VStreamRequest{ Target: target, @@ -656,6 +668,7 @@ func (vs *vstream) streamFromTablet(ctx context.Context, sgtid *binlogdatapb.Sha return vterrors.Wrapf(ctx.Err(), "context ended while streaming from tablet %s in %s/%s", tabletAliasString, sgtid.Keyspace, sgtid.Shard) case streamErr := <-errCh: + log.Infof("vstream for %s/%s ended due to health check, should retry: %v", sgtid.Keyspace, sgtid.Shard, streamErr) // You must return Code_UNAVAILABLE here to trigger a restart. return vterrors.Errorf(vtrpcpb.Code_UNAVAILABLE, "error streaming from tablet %s in %s/%s: %s", tabletAliasString, sgtid.Keyspace, sgtid.Shard, streamErr.Error()) @@ -663,6 +676,7 @@ func (vs *vstream) streamFromTablet(ctx context.Context, sgtid *binlogdatapb.Sha // Unreachable. // This can happen if a server misbehaves and does not end // the stream after we return an error. + log.Infof("vstream for %s/%s ended due to journal event, returning io.EOF", sgtid.Keyspace, sgtid.Shard) return io.EOF default: } @@ -674,16 +688,10 @@ func (vs *vstream) streamFromTablet(ctx context.Context, sgtid *binlogdatapb.Sha for i, event := range events { switch event.Type { case binlogdatapb.VEventType_FIELD: - // Update table names and send. - // If we're streaming from multiple keyspaces, this will disambiguate - // duplicate table names. - ev := event.CloneVT() - ev.FieldEvent.TableName = sgtid.Keyspace + "." + ev.FieldEvent.TableName + ev := maybeUpdateTableName(event, sgtid.Keyspace, vs.flags.GetExcludeKeyspaceFromTableName(), extractFieldTableName) sendevents = append(sendevents, ev) case binlogdatapb.VEventType_ROW: - // Update table names and send. - ev := event.CloneVT() - ev.RowEvent.TableName = sgtid.Keyspace + "." + ev.RowEvent.TableName + ev := maybeUpdateTableName(event, sgtid.Keyspace, vs.flags.GetExcludeKeyspaceFromTableName(), extractRowTableName) sendevents = append(sendevents, ev) case binlogdatapb.VEventType_COMMIT, binlogdatapb.VEventType_DDL, binlogdatapb.VEventType_OTHER: sendevents = append(sendevents, event) @@ -694,6 +702,7 @@ func (vs *vstream) streamFromTablet(ctx context.Context, sgtid *binlogdatapb.Sha } if err := vs.sendAll(ctx, sgtid, eventss); err != nil { + log.Infof("vstream for %s/%s, error in sendAll: %v", sgtid.Keyspace, sgtid.Shard, err) return vterrors.Wrap(err, sendingEventsErr) } eventss = nil @@ -710,6 +719,7 @@ func (vs *vstream) streamFromTablet(ctx context.Context, sgtid *binlogdatapb.Sha } if err := vs.sendAll(ctx, sgtid, eventss); err != nil { + log.Infof("vstream for %s/%s, error in sendAll, on copy completed event: %v", sgtid.Keyspace, sgtid.Shard, err) return vterrors.Wrap(err, sendingEventsErr) } eventss = nil @@ -740,6 +750,7 @@ func (vs *vstream) streamFromTablet(ctx context.Context, sgtid *binlogdatapb.Sha } eventss = append(eventss, sendevents) if err := vs.sendAll(ctx, sgtid, eventss); err != nil { + log.Infof("vstream for %s/%s, error in sendAll, on journal event: %v", sgtid.Keyspace, sgtid.Shard, err) return vterrors.Wrap(err, sendingEventsErr) } eventss = nil @@ -774,6 +785,7 @@ func (vs *vstream) streamFromTablet(ctx context.Context, sgtid *binlogdatapb.Sha if endTimer != nil { <-endTimer.C } + log.Infof("vstream for %s/%s ended due to journal event, returning io.EOF", sgtid.Keyspace, sgtid.Shard) return io.EOF } } @@ -802,7 +814,7 @@ func (vs *vstream) streamFromTablet(ctx context.Context, sgtid *binlogdatapb.Sha retry, ignoreTablet := vs.shouldRetry(err) if !retry { - log.Errorf("vstream for %s/%s error: %v", sgtid.Keyspace, sgtid.Shard, err) + log.Infof("vstream for %s/%s error, no retry: %v", sgtid.Keyspace, sgtid.Shard, err) return vterrors.Wrapf(err, "error in vstream for %s/%s on tablet %s", sgtid.Keyspace, sgtid.Shard, tabletAliasString) } @@ -822,6 +834,29 @@ func (vs *vstream) streamFromTablet(ctx context.Context, sgtid *binlogdatapb.Sha } +// maybeUpdateTableNames updates table names when the ExcludeKeyspaceFromTableName flag is disabled. +// If we're streaming from multiple keyspaces, updating the table names by inserting the keyspace will disambiguate +// duplicate table names. If we enable the ExcludeKeyspaceFromTableName flag to not update the table names, there is no need to +// clone the entire event, whcih improves performance. This is typically safely used by clients only streaming one keyspace. +func maybeUpdateTableName(event *binlogdatapb.VEvent, keyspace string, excludeKeyspaceFromTableName bool, + tableNameExtractor func(ev *binlogdatapb.VEvent) *string) *binlogdatapb.VEvent { + if excludeKeyspaceFromTableName { + return event + } + ev := event.CloneVT() + tableName := tableNameExtractor(ev) + *tableName = keyspace + "." + *tableName + return ev +} + +func extractFieldTableName(ev *binlogdatapb.VEvent) *string { + return &ev.FieldEvent.TableName +} + +func extractRowTableName(ev *binlogdatapb.VEvent) *string { + return &ev.RowEvent.TableName +} + // shouldRetry determines whether we should exit immediately or retry the vstream. // The first return value determines if the error can be retried, while the second // indicates whether the tablet with which the error occurred should be omitted diff --git a/go/vt/vtgate/vstream_manager_test.go b/go/vt/vtgate/vstream_manager_test.go index 5e44d08fbca..82dda676eb1 100644 --- a/go/vt/vtgate/vstream_manager_test.go +++ b/go/vt/vtgate/vstream_manager_test.go @@ -19,6 +19,9 @@ package vtgate import ( "context" "fmt" + "os" + "reflect" + "runtime/pprof" "strings" "sync" "sync/atomic" @@ -127,6 +130,82 @@ func TestVStreamSkew(t *testing.T) { } } +func TestVStreamEventsExcludeKeyspaceFromTableName(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + cell := "aa" + ks := "TestVStream" + _ = createSandbox(ks) + hc := discovery.NewFakeHealthCheck(nil) + st := getSandboxTopo(ctx, cell, ks, []string{"-20"}) + + vsm := newTestVStreamManager(ctx, hc, st, cell) + sbc0 := hc.AddTestTablet(cell, "1.1.1.1", 1001, ks, "-20", topodatapb.TabletType_PRIMARY, true, 1, nil) + addTabletToSandboxTopo(t, ctx, st, ks, "-20", sbc0.Tablet()) + + send1 := []*binlogdatapb.VEvent{ + {Type: binlogdatapb.VEventType_GTID, Gtid: "gtid01"}, + {Type: binlogdatapb.VEventType_FIELD, FieldEvent: &binlogdatapb.FieldEvent{TableName: "f0"}}, + {Type: binlogdatapb.VEventType_ROW, RowEvent: &binlogdatapb.RowEvent{TableName: "t0"}}, + {Type: binlogdatapb.VEventType_COMMIT}, + } + want1 := &binlogdatapb.VStreamResponse{Events: []*binlogdatapb.VEvent{ + {Type: binlogdatapb.VEventType_VGTID, Vgtid: &binlogdatapb.VGtid{ + ShardGtids: []*binlogdatapb.ShardGtid{{ + Keyspace: ks, + Shard: "-20", + Gtid: "gtid01", + }}, + }}, + // Verify that the table names lack the keyspace + {Type: binlogdatapb.VEventType_FIELD, FieldEvent: &binlogdatapb.FieldEvent{TableName: "f0"}}, + {Type: binlogdatapb.VEventType_ROW, RowEvent: &binlogdatapb.RowEvent{TableName: "t0"}}, + {Type: binlogdatapb.VEventType_COMMIT}, + }} + sbc0.AddVStreamEvents(send1, nil) + + send2 := []*binlogdatapb.VEvent{ + {Type: binlogdatapb.VEventType_GTID, Gtid: "gtid02"}, + {Type: binlogdatapb.VEventType_DDL}, + } + want2 := &binlogdatapb.VStreamResponse{Events: []*binlogdatapb.VEvent{ + {Type: binlogdatapb.VEventType_VGTID, Vgtid: &binlogdatapb.VGtid{ + ShardGtids: []*binlogdatapb.ShardGtid{{ + Keyspace: ks, + Shard: "-20", + Gtid: "gtid02", + }}, + }}, + {Type: binlogdatapb.VEventType_DDL}, + }} + sbc0.AddVStreamEvents(send2, nil) + + vgtid := &binlogdatapb.VGtid{ + ShardGtids: []*binlogdatapb.ShardGtid{{ + Keyspace: ks, + Shard: "-20", + Gtid: "pos", + }}, + } + ch := make(chan *binlogdatapb.VStreamResponse) + go func() { + err := vsm.VStream(ctx, topodatapb.TabletType_PRIMARY, vgtid, nil, &vtgatepb.VStreamFlags{ExcludeKeyspaceFromTableName: true}, func(events []*binlogdatapb.VEvent) error { + ch <- &binlogdatapb.VStreamResponse{Events: events} + return nil + }) + wantErr := "context canceled" + if err == nil || !strings.Contains(err.Error(), wantErr) { + t.Errorf("vstream end: %v, must contain %v", err.Error(), wantErr) + } + ch <- nil + }() + verifyEvents(t, ch, want1, want2) + + // Ensure the go func error return was verified. + cancel() + <-ch +} + func TestVStreamEvents(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() @@ -202,6 +281,115 @@ func TestVStreamEvents(t *testing.T) { <-ch } +func BenchmarkVStreamEvents(b *testing.B) { + tests := []struct { + name string + excludeKeyspaceFromTableName bool + }{ + {"ExcludeKeyspaceFromTableName=true", true}, + {"ExcludeKeyspaceFromTableName=false", false}, + } + for _, tt := range tests { + b.Run(tt.name, func(b *testing.B) { + var f *os.File + var err error + if os.Getenv("PROFILE_CPU") == "true" { + f, err = os.Create("cpu.prof") + if err != nil { + b.Fatal(err) + } + defer f.Close() + } + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + cell := "aa" + ks := "TestVStream" + _ = createSandbox(ks) + hc := discovery.NewFakeHealthCheck(nil) + st := getSandboxTopo(ctx, cell, ks, []string{"-20"}) + + vsm := newTestVStreamManager(ctx, hc, st, cell) + sbc0 := hc.AddTestTablet(cell, "1.1.1.1", 1001, ks, "-20", topodatapb.TabletType_PRIMARY, true, 1, nil) + addTabletToSandboxTopo(b, ctx, st, ks, "-20", sbc0.Tablet()) + + const totalEvents = 100_000 + batchSize := 10_000 + for i := 0; i < totalEvents; i += batchSize { + var events []*binlogdatapb.VEvent + events = append(events, &binlogdatapb.VEvent{ + Type: binlogdatapb.VEventType_GTID, + Gtid: fmt.Sprintf("gtid-%d", i), + }) + for j := 0; j < batchSize-2; j++ { + events = append(events, &binlogdatapb.VEvent{ + Type: binlogdatapb.VEventType_ROW, + RowEvent: &binlogdatapb.RowEvent{ + TableName: fmt.Sprintf("t%d", j), + }, + }) + } + events = append(events, &binlogdatapb.VEvent{Type: binlogdatapb.VEventType_COMMIT}) + sbc0.AddVStreamEvents(events, nil) + } + + vgtid := &binlogdatapb.VGtid{ + ShardGtids: []*binlogdatapb.ShardGtid{{ + Keyspace: ks, + Shard: "-20", + Gtid: "pos", + }}, + } + start := make(chan struct{}) + ch := make(chan *binlogdatapb.VStreamResponse) + go func() { + close(start) + err := vsm.VStream(ctx, topodatapb.TabletType_PRIMARY, vgtid, nil, + &vtgatepb.VStreamFlags{ExcludeKeyspaceFromTableName: tt.excludeKeyspaceFromTableName}, func(events []*binlogdatapb.VEvent) error { + ch <- &binlogdatapb.VStreamResponse{Events: events} + return nil + }) + wantErr := "context canceled" + if err == nil || !strings.Contains(err.Error(), wantErr) { + b.Errorf("vstream end: %v, must contain %v", err.Error(), wantErr) + } + ch <- nil + }() + + // Start the timer when the VStream begins + <-start + b.ResetTimer() + if os.Getenv("PROFILE_CPU") == "true" { + pprof.StartCPUProfile(f) + } + + received := 0 + for { + resp := <-ch + if resp == nil { + close(ch) + break + } + received += len(resp.Events) + if received >= totalEvents { + b.Logf("Received events %d, expected total %d", received, totalEvents) + b.StopTimer() + if os.Getenv("PROFILE_CPU") == "true" { + pprof.StopCPUProfile() + } + cancel() + } + } + + if received < totalEvents { + b.Errorf("expected at least %d events, got %d", totalEvents, received) + } + + cancel() + <-ch + }) + } +} + // TestVStreamChunks ensures that a transaction that's broken // into chunks is sent together. func TestVStreamChunks(t *testing.T) { @@ -382,30 +570,47 @@ func TestVStreamsMetrics(t *testing.T) { <-ch expectedLabels1 := "TestVStream.-20.PRIMARY" expectedLabels2 := "TestVStream.20-40.PRIMARY" - wantVStreamsCreated := make(map[string]int64) - wantVStreamsCreated[expectedLabels1] = 1 - wantVStreamsCreated[expectedLabels2] = 1 - assert.Equal(t, wantVStreamsCreated, vsm.vstreamsCreated.Counts(), "vstreamsCreated matches") - - wantVStreamsLag := make(map[string]int64) - wantVStreamsLag[expectedLabels1] = 5 - wantVStreamsLag[expectedLabels2] = 7 - assert.Equal(t, wantVStreamsLag, vsm.vstreamsLag.Counts(), "vstreamsLag matches") - - wantVStreamsCount := make(map[string]int64) - wantVStreamsCount[expectedLabels1] = 1 - wantVStreamsCount[expectedLabels2] = 1 - assert.Equal(t, wantVStreamsCount, vsm.vstreamsCount.Counts(), "vstreamsCount matches") - - wantVStreamsEventsStreamed := make(map[string]int64) - wantVStreamsEventsStreamed[expectedLabels1] = 2 - wantVStreamsEventsStreamed[expectedLabels2] = 2 - assert.Equal(t, wantVStreamsEventsStreamed, vsm.vstreamsEventsStreamed.Counts(), "vstreamsEventsStreamed matches") - wantVStreamsEndedWithErrors := make(map[string]int64) - wantVStreamsEndedWithErrors[expectedLabels1] = 0 - wantVStreamsEndedWithErrors[expectedLabels2] = 0 - assert.Equal(t, wantVStreamsEndedWithErrors, vsm.vstreamsEndedWithErrors.Counts(), "vstreamsEndedWithErrors matches") + wantVStreamsCreated := map[string]int64{ + expectedLabels1: 1, + expectedLabels2: 1, + } + waitForMetricsMatch(t, vsm.vstreamsCreated.Counts, wantVStreamsCreated) + + wantVStreamsLag := map[string]int64{ + expectedLabels1: 5, + expectedLabels2: 7, + } + waitForMetricsMatch(t, vsm.vstreamsLag.Counts, wantVStreamsLag) + + wantVStreamsCount := map[string]int64{ + expectedLabels1: 1, + expectedLabels2: 1, + } + waitForMetricsMatch(t, vsm.vstreamsCount.Counts, wantVStreamsCount) + + wantVEventsCount := map[string]int64{ + expectedLabels1: 2, + expectedLabels2: 2, + } + waitForMetricsMatch(t, vsm.vstreamsEventsStreamed.Counts, wantVEventsCount) + + wantVStreamsEndedWithErrors := map[string]int64{ + expectedLabels1: 0, + expectedLabels2: 0, + } + waitForMetricsMatch(t, vsm.vstreamsEndedWithErrors.Counts, wantVStreamsEndedWithErrors) +} + +func waitForMetricsMatch(t *testing.T, getActual func() map[string]int64, want map[string]int64) { + deadline := time.Now().Add(1 * time.Second) + for time.Now().Before(deadline) { + if reflect.DeepEqual(getActual(), want) { + return + } + time.Sleep(10 * time.Millisecond) + } + assert.Equal(t, want, getActual(), "metrics did not match within timeout") } func TestVStreamsMetricsErrors(t *testing.T) { @@ -1866,12 +2071,12 @@ func getSandboxTopoMultiCell(ctx context.Context, cells []string, keyspace strin return st } -func addTabletToSandboxTopo(t *testing.T, ctx context.Context, st *sandboxTopo, ks, shard string, tablet *topodatapb.Tablet) { +func addTabletToSandboxTopo(tb testing.TB, ctx context.Context, st *sandboxTopo, ks, shard string, tablet *topodatapb.Tablet) { _, err := st.topoServer.UpdateShardFields(ctx, ks, shard, func(si *topo.ShardInfo) error { si.PrimaryAlias = tablet.Alias return nil }) - require.NoError(t, err) + require.NoError(tb, err) err = st.topoServer.CreateTablet(ctx, tablet) - require.NoError(t, err) + require.NoError(tb, err) } diff --git a/go/vt/vtgate/vtgate.go b/go/vt/vtgate/vtgate.go index 76774e0a8f6..45b5ed23467 100644 --- a/go/vt/vtgate/vtgate.go +++ b/go/vt/vtgate/vtgate.go @@ -32,6 +32,7 @@ import ( "github.com/spf13/viper" "vitess.io/vitess/go/acl" + "vitess.io/vitess/go/mysql/sqlerror" "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/stats" "vitess.io/vitess/go/tb" @@ -53,6 +54,7 @@ import ( "vitess.io/vitess/go/vt/topo" "vitess.io/vitess/go/vt/topo/topoproto" "vitess.io/vitess/go/vt/topotools" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtenv" "vitess.io/vitess/go/vt/vterrors" econtext "vitess.io/vitess/go/vt/vtgate/executorcontext" @@ -170,33 +172,33 @@ var ( func registerFlags(fs *pflag.FlagSet) { fs.String("transaction_mode", "MULTI", "SINGLE: disallow multi-db transactions, MULTI: allow multi-db transactions with best effort commit, TWOPC: allow multi-db transactions with 2pc commit") - fs.BoolVar(&normalizeQueries, "normalize_queries", normalizeQueries, "Rewrite queries with bind vars. Turn this off if the app itself sends normalized queries with bind vars.") + utils.SetFlagBoolVar(fs, &normalizeQueries, "normalize-queries", normalizeQueries, "Rewrite queries with bind vars. Turn this off if the app itself sends normalized queries with bind vars.") fs.BoolVar(&terseErrors, "vtgate-config-terse-errors", terseErrors, "prevent bind vars from escaping in returned errors") fs.IntVar(&truncateErrorLen, "truncate-error-len", truncateErrorLen, "truncate errors sent to client if they are longer than this value (0 means do not truncate)") fs.IntVar(&streamBufferSize, "stream_buffer_size", streamBufferSize, "the number of bytes sent from vtgate for each stream call. It's recommended to keep this value in sync with vttablet's query-server-config-stream-buffer-size.") - fs.Int64Var(&queryPlanCacheMemory, "gate_query_cache_memory", queryPlanCacheMemory, "gate server query cache size in bytes, maximum amount of memory to be cached. vtgate analyzes every incoming query and generate a query plan, these plans are being cached in a lru cache. This config controls the capacity of the lru cache.") - fs.IntVar(&maxMemoryRows, "max_memory_rows", maxMemoryRows, "Maximum number of rows that will be held in memory for intermediate results as well as the final result.") - fs.IntVar(&warnMemoryRows, "warn_memory_rows", warnMemoryRows, "Warning threshold for in-memory results. A row count higher than this amount will cause the VtGateWarnings.ResultsExceeded counter to be incremented.") - fs.StringVar(&defaultDDLStrategy, "ddl_strategy", defaultDDLStrategy, "Set default strategy for DDL statements. Override with @@ddl_strategy session variable") - fs.StringVar(&dbDDLPlugin, "dbddl_plugin", dbDDLPlugin, "controls how to handle CREATE/DROP DATABASE. use it if you are using your own database provisioning service") - fs.BoolVar(&noScatter, "no_scatter", noScatter, "when set to true, the planner will fail instead of producing a plan that includes scatter queries") + utils.SetFlagInt64Var(fs, &queryPlanCacheMemory, "gate-query-cache-memory", queryPlanCacheMemory, "gate server query cache size in bytes, maximum amount of memory to be cached. vtgate analyzes every incoming query and generate a query plan, these plans are being cached in a lru cache. This config controls the capacity of the lru cache.") + utils.SetFlagIntVar(fs, &maxMemoryRows, "max-memory-rows", maxMemoryRows, "Maximum number of rows that will be held in memory for intermediate results as well as the final result.") + utils.SetFlagIntVar(fs, &warnMemoryRows, "warn-memory-rows", warnMemoryRows, "Warning threshold for in-memory results. A row count higher than this amount will cause the VtGateWarnings.ResultsExceeded counter to be incremented.") + utils.SetFlagStringVar(fs, &defaultDDLStrategy, "ddl-strategy", defaultDDLStrategy, "Set default strategy for DDL statements. Override with @@ddl_strategy session variable") + utils.SetFlagStringVar(fs, &dbDDLPlugin, "dbddl-plugin", dbDDLPlugin, "controls how to handle CREATE/DROP DATABASE. use it if you are using your own database provisioning service") + utils.SetFlagBoolVar(fs, &noScatter, "no-scatter", noScatter, "when set to true, the planner will fail instead of producing a plan that includes scatter queries") fs.BoolVar(&enableShardRouting, "enable-partial-keyspace-migration", enableShardRouting, "(Experimental) Follow shard routing rules: enable only while migrating a keyspace shard by shard. See documentation on Partial MoveTables for more. (default false)") - fs.DurationVar(&healthCheckRetryDelay, "healthcheck_retry_delay", healthCheckRetryDelay, "health check retry delay") - fs.DurationVar(&healthCheckTimeout, "healthcheck_timeout", healthCheckTimeout, "the health check timeout period") - fs.IntVar(&maxPayloadSize, "max_payload_size", maxPayloadSize, "The threshold for query payloads in bytes. A payload greater than this threshold will result in a failure to handle the query.") - fs.IntVar(&warnPayloadSize, "warn_payload_size", warnPayloadSize, "The warning threshold for query payloads in bytes. A payload greater than this threshold will cause the VtGateWarnings.WarnPayloadSizeExceeded counter to be incremented.") + utils.SetFlagDurationVar(fs, &healthCheckRetryDelay, "healthcheck-retry-delay", healthCheckRetryDelay, "health check retry delay") + utils.SetFlagDurationVar(fs, &healthCheckTimeout, "healthcheck-timeout", healthCheckTimeout, "the health check timeout period") + utils.SetFlagIntVar(fs, &maxPayloadSize, "max-payload-size", maxPayloadSize, "The threshold for query payloads in bytes. A payload greater than this threshold will result in a failure to handle the query.") + utils.SetFlagIntVar(fs, &warnPayloadSize, "warn-payload-size", warnPayloadSize, "The warning threshold for query payloads in bytes. A payload greater than this threshold will cause the VtGateWarnings.WarnPayloadSizeExceeded counter to be incremented.") fs.BoolVar(&sysVarSetEnabled, "enable_system_settings", sysVarSetEnabled, "This will enable the system settings to be changed per session at the database connection level") - fs.BoolVar(&setVarEnabled, "enable_set_var", setVarEnabled, "This will enable the use of MySQL's SET_VAR query hint for certain system variables instead of using reserved connections") - fs.DurationVar(&lockHeartbeatTime, "lock_heartbeat_time", lockHeartbeatTime, "If there is lock function used. This will keep the lock connection active by using this heartbeat") - fs.BoolVar(&warnShardedOnly, "warn_sharded_only", warnShardedOnly, "If any features that are only available in unsharded mode are used, query execution warnings will be added to the session") - fs.StringVar(&foreignKeyMode, "foreign_key_mode", foreignKeyMode, "This is to provide how to handle foreign key constraint in create/alter table. Valid values are: allow, disallow") + utils.SetFlagBoolVar(fs, &setVarEnabled, "enable-set-var", setVarEnabled, "This will enable the use of MySQL's SET_VAR query hint for certain system variables instead of using reserved connections") + utils.SetFlagDurationVar(fs, &lockHeartbeatTime, "lock-heartbeat-time", lockHeartbeatTime, "If there is lock function used. This will keep the lock connection active by using this heartbeat") + utils.SetFlagBoolVar(fs, &warnShardedOnly, "warn-sharded-only", warnShardedOnly, "If any features that are only available in unsharded mode are used, query execution warnings will be added to the session") + utils.SetFlagStringVar(fs, &foreignKeyMode, "foreign-key-mode", foreignKeyMode, "This is to provide how to handle foreign key constraint in create/alter table. Valid values are: allow, disallow") fs.Bool("enable_online_ddl", enableOnlineDDL.Default(), "Allow users to submit, review and control Online DDL") fs.Bool("enable_direct_ddl", enableDirectDDL.Default(), "Allow users to submit direct DDL statements") fs.BoolVar(&enableSchemaChangeSignal, "schema_change_signal", enableSchemaChangeSignal, "Enable the schema tracker; requires queryserver-config-schema-change-signal to be enabled on the underlying vttablets for this to work") fs.IntVar(&queryTimeout, "query-timeout", queryTimeout, "Sets the default query timeout (in ms). Can be overridden by session variable (query_timeout) or comment directive (QUERY_TIMEOUT_MS)") - fs.StringVar(&queryLogToFile, "log_queries_to_file", queryLogToFile, "Enable query logging to the specified file") + utils.SetFlagStringVar(fs, &queryLogToFile, "log-queries-to-file", queryLogToFile, "Enable query logging to the specified file") fs.IntVar(&queryLogBufferSize, "querylog-buffer-size", queryLogBufferSize, "Maximum number of buffered query logs before throttling log output") - fs.DurationVar(&messageStreamGracePeriod, "message_stream_grace_period", messageStreamGracePeriod, "the amount of time to give for a vttablet to resume if it ends a message stream, usually because of a reparent.") + utils.SetFlagDurationVar(fs, &messageStreamGracePeriod, "message-stream-grace-period", messageStreamGracePeriod, "the amount of time to give for a vttablet to resume if it ends a message stream, usually because of a reparent.") fs.BoolVar(&enableViews, "enable-views", enableViews, "Enable views support in vtgate.") fs.BoolVar(&enableUdfs, "track-udfs", enableUdfs, "Track UDFs in vtgate.") fs.BoolVar(&allowKillStmt, "allow-kill-statement", allowKillStmt, "Allows the execution of kill statement") @@ -320,8 +322,20 @@ func Init( // TabletGateway can create it's own healthcheck gw := NewTabletGateway(ctx, hc, serv, cell) gw.RegisterStats() - if err := gw.WaitForTablets(ctx, tabletTypesToWait); err != nil { - log.Fatalf("tabletGateway.WaitForTablets failed: %v", err) + // Retry loop for potential time-outs waiting for all tablets. +OuterLoop: + for { + err := gw.WaitForTablets(ctx, tabletTypesToWait) + switch { + case err == nil: + break OuterLoop + case errors.Is(err, context.DeadlineExceeded): + log.Warning("TabletGateway timed out waiting for tablets to become available - retrying.") + + continue + default: + log.Fatalf("tabletGateway.WaitForTablets failed: %v", err) + } } dynamicConfig := NewDynamicViperConfig() @@ -338,7 +352,7 @@ func Init( } if _, err := schema.ParseDDLStrategy(defaultDDLStrategy); err != nil { - log.Fatalf("Invalid value for -ddl_strategy: %v", err.Error()) + log.Fatalf("Invalid value for -ddl-strategy: %v", err.Error()) } tc := NewTxConn(gw, dynamicConfig) // ScatterConn depends on TxConn to perform forced rollbacks. @@ -583,6 +597,38 @@ func (vtg *VTGate) Execute( return session, nil, err } +// ExecuteMulti executes multiple non-streaming queries. +func (vtg *VTGate) ExecuteMulti( + ctx context.Context, + mysqlCtx vtgateservice.MySQLConnection, + session *vtgatepb.Session, + sqlString string, +) (newSession *vtgatepb.Session, qrs []*sqltypes.Result, err error) { + queries, err := vtg.executor.Environment().Parser().SplitStatementToPieces(sqlString) + if err != nil { + return session, nil, err + } + if len(queries) == 0 { + return session, nil, sqlparser.ErrEmpty + } + var qr *sqltypes.Result + var cancel context.CancelFunc + for _, query := range queries { + func() { + if mysqlQueryTimeout != 0 { + ctx, cancel = context.WithTimeout(ctx, mysqlQueryTimeout) + defer cancel() + } + session, qr, err = vtg.Execute(ctx, mysqlCtx, session, query, make(map[string]*querypb.BindVariable), false) + }() + if err != nil { + return session, qrs, err + } + qrs = append(qrs, qr) + } + return session, qrs, nil +} + // ExecuteBatch executes a batch of queries. func (vtg *VTGate) ExecuteBatch(ctx context.Context, session *vtgatepb.Session, sqlList []string, bindVariablesList []map[string]*querypb.BindVariable) (*vtgatepb.Session, []sqltypes.QueryResponse, error) { // In this context, we don't care if we can't fully parse destination @@ -650,6 +696,47 @@ func (vtg *VTGate) StreamExecute(ctx context.Context, mysqlCtx vtgateservice.MyS return safeSession.Session, nil } +// StreamExecuteMulti executes a streaming query. +// Note we guarantee the callback will not be called concurrently by multiple go routines. +func (vtg *VTGate) StreamExecuteMulti(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sqlString string, callback func(qr sqltypes.QueryResponse, more bool, firstPacket bool) error) (*vtgatepb.Session, error) { + queries, err := vtg.executor.Environment().Parser().SplitStatementToPieces(sqlString) + if err != nil { + return session, err + } + if len(queries) == 0 { + return session, sqlparser.ErrEmpty + } + var cancel context.CancelFunc + firstPacket := true + more := true + for idx, query := range queries { + firstPacket = true + more = idx < len(queries)-1 + func() { + if mysqlQueryTimeout != 0 { + ctx, cancel = context.WithTimeout(ctx, mysqlQueryTimeout) + defer cancel() + } + session, err = vtg.StreamExecute(ctx, mysqlCtx, session, query, make(map[string]*querypb.BindVariable), func(result *sqltypes.Result) error { + defer func() { + firstPacket = false + }() + return callback(sqltypes.QueryResponse{QueryResult: result}, more, firstPacket) + }) + }() + if err != nil { + // We got an error before we sent a single packet. So it must be an error + // because of the query itself. We should return the error in the packet and stop + // processing any more queries. + if firstPacket { + return session, callback(sqltypes.QueryResponse{QueryError: sqlerror.NewSQLErrorFromError(err)}, false, true) + } + return session, err + } + } + return session, nil +} + // CloseSession closes the session, rolling back any implicit transactions. This has the // same effect as if a "rollback" statement was executed, but does not affect the query // statistics. diff --git a/go/vt/vtgate/vtgateconn/vtgateconn.go b/go/vt/vtgate/vtgateconn/vtgateconn.go index 7455bd6dd88..994fd176d91 100644 --- a/go/vt/vtgate/vtgateconn/vtgateconn.go +++ b/go/vt/vtgate/vtgateconn/vtgateconn.go @@ -131,6 +131,13 @@ func (sn *VTGateSession) ExecuteBatch(ctx context.Context, query []string, bindV return res, errs } +// ExecuteMulti performs a VTGate ExecuteMulti. +func (sn *VTGateSession) ExecuteMulti(ctx context.Context, query string) ([]*sqltypes.Result, error) { + session, res, err := sn.impl.ExecuteMulti(ctx, sn.session, query) + sn.session = session + return res, err +} + // StreamExecute executes a streaming query on vtgate. // It returns a ResultStream and an error. First check the // error. Then you can pull values from the ResultStream until io.EOF, @@ -144,6 +151,19 @@ func (sn *VTGateSession) StreamExecute(ctx context.Context, query string, bindVa }) } +// StreamExecuteMulti executes a set of streaming queries on vtgate. +// It returns a MultiResultStream and an error. First check the +// error. Then you can pull values from the MultiResultStream until io.EOF, +// or another error. The boolean field tells you when a new result starts. +func (sn *VTGateSession) StreamExecuteMulti(ctx context.Context, query string) (sqltypes.MultiResultStream, error) { + // passing in the function that will update the session when received on the stream. + return sn.impl.StreamExecuteMulti(ctx, sn.session, query, func(response *vtgatepb.StreamExecuteMultiResponse) { + if response.Session != nil { + sn.session = response.Session + } + }) +} + // Prepare performs a VTGate Prepare. func (sn *VTGateSession) Prepare(ctx context.Context, query string) ([]*querypb.Field, uint16, error) { session, fields, paramsCount, err := sn.impl.Prepare(ctx, sn.session, query) @@ -167,6 +187,12 @@ type Impl interface { // StreamExecute executes a streaming query on vtgate. StreamExecute(ctx context.Context, session *vtgatepb.Session, query string, bindVars map[string]*querypb.BindVariable, processResponse func(*vtgatepb.StreamExecuteResponse)) (sqltypes.ResultStream, error) + // ExecuteMulti executes multiple non-streaming queries. + ExecuteMulti(ctx context.Context, session *vtgatepb.Session, sqlString string) (*vtgatepb.Session, []*sqltypes.Result, error) + + // StreamExecuteMulti executes multiple streaming queries. + StreamExecuteMulti(ctx context.Context, session *vtgatepb.Session, sqlString string, processResponse func(response *vtgatepb.StreamExecuteMultiResponse)) (sqltypes.MultiResultStream, error) + // Prepare returns the fields information for the query as part of supporting prepare statements. Prepare(ctx context.Context, session *vtgatepb.Session, sql string) (*vtgatepb.Session, []*querypb.Field, uint16, error) diff --git a/go/vt/vtgate/vtgateservice/interface.go b/go/vt/vtgate/vtgateservice/interface.go index e97020651d5..5e9414f8819 100644 --- a/go/vt/vtgate/vtgateservice/interface.go +++ b/go/vt/vtgate/vtgateservice/interface.go @@ -37,6 +37,12 @@ type VTGateService interface { // Prepare statement support Prepare(ctx context.Context, session *vtgatepb.Session, sql string) (*vtgatepb.Session, []*querypb.Field, uint16, error) + // ExecuteMulti executes multiple non-streaming queries. + ExecuteMulti(ctx context.Context, mysqlCtx MySQLConnection, session *vtgatepb.Session, sqlString string) (newSession *vtgatepb.Session, qrs []*sqltypes.Result, err error) + + // StreamExecuteMulti executes multiple streaming queries. + StreamExecuteMulti(ctx context.Context, mysqlCtx MySQLConnection, session *vtgatepb.Session, sqlString string, callback func(qr sqltypes.QueryResponse, more bool, firstPacket bool) error) (*vtgatepb.Session, error) + // CloseSession closes the session, rolling back any implicit transactions. // This has the same effect as if a "rollback" statement was executed, // but does not affect the query statistics. diff --git a/go/vt/vtorc/logic/topology_recovery.go b/go/vt/vtorc/logic/topology_recovery.go index 98cba60974e..25b79e1f1bc 100644 --- a/go/vt/vtorc/logic/topology_recovery.go +++ b/go/vt/vtorc/logic/topology_recovery.go @@ -551,6 +551,20 @@ func executeCheckAndRecoverFunction(analysisEntry *inst.ReplicationAnalysis) (er return err } + // Prioritise primary recovery. + // If we are performing some other action, first ensure that it is not because of primary issues. + // This step is only meant to improve the time taken to detect and fix cluster wide recoveries, it does not impact correctness. + // If a VTOrc detects an issue on a replica like ReplicationStopped, the underlying cause could be a dead primary instead. + // So, we try to reload that primary's information before proceeding with the replication stopped fix. We do this before acquiring the shard lock + // to allow another VTOrc instance to proceed with the dead primary recovery if it is indeed the case and it detects it before us. If however, the primary + // is not dead, then we will proceed with the fix for the replica. Essentially, we are trading off speed in replica recoveries (by doing an additional primary tablet reload) + // for speed in cluster-wide recoveries (by not holding the shard lock before reloading the primary tablet information). + if !isClusterWideRecovery(checkAndRecoverFunctionCode) { + if err = recheckPrimaryHealth(analysisEntry, DiscoverInstance); err != nil { + return err + } + } + // We lock the shard here and then refresh the tablets information ctx, unlock, err := LockShard(context.Background(), analysisEntry.AnalyzedKeyspace, analysisEntry.AnalyzedShard, getLockAction(analysisEntry.AnalyzedInstanceAlias, analysisEntry.Analysis), @@ -671,6 +685,36 @@ func executeCheckAndRecoverFunction(analysisEntry *inst.ReplicationAnalysis) (er return err } +// recheckPrimaryHealth check the health of the primary node. +// It then checks whether, given the re-discovered primary health, the original recovery is still valid. +// If not valid then it will abort the current analysis. +func recheckPrimaryHealth(analysisEntry *inst.ReplicationAnalysis, discoveryFunc func(string, bool)) error { + originalAnalysisEntry := analysisEntry.Analysis + primaryTabletAlias := analysisEntry.AnalyzedInstancePrimaryAlias + + // re-check if there are any mitigation required for the leader node. + // if the current problem is because of dead primary, this call will update the analysis entry + discoveryFunc(primaryTabletAlias, true) + + // checking if the original analysis is valid even after the primary refresh. + recoveryRequired, err := checkIfAlreadyFixed(analysisEntry) + if err != nil { + log.Infof("recheckPrimaryHealth: Checking if recovery is required returned err: %v", err) + return err + } + + // The original analysis for the tablet has changed. + // This could mean that either the original analysis has changed or some other Vtorc instance has already performing the mitigation. + // In either case, the original analysis is stale which can be safely aborted. + if recoveryRequired { + log.Infof("recheckPrimaryHealth: Primary recovery is required, Tablet alias: %v", primaryTabletAlias) + // original analysis is stale, abort. + return fmt.Errorf("aborting %s, primary mitigation is required", originalAnalysisEntry) + } + + return nil +} + // checkIfAlreadyFixed checks whether the problem that the analysis entry represents has already been fixed by another agent or not func checkIfAlreadyFixed(analysisEntry *inst.ReplicationAnalysis) (bool, error) { // Run a replication analysis again. We will check if the problem persisted diff --git a/go/vt/vtorc/logic/topology_recovery_test.go b/go/vt/vtorc/logic/topology_recovery_test.go index de9ecd02848..6f967f89051 100644 --- a/go/vt/vtorc/logic/topology_recovery_test.go +++ b/go/vt/vtorc/logic/topology_recovery_test.go @@ -24,12 +24,15 @@ import ( "github.com/stretchr/testify/require" + "vitess.io/vitess/go/vt/external/golib/sqlutils" topodatapb "vitess.io/vitess/go/vt/proto/topodata" "vitess.io/vitess/go/vt/topo/memorytopo" "vitess.io/vitess/go/vt/topo/topoproto" + "vitess.io/vitess/go/vt/vtctl/reparentutil/policy" "vitess.io/vitess/go/vt/vtorc/config" "vitess.io/vitess/go/vt/vtorc/db" "vitess.io/vitess/go/vt/vtorc/inst" + "vitess.io/vitess/go/vt/vtorc/test" _ "vitess.io/vitess/go/vt/vttablet/grpctmclient" ) @@ -311,3 +314,108 @@ func TestGetCheckAndRecoverFunctionCode(t *testing.T) { }) } } + +func TestRecheckPrimaryHealth(t *testing.T) { + tests := []struct { + name string + info []*test.InfoForRecoveryAnalysis + wantErr string + }{ + { + name: "analysis change", + info: []*test.InfoForRecoveryAnalysis{{ + TabletInfo: &topodatapb.Tablet{ + Alias: &topodatapb.TabletAlias{Cell: "zon1", Uid: 100}, + Hostname: "localhost", + Keyspace: "ks", + Shard: "0", + Type: topodatapb.TabletType_PRIMARY, + MysqlHostname: "localhost", + MysqlPort: 6709, + }, + DurabilityPolicy: "none", + LastCheckValid: 0, + CountReplicas: 4, + CountValidReplicas: 4, + CountValidReplicatingReplicas: 0, + }}, + wantErr: "aborting ReplicationStopped, primary mitigation is required", + }, + { + name: "analysis did not change", + info: []*test.InfoForRecoveryAnalysis{{ + TabletInfo: &topodatapb.Tablet{ + Alias: &topodatapb.TabletAlias{Cell: "zon1", Uid: 101}, + Hostname: "localhost", + Keyspace: "ks", + Shard: "0", + Type: topodatapb.TabletType_PRIMARY, + MysqlHostname: "localhost", + MysqlPort: 6708, + }, + DurabilityPolicy: policy.DurabilityNone, + LastCheckValid: 1, + CountReplicas: 4, + CountValidReplicas: 4, + CountValidReplicatingReplicas: 3, + CountValidOracleGTIDReplicas: 4, + CountLoggingReplicas: 2, + IsPrimary: 1, + CurrentTabletType: int(topodatapb.TabletType_PRIMARY), + }, { + TabletInfo: &topodatapb.Tablet{ + Alias: &topodatapb.TabletAlias{Cell: "zon1", Uid: 100}, + Hostname: "localhost", + Keyspace: "ks", + Shard: "0", + Type: topodatapb.TabletType_REPLICA, + MysqlHostname: "localhost", + MysqlPort: 6709, + }, + DurabilityPolicy: policy.DurabilityNone, + PrimaryTabletInfo: &topodatapb.Tablet{ + Alias: &topodatapb.TabletAlias{Cell: "zon1", Uid: 101}, + }, + LastCheckValid: 1, + ReadOnly: 1, + ReplicationStopped: 1, + }}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // reset vtorc db after every test + oldDB := db.Db + defer func() { + db.Db = oldDB + }() + + var rowMaps []sqlutils.RowMap + for _, analysis := range tt.info { + analysis.SetValuesFromTabletInfo() + rowMaps = append(rowMaps, analysis.ConvertToRowMap()) + } + + // set replication analysis in Vtorc DB. + db.Db = test.NewTestDB([][]sqlutils.RowMap{rowMaps}) + + err := recheckPrimaryHealth(&inst.ReplicationAnalysis{ + AnalyzedInstanceAlias: "zon1-0000000100", + Analysis: inst.ReplicationStopped, + AnalyzedKeyspace: "ks", + AnalyzedShard: "0", + }, func(s string, b bool) { + // the implementation for DiscoverInstance is not required because we are mocking the db response. + }) + + if tt.wantErr != "" { + require.EqualError(t, err, tt.wantErr) + return + } + + require.NoError(t, err) + }) + } + +} diff --git a/go/vt/vttablet/common/config.go b/go/vt/vttablet/common/config.go index f64b63e347d..ca4e5784056 100644 --- a/go/vt/vttablet/common/config.go +++ b/go/vt/vttablet/common/config.go @@ -136,42 +136,42 @@ func NewVReplicationConfig(overrides map[string]string) (*VReplicationConfig, er continue } switch k { - case "vreplication_experimental_flags": + case "vreplication-experimental-flags": value, err := strconv.ParseInt(v, 10, 64) if err != nil { errors = append(errors, getError(k, v)) } else { c.ExperimentalFlags = value } - case "vreplication_net_read_timeout": + case "vreplication-net-read-timeout": value, err := strconv.Atoi(v) if err != nil { errors = append(errors, getError(k, v)) } else { c.NetReadTimeout = value } - case "vreplication_net_write_timeout": + case "vreplication-net-write-timeout": value, err := strconv.Atoi(v) if err != nil { errors = append(errors, getError(k, v)) } else { c.NetWriteTimeout = value } - case "vreplication_copy_phase_duration": + case "vreplication-copy-phase-duration": value, err := time.ParseDuration(v) if err != nil { errors = append(errors, getError(k, v)) } else { c.CopyPhaseDuration = value } - case "vreplication_retry_delay": + case "vreplication-retry-delay": value, err := time.ParseDuration(v) if err != nil { errors = append(errors, getError(k, v)) } else { c.RetryDelay = value } - case "vreplication_max_time_to_retry_on_error": + case "vreplication-max-time-to-retry-on-error": value, err := time.ParseDuration(v) if err != nil { errors = append(errors, getError(k, v)) @@ -192,21 +192,21 @@ func NewVReplicationConfig(overrides map[string]string) (*VReplicationConfig, er } else { c.RelayLogMaxItems = value } - case "vreplication_replica_lag_tolerance": + case "vreplication-replica-lag-tolerance": value, err := time.ParseDuration(v) if err != nil { errors = append(errors, getError(k, v)) } else { c.ReplicaLagTolerance = value } - case "vreplication_heartbeat_update_interval": + case "vreplication-heartbeat-update-interval": value, err := strconv.Atoi(v) if err != nil { errors = append(errors, getError(k, v)) } else { c.HeartbeatUpdateInterval = value } - case "vreplication_store_compressed_gtid": + case "vreplication-store-compressed-gtid": value, err := strconv.ParseBool(v) if err != nil { errors = append(errors, getError(k, v)) @@ -220,7 +220,7 @@ func NewVReplicationConfig(overrides map[string]string) (*VReplicationConfig, er } else { c.ParallelInsertWorkers = value } - case "vstream_packet_size": + case "vstream-packet-size", "vstream_packet_size": value, err := strconv.Atoi(v) if err != nil { errors = append(errors, getError(k, v)) @@ -228,7 +228,7 @@ func NewVReplicationConfig(overrides map[string]string) (*VReplicationConfig, er c.VStreamPacketSizeOverride = true c.VStreamPacketSize = value } - case "vstream_dynamic_packet_size": + case "vstream-dynamic-packet-size", "vstream_dynamic_packet_size": value, err := strconv.ParseBool(v) if err != nil { errors = append(errors, getError(k, v)) @@ -259,19 +259,21 @@ func NewVReplicationConfig(overrides map[string]string) (*VReplicationConfig, er // keys are one of those that are supported. func (c VReplicationConfig) Map() map[string]string { return map[string]string{ - "vreplication_experimental_flags": strconv.FormatInt(c.ExperimentalFlags, 10), - "vreplication_net_read_timeout": strconv.Itoa(c.NetReadTimeout), - "vreplication_net_write_timeout": strconv.Itoa(c.NetWriteTimeout), - "vreplication_copy_phase_duration": c.CopyPhaseDuration.String(), - "vreplication_retry_delay": c.RetryDelay.String(), - "vreplication_max_time_to_retry_on_error": c.MaxTimeToRetryError.String(), + "vreplication-experimental-flags": strconv.FormatInt(c.ExperimentalFlags, 10), + "vreplication-net-read-timeout": strconv.Itoa(c.NetReadTimeout), + "vreplication-net-write-timeout": strconv.Itoa(c.NetWriteTimeout), + "vreplication-copy-phase-duration": c.CopyPhaseDuration.String(), + "vreplication-retry-delay": c.RetryDelay.String(), + "vreplication-max-time-to-retry-on-error": c.MaxTimeToRetryError.String(), "relay_log_max_size": strconv.Itoa(c.RelayLogMaxSize), "relay_log_max_items": strconv.Itoa(c.RelayLogMaxItems), - "vreplication_replica_lag_tolerance": c.ReplicaLagTolerance.String(), - "vreplication_heartbeat_update_interval": strconv.Itoa(c.HeartbeatUpdateInterval), - "vreplication_store_compressed_gtid": strconv.FormatBool(c.StoreCompressedGTID), + "vreplication-replica-lag-tolerance": c.ReplicaLagTolerance.String(), + "vreplication-heartbeat-update-interval": strconv.Itoa(c.HeartbeatUpdateInterval), + "vreplication-store-compressed-gtid": strconv.FormatBool(c.StoreCompressedGTID), "vreplication-parallel-insert-workers": strconv.Itoa(c.ParallelInsertWorkers), + "vstream-packet-size": strconv.Itoa(c.VStreamPacketSize), "vstream_packet_size": strconv.Itoa(c.VStreamPacketSize), + "vstream-dynamic-packet-size": strconv.FormatBool(c.VStreamDynamicPacketSize), "vstream_dynamic_packet_size": strconv.FormatBool(c.VStreamDynamicPacketSize), "vstream_binlog_rotation_threshold": strconv.FormatInt(c.VStreamBinlogRotationThreshold, 10), } diff --git a/go/vt/vttablet/common/config_test.go b/go/vt/vttablet/common/config_test.go index c73259036f2..a1c8b5b08a3 100644 --- a/go/vt/vttablet/common/config_test.go +++ b/go/vt/vttablet/common/config_test.go @@ -36,19 +36,21 @@ func TestNewVReplicationConfig(t *testing.T) { { name: "Valid values", config: map[string]string{ - "vreplication_experimental_flags": "3", - "vreplication_net_read_timeout": "100", - "vreplication_net_write_timeout": "200", - "vreplication_copy_phase_duration": "2h", - "vreplication_retry_delay": "10s", - "vreplication_max_time_to_retry_on_error": "1h", + "vreplication-experimental-flags": "3", + "vreplication-net-read-timeout": "100", + "vreplication-net-write-timeout": "200", + "vreplication-copy-phase-duration": "2h", + "vreplication-retry-delay": "10s", + "vreplication-max-time-to-retry-on-error": "1h", "relay_log_max_size": "500000", "relay_log_max_items": "10000", - "vreplication_replica_lag_tolerance": "2m", - "vreplication_heartbeat_update_interval": "2", - "vreplication_store_compressed_gtid": "true", + "vreplication-replica-lag-tolerance": "2m", + "vreplication-heartbeat-update-interval": "2", + "vreplication-store-compressed-gtid": "true", "vreplication-parallel-insert-workers": "4", + "vstream-packet-size": "1024", "vstream_packet_size": "1024", + "vstream-dynamic-packet-size": "false", "vstream_dynamic_packet_size": "false", "vstream_binlog_rotation_threshold": "2048", }, @@ -78,31 +80,33 @@ func TestNewVReplicationConfig(t *testing.T) { { name: "Invalid values", config: map[string]string{ - "vreplication_experimental_flags": "invalid", - "vreplication_net_read_timeout": "100.0", - "vreplication_net_write_timeout": "invalid", - "vreplication_copy_phase_duration": "invalid", - "vreplication_retry_delay": "invalid", - "vreplication_max_time_to_retry_on_error": "invalid", + "vreplication-experimental-flags": "invalid", + "vreplication-net-read-timeout": "100.0", + "vreplication-net-write-timeout": "invalid", + "vreplication-copy-phase-duration": "invalid", + "vreplication-retry-delay": "invalid", + "vreplication-max-time-to-retry-on-error": "invalid", "relay_log_max_size": "invalid", "relay_log_max_items": "invalid", - "vreplication_replica_lag_tolerance": "invalid", - "vreplication_heartbeat_update_interval": "invalid", - "vreplication_store_compressed_gtid": "nottrue", + "vreplication-replica-lag-tolerance": "invalid", + "vreplication-heartbeat-update-interval": "invalid", + "vreplication-store-compressed-gtid": "nottrue", "vreplication-parallel-insert-workers": "invalid", + "vstream-packet-size": "invalid", "vstream_packet_size": "invalid", + "vstream-dynamic-packet-size": "waar", "vstream_dynamic_packet_size": "waar", "vstream_binlog_rotation_threshold": "invalid", }, - wantErr: 15, + wantErr: 17, }, { name: "Partial values", config: map[string]string{ - "vreplication_experimental_flags": "5", - "vreplication_net_read_timeout": "150", - "vstream_dynamic_packet_size": strconv.FormatBool(!DefaultVReplicationConfig.VStreamDynamicPacketSize), - "vreplication_store_compressed_gtid": strconv.FormatBool(!DefaultVReplicationConfig.StoreCompressedGTID), + "vreplication-experimental-flags": "5", + "vreplication-net-read-timeout": "150", + "vstream-dynamic-packet-size": strconv.FormatBool(!DefaultVReplicationConfig.VStreamDynamicPacketSize), + "vreplication-store-compressed-gtid": strconv.FormatBool(!DefaultVReplicationConfig.StoreCompressedGTID), }, wantErr: 0, want: &VReplicationConfig{ diff --git a/go/vt/vttablet/common/flags.go b/go/vt/vttablet/common/flags.go index 883510cb8fb..cff1870a8e3 100644 --- a/go/vt/vttablet/common/flags.go +++ b/go/vt/vttablet/common/flags.go @@ -23,6 +23,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" ) const ( @@ -74,18 +75,18 @@ func init() { } func registerFlags(fs *pflag.FlagSet) { - fs.Int64Var(&vreplicationExperimentalFlags, "vreplication_experimental_flags", vreplicationExperimentalFlags, + utils.SetFlagInt64Var(fs, &vreplicationExperimentalFlags, "vreplication-experimental-flags", vreplicationExperimentalFlags, "(Bitmask) of experimental features in vreplication to enable") - fs.IntVar(&vreplicationNetReadTimeout, "vreplication_net_read_timeout", vreplicationNetReadTimeout, "Session value of net_read_timeout for vreplication, in seconds") - fs.IntVar(&vreplicationNetWriteTimeout, "vreplication_net_write_timeout", vreplicationNetWriteTimeout, "Session value of net_write_timeout for vreplication, in seconds") - fs.DurationVar(&vreplicationCopyPhaseDuration, "vreplication_copy_phase_duration", vreplicationCopyPhaseDuration, "Duration for each copy phase loop (before running the next catchup: default 1h)") - fs.DurationVar(&vreplicationRetryDelay, "vreplication_retry_delay", vreplicationRetryDelay, "delay before retrying a failed workflow event in the replication phase") - fs.DurationVar(&vreplicationMaxTimeToRetryError, "vreplication_max_time_to_retry_on_error", vreplicationMaxTimeToRetryError, "stop automatically retrying when we've had consecutive failures with the same error for this long after the first occurrence") + utils.SetFlagIntVar(fs, &vreplicationNetReadTimeout, "vreplication-net-read-timeout", vreplicationNetReadTimeout, "Session value of net_read_timeout for vreplication, in seconds") + utils.SetFlagIntVar(fs, &vreplicationNetWriteTimeout, "vreplication-net-write-timeout", vreplicationNetWriteTimeout, "Session value of net_write_timeout for vreplication, in seconds") + utils.SetFlagDurationVar(fs, &vreplicationCopyPhaseDuration, "vreplication-copy-phase-duration", vreplicationCopyPhaseDuration, "Duration for each copy phase loop (before running the next catchup: default 1h)") + utils.SetFlagDurationVar(fs, &vreplicationRetryDelay, "vreplication-retry-delay", vreplicationRetryDelay, "delay before retrying a failed workflow event in the replication phase") + utils.SetFlagDurationVar(fs, &vreplicationMaxTimeToRetryError, "vreplication-max-time-to-retry-on-error", vreplicationMaxTimeToRetryError, "stop automatically retrying when we've had consecutive failures with the same error for this long after the first occurrence") fs.IntVar(&vreplicationRelayLogMaxSize, "relay_log_max_size", vreplicationRelayLogMaxSize, "Maximum buffer size (in bytes) for vreplication target buffering. If single rows are larger than this, a single row is buffered at a time.") fs.IntVar(&vreplicationRelayLogMaxItems, "relay_log_max_items", vreplicationRelayLogMaxItems, "Maximum number of rows for vreplication target buffering.") - fs.DurationVar(&vreplicationReplicaLagTolerance, "vreplication_replica_lag_tolerance", vreplicationReplicaLagTolerance, "Replica lag threshold duration: once lag is below this we switch from copy phase to the replication (streaming) phase") + utils.SetFlagDurationVar(fs, &vreplicationReplicaLagTolerance, "vreplication-replica-lag-tolerance", vreplicationReplicaLagTolerance, "Replica lag threshold duration: once lag is below this we switch from copy phase to the replication (streaming) phase") // vreplicationHeartbeatUpdateInterval determines how often the time_updated column is updated if there are no // real events on the source and the source vstream is only sending heartbeats for this long. Keep this low if you @@ -93,8 +94,8 @@ func registerFlags(fs *pflag.FlagSet) { // * you have too many streams the extra write qps or cpu load due to these updates are unacceptable // * you have too many streams and/or a large source field (lot of participating tables) which generates // unacceptable increase in your binlog size - fs.IntVar(&vreplicationHeartbeatUpdateInterval, "vreplication_heartbeat_update_interval", vreplicationHeartbeatUpdateInterval, "Frequency (in seconds, default 1, max 60) at which the time_updated column of a vreplication stream when idling") - fs.BoolVar(&vreplicationStoreCompressedGTID, "vreplication_store_compressed_gtid", vreplicationStoreCompressedGTID, "Store compressed gtids in the pos column of the sidecar database's vreplication table") + utils.SetFlagIntVar(fs, &vreplicationHeartbeatUpdateInterval, "vreplication-heartbeat-update-interval", vreplicationHeartbeatUpdateInterval, "Frequency (in seconds, default 1, max 60) at which the time_updated column of a vreplication stream when idling") + utils.SetFlagBoolVar(fs, &vreplicationStoreCompressedGTID, "vreplication-store-compressed-gtid", vreplicationStoreCompressedGTID, "Store compressed gtids in the pos column of the sidecar database's vreplication table") fs.IntVar(&vreplicationParallelInsertWorkers, "vreplication-parallel-insert-workers", vreplicationParallelInsertWorkers, "Number of parallel insertion workers to use during copy phase. Set <= 1 to disable parallelism, or > 1 to enable concurrent insertion during copy phase.") diff --git a/go/vt/vttablet/endtoend/transaction_test.go b/go/vt/vttablet/endtoend/transaction_test.go index 5e5889ad671..50d9b06ffbd 100644 --- a/go/vt/vttablet/endtoend/transaction_test.go +++ b/go/vt/vttablet/endtoend/transaction_test.go @@ -846,3 +846,81 @@ func TestUnresolvedTransactionsOrdering(t *testing.T) { assert.Equal(t, want[i].Participants, transaction.Participants) } } + +// TestSkipUserMetrics tests the SkipUserMetrics flag in the config that disables user label in the metrics. +func TestSkipUserMetrics(t *testing.T) { + client := framework.NewClient() + query := "select * from vitess_test" + + runQueries := func() { + // non-tx execute + _, err := client.Execute(query, nil) + require.NoError(t, err) + + // tx execute + _, err = client.BeginExecute(query, nil, nil) + require.NoError(t, err) + require.NoError(t, client.Commit()) + } + + // Initial test with user metrics enabled + vstart := framework.DebugVars() + runQueries() + + expectedDiffs := []struct { + tag string + diff int + }{{ // not dependent on user + tag: "Transactions/TotalCount", diff: 1, + }, { // not dependent on user + tag: "Transactions/Histograms/commit/Count", diff: 1, + }, { // dependent on user + tag: "TableACLAllowed/vitess_test.vitess_test.Select.dev", diff: 2, + }, { // user metric enabled so this should be zero. + tag: "TableACLAllowed/vitess_test.vitess_test.Select.UserLabelDisabled", diff: 0, + }, { // dependent on user + tag: "UserTableQueryCount/vitess_test.dev.Execute", diff: 2, + }, { // user metric enabled so this should be zero. + tag: "UserTableQueryCount/vitess_test.UserLabelDisabled.Execute", diff: 0, + }, { // dependent on user + tag: "UserTransactionCount/dev.commit", diff: 1, + }} + vend := framework.DebugVars() + for _, expected := range expectedDiffs { + compareIntDiff(t, vend, expected.tag, vstart, expected.diff) + } + + // Enable SkipUserMetrics and re-run tests + framework.Server.Config().SkipUserMetrics = true + defer func() { + framework.Server.Config().SkipUserMetrics = false + }() + vstart = framework.DebugVars() + runQueries() + + expectedDiffs = []struct { + tag string + diff int + }{{ // not dependent on user + tag: "Transactions/TotalCount", diff: 1, + }, { // not dependent on user + tag: "Transactions/Histograms/commit/Count", diff: 1, + }, { // dependent on user - should be zero now + tag: "TableACLAllowed/vitess_test.vitess_test.Select.dev", diff: 0, + }, { // user metric disabled so this should be non-zero. + tag: "TableACLAllowed/vitess_test.vitess_test.Select.UserLabelDisabled", diff: 2, + }, { // dependent on user - should be zero now + tag: "UserTableQueryCount/vitess_test.dev.Execute", diff: 0, + }, { // user metric disabled so this should be non-zero. + tag: "UserTableQueryCount/vitess_test.UserLabelDisabled.Execute", diff: 2, + }, { // dependent on user + tag: "UserTransactionCount/dev.commit", diff: 0, + }, { // no need to publish this as "Transactions" histogram already captures this. + tag: "UserTransactionCount/UserLabelDisabled.commit", diff: 0, + }} + vend = framework.DebugVars() + for _, expected := range expectedDiffs { + compareIntDiff(t, vend, expected.tag, vstart, expected.diff) + } + +} diff --git a/go/vt/vttablet/endtoend/udf.so b/go/vt/vttablet/endtoend/udf.so old mode 100755 new mode 100644 diff --git a/go/vt/vttablet/faketmclient/fake_client.go b/go/vt/vttablet/faketmclient/fake_client.go index 5a5cd33535f..a391ff179c3 100644 --- a/go/vt/vttablet/faketmclient/fake_client.go +++ b/go/vt/vttablet/faketmclient/fake_client.go @@ -338,6 +338,16 @@ func (client *FakeTabletManagerClient) VReplicationWaitForPos(ctx context.Contex return nil } +// UpdateSequenceTables is part of the tmclient.TabletManagerClient interface. +func (itmc *FakeTabletManagerClient) UpdateSequenceTables(ctx context.Context, tablet *topodatapb.Tablet, request *tabletmanagerdatapb.UpdateSequenceTablesRequest) (*tabletmanagerdatapb.UpdateSequenceTablesResponse, error) { + return nil, nil +} + +// GetMaxValueForSequences is part of the tmclient.TabletManagerClient interface. +func (itmc *FakeTabletManagerClient) GetMaxValueForSequences(ctx context.Context, tablet *topodatapb.Tablet, request *tabletmanagerdatapb.GetMaxValueForSequencesRequest) (*tabletmanagerdatapb.GetMaxValueForSequencesResponse, error) { + return nil, nil +} + // // Reparenting related functions // diff --git a/go/vt/vttablet/filelogger/filelogger.go b/go/vt/vttablet/filelogger/filelogger.go index f2fcd84e476..292d6816428 100644 --- a/go/vt/vttablet/filelogger/filelogger.go +++ b/go/vt/vttablet/filelogger/filelogger.go @@ -23,6 +23,7 @@ import ( "vitess.io/vitess/go/streamlog" "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vttablet/tabletserver/tabletenv" ) @@ -30,7 +31,7 @@ var logQueriesToFile string func registerFlags(fs *pflag.FlagSet) { // logQueriesToFile is the vttablet startup flag that must be set for this plugin to be active. - fs.StringVar(&logQueriesToFile, "log_queries_to_file", logQueriesToFile, "Enable query logging to the specified file") + utils.SetFlagStringVar(fs, &logQueriesToFile, "log-queries-to-file", logQueriesToFile, "Enable query logging to the specified file") } func init() { diff --git a/go/vt/vttablet/grpctabletconn/conn.go b/go/vt/vttablet/grpctabletconn/conn.go index d2d5604d808..0ef94031cf3 100644 --- a/go/vt/vttablet/grpctabletconn/conn.go +++ b/go/vt/vttablet/grpctabletconn/conn.go @@ -29,6 +29,7 @@ import ( "vitess.io/vitess/go/vt/callerid" "vitess.io/vitess/go/vt/grpcclient" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vttablet/queryservice" "vitess.io/vitess/go/vt/vttablet/tabletconn" @@ -49,11 +50,11 @@ var ( ) func registerFlags(fs *pflag.FlagSet) { - fs.StringVar(&cert, "tablet_grpc_cert", cert, "the cert to use to connect") - fs.StringVar(&key, "tablet_grpc_key", key, "the key to use to connect") - fs.StringVar(&ca, "tablet_grpc_ca", ca, "the server ca to use to validate servers when connecting") - fs.StringVar(&crl, "tablet_grpc_crl", crl, "the server crl to use to validate server certificates when connecting") - fs.StringVar(&name, "tablet_grpc_server_name", name, "the server name to use to validate server certificate") + utils.SetFlagStringVar(fs, &cert, "tablet-grpc-cert", cert, "the cert to use to connect") + utils.SetFlagStringVar(fs, &key, "tablet-grpc-key", key, "the key to use to connect") + utils.SetFlagStringVar(fs, &ca, "tablet-grpc-ca", ca, "the server ca to use to validate servers when connecting") + utils.SetFlagStringVar(fs, &crl, "tablet-grpc-crl", crl, "the server crl to use to validate server certificates when connecting") + utils.SetFlagStringVar(fs, &name, "tablet-grpc-server-name", name, "the server name to use to validate server certificate") } func init() { diff --git a/go/vt/vttablet/grpctmclient/cached_client.go b/go/vt/vttablet/grpctmclient/cached_client.go index c0dd751ec30..954cecd88cf 100644 --- a/go/vt/vttablet/grpctmclient/cached_client.go +++ b/go/vt/vttablet/grpctmclient/cached_client.go @@ -31,6 +31,7 @@ import ( "vitess.io/vitess/go/stats" "vitess.io/vitess/go/vt/grpcclient" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vttablet/tmclient" tabletmanagerservicepb "vitess.io/vitess/go/vt/proto/tabletmanagerservice" @@ -40,7 +41,7 @@ import ( var defaultPoolCapacity = 100 func registerCachedClientFlags(fs *pflag.FlagSet) { - fs.IntVar(&defaultPoolCapacity, "tablet_manager_grpc_connpool_size", defaultPoolCapacity, "number of tablets to keep tmclient connections open to") + utils.SetFlagIntVar(fs, &defaultPoolCapacity, "tablet-manager-grpc-connpool-size", defaultPoolCapacity, "number of tablets to keep tmclient connections open to") } func init() { diff --git a/go/vt/vttablet/grpctmclient/client.go b/go/vt/vttablet/grpctmclient/client.go index f6d154570eb..68f07a720ac 100644 --- a/go/vt/vttablet/grpctmclient/client.go +++ b/go/vt/vttablet/grpctmclient/client.go @@ -35,6 +35,7 @@ import ( "vitess.io/vitess/go/vt/mysqlctl/tmutils" "vitess.io/vitess/go/vt/servenv" "vitess.io/vitess/go/vt/topo/topoproto" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vttablet/tmclient" logutilpb "vitess.io/vitess/go/vt/proto/logutil" @@ -64,12 +65,12 @@ var ( ) func RegisterFlags(fs *pflag.FlagSet) { - fs.IntVar(&concurrency, "tablet_manager_grpc_concurrency", concurrency, "concurrency to use to talk to a vttablet server for performance-sensitive RPCs (like ExecuteFetchAs{Dba,App}, CheckThrottler and FullStatus)") - fs.StringVar(&cert, "tablet_manager_grpc_cert", cert, "the cert to use to connect") - fs.StringVar(&key, "tablet_manager_grpc_key", key, "the key to use to connect") - fs.StringVar(&ca, "tablet_manager_grpc_ca", ca, "the server ca to use to validate servers when connecting") - fs.StringVar(&crl, "tablet_manager_grpc_crl", crl, "the server crl to use to validate server certificates when connecting") - fs.StringVar(&name, "tablet_manager_grpc_server_name", name, "the server name to use to validate server certificate") + utils.SetFlagIntVar(fs, &concurrency, "tablet-manager-grpc-concurrency", concurrency, "concurrency to use to talk to a vttablet server for performance-sensitive RPCs (like ExecuteFetchAs{Dba,App}, CheckThrottler and FullStatus)") + utils.SetFlagStringVar(fs, &cert, "tablet-manager-grpc-cert", cert, "the cert to use to connect") + utils.SetFlagStringVar(fs, &key, "tablet-manager-grpc-key", key, "the key to use to connect") + utils.SetFlagStringVar(fs, &ca, "tablet-manager-grpc-ca", ca, "the server ca to use to validate servers when connecting") + utils.SetFlagStringVar(fs, &crl, "tablet-manager-grpc-crl", crl, "the server crl to use to validate server certificates when connecting") + utils.SetFlagStringVar(fs, &name, "tablet-manager-grpc-server-name", name, "the server name to use to validate server certificate") } var _binaries = []string{ // binaries that require the flags in this package @@ -134,9 +135,9 @@ type poolDialer interface { // In order to more efficiently use the underlying tcp connections, you can // instead use the cachedConnDialer implementation by specifying // -// --tablet_manager_protocol "grpc-cached" +// --tablet-manager-protocol "grpc-cached" // -// The cachedConnDialer keeps connections to up to --tablet_manager_grpc_connpool_size +// The cachedConnDialer keeps connections to up to --tablet-manager-grpc-connpool-size // distinct tablets open at any given time, for faster per-RPC call time, and less // connection churn. type Client struct { @@ -1060,6 +1061,24 @@ func (client *Client) UpdateVReplicationWorkflows(ctx context.Context, tablet *t return response, nil } +func (client *Client) GetMaxValueForSequences(ctx context.Context, tablet *topodatapb.Tablet, request *tabletmanagerdatapb.GetMaxValueForSequencesRequest) (*tabletmanagerdatapb.GetMaxValueForSequencesResponse, error) { + c, closer, err := client.dialer.dial(ctx, tablet) + if err != nil { + return nil, err + } + defer closer.Close() + return c.GetMaxValueForSequences(ctx, request) +} + +func (client *Client) UpdateSequenceTables(ctx context.Context, tablet *topodatapb.Tablet, request *tabletmanagerdatapb.UpdateSequenceTablesRequest) (*tabletmanagerdatapb.UpdateSequenceTablesResponse, error) { + c, closer, err := client.dialer.dial(ctx, tablet) + if err != nil { + return nil, err + } + defer closer.Close() + return c.UpdateSequenceTables(ctx, request) +} + // VDiff is part of the tmclient.TabletManagerClient interface. func (client *Client) VDiff(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.VDiffRequest) (*tabletmanagerdatapb.VDiffResponse, error) { log.Infof("VDiff for tablet %s, request %+v", tablet.Alias.String(), req) diff --git a/go/vt/vttablet/grpctmserver/server.go b/go/vt/vttablet/grpctmserver/server.go index be1b8ae9372..483b7937934 100644 --- a/go/vt/vttablet/grpctmserver/server.go +++ b/go/vt/vttablet/grpctmserver/server.go @@ -535,6 +535,20 @@ func (s *server) VDiff(ctx context.Context, request *tabletmanagerdatapb.VDiffRe return response, err } +func (s *server) UpdateSequenceTables(ctx context.Context, request *tabletmanagerdatapb.UpdateSequenceTablesRequest) (response *tabletmanagerdatapb.UpdateSequenceTablesResponse, err error) { + defer s.tm.HandleRPCPanic(ctx, "UpdateSequenceTables", request, response, true /*verbose*/, &err) + ctx = callinfo.GRPCCallInfo(ctx) + response, err = s.tm.UpdateSequenceTables(ctx, request) + return response, err +} + +func (s *server) GetMaxValueForSequences(ctx context.Context, request *tabletmanagerdatapb.GetMaxValueForSequencesRequest) (response *tabletmanagerdatapb.GetMaxValueForSequencesResponse, err error) { + defer s.tm.HandleRPCPanic(ctx, "GetMaxValueForSequences", request, response, true /*verbose*/, &err) + ctx = callinfo.GRPCCallInfo(ctx) + response, err = s.tm.GetMaxValueForSequences(ctx, request) + return response, err +} + // // Reparenting related functions // diff --git a/go/vt/vttablet/onlineddl/executor.go b/go/vt/vttablet/onlineddl/executor.go index 1165e9e05d1..ac43dc4cd6b 100644 --- a/go/vt/vttablet/onlineddl/executor.go +++ b/go/vt/vttablet/onlineddl/executor.go @@ -56,6 +56,7 @@ import ( "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/topo" "vitess.io/vitess/go/vt/topo/topoproto" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vterrors" "vitess.io/vitess/go/vt/vttablet/tabletmanager/vreplication" "vitess.io/vitess/go/vt/vttablet/tabletserver/connpool" @@ -107,9 +108,9 @@ func init() { } func registerOnlineDDLFlags(fs *pflag.FlagSet) { - fs.DurationVar(&migrationCheckInterval, "migration_check_interval", migrationCheckInterval, "Interval between migration checks") + utils.SetFlagDurationVar(fs, &migrationCheckInterval, "migration-check-interval", migrationCheckInterval, "Interval between migration checks") fs.DurationVar(&retainOnlineDDLTables, "retain_online_ddl_tables", retainOnlineDDLTables, "How long should vttablet keep an old migrated table before purging it") - fs.IntVar(&maxConcurrentOnlineDDLs, "max_concurrent_online_ddl", maxConcurrentOnlineDDLs, "Maximum number of online DDL changes that may run concurrently") + utils.SetFlagIntVar(fs, &maxConcurrentOnlineDDLs, "max-concurrent-online-ddl", maxConcurrentOnlineDDLs, "Maximum number of online DDL changes that may run concurrently") } const ( @@ -2482,6 +2483,65 @@ func (e *Executor) executeAlterViewOnline(ctx context.Context, onlineDDL *schema return nil } +// executeSpecialAlterDirectDDLActionMigration executes a special plan using a direct ALTER TABLE statement. +func (e *Executor) executeSpecialAlterDirectDDLActionMigration(ctx context.Context, onlineDDL *schema.OnlineDDL) (err error) { + + forceCutOverAfter, err := onlineDDL.StrategySetting().ForceCutOverAfter() + if err != nil { + return err + } + + bufferingCtx, bufferingContextCancel := context.WithCancel(ctx) + defer bufferingContextCancel() + + // Buffer queries while issuing the ALTER TABLE statement (we assume this ALTER is going to be quick, + // as in ALGORITHM=INSTANT or a quick partition operation) + toggleBuffering := func(bufferQueries bool) { + log.Infof("toggling buffering: %t in migration %v", bufferQueries, onlineDDL.UUID) + timeout := onlineDDL.CutOverThreshold + qrBufferExtraTimeout + + e.toggleBufferTableFunc(bufferingCtx, onlineDDL.Table, timeout, bufferQueries) + if !bufferQueries { + // unbuffer existing queries: + bufferingContextCancel() + } + log.Infof("toggled buffering: %t in migration %v", bufferQueries, onlineDDL.UUID) + } + defer toggleBuffering(false) + toggleBuffering(true) + + // Give a fraction of a second for a scenario where a query is in + // query executor, it passed the ACLs and is _about to_ execute. This will be nicer to those queries: + // they will be able to complete before the ALTER. + e.updateMigrationStage(ctx, onlineDDL.UUID, "graceful wait for buffering") + time.Sleep(100 * time.Millisecond) + + if forceCutOverAfter > 0 { + // Irrespective of the --force-cut-over-after flag value, as long as it's nonzero, we now terminate + // connections adn transactions on the migrated table. + // --force-cut-over-after was designed to work with `vitess` migrations, that could cut-over multiple times, + // and was meant to set a limit to the overall duration of the attempts, for example 1 hour. + // With INSTANT DDL or other quick operations, this becomes meaningless. Once we begin the operation, there + // is no going back. We submit it to MySQL, and it takes however long it takes. + // In this particular function, we expect *very quick* operation. + // So we take --force-cut-over-after as a hint that we should force terminate connections and transactions. + // + // We should only proceed with forceful cut over if there is no pending atomic transaction for the table. + // This will help in keeping the atomicity guarantee of a prepared transaction. + if err := e.checkOnPreparedPool(ctx, onlineDDL.Table, 100*time.Millisecond); err != nil { + return vterrors.Wrapf(err, "checking prepared pool for table") + } + if err := e.killTableLockHoldersAndAccessors(ctx, onlineDDL.Table); err != nil { + return vterrors.Wrapf(err, "failed killing table lock holders and accessors") + } + } + + if _, err := e.executeDirectly(ctx, onlineDDL); err != nil { + return err + } + return nil +} + // executeSpecialAlterDDLActionMigrationIfApplicable sees if the given migration can be executed via special execution path, that isn't a full blown online schema change process. func (e *Executor) executeSpecialAlterDDLActionMigrationIfApplicable(ctx context.Context, onlineDDL *schema.OnlineDDL) (specialMigrationExecuted bool, err error) { // Before we jump on to strategies... Some ALTERs can be optimized without having to run through @@ -2505,11 +2565,11 @@ func (e *Executor) executeSpecialAlterDDLActionMigrationIfApplicable(ctx context case instantDDLSpecialOperation: schemadiff.AddInstantAlgorithm(specialPlan.alterTable) onlineDDL.SQL = sqlparser.CanonicalString(specialPlan.alterTable) - if _, err := e.executeDirectly(ctx, onlineDDL); err != nil { + if err := e.executeSpecialAlterDirectDDLActionMigration(ctx, onlineDDL); err != nil { return false, err } case rangePartitionSpecialOperation: - if _, err := e.executeDirectly(ctx, onlineDDL); err != nil { + if err := e.executeSpecialAlterDirectDDLActionMigration(ctx, onlineDDL); err != nil { return false, err } default: @@ -4125,6 +4185,60 @@ func (e *Executor) CompletePendingMigrations(ctx context.Context) (result *sqlty return result, nil } +// PostponeCompleteMigration sets the postpone_completion flag for a given migration, assuming it was not set in the first place +func (e *Executor) PostponeCompleteMigration(ctx context.Context, uuid string) (result *sqltypes.Result, err error) { + if atomic.LoadInt64(&e.isOpen) == 0 { + return nil, vterrors.New(vtrpcpb.Code_FAILED_PRECONDITION, schema.ErrOnlineDDLDisabled.Error()) + } + if !schema.IsOnlineDDLUUID(uuid) { + return nil, vterrors.Errorf(vtrpcpb.Code_UNKNOWN, "Not a valid migration ID in POSTPONE COMPLETE: %s", uuid) + } + log.Infof("PostponeCompleteMigration: request to postpone complete migration %s", uuid) + + e.migrationMutex.Lock() + defer e.migrationMutex.Unlock() + + query, err := sqlparser.ParseAndBind(sqlPostponeCompletion, + sqltypes.StringBindVariable(uuid), + ) + if err != nil { + return nil, err + } + defer e.triggerNextCheckInterval() + rs, err := e.execQuery(ctx, query) + if err != nil { + return nil, err + } + log.Infof("PostponeCompleteMigration: migration %s marked as postponed", uuid) + return rs, nil +} + +// PostponeCompletePendingMigrations sets postpone_completion for all pending migrations (that are expected to run or are running) +// for this keyspace +func (e *Executor) PostponeCompletePendingMigrations(ctx context.Context) (result *sqltypes.Result, err error) { + if atomic.LoadInt64(&e.isOpen) == 0 { + return nil, vterrors.New(vtrpcpb.Code_FAILED_PRECONDITION, schema.ErrOnlineDDLDisabled.Error()) + } + + uuids, err := e.readPendingMigrationsUUIDs(ctx) + if err != nil { + return result, err + } + log.Infof("PostponeCompletePendingMigrations: iterating %v migrations %s", len(uuids)) + + result = &sqltypes.Result{} + for _, uuid := range uuids { + log.Infof("PostponeCompletePendingMigrations: postpone completion of %s", uuid) + res, err := e.PostponeCompleteMigration(ctx, uuid) + if err != nil { + return result, err + } + result.AppendResult(res) + } + log.Infof("PostponeCompletePendingMigrations: done iterating %v migrations %s", len(uuids)) + return result, nil +} + // LaunchMigration clears the postpone_launch flag for a given migration, assuming it was set in the first place func (e *Executor) LaunchMigration(ctx context.Context, uuid string, shardsArg string) (result *sqltypes.Result, err error) { if atomic.LoadInt64(&e.isOpen) == 0 { diff --git a/go/vt/vttablet/onlineddl/schema.go b/go/vt/vttablet/onlineddl/schema.go index 4c47e46da3a..7fb42c79c8b 100644 --- a/go/vt/vttablet/onlineddl/schema.go +++ b/go/vt/vttablet/onlineddl/schema.go @@ -204,6 +204,12 @@ const ( migration_uuid=%a AND postpone_completion != 0 ` + sqlPostponeCompletion = `UPDATE _vt.schema_migrations + SET postpone_completion=1 + WHERE + migration_uuid=%a + AND postpone_completion != 1 + ` sqlUpdateTablet = `UPDATE _vt.schema_migrations SET tablet=%a WHERE diff --git a/go/vt/vttablet/tabletconn/tablet_conn.go b/go/vt/vttablet/tabletconn/tablet_conn.go index 1ed806bcc53..8c2c233dd45 100644 --- a/go/vt/vttablet/tabletconn/tablet_conn.go +++ b/go/vt/vttablet/tabletconn/tablet_conn.go @@ -25,6 +25,7 @@ import ( "vitess.io/vitess/go/vt/grpcclient" "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vterrors" "vitess.io/vitess/go/vt/vttablet/queryservice" @@ -42,7 +43,7 @@ var ( // RegisterFlags registers the tabletconn flags on a given flagset. It is // exported for tests that need to inject a particular TabletProtocol. func RegisterFlags(fs *pflag.FlagSet) { - fs.StringVar(&tabletProtocol, "tablet_protocol", "grpc", "Protocol to use to make queryservice RPCs to vttablets.") + utils.SetFlagStringVar(fs, &tabletProtocol, "tablet-protocol", "grpc", "Protocol to use to make queryservice RPCs to vttablets.") } func init() { diff --git a/go/vt/vttablet/tabletconntest/tabletconntest.go b/go/vt/vttablet/tabletconntest/tabletconntest.go index 416d4de9d00..91aeceb0dcd 100644 --- a/go/vt/vttablet/tabletconntest/tabletconntest.go +++ b/go/vt/vttablet/tabletconntest/tabletconntest.go @@ -1044,10 +1044,10 @@ func TestSuite(ctx context.Context, t *testing.T, protocol string, tablet *topod grpcclient.RegisterFlags(fs) err := fs.Parse([]string{ - "--grpc_auth_static_client_creds", + "--grpc-auth-static-client-creds", clientCreds.Name(), }) - require.NoError(t, err, "failed to set `--grpc_auth_static_client_creds=%s`", clientCreds.Name()) + require.NoError(t, err, "failed to set `--grpc-auth-static-client-creds=%s`", clientCreds.Name()) } conn, err := tabletconn.GetDialer()(ctx, tablet, grpcclient.FailFast(false)) @@ -1064,9 +1064,9 @@ func TestSuite(ctx context.Context, t *testing.T, protocol string, tablet *topod conn.Close(context.Background()) } -const tabletProtocolFlagName = "tablet_protocol" +const tabletProtocolFlagName = "tablet-protocol" -// SetProtocol is a helper function to set the tabletconn --tablet_protocol flag +// SetProtocol is a helper function to set the tabletconn --tablet-protocol flag // value for tests. // // Note that because this variable is bound to a flag, the effects of this diff --git a/go/vt/vttablet/tabletmanager/restore.go b/go/vt/vttablet/tabletmanager/restore.go index 54813e11bf3..0e59054ce25 100644 --- a/go/vt/vttablet/tabletmanager/restore.go +++ b/go/vt/vttablet/tabletmanager/restore.go @@ -38,6 +38,7 @@ import ( vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" "vitess.io/vitess/go/vt/servenv" "vitess.io/vitess/go/vt/topo/topoproto" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vterrors" ) @@ -60,7 +61,7 @@ func registerRestoreFlags(fs *pflag.FlagSet) { fs.StringSliceVar(&restoreFromBackupAllowedEngines, "restore-from-backup-allowed-engines", restoreFromBackupAllowedEngines, "(init restore parameter) if set, only backups taken with the specified engines are eligible to be restored") fs.StringVar(&restoreFromBackupTsStr, "restore_from_backup_ts", restoreFromBackupTsStr, "(init restore parameter) if set, restore the latest backup taken at or before this timestamp. Example: '2021-04-29.133050'") fs.IntVar(&restoreConcurrency, "restore_concurrency", restoreConcurrency, "(init restore parameter) how many concurrent files to restore at once") - fs.DurationVar(&waitForBackupInterval, "wait_for_backup_interval", waitForBackupInterval, "(init restore parameter) if this is greater than 0, instead of starting up empty when no backups are found, keep checking at this interval for a backup to appear") + utils.SetFlagDurationVar(fs, &waitForBackupInterval, "wait-for-backup-interval", waitForBackupInterval, "(init restore parameter) if this is greater than 0, instead of starting up empty when no backups are found, keep checking at this interval for a backup to appear") } var ( @@ -252,7 +253,7 @@ func (tm *TabletManager) restoreDataLocked(ctx context.Context, logger logutil.L break } - log.Infof("No backup found. Waiting %v (from -wait_for_backup_interval flag) to check again.", waitForBackupInterval) + log.Infof("No backup found. Waiting %v (from -wait-for-backup-interval flag) to check again.", waitForBackupInterval) select { case <-ctx.Done(): return ctx.Err() @@ -303,7 +304,7 @@ func (tm *TabletManager) restoreDataLocked(ctx context.Context, logger logutil.L return vterrors.Wrap(err, "Can't restore backup") } - // If we had type BACKUP or RESTORE it's better to set our type to the init_tablet_type to make result of the restore + // If we had type BACKUP or RESTORE it's better to set our type to the init-tablet-type to make result of the restore // similar to completely clean start from scratch. if (originalType == topodatapb.TabletType_BACKUP || originalType == topodatapb.TabletType_RESTORE) && initTabletType != "" { initType, err := topoproto.ParseTabletType(initTabletType) diff --git a/go/vt/vttablet/tabletmanager/rpc_agent.go b/go/vt/vttablet/tabletmanager/rpc_agent.go index e779cfa8ff5..7971c8bd2d7 100644 --- a/go/vt/vttablet/tabletmanager/rpc_agent.go +++ b/go/vt/vttablet/tabletmanager/rpc_agent.go @@ -128,6 +128,8 @@ type RPCTM interface { VReplicationWaitForPos(ctx context.Context, id int32, pos string) error UpdateVReplicationWorkflow(ctx context.Context, req *tabletmanagerdatapb.UpdateVReplicationWorkflowRequest) (*tabletmanagerdatapb.UpdateVReplicationWorkflowResponse, error) UpdateVReplicationWorkflows(ctx context.Context, req *tabletmanagerdatapb.UpdateVReplicationWorkflowsRequest) (*tabletmanagerdatapb.UpdateVReplicationWorkflowsResponse, error) + UpdateSequenceTables(ctx context.Context, request *tabletmanagerdatapb.UpdateSequenceTablesRequest) (*tabletmanagerdatapb.UpdateSequenceTablesResponse, error) + GetMaxValueForSequences(ctx context.Context, request *tabletmanagerdatapb.GetMaxValueForSequencesRequest) (*tabletmanagerdatapb.GetMaxValueForSequencesResponse, error) // VDiff API VDiff(ctx context.Context, req *tabletmanagerdatapb.VDiffRequest) (*tabletmanagerdatapb.VDiffResponse, error) diff --git a/go/vt/vttablet/tabletmanager/rpc_lock_tables.go b/go/vt/vttablet/tabletmanager/rpc_lock_tables.go index 4279af2edf9..eb0afb40ca1 100644 --- a/go/vt/vttablet/tabletmanager/rpc_lock_tables.go +++ b/go/vt/vttablet/tabletmanager/rpc_lock_tables.go @@ -29,12 +29,13 @@ import ( "vitess.io/vitess/go/vt/dbconnpool" "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" ) var lockTablesTimeout = 1 * time.Minute func registerLockTablesFlags(fs *pflag.FlagSet) { - fs.DurationVar(&lockTablesTimeout, "lock_tables_timeout", lockTablesTimeout, "How long to keep the table locked before timing out") + utils.SetFlagDurationVar(fs, &lockTablesTimeout, "lock-tables-timeout", lockTablesTimeout, "How long to keep the table locked before timing out") } func init() { diff --git a/go/vt/vttablet/tabletmanager/rpc_vreplication.go b/go/vt/vttablet/tabletmanager/rpc_vreplication.go index 522128cbf60..1f9068ea038 100644 --- a/go/vt/vttablet/tabletmanager/rpc_vreplication.go +++ b/go/vt/vttablet/tabletmanager/rpc_vreplication.go @@ -21,24 +21,30 @@ import ( "fmt" "sort" "strings" + "sync" "time" "golang.org/x/exp/maps" + "golang.org/x/sync/errgroup" "google.golang.org/protobuf/encoding/prototext" "vitess.io/vitess/go/cmd/vtctldclient/command/vreplication/movetables" "vitess.io/vitess/go/constants/sidecar" + "vitess.io/vitess/go/mysql/sqlerror" "vitess.io/vitess/go/protoutil" + "vitess.io/vitess/go/sqlescape" "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/textutil" "vitess.io/vitess/go/vt/discovery" "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/logutil" + "vitess.io/vitess/go/vt/mysqlctl/tmutils" "vitess.io/vitess/go/vt/proto/vttime" "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/topo/topoproto" "vitess.io/vitess/go/vt/vtctl/workflow" "vitess.io/vitess/go/vt/vterrors" + "vitess.io/vitess/go/vt/vttablet/tabletmanager/vreplication" "vitess.io/vitess/go/vt/vttablet/tabletserver/throttle/throttlerapp" binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" @@ -87,6 +93,9 @@ where u.user = %a ) limit 1 ` + sqlGetMaxSequenceVal = "select max(%a) as maxval from %a.%a" + sqlInitSequenceTable = "insert into %a.%a (id, next_id, cache) values (0, %d, 1000) on duplicate key update next_id = if(next_id < %d, %d, next_id)" + sqlCreateSequenceTable = "create table if not exists %a (id int, next_id bigint, cache bigint, primary key(id)) comment 'vitess_sequence'" ) var ( @@ -585,6 +594,7 @@ func (tm *TabletManager) UpdateVReplicationWorkflow(ctx context.Context, req *ta if req.OnDdl != nil && *req.OnDdl != binlogdatapb.OnDDLAction(textutil.SimulatedNullInt) { bls.OnDdl = *req.OnDdl } + bls.Filter.Rules = append(bls.Filter.Rules, req.FilterRules...) source, err = prototext.Marshal(bls) if err != nil { return nil, err @@ -702,6 +712,130 @@ func (tm *TabletManager) UpdateVReplicationWorkflows(ctx context.Context, req *t }, nil } +func (tm *TabletManager) GetMaxValueForSequences(ctx context.Context, req *tabletmanagerdatapb.GetMaxValueForSequencesRequest) (*tabletmanagerdatapb.GetMaxValueForSequencesResponse, error) { + maxValues := make(map[string]int64, len(req.Sequences)) + mu := sync.Mutex{} + initGroup, gctx := errgroup.WithContext(ctx) + for _, sm := range req.Sequences { + initGroup.Go(func() error { + maxId, err := tm.getMaxSequenceValue(gctx, sm) + if err != nil { + return err + } + mu.Lock() + defer mu.Unlock() + maxValues[sm.BackingTableName] = maxId + return nil + }) + } + errs := initGroup.Wait() + if errs != nil { + return nil, errs + } + return &tabletmanagerdatapb.GetMaxValueForSequencesResponse{ + MaxValuesBySequenceTable: maxValues, + }, nil +} + +func (tm *TabletManager) getMaxSequenceValue(ctx context.Context, sm *tabletmanagerdatapb.GetMaxValueForSequencesRequest_SequenceMetadata) (int64, error) { + query := sqlparser.BuildParsedQuery(sqlGetMaxSequenceVal, + sm.UsingColEscaped, + sm.UsingTableDbNameEscaped, + sm.UsingTableNameEscaped, + ) + qr, err := tm.ExecuteFetchAsApp(ctx, &tabletmanagerdatapb.ExecuteFetchAsAppRequest{ + Query: []byte(query.Query), + MaxRows: 1, + }) + if err != nil || len(qr.Rows) != 1 { + return 0, vterrors.Errorf(vtrpcpb.Code_INTERNAL, + "failed to get the max used sequence value for target table %s in order to initialize the backing sequence table: %v", sm.UsingTableNameEscaped, err) + } + rawVal := sqltypes.Proto3ToResult(qr).Rows[0][0] + maxID := int64(0) + if !rawVal.IsNull() { // If it's NULL then there are no rows and 0 remains the max + maxID, err = rawVal.ToInt64() + if err != nil { + return 0, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "failed to get the max used sequence value for target table %s in order to initialize the backing sequence table: %v", sm.UsingTableNameEscaped, err) + } + } + return maxID, nil +} + +func (tm *TabletManager) UpdateSequenceTables(ctx context.Context, req *tabletmanagerdatapb.UpdateSequenceTablesRequest) (*tabletmanagerdatapb.UpdateSequenceTablesResponse, error) { + for _, sm := range req.Sequences { + if err := tm.updateSequenceValue(ctx, sm); err != nil { + return nil, err + } + } + return &tabletmanagerdatapb.UpdateSequenceTablesResponse{}, nil +} + +func (tm *TabletManager) updateSequenceValue(ctx context.Context, seq *tabletmanagerdatapb.UpdateSequenceTablesRequest_SequenceMetadata) error { + nextVal := seq.MaxValue + 1 + if tm.Tablet().DbNameOverride != "" { + seq.BackingTableDbName = tm.Tablet().DbNameOverride + } + backingTableNameEscaped, err := sqlescape.EnsureEscaped(seq.BackingTableName) + if err != nil { + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid table name %s specified for sequence backing table: %v", + seq.BackingTableName, err) + } + log.Infof("Updating sequence %s.%s to %d", seq.BackingTableDbName, seq.BackingTableName, nextVal) + initQuery := sqlparser.BuildParsedQuery(sqlInitSequenceTable, + seq.BackingTableDbName, + seq.BackingTableName, + nextVal, + nextVal, + nextVal, + ) + const maxTries = 2 + + for i := 0; i < maxTries; i++ { + // Attempt to initialize the sequence. + _, err = tm.ExecuteFetchAsApp(ctx, &tabletmanagerdatapb.ExecuteFetchAsAppRequest{ + Query: []byte(initQuery.Query), + MaxRows: 1, + }) + if err == nil { + return nil + } + + // If the table doesn't exist, try creating it. + sqlErr, ok := sqlerror.NewSQLErrorFromError(err).(*sqlerror.SQLError) + if !ok || (sqlErr.Num != sqlerror.ERNoSuchTable && sqlErr.Num != sqlerror.ERBadTable) { + return vterrors.Errorf( + vtrpcpb.Code_INTERNAL, + "failed to initialize the backing sequence table %s.%s: %v", + seq.BackingTableDbName, seq.BackingTableName, err, + ) + } + + if err := tm.createSequenceTable(ctx, backingTableNameEscaped); err != nil { + return vterrors.Errorf(vtrpcpb.Code_INTERNAL, + "failed to create the backing sequence table %s in the global-keyspace %s: %v", + backingTableNameEscaped, tm.Tablet().Keyspace, err) + } + // Table has been created, so we fall through and try again on the next loop iteration. + } + + return vterrors.Errorf( + vtrpcpb.Code_INTERNAL, "failed to initialize the backing sequence table %s.%s after retries. Last error: %v", + seq.BackingTableDbName, backingTableNameEscaped, err) +} + +func (tm *TabletManager) createSequenceTable(ctx context.Context, escapedTableName string) error { + stmt := sqlparser.BuildParsedQuery(sqlCreateSequenceTable, escapedTableName) + _, err := tm.ApplySchema(ctx, &tmutils.SchemaChange{ + SQL: stmt.Query, + Force: false, + AllowReplication: true, + SQLMode: vreplication.SQLMode, + DisableForeignKeyChecks: true, + }) + return err +} + // ValidateVReplicationPermissions validates that the --db_filtered_user has // the minimum permissions required on the sidecardb vreplication table // needed in order to manage vreplication metadata. diff --git a/go/vt/vttablet/tabletmanager/rpc_vreplication_test.go b/go/vt/vttablet/tabletmanager/rpc_vreplication_test.go index 8f4b230104f..718acc19ebe 100644 --- a/go/vt/vttablet/tabletmanager/rpc_vreplication_test.go +++ b/go/vt/vttablet/tabletmanager/rpc_vreplication_test.go @@ -1932,6 +1932,16 @@ func TestExternalizeLookupVindex(t *testing.T) { }, Owner: "t1", }, + "owned_lookup2": { + Type: "lookup_unique", + Params: map[string]string{ + "table": "targetks.owned_lookup2", + "from": "c1", + "to": "c2", + "write_only": "true", + }, + Owner: "t2", + }, "unowned_lookup": { Type: "lookup_unique", Params: map[string]string{ @@ -1960,6 +1970,15 @@ func TestExternalizeLookupVindex(t *testing.T) { Column: "col2", }}, }, + "t2": { + ColumnVindexes: []*vschemapb.ColumnVindex{{ + Name: "xxhash", + Column: "col1", + }, { + Name: "owned_lookup2", + Column: "col2", + }}, + }, }, } @@ -1982,6 +2001,13 @@ func TestExternalizeLookupVindex(t *testing.T) { unownedRunning := sqltypes.MakeTestResult(fields, "2|Running|msg|"+unownedSourceKeepRunningAfterCopy+"|"+wftype+"|0|0|0|0|0|0|"+trxTS+"|5|{}") unownedStopped := sqltypes.MakeTestResult(fields, "2|Stopped|Stopped after copy|"+unownedSourceStopAfterCopy+"|"+wftype+"|0|0|0|0|0|0|"+trxTS+"|5|{}") + options := `{ + "lookup_vindexes": [ + "owned_lookup", + "owned_lookup2" + ] + }` + ownedMultipleRunning := sqltypes.MakeTestResult(fields, "1|Running|msg|"+ownedSourceKeepRunningAfterCopy+"|"+wftype+"|0|0|0|0|0|0|"+trxTS+"|5|"+options) testcases := []struct { request *vtctldatapb.LookupVindexExternalizeRequest vrResponse *sqltypes.Result @@ -2100,23 +2126,43 @@ func TestExternalizeLookupVindex(t *testing.T) { }, { request: &vtctldatapb.LookupVindexExternalizeRequest{ - Name: "absent_lookup", + Name: "multiple_lv_workflow", Keyspace: ms.SourceKeyspace, TableKeyspace: ms.TargetKeyspace, }, + vrResponse: ownedMultipleRunning, expectedVschema: &vschemapb.Keyspace{ Vindexes: map[string]*vschemapb.Vindex{ - "absent_lookup": { + "owned_lookup": { + Type: "lookup_unique", + Params: map[string]string{ + "table": "targetks.owned_lookup", + "from": "c1", + "to": "c2", + }, + Owner: "t1", + }, + "owned_lookup2": { Type: "lookup_unique", Params: map[string]string{ - "table": "targetks.absent_lookup", + "table": "targetks.owned_lookup2", "from": "c1", "to": "c2", }, + Owner: "t2", }, }, }, - err: "vindex absent_lookup not found in the sourceks keyspace", + expectStopped: true, + }, + { + request: &vtctldatapb.LookupVindexExternalizeRequest{ + Name: "absent_workflow", + Keyspace: ms.SourceKeyspace, + TableKeyspace: ms.TargetKeyspace, + }, + expectedVschema: &vschemapb.Keyspace{}, + err: "failed to parse workflow options", }, } for _, tcase := range testcases { @@ -2153,8 +2199,13 @@ func TestExternalizeLookupVindex(t *testing.T) { ) for _, targetTablet := range targetShards { targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readWorkflow, tcase.request.Name, tenv.dbName), tcase.vrResponse, nil) + if tcase.vrResponse != nil { + targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readWorkflow, tcase.request.Name, tenv.dbName), tcase.vrResponse, nil) + } // Update queries are required only if the Vindex is owned. - if tcase.expectStopped && len(tcase.expectedVschema.Vindexes) > 0 && tcase.expectedVschema.Vindexes[tcase.request.Name].Owner != "" { + isBackfillingOwned, err := workflow.IsBackfillingOwnedVindexes(tcase.expectedVschema.Vindexes) + require.NoError(t, err) + if tcase.expectStopped && len(tcase.expectedVschema.Vindexes) > 0 && isBackfillingOwned { targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readWorkflowConfig, tcase.request.Name), sqltypes.MakeTestResult( sqltypes.MakeTestFields( "id|source|cell|tablet_types|state|message", @@ -2198,11 +2249,12 @@ func TestExternalizeLookupVindex(t *testing.T) { aftervschema, err := tenv.ts.GetVSchema(ctx, ms.SourceKeyspace) require.NoError(t, err) - vindex := aftervschema.Vindexes[tcase.request.Name] - expectedVindex := tcase.expectedVschema.Vindexes[tcase.request.Name] - require.NotNil(t, vindex, "vindex %s not found in vschema", tcase.request.Name) - require.NotContains(t, vindex.Params, "write_only", tcase.request) - require.Equal(t, expectedVindex, vindex, "vindex mismatch. expected: %+v, got: %+v", expectedVindex, vindex) + for expectedVindexName, expectedVindex := range tcase.expectedVschema.Vindexes { + vindex := aftervschema.Vindexes[expectedVindexName] + require.NotNil(t, vindex, "vindex %s not found in vschema", tcase.request.Name) + require.NotContains(t, vindex.Params, "write_only", tcase.request) + require.Equal(t, expectedVindex, vindex, "vindex mismatch. expected: %+v, got: %+v", expectedVindex, vindex) + } }) } } @@ -2260,6 +2312,15 @@ func TestInternalizeLookupVindex(t *testing.T) { }, Owner: "t1", }, + "owned_lookup2": { + Type: "lookup_unique", + Params: map[string]string{ + "table": "targetks.owned_lookup2", + "from": "c1", + "to": "c2", + }, + Owner: "t2", + }, "unowned_lookup": { Type: "lookup_unique", Params: map[string]string{ @@ -2287,6 +2348,15 @@ func TestInternalizeLookupVindex(t *testing.T) { Column: "col2", }}, }, + "t2": { + ColumnVindexes: []*vschemapb.ColumnVindex{{ + Name: "xxhash", + Column: "col1", + }, { + Name: "owned_lookup2", + Column: "col2", + }}, + }, }, } @@ -2303,6 +2373,21 @@ func TestInternalizeLookupVindex(t *testing.T) { ownedRunning := sqltypes.MakeTestResult(fields, "1|Running|msg|"+ownedSourceKeepRunningAfterCopy+"|"+wftype+"|0|0|0|0|0|0|"+trxTS+"|5|{}") ownedStopped := sqltypes.MakeTestResult(fields, "1|Stopped|"+workflow.Frozen+"|"+ownedSourceStopAfterCopy+"|"+wftype+"|0|0|0|0|0|0|"+trxTS+"|5|{}") + unownedSourceStopAfterCopy := fmt.Sprintf(`keyspace:"%s",shard:"0",filter:{rules:{match:"unowned_lookup" filter:"select * from t1 where in_keyrange(col1, '%s.xxhash', '-80')"}} stop_after_copy:true`, + ms.SourceKeyspace, ms.SourceKeyspace) + unownedSourceKeepRunningAfterCopy := fmt.Sprintf(`keyspace:"%s",shard:"0",filter:{rules:{match:"unowned_lookup" filter:"select * from t1 where in_keyrange(col1, '%s.xxhash', '-80')"}}`, + ms.SourceKeyspace, ms.SourceKeyspace) + unownedRunning := sqltypes.MakeTestResult(fields, "2|Running|msg|"+unownedSourceKeepRunningAfterCopy+"|"+wftype+"|0|0|0|0|0|0|"+trxTS+"|5|{}") + unownedStopped := sqltypes.MakeTestResult(fields, "2|Stopped|Stopped after copy|"+unownedSourceStopAfterCopy+"|"+wftype+"|0|0|0|0|0|0|"+trxTS+"|5|{}") + + options := `{ + "lookup_vindexes": [ + "owned_lookup", + "owned_lookup2" + ] + }` + ownedMultipleStopped := sqltypes.MakeTestResult(fields, "1|Stopped|"+workflow.Frozen+"|"+ownedSourceStopAfterCopy+"|"+wftype+"|0|0|0|0|0|0|"+trxTS+"|5|"+options) + testcases := []struct { request *vtctldatapb.LookupVindexInternalizeRequest vrResponse *sqltypes.Result @@ -2337,6 +2422,7 @@ func TestInternalizeLookupVindex(t *testing.T) { Keyspace: ms.SourceKeyspace, TableKeyspace: ms.TargetKeyspace, }, + vrResponse: unownedStopped, expectedVschema: &vschemapb.Keyspace{ Vindexes: map[string]*vschemapb.Vindex{ "unowned_lookup": { @@ -2380,6 +2466,7 @@ func TestInternalizeLookupVindex(t *testing.T) { Keyspace: ms.SourceKeyspace, TableKeyspace: ms.TargetKeyspace, }, + vrResponse: unownedRunning, expectedVschema: &vschemapb.Keyspace{ Vindexes: map[string]*vschemapb.Vindex{ "unowned_lookup": { @@ -2397,23 +2484,44 @@ func TestInternalizeLookupVindex(t *testing.T) { }, { request: &vtctldatapb.LookupVindexInternalizeRequest{ - Name: "absent_lookup", + Name: "multiple_lv_workflow", Keyspace: ms.SourceKeyspace, TableKeyspace: ms.TargetKeyspace, }, + vrResponse: ownedMultipleStopped, expectedVschema: &vschemapb.Keyspace{ Vindexes: map[string]*vschemapb.Vindex{ - "absent_lookup": { + "owned_lookup": { Type: "lookup_unique", Params: map[string]string{ - "table": "targetks.absent_lookup", - "from": "c1", - "to": "c2", + "table": "targetks.owned_lookup", + "from": "c1", + "to": "c2", + "write_only": "true", + }, + Owner: "t1", + }, + "owned_lookup2": { + Type: "lookup_unique", + Params: map[string]string{ + "table": "targetks.owned_lookup2", + "from": "c1", + "to": "c2", + "write_only": "true", }, + Owner: "t2", }, }, }, - err: "vindex absent_lookup not found in the sourceks keyspace", + }, + { + request: &vtctldatapb.LookupVindexInternalizeRequest{ + Name: "absent_workflow", + Keyspace: ms.SourceKeyspace, + TableKeyspace: ms.TargetKeyspace, + }, + expectedVschema: &vschemapb.Keyspace{}, + err: "failed to parse workflow options", }, } for _, tcase := range testcases { @@ -2430,12 +2538,19 @@ func TestInternalizeLookupVindex(t *testing.T) { require.NotNil(t, tcase.request, "No request provided") + isBackfillingOwned, err := workflow.IsBackfillingOwnedVindexes(tcase.expectedVschema.Vindexes) + require.NoError(t, err) for _, targetTablet := range targetShards { + // Tests with unowned vindexes will need only one + // query as they will error out before. + targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readWorkflow, tcase.request.Name, tenv.dbName), tcase.vrResponse, nil) if tcase.vrResponse != nil { - targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readWorkflow, tcase.request.Name, tenv.dbName), tcase.vrResponse, nil) + if len(tcase.expectedVschema.Vindexes) > 0 && isBackfillingOwned { + targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readWorkflow, tcase.request.Name, tenv.dbName), tcase.vrResponse, nil) + } } // Update queries are required only if the Vindex is owned. - if len(tcase.expectedVschema.Vindexes) > 0 && tcase.expectedVschema.Vindexes[tcase.request.Name].Owner != "" { + if len(tcase.expectedVschema.Vindexes) > 0 && isBackfillingOwned { unfreezeQuery, err := sqlparser.ParseAndBind(workflow.SqlUnfreezeWorkflow, sqltypes.StringBindVariable("vt_targetks"), sqltypes.StringBindVariable(tcase.request.Name), @@ -2455,10 +2570,11 @@ func TestInternalizeLookupVindex(t *testing.T) { require.NoError(t, err) aftervschema, err := tenv.ts.GetVSchema(ctx, ms.SourceKeyspace) require.NoError(t, err) - vindex := aftervschema.Vindexes[tcase.request.Name] - expectedVindex := tcase.expectedVschema.Vindexes[tcase.request.Name] - require.NotNil(t, vindex, "vindex %s not found in vschema", tcase.request.Name) - require.Equal(t, expectedVindex, vindex, "vindex mismatch. expected: %+v, got: %+v", expectedVindex, vindex) + for expectedVindexName, expectedVindex := range tcase.expectedVschema.Vindexes { + vindex := aftervschema.Vindexes[expectedVindexName] + require.NotNil(t, vindex, "vindex %s not found in vschema", tcase.request.Name) + require.Equal(t, expectedVindex, vindex, "vindex mismatch. expected: %+v, got: %+v", expectedVindex, vindex) + } }) } } @@ -2516,6 +2632,15 @@ func TestCompleteLookupVindex(t *testing.T) { }, Owner: "t1", }, + "owned_lookup2": { + Type: "lookup_unique", + Params: map[string]string{ + "table": "targetks.owned_lookup2", + "from": "c1", + "to": "c2", + }, + Owner: "t2", + }, "unowned_lookup": { Type: "lookup_unique", Params: map[string]string{ @@ -2543,6 +2668,15 @@ func TestCompleteLookupVindex(t *testing.T) { Column: "col2", }}, }, + "t2": { + ColumnVindexes: []*vschemapb.ColumnVindex{{ + Name: "xxhash", + Column: "col1", + }, { + Name: "owned_lookup2", + Column: "col2", + }}, + }, }, } @@ -2559,6 +2693,21 @@ func TestCompleteLookupVindex(t *testing.T) { ownedRunning := sqltypes.MakeTestResult(fields, "1|Running|msg|"+ownedSourceKeepRunningAfterCopy+"|"+wftype+"|0|0|0|0|0|0|"+trxTS+"|5|{}") ownedStopped := sqltypes.MakeTestResult(fields, "1|Stopped|"+workflow.Frozen+"|"+ownedSourceStopAfterCopy+"|"+wftype+"|0|0|0|0|0|0|"+trxTS+"|5|{}") + unownedSourceStopAfterCopy := fmt.Sprintf(`keyspace:"%s",shard:"0",filter:{rules:{match:"unowned_lookup" filter:"select * from t1 where in_keyrange(col1, '%s.xxhash', '-80')"}} stop_after_copy:true`, + ms.SourceKeyspace, ms.SourceKeyspace) + unownedSourceKeepRunningAfterCopy := fmt.Sprintf(`keyspace:"%s",shard:"0",filter:{rules:{match:"unowned_lookup" filter:"select * from t1 where in_keyrange(col1, '%s.xxhash', '-80')"}}`, + ms.SourceKeyspace, ms.SourceKeyspace) + unownedRunning := sqltypes.MakeTestResult(fields, "2|Running|msg|"+unownedSourceKeepRunningAfterCopy+"|"+wftype+"|0|0|0|0|0|0|"+trxTS+"|5|{}") + unownedStopped := sqltypes.MakeTestResult(fields, "2|Stopped|Stopped after copy|"+unownedSourceStopAfterCopy+"|"+wftype+"|0|0|0|0|0|0|"+trxTS+"|5|{}") + + options := `{ + "lookup_vindexes": [ + "owned_lookup", + "owned_lookup2" + ] + }` + ownedMultipleStopped := sqltypes.MakeTestResult(fields, "1|Stopped|"+workflow.Frozen+"|"+ownedSourceStopAfterCopy+"|"+wftype+"|0|0|0|0|0|0|"+trxTS+"|5|"+options) + testcases := []struct { request *vtctldatapb.LookupVindexCompleteRequest vrResponse *sqltypes.Result @@ -2594,6 +2743,7 @@ func TestCompleteLookupVindex(t *testing.T) { Keyspace: ms.SourceKeyspace, TableKeyspace: ms.TargetKeyspace, }, + vrResponse: unownedStopped, expectedVschema: &vschemapb.Keyspace{ Vindexes: map[string]*vschemapb.Vindex{ "unowned_lookup": { @@ -2636,6 +2786,7 @@ func TestCompleteLookupVindex(t *testing.T) { Keyspace: ms.SourceKeyspace, TableKeyspace: ms.TargetKeyspace, }, + vrResponse: unownedRunning, expectedVschema: &vschemapb.Keyspace{ Vindexes: map[string]*vschemapb.Vindex{ "unowned_lookup": { @@ -2652,23 +2803,43 @@ func TestCompleteLookupVindex(t *testing.T) { }, { request: &vtctldatapb.LookupVindexCompleteRequest{ - Name: "absent_lookup", + Name: "multiple_lv_workflow", Keyspace: ms.SourceKeyspace, TableKeyspace: ms.TargetKeyspace, }, + vrResponse: ownedMultipleStopped, expectedVschema: &vschemapb.Keyspace{ Vindexes: map[string]*vschemapb.Vindex{ - "absent_lookup": { + "owned_lookup": { + Type: "lookup_unique", + Params: map[string]string{ + "table": "targetks.owned_lookup", + "from": "c1", + "to": "c2", + }, + Owner: "t1", + }, + "owned_lookup2": { Type: "lookup_unique", Params: map[string]string{ - "table": "targetks.absent_lookup", + "table": "targetks.owned_lookup2", "from": "c1", "to": "c2", }, + Owner: "t2", }, }, }, - err: "vindex absent_lookup not found in the sourceks keyspace", + expectDelete: true, + }, + { + request: &vtctldatapb.LookupVindexCompleteRequest{ + Name: "absent_workflow", + Keyspace: ms.SourceKeyspace, + TableKeyspace: ms.TargetKeyspace, + }, + expectedVschema: &vschemapb.Keyspace{}, + err: "failed to parse workflow options", }, } for _, tcase := range testcases { @@ -2685,9 +2856,16 @@ func TestCompleteLookupVindex(t *testing.T) { require.NotNil(t, tcase.request, "No request provided") + isBackfillingOwned, err := workflow.IsBackfillingOwnedVindexes(tcase.expectedVschema.Vindexes) + require.NoError(t, err) for _, targetTablet := range targetShards { + // Tests with unowned vindexes will need only one + // query as they will error out before. + targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readWorkflow, tcase.request.Name, tenv.dbName), tcase.vrResponse, nil) if tcase.vrResponse != nil { - targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readWorkflow, tcase.request.Name, tenv.dbName), tcase.vrResponse, nil) + if len(tcase.expectedVschema.Vindexes) > 0 && isBackfillingOwned { + targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readWorkflow, tcase.request.Name, tenv.dbName), tcase.vrResponse, nil) + } } if tcase.err == "" { // We query the workflow again to build the status output when @@ -2714,11 +2892,12 @@ func TestCompleteLookupVindex(t *testing.T) { aftervschema, err := tenv.ts.GetVSchema(ctx, ms.SourceKeyspace) require.NoError(t, err) - vindex := aftervschema.Vindexes[tcase.request.Name] - expectedVindex := tcase.expectedVschema.Vindexes[tcase.request.Name] - require.NotNil(t, vindex, "vindex %s not found in vschema", tcase.request.Name) - require.NotContains(t, vindex.Params, "write_only", tcase.request) - require.Equal(t, expectedVindex, vindex, "vindex mismatch. expected: %+v, got: %+v", expectedVindex, vindex) + for expectedVindexName, expectedVindex := range tcase.expectedVschema.Vindexes { + vindex := aftervschema.Vindexes[expectedVindexName] + require.NotNil(t, vindex, "vindex %s not found in vschema", tcase.request.Name) + require.NotContains(t, vindex.Params, "write_only", tcase.request) + require.Equal(t, expectedVindex, vindex, "vindex mismatch. expected: %+v, got: %+v", expectedVindex, vindex) + } }) } } diff --git a/go/vt/vttablet/tabletmanager/semisyncmonitor/monitor.go b/go/vt/vttablet/tabletmanager/semisyncmonitor/monitor.go index 0bc04e1fd39..c394b329484 100644 --- a/go/vt/vttablet/tabletmanager/semisyncmonitor/monitor.go +++ b/go/vt/vttablet/tabletmanager/semisyncmonitor/monitor.go @@ -66,6 +66,10 @@ type Monitor struct { // the semisync_heartbeat table. clearTicks *timer.Timer + // timerMu protects operations on the timers to prevent deadlocks + // This must be acquired before mu if both are needed. + timerMu sync.Mutex + // mu protects the fields below. mu sync.Mutex appPool *dbconnpool.ConnectionPool @@ -123,8 +127,13 @@ func CreateTestSemiSyncMonitor(db *fakesqldb.DB, exporter *servenv.Exporter) *Mo // Open starts the monitor. func (m *Monitor) Open() { + // First acquire the timer mutex to prevent deadlock - we acquire in a consistent order + m.timerMu.Lock() + defer m.timerMu.Unlock() + m.mu.Lock() defer m.mu.Unlock() + // The check for config being nil is only requried for tests. if m.isOpen || m.config == nil || m.config.DB == nil { // If we are already open, then there is nothing to do @@ -145,16 +154,19 @@ func (m *Monitor) Open() { // Close stops the monitor. func (m *Monitor) Close() { - m.mu.Lock() - defer m.mu.Unlock() - if !m.isOpen { - // If we are already closed, then there is nothing to do - return - } - m.isOpen = false + // First acquire the timer mutex to prevent deadlock - we acquire in a consistent order + m.timerMu.Lock() + defer m.timerMu.Unlock() log.Info("SemiSync Monitor: closing") + // We close the ticks before we acquire the mu mutex to prevent deadlock. + // The timer Close should not be called while holding a mutex that the function + // the timer runs also acquires. m.clearTicks.Stop() m.ticks.Stop() + // Acquire the mu mutex to update the isOpen field. + m.mu.Lock() + defer m.mu.Unlock() + m.isOpen = false m.appPool.Close() } diff --git a/go/vt/vttablet/tabletmanager/semisyncmonitor/monitor_test.go b/go/vt/vttablet/tabletmanager/semisyncmonitor/monitor_test.go index 83bf2c2259c..9586514914b 100644 --- a/go/vt/vttablet/tabletmanager/semisyncmonitor/monitor_test.go +++ b/go/vt/vttablet/tabletmanager/semisyncmonitor/monitor_test.go @@ -619,6 +619,53 @@ func TestWaitUntilSemiSyncUnblocked(t *testing.T) { require.True(t, m.isClosed()) } +// TestDeadlockOnClose tests the deadlock that can occur when calling Close(). +// Look at https://github.com/vitessio/vitess/issues/18275 for more details. +func TestDeadlockOnClose(t *testing.T) { + db := fakesqldb.New(t) + defer db.Close() + params := db.ConnParams() + cp := *params + dbc := dbconfigs.NewTestDBConfigs(cp, cp, "") + config := &tabletenv.TabletConfig{ + DB: dbc, + SemiSyncMonitor: tabletenv.SemiSyncMonitorConfig{ + // Extremely low interval to trigger the deadlock quickly. + // This makes the monitor try and write that it is still blocked quite aggressively. + Interval: 10 * time.Millisecond, + }, + } + m := NewMonitor(config, exporter) + + // Set up for semisync to be blocked + db.SetNeverFail(true) + db.AddQuery(semiSyncWaitSessionsRead, sqltypes.MakeTestResult(sqltypes.MakeTestFields("variable_value", "varchar"), "1")) + + // Open the monitor + m.Open() + defer m.Close() + + // We will now try to close and open the monitor multiple times to see if we can trigger a deadlock. + finishCh := make(chan int) + go func() { + count := 100 + for i := 0; i < count; i++ { + m.Close() + m.Open() + time.Sleep(20 * time.Millisecond) + } + close(finishCh) + }() + + select { + case <-finishCh: + // The test finished without deadlocking. + case <-time.After(5 * time.Second): + // The test timed out, which means we deadlocked. + t.Fatalf("Deadlock occurred while closing the monitor") + } +} + // TestSemiSyncMonitor tests the semi-sync monitor as a black box. // It only calls the exported methods to see they work as intended. func TestSemiSyncMonitor(t *testing.T) { diff --git a/go/vt/vttablet/tabletmanager/tm_init.go b/go/vt/vttablet/tabletmanager/tm_init.go index 92fd5ffb19d..88d62af83f2 100644 --- a/go/vt/vttablet/tabletmanager/tm_init.go +++ b/go/vt/vttablet/tabletmanager/tm_init.go @@ -70,6 +70,7 @@ import ( "vitess.io/vitess/go/vt/topo" "vitess.io/vitess/go/vt/topo/topoproto" "vitess.io/vitess/go/vt/topotools" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtctl/reparentutil/policy" "vitess.io/vitess/go/vt/vtenv" "vitess.io/vitess/go/vt/vterrors" @@ -101,14 +102,14 @@ var ( ) func registerInitFlags(fs *pflag.FlagSet) { - fs.StringVar(&tabletHostname, "tablet_hostname", tabletHostname, "if not empty, this hostname will be assumed instead of trying to resolve it") - fs.StringVar(&initKeyspace, "init_keyspace", initKeyspace, "(init parameter) keyspace to use for this tablet") - fs.StringVar(&initShard, "init_shard", initShard, "(init parameter) shard to use for this tablet") - fs.StringVar(&initTabletType, "init_tablet_type", initTabletType, "(init parameter) the tablet type to use for this tablet.") - fs.StringVar(&initDbNameOverride, "init_db_name_override", initDbNameOverride, "(init parameter) override the name of the db used by vttablet. Without this flag, the db name defaults to vt_") - fs.StringVar(&skipBuildInfoTags, "vttablet_skip_buildinfo_tags", skipBuildInfoTags, "comma-separated list of buildinfo tags to skip from merging with --init_tags. each tag is either an exact match or a regular expression of the form '/regexp/'.") - fs.Var(&initTags, "init_tags", "(init parameter) comma separated list of key:value pairs used to tag the tablet") - fs.DurationVar(&initTimeout, "init_timeout", initTimeout, "(init parameter) timeout to use for the init phase.") + utils.SetFlagStringVar(fs, &tabletHostname, "tablet-hostname", tabletHostname, "if not empty, this hostname will be assumed instead of trying to resolve it") + utils.SetFlagStringVar(fs, &initKeyspace, "init-keyspace", initKeyspace, "(init parameter) keyspace to use for this tablet") + utils.SetFlagStringVar(fs, &initShard, "init-shard", initShard, "(init parameter) shard to use for this tablet") + utils.SetFlagStringVar(fs, &initTabletType, "init-tablet-type", initTabletType, "(init parameter) tablet type to use for this tablet. Valid values are: PRIMARY, REPLICA, SPARE, and RDONLY. The default is REPLICA.") + utils.SetFlagStringVar(fs, &initDbNameOverride, "init-db-name-override", initDbNameOverride, "(init parameter) override the name of the db used by vttablet. Without this flag, the db name defaults to vt_") + utils.SetFlagStringVar(fs, &skipBuildInfoTags, "vttablet-skip-buildinfo-tags", skipBuildInfoTags, "comma-separated list of buildinfo tags to skip from merging with --init-tags. each tag is either an exact match or a regular expression of the form '/regexp/'.") + utils.SetFlagVar(fs, &initTags, "init-tags", "(init parameter) comma separated list of key:value pairs used to tag the tablet") + utils.SetFlagDurationVar(fs, &initTimeout, "init-timeout", initTimeout, "(init parameter) timeout to use for the init phase.") fs.DurationVar(&mysqlShutdownTimeout, "mysql-shutdown-timeout", mysqlShutdownTimeout, "Timeout to use when MySQL is being shut down.") } @@ -232,13 +233,13 @@ func BuildTabletFromInput(alias *topodatapb.TabletAlias, port, grpcPort int32, d if err != nil { return nil, err } - log.Infof("Using detected machine hostname: %v, to change this, fix your machine network configuration or override it with --tablet_hostname. Tablet %s", hostname, alias.String()) + log.Infof("Using detected machine hostname: %v, to change this, fix your machine network configuration or override it with --tablet-hostname. Tablet %s", hostname, alias.String()) } else { - log.Infof("Using hostname: %v from --tablet_hostname flag. Tablet %s", hostname, alias.String()) + log.Infof("Using hostname: %v from --tablet-hostname flag. Tablet %s", hostname, alias.String()) } if initKeyspace == "" || initShard == "" { - return nil, fmt.Errorf("init_keyspace and init_shard must be specified") + return nil, fmt.Errorf("init-keyspace and init-shard must be specified") } // parse and validate shard name @@ -254,7 +255,7 @@ func BuildTabletFromInput(alias *topodatapb.TabletAlias, port, grpcPort int32, d switch tabletType { case topodatapb.TabletType_SPARE, topodatapb.TabletType_REPLICA, topodatapb.TabletType_RDONLY: default: - return nil, fmt.Errorf("invalid init_tablet_type %v; can only be REPLICA, RDONLY or SPARE", tabletType) + return nil, fmt.Errorf("invalid init-tablet-type %v; can only be REPLICA, RDONLY or SPARE", tabletType) } buildTags, err := getBuildTags(servenv.AppVersion.ToStringMap(), skipBuildInfoTags) @@ -923,7 +924,7 @@ func (tm *TabletManager) exportStats() { // withRetry will exponentially back off and retry a function upon // failure, until the context is Done(), or the function returned with // no error. We use this at startup with a context timeout set to the -// value of the init_timeout flag, so we can try to modify the +// value of the init-timeout flag, so we can try to modify the // topology over a longer period instead of dying right away. func (tm *TabletManager) withRetry(ctx context.Context, description string, work func() error) error { backoff := 1 * time.Second diff --git a/go/vt/vttablet/tabletmanager/tm_init_test.go b/go/vt/vttablet/tabletmanager/tm_init_test.go index a6c5d33c975..3d8b9fd132f 100644 --- a/go/vt/vttablet/tabletmanager/tm_init_test.go +++ b/go/vt/vttablet/tabletmanager/tm_init_test.go @@ -107,12 +107,12 @@ func TestStartBuildTabletFromInput(t *testing.T) { initKeyspace = "" initShard = "0" _, err = BuildTabletFromInput(alias, port, grpcport, nil, collations.MySQL8()) - assert.Contains(t, err.Error(), "init_keyspace and init_shard must be specified") + assert.Contains(t, err.Error(), "init-keyspace and init-shard must be specified") initKeyspace = "test_keyspace" initShard = "" _, err = BuildTabletFromInput(alias, port, grpcport, nil, collations.MySQL8()) - assert.Contains(t, err.Error(), "init_keyspace and init_shard must be specified") + assert.Contains(t, err.Error(), "init-keyspace and init-shard must be specified") initShard = "x-y" _, err = BuildTabletFromInput(alias, port, grpcport, nil, collations.MySQL8()) @@ -125,7 +125,7 @@ func TestStartBuildTabletFromInput(t *testing.T) { initTabletType = "primary" _, err = BuildTabletFromInput(alias, port, grpcport, nil, collations.MySQL8()) - assert.Contains(t, err.Error(), "invalid init_tablet_type PRIMARY") + assert.Contains(t, err.Error(), "invalid init-tablet-type PRIMARY") } func TestBuildTabletFromInputWithBuildTags(t *testing.T) { diff --git a/go/vt/vttablet/tabletmanager/tm_state.go b/go/vt/vttablet/tabletmanager/tm_state.go index f185f7eb7e9..351566b9b9f 100644 --- a/go/vt/vttablet/tabletmanager/tm_state.go +++ b/go/vt/vttablet/tabletmanager/tm_state.go @@ -37,6 +37,7 @@ import ( "vitess.io/vitess/go/vt/topo" "vitess.io/vitess/go/vt/topo/topoproto" "vitess.io/vitess/go/vt/topotools" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vterrors" "vitess.io/vitess/go/vt/vttablet/tabletserver" "vitess.io/vitess/go/vt/vttablet/tabletserver/rules" @@ -47,7 +48,7 @@ import ( var publishRetryInterval = 30 * time.Second func registerStateFlags(fs *pflag.FlagSet) { - fs.DurationVar(&publishRetryInterval, "publish_retry_interval", publishRetryInterval, "how long vttablet waits to retry publishing the tablet record") + utils.SetFlagDurationVar(fs, &publishRetryInterval, "publish-retry-interval", publishRetryInterval, "how long vttablet waits to retry publishing the tablet record") } func init() { diff --git a/go/vt/vttablet/tabletmanager/vreplication/utils.go b/go/vt/vttablet/tabletmanager/vreplication/utils.go index cff53ce55ee..efd744d5db3 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/utils.go +++ b/go/vt/vttablet/tabletmanager/vreplication/utils.go @@ -52,6 +52,8 @@ const ( LogMessage = "Message" // LogCopyStart is used when the copy phase is started. LogCopyStart = "Started Copy Phase" + // LogCopyRestart is used when the copy phase is restarted. + LogCopyRestart = "Restarted Copy Phase" // LogCopyEnd is used when the copy phase is done. LogCopyEnd = "Ended Copy Phase" // LogStateChange is used when the state of the stream changes. diff --git a/go/vt/vttablet/tabletmanager/vreplication/vcopier.go b/go/vt/vttablet/tabletmanager/vreplication/vcopier.go index e3a12258691..739183e0e33 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/vcopier.go +++ b/go/vt/vttablet/tabletmanager/vreplication/vcopier.go @@ -919,6 +919,12 @@ func (vrh *vcopierCopyTaskResultHooks) notify(ctx context.Context, result *vcopi // }() func (vrh *vcopierCopyTaskResultHooks) sendTo(ch chan<- *vcopierCopyTaskResult) { vrh.do(func(ctx context.Context, result *vcopierCopyTaskResult) { + defer func() { + // This recover prevents panics when sending to a potentially closed channel. + if err := recover(); err != nil { + log.Errorf("uncaught panic, vcopier copy task result: %v, error: %+v", result, err) + } + }() select { case ch <- result: case <-ctx.Done(): diff --git a/go/vt/vttablet/tabletmanager/vreplication/vcopier_test.go b/go/vt/vttablet/tabletmanager/vreplication/vcopier_test.go index dcb5616008d..c227efc4fb8 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/vcopier_test.go +++ b/go/vt/vttablet/tabletmanager/vreplication/vcopier_test.go @@ -25,6 +25,7 @@ import ( "testing" "time" + "vitess.io/vitess/go/vt/utils" vttablet "vitess.io/vitess/go/vt/vttablet/common" "vitess.io/vitess/go/vt/vttablet/tabletserver/vstreamer/testenv" @@ -75,7 +76,7 @@ func testVcopierTestCases(t *testing.T, test func(*testing.T), cases []vcopierTe // Run test case. t.Run( fmt.Sprintf( - "vreplication_experimental_flags=%d,vreplication_parallel_insert_workers=%d", + "%s=%d,vreplication_parallel_insert_workers=%d", utils.GetFlagVariantForTests("vreplication-experimental-flags"), tc.vreplicationExperimentalFlags, tc.vreplicationParallelInsertWorkers, ), test, @@ -1065,6 +1066,7 @@ func testPlayerCopyTableContinuation(t *testing.T) { expectNontxQueries(t, qh.Expect( // Catchup "/update _vt.vreplication set message='Picked source tablet.*", + "/update _vt.vreplication set state='Copying'", "insert into dst1(id,val) select 1, 'insert in' from dual where (1,1) <= (6,6)", "insert into dst1(id,val) select 7, 'insert out' from dual where (7,7) <= (6,6)", "update dst1 set val='updated' where id=3 and (3,3) <= (6,6)", @@ -1194,6 +1196,7 @@ func testPlayerCopyWildcardTableContinuation(t *testing.T) { "/insert into _vt.vreplication", "/update _vt.vreplication set state = 'Copying'", "/update _vt.vreplication set message='Picked source tablet.*", + "/update _vt.vreplication set state='Copying'", ).Then(func(expect qh.ExpectationSequencer) qh.ExpectationSequencer { if !optimizeInsertsEnabled { expect = expect.Then(qh.Immediately("insert into dst(id,val) select 4, 'new' from dual where (4) <= (2)")) @@ -1293,6 +1296,7 @@ func TestPlayerCopyWildcardTableContinuationWithOptimizeInserts(t *testing.T) { "/insert into _vt.vreplication", "/update _vt.vreplication set state = 'Copying'", "/update _vt.vreplication set message='Picked source tablet.*", + "/update _vt.vreplication set state='Copying'", // Copy "insert into dst(id,val) values (3,'uncopied'), (4,'new')", `/insert into _vt.copy_state .*`, diff --git a/go/vt/vttablet/tabletmanager/vreplication/vreplicator.go b/go/vt/vttablet/tabletmanager/vreplication/vreplicator.go index 39e705bd301..fd82224345a 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/vreplicator.go +++ b/go/vt/vttablet/tabletmanager/vreplication/vreplicator.go @@ -146,7 +146,7 @@ func newVReplicator(id int32, source *binlogdatapb.BinlogSource, sourceVStreamer workflowConfig = vttablet.DefaultVReplicationConfig } if workflowConfig.HeartbeatUpdateInterval > vreplicationMinimumHeartbeatUpdateInterval { - log.Warningf("The supplied value for vreplication_heartbeat_update_interval:%d seconds is larger than the maximum allowed:%d seconds, vreplication will fallback to %d", + log.Warningf("The supplied value for vreplication-heartbeat-update-interval:%d seconds is larger than the maximum allowed:%d seconds, vreplication will fallback to %d", workflowConfig.HeartbeatUpdateInterval, vreplicationMinimumHeartbeatUpdateInterval, vreplicationMinimumHeartbeatUpdateInterval) } vttablet.InitVReplicationConfigDefaults() @@ -305,6 +305,13 @@ func (vr *vreplicator) replicate(ctx context.Context) error { return err } } else { + if vr.state != binlogdatapb.VReplicationWorkflowState_Copying { + if err := vr.setState(binlogdatapb.VReplicationWorkflowState_Copying, ""); err != nil { + vr.stats.ErrorCounts.Add([]string{"Copy"}, 1) + return err + } + vr.insertLog(LogCopyRestart, fmt.Sprintf("Copy phase restarted for %d table(s)", numTablesToCopy)) + } if err := newVCopier(vr).copyNext(ctx, settings); err != nil { vr.stats.ErrorCounts.Add([]string{"Copy"}, 1) return err @@ -965,7 +972,7 @@ func (vr *vreplicator) execPostCopyActions(ctx context.Context, tableName string select { // Stop any further actions if the vreplicator's context is // cancelled -- most likely due to hitting the - // vreplication_copy_phase_duration + // vreplication-copy-phase-duration case <-ctx.Done(): return vterrors.Errorf(vtrpcpb.Code_CANCELED, "context has expired") default: diff --git a/go/vt/vttablet/tabletserver/dt_executor_test.go b/go/vt/vttablet/tabletserver/dt_executor_test.go index f83d7ff9006..ec2418e16e3 100644 --- a/go/vt/vttablet/tabletserver/dt_executor_test.go +++ b/go/vt/vttablet/tabletserver/dt_executor_test.go @@ -31,12 +31,11 @@ import ( "github.com/stretchr/testify/require" "google.golang.org/protobuf/proto" - "vitess.io/vitess/go/streamlog" - "vitess.io/vitess/go/event/syslogger" "vitess.io/vitess/go/mysql/fakesqldb" "vitess.io/vitess/go/mysql/sqlerror" "vitess.io/vitess/go/sqltypes" + "vitess.io/vitess/go/streamlog" querypb "vitess.io/vitess/go/vt/proto/query" topodatapb "vitess.io/vitess/go/vt/proto/topodata" "vitess.io/vitess/go/vt/vtenv" @@ -58,7 +57,7 @@ func TestTxExecutorEmptyPrepare(t *testing.T) { // taint the connection. sc, err := tsv.te.txPool.GetAndLock(txid, "taint") require.NoError(t, err) - sc.Taint(ctx, nil) + sc.Taint(ctx, tsv.te.reservedConnStats) sc.Unlock() err = txe.Prepare(txid, "aa") @@ -80,7 +79,7 @@ func TestExecutorPrepareFailure(t *testing.T) { // taint the connection. sc, err := tsv.te.txPool.GetAndLock(txid, "taint") require.NoError(t, err) - sc.Taint(ctx, nil) + sc.Taint(ctx, tsv.te.reservedConnStats) sc.Unlock() // try 2pc commit of Metadata Manager. @@ -374,7 +373,7 @@ func TestExecutorStartCommitFailure(t *testing.T) { // taint the connection. sc, err := tsv.te.txPool.GetAndLock(txid, "taint") require.NoError(t, err) - sc.Taint(ctx, nil) + sc.Taint(ctx, tsv.te.reservedConnStats) sc.Unlock() // add rollback state update expectation diff --git a/go/vt/vttablet/tabletserver/gc/tablegc.go b/go/vt/vttablet/tabletserver/gc/tablegc.go index 4d1714532a3..0a426a600a3 100644 --- a/go/vt/vttablet/tabletserver/gc/tablegc.go +++ b/go/vt/vttablet/tabletserver/gc/tablegc.go @@ -36,6 +36,7 @@ import ( "vitess.io/vitess/go/vt/servenv" "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/topo" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vttablet/tabletserver/connpool" "vitess.io/vitess/go/vt/vttablet/tabletserver/tabletenv" "vitess.io/vitess/go/vt/vttablet/tabletserver/throttle" @@ -64,9 +65,9 @@ func init() { func registerGCFlags(fs *pflag.FlagSet) { // checkInterval marks the interval between looking for tables in mysql server/schema - fs.DurationVar(&checkInterval, "gc_check_interval", checkInterval, "Interval between garbage collection checks") + utils.SetFlagDurationVar(fs, &checkInterval, "gc-check-interval", checkInterval, "Interval between garbage collection checks") // purgeReentranceInterval marks the interval between searching tables to purge - fs.DurationVar(&purgeReentranceInterval, "gc_purge_check_interval", purgeReentranceInterval, "Interval between purge discovery checks") + utils.SetFlagDurationVar(fs, &purgeReentranceInterval, "gc-purge-check-interval", purgeReentranceInterval, "Interval between purge discovery checks") // gcLifecycle is the sequence of steps the table goes through in the process of getting dropped fs.StringVar(&gcLifecycle, "table_gc_lifecycle", gcLifecycle, "States for a DROP TABLE garbage collection cycle. Default is 'hold,purge,evac,drop', use any subset ('drop' implicitly always included)") } diff --git a/go/vt/vttablet/tabletserver/query_executor.go b/go/vt/vttablet/tabletserver/query_executor.go index 2a7d2049ba9..f69bc5ae4fb 100644 --- a/go/vt/vttablet/tabletserver/query_executor.go +++ b/go/vt/vttablet/tabletserver/query_executor.go @@ -40,6 +40,7 @@ import ( "vitess.io/vitess/go/vt/schema" "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/tableacl" + "vitess.io/vitess/go/vt/tableacl/acl" "vitess.io/vitess/go/vt/vterrors" "vitess.io/vitess/go/vt/vtgate/evalengine" "vitess.io/vitess/go/vt/vttablet/tabletserver/connpool" @@ -69,9 +70,10 @@ type QueryExecutor struct { } const ( - streamRowsSize = 256 - resetLastIDQuery = "select last_insert_id(18446744073709547416)" - resetLastIDValue = 18446744073709547416 + streamRowsSize = 256 + resetLastIDQuery = "select last_insert_id(18446744073709547416)" + resetLastIDValue = 18446744073709547416 + userLabelDisabled = "UserLabelDisabled" ) var ( @@ -530,10 +532,14 @@ func (qre *QueryExecutor) checkPermissions() error { } func (qre *QueryExecutor) checkAccess(authorized *tableacl.ACLResult, tableName string, callerID *querypb.VTGateCallerID) error { - statsKey := []string{tableName, authorized.GroupName, qre.plan.PlanID.String(), callerID.Username} + var aclState acl.ACLState + defer func() { + statsKey := qre.generateACLStatsKey(tableName, authorized, callerID) + qre.recordACLStats(statsKey, aclState) + }() if !authorized.IsMember(callerID) { if qre.tsv.qe.enableTableACLDryRun { - qre.tsv.Stats().TableaclPseudoDenied.Add(statsKey, 1) + aclState = acl.ACLPseudoDenied return nil } @@ -547,17 +553,37 @@ func (qre *QueryExecutor) checkAccess(authorized *tableacl.ACLResult, tableName if len(callerID.Groups) > 0 { groupStr = fmt.Sprintf(", in groups [%s],", strings.Join(callerID.Groups, ", ")) } + aclState = acl.ACLDenied errStr := fmt.Sprintf("%s command denied to user '%s'%s for table '%s' (ACL check error)", qre.plan.PlanID.String(), callerID.Username, groupStr, tableName) - qre.tsv.Stats().TableaclDenied.Add(statsKey, 1) qre.tsv.qe.accessCheckerLogger.Infof("%s", errStr) return vterrors.Errorf(vtrpcpb.Code_PERMISSION_DENIED, "%s", errStr) } return nil } - qre.tsv.Stats().TableaclAllowed.Add(statsKey, 1) + aclState = acl.ACLAllow return nil } +func (qre *QueryExecutor) generateACLStatsKey(tableName string, authorized *tableacl.ACLResult, callerID *querypb.VTGateCallerID) []string { + if qre.tsv.Config().SkipUserMetrics { + return []string{tableName, authorized.GroupName, qre.plan.PlanID.String(), userLabelDisabled} + } + return []string{tableName, authorized.GroupName, qre.plan.PlanID.String(), callerID.Username} +} + +func (qre *QueryExecutor) recordACLStats(key []string, aclState acl.ACLState) { + switch aclState { + case acl.ACLAllow: + qre.tsv.Stats().TableaclAllowed.Add(key, 1) + case acl.ACLDenied: + qre.tsv.Stats().TableaclDenied.Add(key, 1) + case acl.ACLPseudoDenied: + qre.tsv.Stats().TableaclPseudoDenied.Add(key, 1) + case acl.ACLUnknown: + // nothing to record here. + } +} + func (qre *QueryExecutor) execDDL(conn *StatefulConnection) (result *sqltypes.Result, err error) { // Let's see if this is a normal DDL statement or an Online DDL statement. // An Online DDL statement is identified by /*vt+ .. */ comment with expected directives, like uuid etc. @@ -986,6 +1012,10 @@ func (qre *QueryExecutor) execAlterMigration() (*sqltypes.Result, error) { return qre.tsv.onlineDDLExecutor.CompleteMigration(qre.ctx, alterMigration.UUID) case sqlparser.CompleteAllMigrationType: return qre.tsv.onlineDDLExecutor.CompletePendingMigrations(qre.ctx) + case sqlparser.PostponeCompleteMigrationType: + return qre.tsv.onlineDDLExecutor.PostponeCompleteMigration(qre.ctx, alterMigration.UUID) + case sqlparser.PostponeCompleteAllMigrationType: + return qre.tsv.onlineDDLExecutor.PostponeCompletePendingMigrations(qre.ctx) case sqlparser.CancelMigrationType: return qre.tsv.onlineDDLExecutor.CancelMigration(qre.ctx, alterMigration.UUID, "CANCEL issued by user", true) case sqlparser.CancelAllMigrationType: @@ -1274,9 +1304,14 @@ func (qre *QueryExecutor) execStreamSQL(conn *connpool.PooledConn, isTransaction } func (qre *QueryExecutor) recordUserQuery(queryType string, duration int64) { - username := callerid.GetPrincipal(callerid.EffectiveCallerIDFromContext(qre.ctx)) - if username == "" { - username = callerid.GetUsername(callerid.ImmediateCallerIDFromContext(qre.ctx)) + var username string + if qre.tsv.config.SkipUserMetrics { + username = userLabelDisabled + } else { + username = callerid.GetPrincipal(callerid.EffectiveCallerIDFromContext(qre.ctx)) + if username == "" { + username = callerid.GetUsername(callerid.ImmediateCallerIDFromContext(qre.ctx)) + } } tableName := qre.plan.TableName().String() qre.tsv.Stats().UserTableQueryCount.Add([]string{tableName, username, queryType}, 1) diff --git a/go/vt/vttablet/tabletserver/stateful_connection.go b/go/vt/vttablet/tabletserver/stateful_connection.go index 10fc763984f..d64d2fefe9c 100644 --- a/go/vt/vttablet/tabletserver/stateful_connection.go +++ b/go/vt/vttablet/tabletserver/stateful_connection.go @@ -179,7 +179,7 @@ func (sc *StatefulConnection) ReleaseString(reason string) { } sc.dbConn.Recycle() sc.dbConn = nil - sc.logReservedConn() + sc.logReservedConn(reason) } // Renew the existing connection with new connection id. @@ -260,7 +260,11 @@ func (sc *StatefulConnection) Taint(ctx context.Context, stats *servenv.TimingsW Stats: stats, } sc.dbConn.Taint() - sc.Stats().UserActiveReservedCount.Add(sc.getUsername(), 1) + if sc.env.Config().SkipUserMetrics { + sc.Stats().UserActiveReservedCount.Add(userLabelDisabled, 1) + } else { + sc.Stats().UserActiveReservedCount.Add(sc.getUsername(), 1) + } return nil } @@ -282,9 +286,11 @@ func (sc *StatefulConnection) LogTransaction(reason tx.ReleaseReason) { username = callerid.GetUsername(sc.txProps.ImmediateCaller) } duration := sc.txProps.EndTime.Sub(sc.txProps.StartTime) - sc.Stats().UserTransactionCount.Add([]string{username, reason.Name()}, 1) - sc.Stats().UserTransactionTimesNs.Add([]string{username, reason.Name()}, int64(duration)) sc.txProps.Stats.Add(reason.Name(), duration) + if !sc.env.Config().SkipUserMetrics { + sc.Stats().UserTransactionCount.Add([]string{username, reason.Name()}, 1) + sc.Stats().UserTransactionTimesNs.Add([]string{username, reason.Name()}, int64(duration)) + } tabletenv.TxLogger.Send(sc) } @@ -294,15 +300,19 @@ func (sc *StatefulConnection) SetTimeout(timeout time.Duration) { } // logReservedConn logs reserved connection related stats. -func (sc *StatefulConnection) logReservedConn() { +func (sc *StatefulConnection) logReservedConn(reason string) { if sc.reservedProps == nil { return // Nothing to log as this connection is not reserved. } - duration := time.Since(sc.reservedProps.StartTime) - username := sc.getUsername() - sc.Stats().UserActiveReservedCount.Add(username, -1) - sc.Stats().UserReservedCount.Add(username, 1) - sc.Stats().UserReservedTimesNs.Add(username, int64(duration)) + sc.reservedProps.Stats.Record(reason, sc.reservedProps.StartTime) + if sc.env.Config().SkipUserMetrics { + sc.Stats().UserActiveReservedCount.Add(userLabelDisabled, -1) + } else { + username := sc.getUsername() + sc.Stats().UserActiveReservedCount.Add(username, -1) + sc.Stats().UserReservedCount.Add(username, 1) + sc.Stats().UserReservedTimesNs.Add(username, int64(time.Since(sc.reservedProps.StartTime))) + } } func (sc *StatefulConnection) getUsername() string { diff --git a/go/vt/vttablet/tabletserver/stateful_connection_pool_test.go b/go/vt/vttablet/tabletserver/stateful_connection_pool_test.go index b93c822cfdc..cb7b9190abf 100644 --- a/go/vt/vttablet/tabletserver/stateful_connection_pool_test.go +++ b/go/vt/vttablet/tabletserver/stateful_connection_pool_test.go @@ -27,6 +27,7 @@ import ( "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/vt/dbconfigs" querypb "vitess.io/vitess/go/vt/proto/query" + "vitess.io/vitess/go/vt/servenv" "vitess.io/vitess/go/vt/vttablet/tabletserver/tx" ) @@ -96,24 +97,25 @@ func TestStatefulPoolShutdownNonTx(t *testing.T) { pool := newActivePool() params := dbconfigs.New(db.ConnParams()) pool.Open(params, params, params) + rcStats := servenv.NewExporter("TestStatefulPoolShutdownNonTx", "").NewTimings("rconn", "test1", "test2") // conn1 non-tx, not in use. conn1, err := pool.NewConn(ctx, &querypb.ExecuteOptions{}, nil) require.NoError(t, err) - conn1.Taint(ctx, nil) + conn1.Taint(ctx, rcStats) conn1.Unlock() // conn2 tx, not in use. conn2, err := pool.NewConn(ctx, &querypb.ExecuteOptions{}, nil) require.NoError(t, err) - conn2.Taint(ctx, nil) + conn2.Taint(ctx, rcStats) conn2.txProps = &tx.Properties{} conn2.Unlock() // conn3 non-tx, in use. conn3, err := pool.NewConn(ctx, &querypb.ExecuteOptions{}, nil) require.NoError(t, err) - conn3.Taint(ctx, nil) + conn3.Taint(ctx, rcStats) // After ShutdownNonTx, conn1 should be closed, but not conn3. pool.ShutdownNonTx() diff --git a/go/vt/vttablet/tabletserver/tabletenv/config.go b/go/vt/vttablet/tabletserver/tabletenv/config.go index e4ca2bfc96a..22e87868c35 100644 --- a/go/vt/vttablet/tabletserver/tabletenv/config.go +++ b/go/vt/vttablet/tabletserver/tabletenv/config.go @@ -37,6 +37,7 @@ import ( "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/throttler" "vitess.io/vitess/go/vt/topo/topoproto" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vterrors" querypb "vitess.io/vitess/go/vt/proto/query" @@ -157,7 +158,7 @@ func registerTabletEnvFlags(fs *pflag.FlagSet) { fs.BoolVar(¤tConfig.TerseErrors, "queryserver-config-terse-errors", defaultConfig.TerseErrors, "prevent bind vars from escaping in client error messages") fs.IntVar(¤tConfig.TruncateErrorLen, "queryserver-config-truncate-error-len", defaultConfig.TruncateErrorLen, "truncate errors sent to client if they are longer than this value (0 means do not truncate)") fs.BoolVar(¤tConfig.AnnotateQueries, "queryserver-config-annotate-queries", defaultConfig.AnnotateQueries, "prefix queries to MySQL backend with comment indicating vtgate principal (user) and target tablet type") - fs.BoolVar(¤tConfig.WatchReplication, "watch_replication_stream", false, "When enabled, vttablet will stream the MySQL replication stream from the local server, and use it to update schema when it sees a DDL.") + utils.SetFlagBoolVar(fs, ¤tConfig.WatchReplication, "watch-replication-stream", false, "When enabled, vttablet will stream the MySQL replication stream from the local server, and use it to update schema when it sees a DDL.") fs.BoolVar(¤tConfig.TrackSchemaVersions, "track_schema_versions", false, "When enabled, vttablet will store versions of schemas at each position that a DDL is applied and allow retrieval of the schema corresponding to a position") fs.Int64Var(¤tConfig.SchemaVersionMaxAgeSeconds, "schema-version-max-age-seconds", 0, "max age of schema version records to kept in memory by the vreplication historian") @@ -167,7 +168,7 @@ func registerTabletEnvFlags(fs *pflag.FlagSet) { "Any unresolved transaction older than this time will be sent to the coordinator to be resolved. NOTE: Providing time as seconds (float64) is deprecated. Use time.Duration format (e.g., '1s', '2m', '1h').") // Tx throttler config - flagutil.DualFormatBoolVar(fs, ¤tConfig.EnableTxThrottler, "enable_tx_throttler", defaultConfig.EnableTxThrottler, "If true replication-lag-based throttling on transactions will be enabled.") + utils.SetFlagBoolVar(fs, ¤tConfig.EnableTxThrottler, "enable-tx-throttler", defaultConfig.EnableTxThrottler, "If true replication-lag-based throttling on transactions will be enabled.") flagutil.DualFormatVar(fs, currentConfig.TxThrottlerConfig, "tx_throttler_config", "The configuration of the transaction throttler as a text-formatted throttlerdata.Configuration protocol buffer message.") flagutil.DualFormatStringListVar(fs, ¤tConfig.TxThrottlerHealthCheckCells, "tx_throttler_healthcheck_cells", defaultConfig.TxThrottlerHealthCheckCells, "A comma-separated list of cells. Only tabletservers running in these cells will be monitored for replication lag by the transaction throttler.") fs.IntVar(¤tConfig.TxThrottlerDefaultPriority, "tx-throttler-default-priority", defaultConfig.TxThrottlerDefaultPriority, "Default priority assigned to queries that lack priority information") @@ -175,47 +176,48 @@ func registerTabletEnvFlags(fs *pflag.FlagSet) { fs.BoolVar(¤tConfig.TxThrottlerDryRun, "tx-throttler-dry-run", defaultConfig.TxThrottlerDryRun, "If present, the transaction throttler only records metrics about requests received and throttled, but does not actually throttle any requests.") fs.DurationVar(¤tConfig.TxThrottlerTopoRefreshInterval, "tx-throttler-topo-refresh-interval", time.Minute*5, "The rate that the transaction throttler will refresh the topology to find cells.") - fs.BoolVar(&enableHotRowProtection, "enable_hot_row_protection", false, "If true, incoming transactions for the same row (range) will be queued and cannot consume all txpool slots.") - fs.BoolVar(&enableHotRowProtectionDryRun, "enable_hot_row_protection_dry_run", false, "If true, hot row protection is not enforced but logs if transactions would have been queued.") - fs.IntVar(¤tConfig.HotRowProtection.MaxQueueSize, "hot_row_protection_max_queue_size", defaultConfig.HotRowProtection.MaxQueueSize, "Maximum number of BeginExecute RPCs which will be queued for the same row (range).") - fs.IntVar(¤tConfig.HotRowProtection.MaxGlobalQueueSize, "hot_row_protection_max_global_queue_size", defaultConfig.HotRowProtection.MaxGlobalQueueSize, "Global queue limit across all row (ranges). Useful to prevent that the queue can grow unbounded.") - fs.IntVar(¤tConfig.HotRowProtection.MaxConcurrency, "hot_row_protection_concurrent_transactions", defaultConfig.HotRowProtection.MaxConcurrency, "Number of concurrent transactions let through to the txpool/MySQL for the same hot row. Should be > 1 to have enough 'ready' transactions in MySQL and benefit from a pipelining effect.") - - fs.BoolVar(¤tConfig.EnableTransactionLimit, "enable_transaction_limit", defaultConfig.EnableTransactionLimit, "If true, limit on number of transactions open at the same time will be enforced for all users. User trying to open a new transaction after exhausting their limit will receive an error immediately, regardless of whether there are available slots or not.") - fs.BoolVar(¤tConfig.EnableTransactionLimitDryRun, "enable_transaction_limit_dry_run", defaultConfig.EnableTransactionLimitDryRun, "If true, limit on number of transactions open at the same time will be tracked for all users, but not enforced.") - fs.Float64Var(¤tConfig.TransactionLimitPerUser, "transaction_limit_per_user", defaultConfig.TransactionLimitPerUser, "Maximum number of transactions a single user is allowed to use at any time, represented as fraction of -transaction_cap.") - fs.BoolVar(¤tConfig.TransactionLimitByUsername, "transaction_limit_by_username", defaultConfig.TransactionLimitByUsername, "Include VTGateCallerID.username when considering who the user is for the purpose of transaction limit.") - fs.BoolVar(¤tConfig.TransactionLimitByPrincipal, "transaction_limit_by_principal", defaultConfig.TransactionLimitByPrincipal, "Include CallerID.principal when considering who the user is for the purpose of transaction limit.") - fs.BoolVar(¤tConfig.TransactionLimitByComponent, "transaction_limit_by_component", defaultConfig.TransactionLimitByComponent, "Include CallerID.component when considering who the user is for the purpose of transaction limit.") - fs.BoolVar(¤tConfig.TransactionLimitBySubcomponent, "transaction_limit_by_subcomponent", defaultConfig.TransactionLimitBySubcomponent, "Include CallerID.subcomponent when considering who the user is for the purpose of transaction limit.") - - fs.BoolVar(&enableHeartbeat, "heartbeat_enable", false, "If true, vttablet records (if master) or checks (if replica) the current time of a replication heartbeat in the sidecar database's heartbeat table. The result is used to inform the serving state of the vttablet via healthchecks.") - fs.DurationVar(&heartbeatInterval, "heartbeat_interval", 1*time.Second, "How frequently to read and write replication heartbeat.") - fs.DurationVar(&heartbeatOnDemandDuration, "heartbeat_on_demand_duration", 0, "If non-zero, heartbeats are only written upon consumer request, and only run for up to given duration following the request. Frequent requests can keep the heartbeat running consistently; when requests are infrequent heartbeat may completely stop between requests") - - fs.BoolVar(¤tConfig.EnforceStrictTransTables, "enforce_strict_trans_tables", defaultConfig.EnforceStrictTransTables, "If true, vttablet requires MySQL to run with STRICT_TRANS_TABLES or STRICT_ALL_TABLES on. It is recommended to not turn this flag off. Otherwise MySQL may alter your supplied values before saving them to the database.") - flagutil.DualFormatBoolVar(fs, &enableConsolidator, "enable_consolidator", true, "This option enables the query consolidator.") - flagutil.DualFormatBoolVar(fs, &enableConsolidatorReplicas, "enable_consolidator_replicas", false, "This option enables the query consolidator only on replicas.") + utils.SetFlagBoolVar(fs, &enableHotRowProtection, "enable-hot-row-protection", false, "If true, incoming transactions for the same row (range) will be queued and cannot consume all txpool slots.") + utils.SetFlagBoolVar(fs, &enableHotRowProtectionDryRun, "enable-hot-row-protection-dry-run", false, "If true, hot row protection is not enforced but logs if transactions would have been queued.") + utils.SetFlagIntVar(fs, ¤tConfig.HotRowProtection.MaxQueueSize, "hot-row-protection-max-queue-size", defaultConfig.HotRowProtection.MaxQueueSize, "Maximum number of BeginExecute RPCs which will be queued for the same row (range).") + utils.SetFlagIntVar(fs, ¤tConfig.HotRowProtection.MaxGlobalQueueSize, "hot-row-protection-max-global-queue-size", defaultConfig.HotRowProtection.MaxGlobalQueueSize, "Global queue limit across all row (ranges). Useful to prevent that the queue can grow unbounded.") + utils.SetFlagIntVar(fs, ¤tConfig.HotRowProtection.MaxConcurrency, "hot-row-protection-concurrent-transactions", defaultConfig.HotRowProtection.MaxConcurrency, "Number of concurrent transactions let through to the txpool/MySQL for the same hot row. Should be > 1 to have enough 'ready' transactions in MySQL and benefit from a pipelining effect.") + + utils.SetFlagBoolVar(fs, ¤tConfig.EnableTransactionLimit, "enable-transaction-limit", defaultConfig.EnableTransactionLimit, "If true, limit on number of transactions open at the same time will be enforced for all users. User trying to open a new transaction after exhausting their limit will receive an error immediately, regardless of whether there are available slots or not.") + utils.SetFlagBoolVar(fs, ¤tConfig.EnableTransactionLimitDryRun, "enable-transaction-limit-dry-run", defaultConfig.EnableTransactionLimitDryRun, "If true, limit on number of transactions open at the same time will be tracked for all users, but not enforced.") + utils.SetFlagFloat64Var(fs, ¤tConfig.TransactionLimitPerUser, "transaction-limit-per-user", defaultConfig.TransactionLimitPerUser, "Maximum number of transactions a single user is allowed to use at any time, represented as fraction of -transaction_cap.") + utils.SetFlagBoolVar(fs, ¤tConfig.TransactionLimitByUsername, "transaction-limit-by-username", defaultConfig.TransactionLimitByUsername, "Include VTGateCallerID.username when considering who the user is for the purpose of transaction limit.") + utils.SetFlagBoolVar(fs, ¤tConfig.TransactionLimitByPrincipal, "transaction-limit-by-principal", defaultConfig.TransactionLimitByPrincipal, "Include CallerID.principal when considering who the user is for the purpose of transaction limit.") + utils.SetFlagBoolVar(fs, ¤tConfig.TransactionLimitByComponent, "transaction-limit-by-component", defaultConfig.TransactionLimitByComponent, "Include CallerID.component when considering who the user is for the purpose of transaction limit.") + utils.SetFlagBoolVar(fs, ¤tConfig.TransactionLimitBySubcomponent, "transaction-limit-by-subcomponent", defaultConfig.TransactionLimitBySubcomponent, "Include CallerID.subcomponent when considering who the user is for the purpose of transaction limit.") + + utils.SetFlagBoolVar(fs, &enableHeartbeat, "heartbeat-enable", false, "If true, vttablet records (if master) or checks (if replica) the current time of a replication heartbeat in the sidecar database's heartbeat table. The result is used to inform the serving state of the vttablet via healthchecks.") + utils.SetFlagDurationVar(fs, &heartbeatInterval, "heartbeat-interval", 1*time.Second, "How frequently to read and write replication heartbeat.") + utils.SetFlagDurationVar(fs, &heartbeatOnDemandDuration, "heartbeat-on-demand-duration", 0, "If non-zero, heartbeats are only written upon consumer request, and only run for up to given duration following the request. Frequent requests can keep the heartbeat running consistently; when requests are infrequent heartbeat may completely stop between requests") + + utils.SetFlagBoolVar(fs, ¤tConfig.EnforceStrictTransTables, "enforce-strict-trans-tables", defaultConfig.EnforceStrictTransTables, "If true, vttablet requires MySQL to run with STRICT_TRANS_TABLES or STRICT_ALL_TABLES on. It is recommended to not turn this flag off. Otherwise MySQL may alter your supplied values before saving them to the database.") + utils.SetFlagBoolVar(fs, &enableConsolidator, "enable-consolidator", true, "This option enables the query consolidator.") + utils.SetFlagBoolVar(fs, &enableConsolidatorReplicas, "enable-consolidator-replicas", false, "This option enables the query consolidator only on replicas.") fs.Int64Var(¤tConfig.ConsolidatorStreamQuerySize, "consolidator-stream-query-size", defaultConfig.ConsolidatorStreamQuerySize, "Configure the stream consolidator query size in bytes. Setting to 0 disables the stream consolidator.") fs.Int64Var(¤tConfig.ConsolidatorStreamTotalSize, "consolidator-stream-total-size", defaultConfig.ConsolidatorStreamTotalSize, "Configure the stream consolidator total size in bytes. Setting to 0 disables the stream consolidator.") fs.Int64Var(¤tConfig.ConsolidatorQueryWaiterCap, "consolidator-query-waiter-cap", 0, "Configure the maximum number of clients allowed to wait on the consolidator.") - fs.DurationVar(&healthCheckInterval, "health_check_interval", defaultConfig.Healthcheck.Interval, "Interval between health checks") - fs.DurationVar(°radedThreshold, "degraded_threshold", defaultConfig.Healthcheck.DegradedThreshold, "replication lag after which a replica is considered degraded") + utils.SetFlagDurationVar(fs, &healthCheckInterval, "health-check-interval", defaultConfig.Healthcheck.Interval, "Interval between health checks") + utils.SetFlagDurationVar(fs, °radedThreshold, "degraded-threshold", defaultConfig.Healthcheck.DegradedThreshold, "replication lag after which a replica is considered degraded") fs.DurationVar(&unhealthyThreshold, "unhealthy_threshold", defaultConfig.Healthcheck.UnhealthyThreshold, "replication lag after which a replica is considered unhealthy") fs.DurationVar(&transitionGracePeriod, "serving_state_grace_period", 0, "how long to pause after broadcasting health to vtgate, before enforcing a new serving state") fs.DurationVar(&semiSyncMonitorInterval, "semi-sync-monitor-interval", defaultConfig.SemiSyncMonitor.Interval, "How frequently the semi-sync monitor checks if the primary is blocked on semi-sync ACKs") - fs.BoolVar(&enableReplicationReporter, "enable_replication_reporter", false, "Use polling to track replication lag.") - fs.BoolVar(¤tConfig.EnableOnlineDDL, "queryserver_enable_online_ddl", true, "Enable online DDL.") + utils.SetFlagBoolVar(fs, &enableReplicationReporter, "enable-replication-reporter", false, "Use polling to track replication lag.") + utils.SetFlagBoolVar(fs, ¤tConfig.EnableOnlineDDL, "queryserver-enable-online-ddl", true, "Enable online DDL.") fs.BoolVar(¤tConfig.SanitizeLogMessages, "sanitize_log_messages", false, "Remove potentially sensitive information in tablet INFO, WARNING, and ERROR log messages such as query parameters.") - fs.Int64Var(¤tConfig.RowStreamer.MaxInnoDBTrxHistLen, "vreplication_copy_phase_max_innodb_history_list_length", 1000000, "The maximum InnoDB transaction history that can exist on a vstreamer (source) before starting another round of copying rows. This helps to limit the impact on the source tablet.") - fs.Int64Var(¤tConfig.RowStreamer.MaxMySQLReplLagSecs, "vreplication_copy_phase_max_mysql_replication_lag", 43200, "The maximum MySQL replication lag (in seconds) that can exist on a vstreamer (source) before starting another round of copying rows. This helps to limit the impact on the source tablet.") + utils.SetFlagInt64Var(fs, ¤tConfig.RowStreamer.MaxInnoDBTrxHistLen, "vreplication-copy-phase-max-innodb-history-list-length", 1000000, "The maximum InnoDB transaction history that can exist on a vstreamer (source) before starting another round of copying rows. This helps to limit the impact on the source tablet.") + utils.SetFlagInt64Var(fs, ¤tConfig.RowStreamer.MaxMySQLReplLagSecs, "vreplication-copy-phase-max-mysql-replication-lag", 43200, "The maximum MySQL replication lag (in seconds) that can exist on a vstreamer (source) before starting another round of copying rows. This helps to limit the impact on the source tablet.") fs.BoolVar(¤tConfig.EnableViews, "queryserver-enable-views", false, "Enable views support in vttablet.") fs.BoolVar(¤tConfig.EnablePerWorkloadTableMetrics, "enable-per-workload-table-metrics", defaultConfig.EnablePerWorkloadTableMetrics, "If true, query counts and query error metrics include a label that identifies the workload") + fs.BoolVar(¤tConfig.SkipUserMetrics, "skip-user-metrics", defaultConfig.SkipUserMetrics, "If true, user based stats are not recorded.") fs.BoolVar(¤tConfig.Unmanaged, "unmanaged", false, "Indicates an unmanaged tablet, i.e. using an external mysql-compatible database") } @@ -370,6 +372,7 @@ type TabletConfig struct { EnableViews bool `json:"-"` EnablePerWorkloadTableMetrics bool `json:"-"` + SkipUserMetrics bool `json:"-"` } func (cfg *TabletConfig) MarshalJSON() ([]byte, error) { @@ -900,16 +903,16 @@ func (c *TabletConfig) Verify() error { return err } if v := c.HotRowProtection.MaxQueueSize; v <= 0 { - return fmt.Errorf("--hot_row_protection_max_queue_size must be > 0 (specified value: %v)", v) + return fmt.Errorf("--hot-row-protection-max-queue-size must be > 0 (specified value: %v)", v) } if v := c.HotRowProtection.MaxGlobalQueueSize; v <= 0 { - return fmt.Errorf("--hot_row_protection_max_global_queue_size must be > 0 (specified value: %v)", v) + return fmt.Errorf("--hot-row-protection-max-global-queue-size must be > 0 (specified value: %v)", v) } if globalSize, size := c.HotRowProtection.MaxGlobalQueueSize, c.HotRowProtection.MaxQueueSize; globalSize < size { - return fmt.Errorf("global queue size must be >= per row (range) queue size: -hot_row_protection_max_global_queue_size < hot_row_protection_max_queue_size (%v < %v)", globalSize, size) + return fmt.Errorf("global queue size must be >= per row (range) queue size: -hot-row-protection-max-global-queue-size < hot-row-protection-max-queue-size (%v < %v)", globalSize, size) } if v := c.HotRowProtection.MaxConcurrency; v <= 0 { - return fmt.Errorf("--hot_row_protection_concurrent_transactions must be > 0 (specified value: %v)", v) + return fmt.Errorf("--hot-row-protection-concurrent-transactions must be > 0 (specified value: %v)", v) } return nil } @@ -967,7 +970,7 @@ func (c *TabletConfig) checkConnectionForExternalMysql() error { func (c *TabletConfig) verifyTransactionLimitConfig() error { actual, dryRun := c.EnableTransactionLimit, c.EnableTransactionLimitDryRun if actual && dryRun { - return errors.New("only one of two flags allowed: --enable_transaction_limit or --enable_transaction_limit_dry_run") + return errors.New("only one of two flags allowed: --enable-transaction-limit or --enable-transaction-limit-dry-run") } // Skip other checks if this is not enabled @@ -985,10 +988,10 @@ func (c *TabletConfig) verifyTransactionLimitConfig() error { return errors.New("no user discriminating fields selected for transaction limiter, everyone would share single chunk of transaction pool. Override with at least one of --transaction_limit_by flags set to true") } if v := c.TransactionLimitPerUser; v <= 0 || v >= 1 { - return fmt.Errorf("--transaction_limit_per_user should be a fraction within range (0, 1) (specified value: %v)", v) + return fmt.Errorf("--transaction-limit-per-user should be a fraction within range (0, 1) (specified value: %v)", v) } if limit := int(c.TransactionLimitPerUser * float64(c.TxPool.Size)); limit == 0 { - return fmt.Errorf("effective transaction limit per user is 0 due to rounding, increase --transaction_limit_per_user") + return fmt.Errorf("effective transaction limit per user is 0 due to rounding, increase --transaction-limit-per-user") } return nil } diff --git a/go/vt/vttablet/tabletserver/throttle/base/metric_result.go b/go/vt/vttablet/tabletserver/throttle/base/metric_result.go index 0fa48fe3240..b3abab5cb53 100644 --- a/go/vt/vttablet/tabletserver/throttle/base/metric_result.go +++ b/go/vt/vttablet/tabletserver/throttle/base/metric_result.go @@ -19,6 +19,9 @@ package base import ( "errors" "net" + + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" ) // MetricResult is what we expect our probes to return. This can be a numeric result, or @@ -58,6 +61,11 @@ func IsDialTCPError(err error) bool { if err == nil { return false } + + if s, ok := status.FromError(err); ok { + return s.Code() == codes.Unavailable || s.Code() == codes.DeadlineExceeded + } + switch err := err.(type) { case *net.OpError: return err.Op == "dial" && err.Net == "tcp" diff --git a/go/vt/vttablet/tabletserver/throttle/throttler.go b/go/vt/vttablet/tabletserver/throttle/throttler.go index aa681cbd496..a0c6b693a23 100644 --- a/go/vt/vttablet/tabletserver/throttle/throttler.go +++ b/go/vt/vttablet/tabletserver/throttle/throttler.go @@ -380,7 +380,7 @@ func (throttler *Throttler) WatchSrvKeyspaceCallback(srvks *topodatapb.SrvKeyspa if !topo.IsErrType(err, topo.Interrupted) && !errors.Is(err, context.Canceled) { log.Errorf("WatchSrvKeyspaceCallback error: %v", err) } - return false + return true } throttlerConfig := throttler.normalizeThrottlerConfig(srvks.ThrottlerConfig) @@ -904,7 +904,7 @@ func (throttler *Throttler) generateTabletProbeFunction(scope base.Scope, probe req := &tabletmanagerdatapb.CheckThrottlerRequest{} // We leave AppName empty; it will default to VitessName anyway, and we can save some proto space resp, gRPCErr := tmClient.CheckThrottler(ctx, probe.Tablet, req) if gRPCErr != nil { - return metricsWithError(fmt.Errorf("gRPC error accessing tablet %v. Err=%v", probe.Alias, gRPCErr)) + return metricsWithError(fmt.Errorf("gRPC error accessing tablet %v. Err=%w", probe.Alias, gRPCErr)) } throttleMetric.Value = resp.Value if resp.ResponseCode == tabletmanagerdatapb.CheckThrottlerResponseCode_INTERNAL_ERROR { diff --git a/go/vt/vttablet/tabletserver/throttle/throttler_test.go b/go/vt/vttablet/tabletserver/throttle/throttler_test.go index 8d62f6605e0..fe5a32ab808 100644 --- a/go/vt/vttablet/tabletserver/throttle/throttler_test.go +++ b/go/vt/vttablet/tabletserver/throttle/throttler_test.go @@ -30,9 +30,15 @@ import ( "github.com/stretchr/testify/require" "golang.org/x/exp/maps" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" + "vitess.io/vitess/go/protoutil" + + "vitess.io/vitess/go/vt/grpcclient" "vitess.io/vitess/go/vt/topo" "vitess.io/vitess/go/vt/vtenv" + "vitess.io/vitess/go/vt/vttablet/grpctmclient" "vitess.io/vitess/go/vt/vttablet/tabletserver/connpool" "vitess.io/vitess/go/vt/vttablet/tabletserver/tabletenv" "vitess.io/vitess/go/vt/vttablet/tabletserver/throttle/base" @@ -837,6 +843,113 @@ func TestApplyThrottlerConfigAppCheckedMetrics(t *testing.T) { }) } +func TestIsDialTCPError(t *testing.T) { + // Verify that IsDialTCPError actually recognizes grpc dial errors + cc, err := grpcclient.DialContext(t.Context(), ":0", true, grpc.WithTransportCredentials(insecure.NewCredentials())) + require.NoError(t, err) + defer cc.Close() + + err = cc.Invoke(context.Background(), "/Fail", nil, nil) + + require.True(t, base.IsDialTCPError(err)) + require.True(t, base.IsDialTCPError(fmt.Errorf("wrapped: %w", err))) + + nonDialErr := fmt.Errorf("rpc error: code = NotFound desc = method not found") + require.False(t, base.IsDialTCPError(nonDialErr)) +} + +func TestProbeWithUnavailableHost(t *testing.T) { + throttler := Throttler{ + throttledApps: cache.New(cache.NoExpiration, 0), + heartbeatWriter: &FakeHeartbeatWriter{}, + } + + alias := &topodatapb.TabletAlias{ + Cell: "cell1", + Uid: 100, + } + + // The hostname used here is not routable, so the connection will fail. + tablet := &topo.TabletInfo{ + Tablet: &topodatapb.Tablet{ + Alias: alias, + Hostname: "192.0.2.0", + MysqlHostname: "192.0.2.0", + MysqlPort: 3306, + PortMap: map[string]int32{"grpc": 5000}, + Type: topodatapb.TabletType_PRIMARY, + }, + } + + probe := &base.Probe{ + Alias: "cell1-100", + Tablet: tablet.Tablet, + CacheMillis: 100, + } + + tmClient := grpctmclient.NewClient() + + probeFunc := throttler.generateTabletProbeFunction(base.ShardScope, probe) + + metrics := probeFunc(t.Context(), tmClient) + require.True(t, base.IsDialTCPError(metrics["custom"].Err)) + + tabletResultsMap := base.TabletResultMap{ + "cell1-100": base.MetricResultMap{ + "custom": metrics["custom"], + }, + } + + worstMetric := base.AggregateTabletMetricResults("custom", tabletResultsMap, 0, true, 0.0) + require.Equal(t, base.NoHostsMetricResult, worstMetric) +} + +func TestProbeWithEmptyHostAndPort(t *testing.T) { + throttler := Throttler{ + throttledApps: cache.New(cache.NoExpiration, 0), + heartbeatWriter: &FakeHeartbeatWriter{}, + } + + alias := &topodatapb.TabletAlias{ + Cell: "cell1", + Uid: 100, + } + + // The hostname used here is not routable, so the connection will fail. + tablet := &topo.TabletInfo{ + Tablet: &topodatapb.Tablet{ + Alias: alias, + Hostname: "", + MysqlHostname: "192.0.2.0", + MysqlPort: 3306, + PortMap: map[string]int32{"grpc": 0}, + Type: topodatapb.TabletType_PRIMARY, + }, + } + + probe := &base.Probe{ + Alias: "cell1-100", + Tablet: tablet.Tablet, + CacheMillis: 100, + } + + tmClient := grpctmclient.NewClient() + + probeFunc := throttler.generateTabletProbeFunction(base.ShardScope, probe) + + metrics := probeFunc(t.Context(), tmClient) + require.True(t, base.IsDialTCPError(metrics["custom"].Err)) + + tabletResultsMap := base.TabletResultMap{ + "cell1-100": base.MetricResultMap{ + "custom": metrics["custom"], + }, + } + + worstMetric := base.AggregateTabletMetricResults("custom", tabletResultsMap, 0, true, 0.0) + require.Equal(t, base.NoHostsMetricResult, worstMetric) +} + func TestIsAppThrottled(t *testing.T) { plusOneHour := time.Now().Add(time.Hour) throttler := Throttler{ diff --git a/go/vt/vttablet/tabletserver/vstreamer/copy.go b/go/vt/vttablet/tabletserver/vstreamer/copy.go index 135984844ef..83d54f37da5 100644 --- a/go/vt/vttablet/tabletserver/vstreamer/copy.go +++ b/go/vt/vttablet/tabletserver/vstreamer/copy.go @@ -73,6 +73,7 @@ func (uvs *uvstreamer) catchup(ctx context.Context) error { errch := make(chan error, 1) go func() { + uvs.stopPos = replication.Position{} // reset stopPos which was potentially set during fastforward startPos := replication.EncodePosition(uvs.pos) vs := newVStreamer(ctx, uvs.cp, uvs.se, startPos, "", uvs.filter, uvs.getVSchema(), uvs.throttlerApp, uvs.send2, "catchup", uvs.vse, nil) uvs.setVs(vs) diff --git a/go/vt/vttablet/tabletserver/vstreamer/main_test.go b/go/vt/vttablet/tabletserver/vstreamer/main_test.go index 18b5e1f1b3b..ce79b4ef5d0 100644 --- a/go/vt/vttablet/tabletserver/vstreamer/main_test.go +++ b/go/vt/vttablet/tabletserver/vstreamer/main_test.go @@ -28,22 +28,22 @@ import ( "testing" "time" - vttablet "vitess.io/vitess/go/vt/vttablet/common" - "github.com/stretchr/testify/require" - _flag "vitess.io/vitess/go/internal/flag" "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/mysql/replication" "vitess.io/vitess/go/vt/dbconfigs" "vitess.io/vitess/go/vt/log" + "vitess.io/vitess/go/vt/utils" "vitess.io/vitess/go/vt/vtenv" "vitess.io/vitess/go/vt/vttablet/tabletserver/tabletenv" "vitess.io/vitess/go/vt/vttablet/tabletserver/throttle/throttlerapp" "vitess.io/vitess/go/vt/vttablet/tabletserver/vstreamer/testenv" + _flag "vitess.io/vitess/go/internal/flag" binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" querypb "vitess.io/vitess/go/vt/proto/query" + vttablet "vitess.io/vitess/go/vt/vttablet/common" ) var ( @@ -317,8 +317,13 @@ func vstream(ctx context.Context, t *testing.T, pos string, tablePKs []*binlogda // values to the VStreamer for the duration of this test. var options binlogdatapb.VStreamOptions options.ConfigOverrides = make(map[string]string) - options.ConfigOverrides["vstream_dynamic_packet_size"] = strconv.FormatBool(vttablet.VStreamerUseDynamicPacketSize) - options.ConfigOverrides["vstream_packet_size"] = strconv.Itoa(vttablet.VStreamerDefaultPacketSize) + dynamicPacketSize := strconv.FormatBool(vttablet.VStreamerUseDynamicPacketSize) + packetSize := strconv.Itoa(vttablet.VStreamerDefaultPacketSize) + + // Support both formats for backwards compatibility + // TODO(v25): Remove underscore versions + utils.SetFlagVariantsForTests(options.ConfigOverrides, "vstream-dynamic-packet-size", dynamicPacketSize) + utils.SetFlagVariantsForTests(options.ConfigOverrides, "vstream-packet-size", packetSize) return engine.Stream(ctx, pos, tablePKs, filter, throttlerapp.VStreamerName, func(evs []*binlogdatapb.VEvent) error { timer := time.NewTimer(2 * time.Second) diff --git a/go/vt/vttablet/tabletserver/vstreamer/packet_size.go b/go/vt/vttablet/tabletserver/vstreamer/packet_size.go index 7ce430d1811..2bbc4eab6a3 100644 --- a/go/vt/vttablet/tabletserver/vstreamer/packet_size.go +++ b/go/vt/vttablet/tabletserver/vstreamer/packet_size.go @@ -19,6 +19,8 @@ package vstreamer import ( "time" + "vitess.io/vitess/go/vt/utils" + "github.com/spf13/pflag" "vitess.io/vitess/go/mathstats" @@ -33,9 +35,11 @@ func init() { func registerPacketSizeFlags(fs *pflag.FlagSet) { // defaultPacketSize is the suggested packet size for VReplication streamer. - fs.IntVar(&vttablet.VStreamerDefaultPacketSize, "vstream_packet_size", vttablet.VStreamerDefaultPacketSize, "Suggested packet size for VReplication streamer. This is used only as a recommendation. The actual packet size may be more or less than this amount.") + utils.SetFlagIntVar(fs, &vttablet.VStreamerDefaultPacketSize, "vstream-packet-size", + vttablet.VStreamerDefaultPacketSize, "Suggested packet size for vstreamers. The actual packet size may be more or less than this amount.") // useDynamicPacketSize controls whether to use dynamic packet size adjustments to increase performance while streaming - fs.BoolVar(&vttablet.VStreamerUseDynamicPacketSize, "vstream_dynamic_packet_size", vttablet.VStreamerUseDynamicPacketSize, "Enable dynamic packet sizing for VReplication. This will adjust the packet size during replication to improve performance.") + utils.SetFlagBoolVar(fs, &vttablet.VStreamerUseDynamicPacketSize, "vstream-dynamic-packet-size", + vttablet.VStreamerUseDynamicPacketSize, "Enable dynamic packet sizing for vstreamers. This will adjust the packet size in vreplication workflows to improve performance.") } // PacketSizer is a controller that adjusts the size of the packets being sent by the vstreamer at runtime diff --git a/go/vt/vttablet/tabletserver/vstreamer/rowstreamer_test.go b/go/vt/vttablet/tabletserver/vstreamer/rowstreamer_test.go index f2c1c226c73..58e2a022162 100644 --- a/go/vt/vttablet/tabletserver/vstreamer/rowstreamer_test.go +++ b/go/vt/vttablet/tabletserver/vstreamer/rowstreamer_test.go @@ -23,6 +23,8 @@ import ( "strconv" "testing" + "vitess.io/vitess/go/vt/utils" + "github.com/stretchr/testify/require" "vitess.io/vitess/go/mysql" @@ -531,8 +533,12 @@ func TestStreamRowsCancel(t *testing.T) { var options binlogdatapb.VStreamOptions options.ConfigOverrides = make(map[string]string) - options.ConfigOverrides["vstream_dynamic_packet_size"] = "false" - options.ConfigOverrides["vstream_packet_size"] = "10" + + // Support both formats for backwards compatibility + // TODO(v25): Remove underscore versions + utils.SetFlagVariantsForTests(options.ConfigOverrides, "vstream-dynamic-packet-size", "false") + utils.SetFlagVariantsForTests(options.ConfigOverrides, "vstream-packet-size", "10") + err := engine.StreamRows(ctx, "select * from t1", nil, func(rows *binlogdatapb.VStreamRowsResponse) error { cancel() return nil @@ -554,8 +560,12 @@ func checkStream(t *testing.T, query string, lastpk []sqltypes.Value, wantQuery defer close(ch) var options binlogdatapb.VStreamOptions options.ConfigOverrides = make(map[string]string) - options.ConfigOverrides["vstream_dynamic_packet_size"] = strconv.FormatBool(vttablet.VStreamerUseDynamicPacketSize) - options.ConfigOverrides["vstream_packet_size"] = strconv.Itoa(vttablet.VStreamerDefaultPacketSize) + + // Support both formats for backwards compatibility + // TODO(v25): Remove underscore versions + utils.SetFlagVariantsForTests(options.ConfigOverrides, "vstream-dynamic-packet-size", strconv.FormatBool(vttablet.VStreamerUseDynamicPacketSize)) + utils.SetFlagVariantsForTests(options.ConfigOverrides, "vstream-packet-size", strconv.Itoa(vttablet.VStreamerDefaultPacketSize)) + err := engine.StreamRows(context.Background(), query, lastpk, func(rows *binlogdatapb.VStreamRowsResponse) error { if first { if rows.Gtid == "" { diff --git a/go/vt/vttablet/tabletserver/vstreamer/tablestreamer.go b/go/vt/vttablet/tabletserver/vstreamer/tablestreamer.go index 6ed291387e1..b42a304e471 100644 --- a/go/vt/vttablet/tabletserver/vstreamer/tablestreamer.go +++ b/go/vt/vttablet/tabletserver/vstreamer/tablestreamer.go @@ -118,6 +118,8 @@ func (ts *tableStreamer) Stream() error { if _, err := conn.ExecuteFetch(fmt.Sprintf("set @@session.net_write_timeout = %v", ts.config.NetWriteTimeout), 1, false); err != nil { return err } + log.Infof("TableStreamer Stream() started with net read_timeout: %v, net write_timeout: %v", + ts.config.NetReadTimeout, ts.config.NetWriteTimeout) rs, err := conn.ExecuteFetch("show full tables", -1, true) if err != nil { @@ -139,6 +141,7 @@ func (ts *tableStreamer) Stream() error { for _, tableName := range ts.tables { log.Infof("Streaming table %s", tableName) if err := ts.streamTable(ts.ctx, tableName); err != nil { + log.Errorf("Streaming table %s failed: %v", tableName, err) return err } log.Infof("Finished streaming table %s", tableName) @@ -196,7 +199,8 @@ func (ts *tableStreamer) streamTable(ctx context.Context, tableName string) erro } defer cancel() - if rs.Stream() != nil { + err = rs.Stream() + if err != nil { return err } rs.vse.tableStreamerNumTables.Add(int64(1)) diff --git a/go/vt/vttablet/tabletserver/vstreamer/uvstreamer.go b/go/vt/vttablet/tabletserver/vstreamer/uvstreamer.go index bf8d4330831..43a2a436bb3 100644 --- a/go/vt/vttablet/tabletserver/vstreamer/uvstreamer.go +++ b/go/vt/vttablet/tabletserver/vstreamer/uvstreamer.go @@ -27,6 +27,7 @@ import ( "time" "vitess.io/vitess/go/mysql/replication" + "vitess.io/vitess/go/sets" "vitess.io/vitess/go/vt/dbconfigs" "vitess.io/vitess/go/vt/key" "vitess.io/vitess/go/vt/log" @@ -112,7 +113,11 @@ func newUVStreamer(ctx context.Context, vse *Engine, cp dbconfigs.Connector, se ev.Keyspace = vse.keyspace ev.Shard = vse.shard } - return send(evs) + err := send(evs) + if err != nil { + log.Infof("uvstreamer replicate send() returned with err %v", err) + } + return err } uvs := &uvstreamer{ ctx: ctx, @@ -159,6 +164,14 @@ func (uvs *uvstreamer) buildTablePlan() error { } } } + + // Set of tables to copy during the copy phase. Only if we need to copy + // specific tables, else keep it nil if we need to copy every table. + var tablesToCopySet sets.Set[string] + if len(uvs.options.GetTablesToCopy()) > 0 { + tablesToCopySet = sets.New(uvs.options.GetTablesToCopy()...) + } + for tableName := range tables { rule, err := matchTable(tableName, uvs.filter, tables) if err != nil { @@ -167,6 +180,9 @@ func (uvs *uvstreamer) buildTablePlan() error { if rule == nil { continue } + if tablesToCopySet != nil && !tablesToCopySet.Has(tableName) { + continue + } plan := &tablePlan{ tablePK: nil, rule: &binlogdatapb.Rule{ @@ -327,17 +343,20 @@ func (uvs *uvstreamer) send2(evs []*binlogdatapb.VEvent) error { } err := uvs.send(evs2) if err != nil && err != io.EOF { + log.Infof("uvstreamer catchup/fastforward send() returning with send error %v", err) return err } for _, ev := range evs2 { if ev.Type == binlogdatapb.VEventType_GTID { uvs.pos, _ = replication.DecodePosition(ev.Gtid) if !uvs.stopPos.IsZero() && uvs.pos.AtLeast(uvs.stopPos) { + log.Infof("Reached stop position %v, returning io.EOF", uvs.stopPos) err = io.EOF } } } if err != nil { + log.Infof("uvstreamer catchup/fastforward returning with EOF error %v", err) uvs.vse.errorCounts.Add("Send", 1) } return err @@ -397,8 +416,11 @@ func (uvs *uvstreamer) currentPosition() (replication.Position, error) { // 2. TablePKs nil, startPos empty => full table copy of tables matching filter // 3. TablePKs not nil, startPos empty => table copy (for pks > lastPK) // 4. TablePKs not nil, startPos set => run catchup from startPos, then table copy (for pks > lastPK) +// +// If TablesToCopy option is not nil, copy only the tables listed in TablesToCopy. +// For other tables not in TablesToCopy, if startPos is set, perform catchup starting from startPos. func (uvs *uvstreamer) init() error { - if uvs.startPos == "" /* full copy */ || len(uvs.inTablePKs) > 0 /* resume copy */ { + if uvs.startPos == "" /* full copy */ || len(uvs.inTablePKs) > 0 /* resume copy */ || len(uvs.options.GetTablesToCopy()) > 0 /* copy specific tables */ { if err := uvs.buildTablePlan(); err != nil { return err } diff --git a/go/vt/vttablet/tabletserver/vstreamer/uvstreamer_flaky_test.go b/go/vt/vttablet/tabletserver/vstreamer/uvstreamer_flaky_test.go index e2972bb7071..e29c5fd5a82 100644 --- a/go/vt/vttablet/tabletserver/vstreamer/uvstreamer_flaky_test.go +++ b/go/vt/vttablet/tabletserver/vstreamer/uvstreamer_flaky_test.go @@ -255,7 +255,7 @@ func TestVStreamCopyCompleteFlow(t *testing.T) { numCopyEvents := 3 /*t1,t2,t3*/ * (numInitialRows + 1 /*FieldEvent*/ + 1 /*LastPKEvent*/ + 1 /*TestEvent: Copy Start*/ + 2 /*begin,commit*/ + 3 /* LastPK Completed*/) numCopyEvents += 2 /* GTID + Event after all copy is done */ - numCatchupEvents := 3 * 5 /* 2 t1, 1 t2 : BEGIN+FIELD+ROW+GTID+COMMIT */ + numCatchupEvents := 4 * 5 /* 3 t1, 1 t2 : BEGIN+FIELD+ROW+GTID+COMMIT */ numFastForwardEvents := 5 /*t1:FIELD+ROW*/ numMisc := 1 /* t2 insert during t1 catchup that comes in t2 copy */ numReplicateEvents := 2*5 /* insert into t1/t2 */ + 6 /* begin/field/2 inserts/gtid/commit */ @@ -398,6 +398,21 @@ func initTables(t *testing.T, tables []string) { } } } + callbacks["LASTPK.*t2.*complete"] = func() { + ctx := context.Background() + idx := 1 + id := numInitialRows + 100 + table := "t1" + query1 := fmt.Sprintf(insertQuery, table, idx, idx, id, id*idx*10) + queries := []string{ + "begin", + query1, + "commit", + } + env.Mysqld.ExecuteSuperQueryList(ctx, queries) + log.Infof("Position after insert into t1 and t2 after t2 complete: %s", primaryPosition(t)) + + } positions["afterInitialInsert"] = primaryPosition(t) } @@ -528,6 +543,11 @@ var expectedEvents = []string{ "type:BEGIN", "type:LASTPK last_p_k_event:{table_last_p_k:{table_name:\"t2\"} completed:true}", "type:COMMIT", + "type:BEGIN", + "type:FIELD field_event:{table_name:\"t1\" fields:{name:\"id11\" type:INT32 table:\"t1\" org_table:\"t1\" database:\"vttest\" org_name:\"id11\" column_length:11 charset:63 column_type:\"int(11)\"} fields:{name:\"id12\" type:INT32 table:\"t1\" org_table:\"t1\" database:\"vttest\" org_name:\"id12\" column_length:11 charset:63 column_type:\"int(11)\"} enum_set_string_values:true}", + "type:ROW row_event:{table_name:\"t1\" row_changes:{after:{lengths:3 lengths:4 values:\"1101100\"}}}", + "type:GTID", + "type:COMMIT", fmt.Sprintf("type:OTHER gtid:\"%s t3\"", copyPhaseStart), "type:BEGIN", "type:FIELD field_event:{table_name:\"t1\" fields:{name:\"id11\" type:INT32 table:\"t1\" org_table:\"t1\" database:\"vttest\" org_name:\"id11\" column_length:11 charset:63 column_type:\"int(11)\"} fields:{name:\"id12\" type:INT32 table:\"t1\" org_table:\"t1\" database:\"vttest\" org_name:\"id12\" column_length:11 charset:63 column_type:\"int(11)\"} enum_set_string_values:true}", diff --git a/go/vt/vttablet/tmclient/rpc_client_api.go b/go/vt/vttablet/tmclient/rpc_client_api.go index 7ce4c7f0bf4..efa9ece0ae8 100644 --- a/go/vt/vttablet/tmclient/rpc_client_api.go +++ b/go/vt/vttablet/tmclient/rpc_client_api.go @@ -27,6 +27,7 @@ import ( "vitess.io/vitess/go/vt/logutil" "vitess.io/vitess/go/vt/mysqlctl/tmutils" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/utils" querypb "vitess.io/vitess/go/vt/proto/query" replicationdatapb "vitess.io/vitess/go/vt/proto/replicationdata" @@ -41,7 +42,7 @@ var tabletManagerProtocol = "grpc" // RegisterFlags registers the tabletconn flags on a given flagset. It is // exported for tests that need to inject a particular TabletManagerProtocol. func RegisterFlags(fs *pflag.FlagSet) { - fs.StringVar(&tabletManagerProtocol, "tablet_manager_protocol", tabletManagerProtocol, "Protocol to use to make tabletmanager RPCs to vttablets.") + utils.SetFlagStringVar(fs, &tabletManagerProtocol, "tablet-manager-protocol", tabletManagerProtocol, "Protocol to use to make tabletmanager RPCs to vttablets.") } func init() { @@ -219,6 +220,8 @@ type TabletManagerClient interface { VReplicationExec(ctx context.Context, tablet *topodatapb.Tablet, query string) (*querypb.QueryResult, error) VReplicationWaitForPos(ctx context.Context, tablet *topodatapb.Tablet, id int32, pos string) error VDiff(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.VDiffRequest) (*tabletmanagerdatapb.VDiffResponse, error) + UpdateSequenceTables(ctx context.Context, tablet *topodatapb.Tablet, request *tabletmanagerdatapb.UpdateSequenceTablesRequest) (*tabletmanagerdatapb.UpdateSequenceTablesResponse, error) + GetMaxValueForSequences(ctx context.Context, tablet *topodatapb.Tablet, request *tabletmanagerdatapb.GetMaxValueForSequencesRequest) (*tabletmanagerdatapb.GetMaxValueForSequencesResponse, error) // // Reparenting related functions diff --git a/go/vt/vttablet/tmclienttest/tmclienttest.go b/go/vt/vttablet/tmclienttest/tmclienttest.go index 6e40a2afb1f..0b207569f3f 100644 --- a/go/vt/vttablet/tmclienttest/tmclienttest.go +++ b/go/vt/vttablet/tmclienttest/tmclienttest.go @@ -26,9 +26,9 @@ import ( "vitess.io/vitess/go/vt/vttablet/tmclient" ) -const tmclientProtocolFlagName = "tablet_manager_protocol" +const tmclientProtocolFlagName = "tablet-manager-protocol" -// SetProtocol is a helper function to set the tmclient --tablet_manager_protocol +// SetProtocol is a helper function to set the tmclient --tablet-manager-protocol // flag value for tests. If successful, it returns a function that, when called, // returns the flag to its previous value. // diff --git a/go/vt/vttablet/tmrpctest/test_tm_rpc.go b/go/vt/vttablet/tmrpctest/test_tm_rpc.go index 0ec380882cc..3ff401d33c7 100644 --- a/go/vt/vttablet/tmrpctest/test_tm_rpc.go +++ b/go/vt/vttablet/tmrpctest/test_tm_rpc.go @@ -96,6 +96,16 @@ func (fra *fakeRPCTM) UpdateVReplicationWorkflows(ctx context.Context, req *tabl panic("implement me") } +func (fra *fakeRPCTM) UpdateSequenceTables(ctx context.Context, req *tabletmanagerdatapb.UpdateSequenceTablesRequest) (*tabletmanagerdatapb.UpdateSequenceTablesResponse, error) { + // TODO implement me + panic("implement me") +} + +func (fra *fakeRPCTM) GetMaxValueForSequences(ctx context.Context, req *tabletmanagerdatapb.GetMaxValueForSequencesRequest) (*tabletmanagerdatapb.GetMaxValueForSequencesResponse, error) { + // TODO implement me + panic("implement me") +} + func (fra *fakeRPCTM) ResetSequences(ctx context.Context, tables []string) error { // TODO implement me panic("implement me") diff --git a/go/vt/vttest/environment.go b/go/vt/vttest/environment.go index a4e139ad643..85f85ddafdf 100644 --- a/go/vt/vttest/environment.go +++ b/go/vt/vttest/environment.go @@ -207,7 +207,7 @@ func (env *LocalTestEnv) ProcessHealthCheck(name string) HealthChecker { // VtcomboArguments implements VtcomboArguments for LocalTestEnv. func (env *LocalTestEnv) VtcomboArguments() []string { return []string{ - "--service_map", strings.Join( + "--service-map", strings.Join( []string{"grpc-vtgateservice", "grpc-vtctl", "grpc-vtctld"}, ",", ), } diff --git a/go/vt/vttest/environment_test.go b/go/vt/vttest/environment_test.go index b5a724c764b..1b6e9046130 100644 --- a/go/vt/vttest/environment_test.go +++ b/go/vt/vttest/environment_test.go @@ -29,11 +29,11 @@ func TestVtcomboArguments(t *testing.T) { env := &LocalTestEnv{} args := env.VtcomboArguments() - t.Run("service_map flag", func(t *testing.T) { - require.Contains(t, args, "--service_map", "vttest.LocalTestEnv must provide `--service_map` flag to vtcombo") + t.Run("service-map flag", func(t *testing.T) { + require.Contains(t, args, "--service-map", "vttest.LocalTestEnv must provide `--service-map` flag to vtcombo") - x := sort.SearchStrings(args, "--service_map") - require.Less(t, x+1, len(args), "--service_map vtcombo flag (idx = %d) must take an argument. full arg list: %v", x, args) + x := sort.SearchStrings(args, "--service-map") + require.Less(t, x+1, len(args), "--service-map vtcombo flag (idx = %d) must take an argument. full arg list: %v", x, args) expectedServiceList := []string{ "grpc-vtgateservice", @@ -41,6 +41,6 @@ func TestVtcomboArguments(t *testing.T) { "grpc-vtctld", } serviceMapList := strings.Split(args[x+1], ",") - assert.ElementsMatch(t, expectedServiceList, serviceMapList, "--service_map list does not contain expected vtcombo services") + assert.ElementsMatch(t, expectedServiceList, serviceMapList, "--service-map list does not contain expected vtcombo services") }) } diff --git a/go/vt/vttest/local_cluster.go b/go/vt/vttest/local_cluster.go index a2df18d9081..b444bc48509 100644 --- a/go/vt/vttest/local_cluster.go +++ b/go/vt/vttest/local_cluster.go @@ -106,7 +106,7 @@ type Config struct { // when LocalCluster.TearDown() is called. This is useful for running // vttestserver as a database container in local developer environments. Note // that db and vschema migration files (-schema_dir option) and seeding of - // random data (-initialize_with_random_data option) will only run during + // random data (-initialize-with-random-data option) will only run during // cluster startup if the data directory does not already exist. PersistentMode bool @@ -657,14 +657,14 @@ func (db *LocalCluster) JSONConfig() any { config := map[string]any{ "bind_address": db.vt.BindAddress, "port": db.vt.Port, - "grpc_bind_address": db.vt.BindAddressGprc, + "grpc-bind-address": db.vt.BindAddressGprc, "socket": db.mysql.UnixSocket(), "vtcombo_mysql_port": db.Env.PortForProtocol("vtcombo_mysql_port", ""), "mysql": db.Env.PortForProtocol("mysql", ""), } if grpc := db.vt.PortGrpc; grpc != 0 { - config["grpc_port"] = grpc + config["grpc-port"] = grpc } return config diff --git a/go/vt/vttest/mysqlctl.go b/go/vt/vttest/mysqlctl.go index d8df6c99d48..751da56f3d8 100644 --- a/go/vt/vttest/mysqlctl.go +++ b/go/vt/vttest/mysqlctl.go @@ -64,8 +64,8 @@ func (ctl *Mysqlctl) Setup() error { cmd := exec.CommandContext(ctx, ctl.Binary, "--alsologtostderr", - "--tablet_uid", fmt.Sprintf("%d", ctl.UID), - "--mysql_port", fmt.Sprintf("%d", ctl.Port), + "--tablet-uid", fmt.Sprintf("%d", ctl.UID), + "--mysql-port", fmt.Sprintf("%d", ctl.Port), "init", "--init_db_sql_file", ctl.InitFile, ) @@ -89,8 +89,8 @@ func (ctl *Mysqlctl) Start() error { cmd := exec.CommandContext(ctx, ctl.Binary, "--alsologtostderr", - "--tablet_uid", fmt.Sprintf("%d", ctl.UID), - "--mysql_port", fmt.Sprintf("%d", ctl.Port), + "--tablet-uid", fmt.Sprintf("%d", ctl.UID), + "--mysql-port", fmt.Sprintf("%d", ctl.Port), "start", ) @@ -112,8 +112,8 @@ func (ctl *Mysqlctl) TearDown() error { cmd := exec.CommandContext(ctx, ctl.Binary, "--alsologtostderr", - "--tablet_uid", fmt.Sprintf("%d", ctl.UID), - "--mysql_port", fmt.Sprintf("%d", ctl.Port), + "--tablet-uid", fmt.Sprintf("%d", ctl.UID), + "--mysql-port", fmt.Sprintf("%d", ctl.Port), "shutdown", ) diff --git a/go/vt/vttest/vtprocess.go b/go/vt/vttest/vtprocess.go index 1719fafd8a7..ada025533bf 100644 --- a/go/vt/vttest/vtprocess.go +++ b/go/vt/vttest/vtprocess.go @@ -136,12 +136,12 @@ func (vtp *VtProcess) WaitStart() (err error) { ) if vtp.PortGrpc != 0 { - vtp.proc.Args = append(vtp.proc.Args, "--grpc_port") + vtp.proc.Args = append(vtp.proc.Args, "--grpc-port") vtp.proc.Args = append(vtp.proc.Args, fmt.Sprintf("%d", vtp.PortGrpc)) } if vtp.BindAddressGprc != "" { - vtp.proc.Args = append(vtp.proc.Args, "--grpc_bind_address") + vtp.proc.Args = append(vtp.proc.Args, "--grpc-bind-address") vtp.proc.Args = append(vtp.proc.Args, vtp.BindAddressGprc) } @@ -231,14 +231,15 @@ func VtcomboProcess(environment Environment, args *Config, mysql MySQLManager) ( } protoTopo, _ := prototext.Marshal(args.Topology) vt.ExtraArgs = append(vt.ExtraArgs, []string{ + //TODO: Remove underscore(_) flags in v25, replace them with dashed(-) notation "--db_charset", charset, "--db_app_user", user, "--db_app_password", pass, "--db_dba_user", user, "--db_dba_password", pass, "--proto_topo", string(protoTopo), - "--mycnf_server_id", "1", - "--mycnf_socket_file", socket, + "--mycnf-server-id", "1", + "--mycnf-socket-file", socket, "--normalize_queries", "--dbddl_plugin", "vttest", "--foreign_key_mode", args.ForeignKeyMode, @@ -253,9 +254,9 @@ func VtcomboProcess(environment Environment, args *Config, mysql MySQLManager) ( // that the default value is 1 minute, but we are keeping it low to make vttestserver perform faster. // Less value might result in high pressure on topo but for testing purpose that should not be a concern. if args.VtgateTabletRefreshInterval <= 0 { - vt.ExtraArgs = append(vt.ExtraArgs, fmt.Sprintf("--tablet_refresh_interval=%v", 10*time.Second)) + vt.ExtraArgs = append(vt.ExtraArgs, fmt.Sprintf("--tablet-refresh-interval=%v", 10*time.Second)) } else { - vt.ExtraArgs = append(vt.ExtraArgs, fmt.Sprintf("--tablet_refresh_interval=%v", args.VtgateTabletRefreshInterval)) + vt.ExtraArgs = append(vt.ExtraArgs, fmt.Sprintf("--tablet-refresh-interval=%v", args.VtgateTabletRefreshInterval)) } vt.ExtraArgs = append(vt.ExtraArgs, QueryServerArgs...) @@ -274,26 +275,26 @@ func VtcomboProcess(environment Environment, args *Config, mysql MySQLManager) ( vt.ExtraArgs = append(vt.ExtraArgs, "--queryserver-config-transaction-timeout", fmt.Sprintf("%v", args.TransactionTimeout)) } if args.TabletHostName != "" { - vt.ExtraArgs = append(vt.ExtraArgs, []string{"--tablet_hostname", args.TabletHostName}...) + vt.ExtraArgs = append(vt.ExtraArgs, []string{"--tablet-hostname", args.TabletHostName}...) } if servenv.GRPCAuth() == "mtls" { - vt.ExtraArgs = append(vt.ExtraArgs, []string{"--grpc_auth_mode", servenv.GRPCAuth(), "--grpc_key", servenv.GRPCKey(), "--grpc_cert", servenv.GRPCCert(), "--grpc_ca", servenv.GRPCCertificateAuthority(), "--grpc_auth_mtls_allowed_substrings", servenv.ClientCertSubstrings()}...) + vt.ExtraArgs = append(vt.ExtraArgs, []string{"--grpc-auth-mode", servenv.GRPCAuth(), "--grpc-key", servenv.GRPCKey(), "--grpc-cert", servenv.GRPCCert(), "--grpc-ca", servenv.GRPCCertificateAuthority(), "--grpc-auth-mtls-allowed-substrings", servenv.ClientCertSubstrings()}...) } if args.VSchemaDDLAuthorizedUsers != "" { vt.ExtraArgs = append(vt.ExtraArgs, []string{"--vschema_ddl_authorized_users", args.VSchemaDDLAuthorizedUsers}...) } - vt.ExtraArgs = append(vt.ExtraArgs, "--mysql_server_version", servenv.MySQLServerVersion()) + vt.ExtraArgs = append(vt.ExtraArgs, "--mysql-server-version", servenv.MySQLServerVersion()) if socket != "" { vt.ExtraArgs = append(vt.ExtraArgs, []string{ - "--db_socket", socket, + "--db-socket", socket, }...) } else { hostname, p := mysql.Address() port := fmt.Sprintf("%d", p) vt.ExtraArgs = append(vt.ExtraArgs, []string{ - "--db_host", hostname, - "--db_port", port, + "--db-host", hostname, + "--db-port", port, }...) } @@ -304,17 +305,17 @@ func VtcomboProcess(environment Environment, args *Config, mysql MySQLManager) ( } vt.ExtraArgs = append(vt.ExtraArgs, []string{ - "--mysql_auth_server_impl", "none", - "--mysql_server_port", fmt.Sprintf("%d", vtcomboMysqlPort), - "--mysql_server_bind_address", vtcomboMysqlBindAddress, + "--mysql-auth-server-impl", "none", + "--mysql-server-port", fmt.Sprintf("%d", vtcomboMysqlPort), + "--mysql-server-bind-address", vtcomboMysqlBindAddress, }...) if args.ExternalTopoImplementation != "" { vt.ExtraArgs = append(vt.ExtraArgs, []string{ - "--external_topo_server", - "--topo_implementation", args.ExternalTopoImplementation, - "--topo_global_server_address", args.ExternalTopoGlobalServerAddress, - "--topo_global_root", args.ExternalTopoGlobalRoot, + "--external-topo-server", + "--topo-implementation", args.ExternalTopoImplementation, + "--topo-global-server-address", args.ExternalTopoGlobalServerAddress, + "--topo-global-root", args.ExternalTopoGlobalRoot, }...) } diff --git a/go/vt/wrangler/testlib/external_reparent_test.go b/go/vt/wrangler/testlib/external_reparent_test.go index 556debae64a..402b6725b4b 100644 --- a/go/vt/wrangler/testlib/external_reparent_test.go +++ b/go/vt/wrangler/testlib/external_reparent_test.go @@ -503,8 +503,8 @@ func TestRPCTabletExternallyReparentedDemotesPrimaryToConfiguredTabletType(t *te }() discovery.SetTabletPickerRetryDelay(5 * time.Millisecond) - flag.Set("disable_active_reparents", "true") - defer flag.Set("disable_active_reparents", "false") + flag.Set("disable-active-reparents", "true") + defer flag.Set("disable-active-reparents", "false") ctx, cancel := context.WithTimeout(context.Background(), time.Second*30) defer cancel() diff --git a/go/vt/wrangler/testlib/vtctl_pipe.go b/go/vt/wrangler/testlib/vtctl_pipe.go index 594290e4023..2b4dd4ec946 100644 --- a/go/vt/wrangler/testlib/vtctl_pipe.go +++ b/go/vt/wrangler/testlib/vtctl_pipe.go @@ -61,10 +61,10 @@ func NewVtctlPipe(ctx context.Context, t *testing.T, ts *topo.Server) *VtctlPipe vtctlclient.RegisterFlags(fs) err := fs.Parse([]string{ - "--vtctl_client_protocol", + "--vtctl-client-protocol", "grpc", }) - require.NoError(t, err, "failed to set `--vtctl_client_protocol=%s`", "grpc") + require.NoError(t, err, "failed to set `--vtctl-client-protocol=%s`", "grpc") servenv.FireRunHooks() }) diff --git a/java/client/pom.xml b/java/client/pom.xml index 1cb1ecb5862..a6dc6eb29fd 100644 --- a/java/client/pom.xml +++ b/java/client/pom.xml @@ -5,7 +5,7 @@ io.vitess vitess-parent - 22.0.0-SNAPSHOT + 23.0.0-SNAPSHOT vitess-client diff --git a/java/client/src/test/java/io/vitess/client/TestEnv.java b/java/client/src/test/java/io/vitess/client/TestEnv.java index 9f86f9f14b4..d2e881032b8 100644 --- a/java/client/src/test/java/io/vitess/client/TestEnv.java +++ b/java/client/src/test/java/io/vitess/client/TestEnv.java @@ -81,7 +81,7 @@ public List getSetupCommand(int port) { command.add(vtRoot + "/py-vtdb/vttest/run_local_database.py"); command.add("--port"); command.add(Integer.toString(port)); - command.add("--proto_topo"); + command.add("--proto-topo"); command.add(getTopology().toString()); command.add("--schema_dir"); command.add(schemaDir); diff --git a/java/example/pom.xml b/java/example/pom.xml index 19b5838510b..46135ab030e 100644 --- a/java/example/pom.xml +++ b/java/example/pom.xml @@ -5,7 +5,7 @@ io.vitess vitess-parent - 22.0.0-SNAPSHOT + 23.0.0-SNAPSHOT vitess-example diff --git a/java/grpc-client/pom.xml b/java/grpc-client/pom.xml index 55c406b0e8f..dfdfce4b252 100644 --- a/java/grpc-client/pom.xml +++ b/java/grpc-client/pom.xml @@ -5,7 +5,7 @@ io.vitess vitess-parent - 22.0.0-SNAPSHOT + 23.0.0-SNAPSHOT vitess-grpc-client diff --git a/java/grpc-client/src/test/java/io/client/grpc/GrpcClientStaticAuthTest.java b/java/grpc-client/src/test/java/io/client/grpc/GrpcClientStaticAuthTest.java index d0dfd81fad2..59102025291 100644 --- a/java/grpc-client/src/test/java/io/client/grpc/GrpcClientStaticAuthTest.java +++ b/java/grpc-client/src/test/java/io/client/grpc/GrpcClientStaticAuthTest.java @@ -63,10 +63,10 @@ public static void setUpBeforeClass() throws Exception { vtgateclienttest = new ProcessBuilder(Arrays.asList( vtRoot + "/bin/vtgateclienttest", "--logtostderr", - "--grpc_port", Integer.toString(port), - "--service_map", "grpc-vtgateservice", - "--grpc_auth_mode", "static", - "--grpc_auth_static_password_file", staticAuthFile.getPath() + "--grpc-port", Integer.toString(port), + "--service-map", "grpc-vtgateservice", + "--grpc-auth-mode", "static", + "--grpc-auth-static-password-file", staticAuthFile.getPath() )).inheritIO().start(); Context ctx = Context.getDefault().withDeadlineAfter(Duration.millis(5000L)); diff --git a/java/grpc-client/src/test/java/io/client/grpc/GrpcClientTest.java b/java/grpc-client/src/test/java/io/client/grpc/GrpcClientTest.java index e3e255c0ea1..1ff1bba9448 100644 --- a/java/grpc-client/src/test/java/io/client/grpc/GrpcClientTest.java +++ b/java/grpc-client/src/test/java/io/client/grpc/GrpcClientTest.java @@ -55,9 +55,9 @@ public static void setUpBeforeClass() throws Exception { Arrays.asList( vtRoot + "/bin/vtgateclienttest", "--logtostderr", - "--grpc_port", + "--grpc-port", Integer.toString(port), - "--service_map", + "--service-map", "grpc-vtgateservice")) .inheritIO() .start(); diff --git a/java/grpc-client/src/test/java/io/client/grpc/GrpcClientTlsClientAuthTest.java b/java/grpc-client/src/test/java/io/client/grpc/GrpcClientTlsClientAuthTest.java index 81fc6016f87..bdc9e7e38ae 100644 --- a/java/grpc-client/src/test/java/io/client/grpc/GrpcClientTlsClientAuthTest.java +++ b/java/grpc-client/src/test/java/io/client/grpc/GrpcClientTlsClientAuthTest.java @@ -173,7 +173,7 @@ private static void startVtgate() throws Exception { final String key = certDirectory.getCanonicalPath() + File.separatorChar + "server-key.pem"; final String vtgateCommand = String.format( - "%s --grpc_cert %s --grpc_key %s --grpc_ca %s --logtostderr --grpc_port %s --service_map grpc-vtgateservice", + "%s --grpc-cert %s --grpc-key %s --grpc-ca %s --logtostderr --grpc-port %s --service-map grpc-vtgateservice", vtRoot + "/bin/vtgateclienttest", cert, key, caCert, Integer.toString(port)); System.out.println(vtgateCommand); vtgateclienttest = new ProcessBuilder(vtgateCommand.split(" ")).inheritIO().start(); diff --git a/java/grpc-client/src/test/java/io/client/grpc/GrpcClientTlsTest.java b/java/grpc-client/src/test/java/io/client/grpc/GrpcClientTlsTest.java index e005bbd528f..1d96c73be1c 100644 --- a/java/grpc-client/src/test/java/io/client/grpc/GrpcClientTlsTest.java +++ b/java/grpc-client/src/test/java/io/client/grpc/GrpcClientTlsTest.java @@ -153,7 +153,7 @@ private static void startVtgate() throws Exception { final String key = certDirectory.getCanonicalPath() + File.separatorChar + "server-key.pem"; final String vtgate = String.format( - "%s --grpc_cert %s --grpc_key %s --logtostderr --grpc_port %s --service_map grpc-vtgateservice", + "%s --grpc-cert %s --grpc-key %s --logtostderr --grpc-port %s --service-map grpc-vtgateservice", vtRoot + "/bin/vtgateclienttest", cert, key, diff --git a/java/grpc-client/src/test/java/io/client/grpc/GrpcClientWithRetriesTest.java b/java/grpc-client/src/test/java/io/client/grpc/GrpcClientWithRetriesTest.java index 6b802cf9be7..29420ff37f3 100644 --- a/java/grpc-client/src/test/java/io/client/grpc/GrpcClientWithRetriesTest.java +++ b/java/grpc-client/src/test/java/io/client/grpc/GrpcClientWithRetriesTest.java @@ -50,9 +50,9 @@ public static void setUpBeforeClass() throws Exception { Arrays.asList( vtRoot + "/bin/vtgateclienttest", "--logtostderr", - "--grpc_port", + "--grpc-port", Integer.toString(port), - "--service_map", + "--service-map", "grpc-vtgateservice")) .inheritIO() .start(); diff --git a/java/jdbc/pom.xml b/java/jdbc/pom.xml index a52048576a1..4940e76e356 100644 --- a/java/jdbc/pom.xml +++ b/java/jdbc/pom.xml @@ -5,7 +5,7 @@ io.vitess vitess-parent - 22.0.0-SNAPSHOT + 23.0.0-SNAPSHOT vitess-jdbc diff --git a/java/jdbc/src/main/java/io/vitess/jdbc/VitessConnection.java b/java/jdbc/src/main/java/io/vitess/jdbc/VitessConnection.java index f4bc43ed65e..6f98fbb69db 100644 --- a/java/jdbc/src/main/java/io/vitess/jdbc/VitessConnection.java +++ b/java/jdbc/src/main/java/io/vitess/jdbc/VitessConnection.java @@ -756,13 +756,13 @@ private String initializeDBProperties() throws SQLException { try (VitessStatement vitessStatement = new VitessStatement( this); ResultSet resultSet = vitessStatement.executeQuery( - "SHOW VARIABLES WHERE VARIABLE_NAME IN (\'tx_isolation\',\'INNODB_VERSION\', " + "SHOW VARIABLES WHERE VARIABLE_NAME IN (\'transaction_isolation\',\'INNODB_VERSION\', " + "\'lower_case_table_names\')")) { while (resultSet.next()) { dbVariables.put(resultSet.getString(1), resultSet.getString(2)); } versionValue = dbVariables.get("innodb_version"); - String transactionIsolation = dbVariables.get("tx_isolation"); + String transactionIsolation = dbVariables.get("transaction_isolation"); String lowerCaseTables = dbVariables.get("lower_case_table_names"); String productVersion = ""; String majorVersion = ""; diff --git a/java/pom.xml b/java/pom.xml index 13e1baaff28..0847ee9f555 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -11,7 +11,7 @@ io.vitess vitess-parent - 22.0.0-SNAPSHOT + 23.0.0-SNAPSHOT pom Vitess Java Client libraries [Parent] diff --git a/misc/git/hooks/golangci-lint b/misc/git/hooks/golangci-lint index 10fc03f0505..83cca069a37 100755 --- a/misc/git/hooks/golangci-lint +++ b/misc/git/hooks/golangci-lint @@ -48,11 +48,11 @@ if ! command -v golangci-lint >/dev/null 2>&1; then go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@$REQUIRED_VERSION else VERSION_OUTPUT=$(golangci-lint --version) - INSTALLED_VERSION=$(echo "$VERSION_OUTPUT" | sed -n 's/^golangci-lint has version v\([0-9.]*\).*/\1/p') + INSTALLED_VERSION=$(echo "$VERSION_OUTPUT" | sed -E -n 's/^golangci-lint has version v?([0-9.]+) .*/\1/p') if ! version_greater_or_equal "$INSTALLED_VERSION" "${REQUIRED_VERSION#v}"; then echo "golangci-lint version $INSTALLED_VERSION found, but $REQUIRED_VERSION or newer is required." echo "Installing version $REQUIRED_VERSION..." - go install github.com/golangci/golangci-lint/cmd/golangci-lint@$REQUIRED_VERSION + go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@$REQUIRED_VERSION fi fi diff --git a/proto/binlogdata.proto b/proto/binlogdata.proto index 3d55de7ea14..8fa9a6f4921 100644 --- a/proto/binlogdata.proto +++ b/proto/binlogdata.proto @@ -497,6 +497,9 @@ message MinimalSchema { message VStreamOptions { repeated string internal_tables = 1; map config_overrides = 2; + // Copy only these tables, skip the rest in the filter. + // If not provided, the default behaviour is to copy all tables. + repeated string tables_to_copy = 3; } // VStreamRequest is the payload for VStreamer diff --git a/proto/tabletmanagerdata.proto b/proto/tabletmanagerdata.proto index 9b300a2a939..769b16186c0 100644 --- a/proto/tabletmanagerdata.proto +++ b/proto/tabletmanagerdata.proto @@ -787,6 +787,8 @@ message UpdateVReplicationWorkflowRequest { repeated string shards = 7; map config_overrides = 8; optional string message = 9; + // Specify filter rules which need to be appended in the existing binlogsource filter rules. + repeated binlogdata.Rule filter_rules = 10; } message UpdateVReplicationWorkflowResponse { @@ -957,3 +959,38 @@ message ChangeTagsRequest { message ChangeTagsResponse { map tags = 1; } + +message UpdateSequenceTablesRequest { + message SequenceMetadata { + // The name of the sequence table. + string backing_table_name = 1; + // The dbName in use by the keyspace where the backing table lives. + string backing_table_db_name = 2; + // The maximum used sequence value. + int64 max_value = 3; + } + repeated SequenceMetadata sequences = 1; +} + +message UpdateSequenceTablesResponse { +} + +message GetMaxValueForSequencesRequest { + message SequenceMetadata { + // The name of the sequence table. This will be used for mapping max value + // with table in the response. + string backing_table_name = 1; + // Escaped column name specified for sequence in table. + string using_col_escaped = 2; + // Escaped name of the table using the sequence. + string using_table_name_escaped = 3; + // Escaped db name in use by the keyspace where the using table lives. + string using_table_db_name_escaped = 4; + } + repeated SequenceMetadata sequences = 1; +} + +message GetMaxValueForSequencesResponse { + // Max used sequence value mapped with the backing sequence table. + map max_values_by_sequence_table = 1; +} \ No newline at end of file diff --git a/proto/tabletmanagerservice.proto b/proto/tabletmanagerservice.proto index 3dac1aa1ee8..4e039449ccc 100644 --- a/proto/tabletmanagerservice.proto +++ b/proto/tabletmanagerservice.proto @@ -148,6 +148,8 @@ service TabletManager { rpc ValidateVReplicationPermissions(tabletmanagerdata.ValidateVReplicationPermissionsRequest) returns(tabletmanagerdata.ValidateVReplicationPermissionsResponse) {}; rpc VReplicationExec(tabletmanagerdata.VReplicationExecRequest) returns(tabletmanagerdata.VReplicationExecResponse) {}; rpc VReplicationWaitForPos(tabletmanagerdata.VReplicationWaitForPosRequest) returns(tabletmanagerdata.VReplicationWaitForPosResponse) {}; + rpc UpdateSequenceTables(tabletmanagerdata.UpdateSequenceTablesRequest) returns(tabletmanagerdata.UpdateSequenceTablesResponse) {}; + rpc GetMaxValueForSequences(tabletmanagerdata.GetMaxValueForSequencesRequest) returns(tabletmanagerdata.GetMaxValueForSequencesResponse) {}; // VDiff API rpc VDiff(tabletmanagerdata.VDiffRequest) returns(tabletmanagerdata.VDiffResponse) {}; diff --git a/proto/vtctldata.proto b/proto/vtctldata.proto index eaeac441fbc..36a93ae530b 100644 --- a/proto/vtctldata.proto +++ b/proto/vtctldata.proto @@ -55,6 +55,9 @@ enum MaterializationIntent { // CREATELOOKUPINDEX is when we are creating a CreateLookupIndex flow CREATELOOKUPINDEX = 2; + + // REFERENCE is when we are creating a materialization for reference tables + REFERENCE = 3; } // TableMaterializeSttings contains the settings for one table. @@ -228,6 +231,8 @@ message WorkflowOptions { // Where to create any related schema and vschema objects such as // sequence tables. string global_keyspace = 5; + // Lookup Vindexes that are being backfilled by the workflow. + repeated string lookup_vindexes = 6; } // TODO: comment the hell out of this. @@ -1318,6 +1323,16 @@ message MaterializeCreateRequest { message MaterializeCreateResponse { } +message WorkflowAddTablesRequest { + string workflow = 1; + string keyspace = 2; + repeated TableMaterializeSettings table_settings = 3; + MaterializationIntent materialization_intent = 4; +} + +message WorkflowAddTablesResponse { +} + message MigrateCreateRequest { // The necessary info gets passed on to each primary tablet involved // in the workflow via the CreateVReplicationWorkflow tabletmanager RPC. diff --git a/proto/vtctlservice.proto b/proto/vtctlservice.proto index 1f07de4c523..b01c1c1dbc8 100644 --- a/proto/vtctlservice.proto +++ b/proto/vtctlservice.proto @@ -204,6 +204,9 @@ service Vtctld { // from a source keyspace to a target keyspace using a provided expressions. rpc MaterializeCreate(vtctldata.MaterializeCreateRequest) returns (vtctldata.MaterializeCreateResponse) {}; + // WorkflowAddTables adds tables to the existing materialize/movetables workflow. + rpc WorkflowAddTables(vtctldata.WorkflowAddTablesRequest) returns (vtctldata.WorkflowAddTablesResponse) {}; + // MigrateCreate creates a workflow which migrates one or more tables from an // external cluster into Vitess. rpc MigrateCreate(vtctldata.MigrateCreateRequest) returns (vtctldata.WorkflowStatusResponse) {}; diff --git a/proto/vtgate.proto b/proto/vtgate.proto index f94724f2c96..f798a1ca6ca 100644 --- a/proto/vtgate.proto +++ b/proto/vtgate.proto @@ -119,7 +119,7 @@ message Session { map user_defined_variables = 13; // system_variables keeps track of all session variables set for this connection - // TODO: systay should we keep this so we can apply it ordered? + // TODO: systay should we keep this so we can apply it ordered? map system_variables = 14; // row_count keeps track of the last seen rows affected for this session @@ -177,6 +177,34 @@ message ReadAfterWrite { bool session_track_gtids = 3; } +// ExecuteMultiRequest is the payload to ExecuteMulti. +message ExecuteMultiRequest { + // caller_id identifies the caller. This is the effective caller ID, + // set by the application to further identify the caller. + vtrpc.CallerID caller_id = 1; + + // sql contains the set of queries to execute. + string sql = 2; + + // session carries the session state. + Session session = 3; +} + +// ExecuteMultiResponse is the returned value from ExecuteMulti. +message ExecuteMultiResponse { + // error contains an application level error if necessary. Note the + // session may have changed, even when an error is returned (for + // instance if a database integrity error happened). + vtrpc.RPCError error = 1; + + // session is the updated session information. + Session session = 2; + + // results contain the query results. There can be some results even if the + // error is set. + repeated query.QueryResult results = 3; +} + // ExecuteRequest is the payload to Execute. message ExecuteRequest { // caller_id identifies the caller. This is the effective caller ID, @@ -282,6 +310,34 @@ message StreamExecuteResponse { Session session = 2; } +// StreamExecuteMultiRequest is the payload to StreamExecuteMulti. +message StreamExecuteMultiRequest { + // caller_id identifies the caller. This is the effective caller ID, + // set by the application to further identify the caller. + vtrpc.CallerID caller_id = 1; + + // sql contains the set of queries to execute. + string sql = 2; + + // session carries the session state. + Session session = 3; +} + +// StreamExecuteMultiResponse is the returned value from StreamExecuteMulti. +message StreamExecuteMultiResponse { + // result contains the result set or an error if one occurred while executing the query. + query.ResultWithError result = 1; + + // more_results is set to true if there are more results to follow after this one has concluded. + bool more_results = 2; + + // new_result signifies a new result has started with this packet. + bool new_result = 3; + + // session is the updated session information. + Session session = 4; +} + // ResolveTransactionRequest is the payload to ResolveTransaction. message ResolveTransactionRequest { // caller_id identifies the caller. This is the effective caller ID, @@ -312,6 +368,11 @@ message VStreamFlags { bool stream_keyspace_heartbeats = 7; // Include reshard journal events in the stream. bool include_reshard_journal_events = 8; + // Copy only these tables, skip the rest in the filter. + // If not provided, the default behaviour is to copy all tables. + repeated string tables_to_copy = 9; + // Exclude the keyspace from the table name that is sent to the vstream client + bool exclude_keyspace_from_table_name = 10; } // VStreamRequest is the payload for VStream. diff --git a/proto/vtgateservice.proto b/proto/vtgateservice.proto index fe6170b3ecc..557ff5e9223 100644 --- a/proto/vtgateservice.proto +++ b/proto/vtgateservice.proto @@ -35,6 +35,9 @@ service Vitess { // API group: v3 rpc Execute(vtgate.ExecuteRequest) returns (vtgate.ExecuteResponse) {}; + // ExecuteMulti executes multiple queries on the right shards. + rpc ExecuteMulti(vtgate.ExecuteMultiRequest) returns (vtgate.ExecuteMultiResponse) {}; + // ExecuteBatch tries to route the list of queries on the right shards. // It depends on the query and bind variables to provide enough // information in conjunction with the vindexes to route the query. @@ -48,6 +51,9 @@ service Vitess { // API group: v3 rpc StreamExecute(vtgate.StreamExecuteRequest) returns (stream vtgate.StreamExecuteResponse) {}; + // StreamExecuteMulti executes multiple streaming queries. + rpc StreamExecuteMulti(vtgate.StreamExecuteMultiRequest) returns (stream vtgate.StreamExecuteMultiResponse) {}; + // VStream streams binlog events from the requested sources. rpc VStream(vtgate.VStreamRequest) returns (stream vtgate.VStreamResponse) {}; diff --git a/test.go b/test.go index c8dd310a0b0..f83266e48a2 100755 --- a/test.go +++ b/test.go @@ -58,6 +58,8 @@ import ( "sync" "syscall" "time" + + "vitess.io/vitess/go/vt/utils" ) var usage = `Usage of test.go: @@ -77,7 +79,7 @@ For example: // Flags var ( flavor = flag.String("flavor", "mysql80", "comma-separated bootstrap flavor(s) to run against (when using Docker mode). Available flavors: all,"+flavors) - bootstrapVersion = flag.String("bootstrap-version", "43", "the version identifier to use for the docker images") + bootstrapVersion = flag.String("bootstrap-version", "45", "the version identifier to use for the docker images") runCount = flag.Int("runs", 1, "run each test this many times") retryMax = flag.Int("retry", 3, "max number of retries, to detect flaky tests") logPass = flag.Bool("log-pass", false, "log test output even if it passes") @@ -183,7 +185,7 @@ func (t *Test) run(dir, dataDir string) ([]byte, error) { testCmd = append(testCmd, "-keep-data") } } else { - testCmd = []string{"test/" + t.File, "-v", "--skip-build", "--keep-logs"} + testCmd = []string{"test/" + t.File, "-v", "--skip-build", utils.GetFlagVariantForTests("--keep-logs")} testCmd = append(testCmd, t.Args...) } if *partialKeyspace { diff --git a/test/config.json b/test/config.json index 01f9c9be2a4..fb62247942b 100644 --- a/test/config.json +++ b/test/config.json @@ -197,7 +197,7 @@ "Manual": false, "Shard": "12", "RetryMax": 1, - "Tags": [] + "Tags": ["upgrade_downgrade_query_serving_queries"] }, "mysql_server": { "File": "unused.go", @@ -561,6 +561,15 @@ "RetryMax": 1, "Tags": ["upgrade_downgrade_query_serving_queries"] }, + "vtgate_queries_multi_query": { + "File": "unused.go", + "Args": ["vitess.io/vitess/go/test/endtoend/vtgate/queries/multi_query"], + "Command": [], + "Manual": false, + "Shard": "vtgate_queries", + "RetryMax": 1, + "Tags": ["upgrade_downgrade_query_serving_queries"] + }, "vtgate_queries_timeout": { "File": "unused.go", "Args": ["vitess.io/vitess/go/test/endtoend/vtgate/queries/timeout"], @@ -1247,7 +1256,7 @@ }, "vstream_with_keyspaces_to_watch": { "File": "unused.go", - "Args": ["vitess.io/vitess/go/test/endtoend/vreplication", "-run", "VStreamWithKeyspacesToWatch"], + "Args": ["vitess.io/vitess/go/test/endtoend/vreplication", "-run", "VStreamWithKeyspacesToWatch", "-timeout", "2m"], "Command": [], "Manual": false, "Shard": "vstream", diff --git a/test/templates/dockerfile.tpl b/test/templates/dockerfile.tpl index 6c6a6329e25..52d99605407 100644 --- a/test/templates/dockerfile.tpl +++ b/test/templates/dockerfile.tpl @@ -1,4 +1,4 @@ -ARG bootstrap_version=43 +ARG bootstrap_version=45 ARG image="vitess/bootstrap:${bootstrap_version}-{{.Platform}}" FROM "${image}" diff --git a/tools/rowlog/rowlog.go b/tools/rowlog/rowlog.go index 34d16a1777b..f9da0f50682 100644 --- a/tools/rowlog/rowlog.go +++ b/tools/rowlog/rowlog.go @@ -63,8 +63,8 @@ func usage() { pflag.Usage = func() { logger.Printf("Rowlog Usage:\n") s := "rowlog --ids --table --pk --source --target " - s += "--vtctld --vtgate --cells --topo_implementation " - s += "--topo_global_server_address --topo_global_root \n" + s += "--vtctld --vtgate --cells --topo-implementation " + s += "--topo-global-server-address --topo-global-root \n" logger.Printf(s) } } diff --git a/tools/rowlog/rowlog.md b/tools/rowlog/rowlog.md index 1564dfeac86..800335048a8 100644 --- a/tools/rowlog/rowlog.md +++ b/tools/rowlog/rowlog.md @@ -21,8 +21,8 @@ Here is an example of how to invoke it: ``` go build ./rowlog -ids 1,3,4 -table customer -pk customer_id -source commerce -target customer -vtctld localhost:15999 - -vtgate localhost:15991 -cells zone1 -topo_implementation etcd2 -topo_global_server_address localhost:2379 - -topo_global_root /vitess/global + -vtgate localhost:15991 -cells zone1 -topo-implementation etcd2 -topo-global-server-address localhost:2379 + -topo-global-root /vitess/global ``` The resulting binlog entries are output to two tab-separated files which can be inspected to validate if diff --git a/web/vtadmin/src/proto/vtadmin.d.ts b/web/vtadmin/src/proto/vtadmin.d.ts index 49da5095c26..f965b06f5e8 100644 --- a/web/vtadmin/src/proto/vtadmin.d.ts +++ b/web/vtadmin/src/proto/vtadmin.d.ts @@ -34497,6 +34497,9 @@ export namespace tabletmanagerdata { /** UpdateVReplicationWorkflowRequest message */ message?: (string|null); + + /** UpdateVReplicationWorkflowRequest filter_rules */ + filter_rules?: (binlogdata.IRule[]|null); } /** Represents an UpdateVReplicationWorkflowRequest. */ @@ -34535,6 +34538,9 @@ export namespace tabletmanagerdata { /** UpdateVReplicationWorkflowRequest message. */ public message?: (string|null); + /** UpdateVReplicationWorkflowRequest filter_rules. */ + public filter_rules: binlogdata.IRule[]; + /** * Creates a new UpdateVReplicationWorkflowRequest instance using the specified properties. * @param [properties] Properties to set @@ -36329,6 +36335,618 @@ export namespace tabletmanagerdata { */ public static getTypeUrl(typeUrlPrefix?: string): string; } + + /** Properties of an UpdateSequenceTablesRequest. */ + interface IUpdateSequenceTablesRequest { + + /** UpdateSequenceTablesRequest sequences */ + sequences?: (tabletmanagerdata.UpdateSequenceTablesRequest.ISequenceMetadata[]|null); + } + + /** Represents an UpdateSequenceTablesRequest. */ + class UpdateSequenceTablesRequest implements IUpdateSequenceTablesRequest { + + /** + * Constructs a new UpdateSequenceTablesRequest. + * @param [properties] Properties to set + */ + constructor(properties?: tabletmanagerdata.IUpdateSequenceTablesRequest); + + /** UpdateSequenceTablesRequest sequences. */ + public sequences: tabletmanagerdata.UpdateSequenceTablesRequest.ISequenceMetadata[]; + + /** + * Creates a new UpdateSequenceTablesRequest instance using the specified properties. + * @param [properties] Properties to set + * @returns UpdateSequenceTablesRequest instance + */ + public static create(properties?: tabletmanagerdata.IUpdateSequenceTablesRequest): tabletmanagerdata.UpdateSequenceTablesRequest; + + /** + * Encodes the specified UpdateSequenceTablesRequest message. Does not implicitly {@link tabletmanagerdata.UpdateSequenceTablesRequest.verify|verify} messages. + * @param message UpdateSequenceTablesRequest message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: tabletmanagerdata.IUpdateSequenceTablesRequest, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified UpdateSequenceTablesRequest message, length delimited. Does not implicitly {@link tabletmanagerdata.UpdateSequenceTablesRequest.verify|verify} messages. + * @param message UpdateSequenceTablesRequest message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: tabletmanagerdata.IUpdateSequenceTablesRequest, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an UpdateSequenceTablesRequest message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns UpdateSequenceTablesRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): tabletmanagerdata.UpdateSequenceTablesRequest; + + /** + * Decodes an UpdateSequenceTablesRequest message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns UpdateSequenceTablesRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): tabletmanagerdata.UpdateSequenceTablesRequest; + + /** + * Verifies an UpdateSequenceTablesRequest message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an UpdateSequenceTablesRequest message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns UpdateSequenceTablesRequest + */ + public static fromObject(object: { [k: string]: any }): tabletmanagerdata.UpdateSequenceTablesRequest; + + /** + * Creates a plain object from an UpdateSequenceTablesRequest message. Also converts values to other types if specified. + * @param message UpdateSequenceTablesRequest + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: tabletmanagerdata.UpdateSequenceTablesRequest, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this UpdateSequenceTablesRequest to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + + /** + * Gets the default type url for UpdateSequenceTablesRequest + * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") + * @returns The default type url + */ + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace UpdateSequenceTablesRequest { + + /** Properties of a SequenceMetadata. */ + interface ISequenceMetadata { + + /** SequenceMetadata backing_table_name */ + backing_table_name?: (string|null); + + /** SequenceMetadata backing_table_db_name */ + backing_table_db_name?: (string|null); + + /** SequenceMetadata max_value */ + max_value?: (number|Long|null); + } + + /** Represents a SequenceMetadata. */ + class SequenceMetadata implements ISequenceMetadata { + + /** + * Constructs a new SequenceMetadata. + * @param [properties] Properties to set + */ + constructor(properties?: tabletmanagerdata.UpdateSequenceTablesRequest.ISequenceMetadata); + + /** SequenceMetadata backing_table_name. */ + public backing_table_name: string; + + /** SequenceMetadata backing_table_db_name. */ + public backing_table_db_name: string; + + /** SequenceMetadata max_value. */ + public max_value: (number|Long); + + /** + * Creates a new SequenceMetadata instance using the specified properties. + * @param [properties] Properties to set + * @returns SequenceMetadata instance + */ + public static create(properties?: tabletmanagerdata.UpdateSequenceTablesRequest.ISequenceMetadata): tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata; + + /** + * Encodes the specified SequenceMetadata message. Does not implicitly {@link tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata.verify|verify} messages. + * @param message SequenceMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: tabletmanagerdata.UpdateSequenceTablesRequest.ISequenceMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified SequenceMetadata message, length delimited. Does not implicitly {@link tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata.verify|verify} messages. + * @param message SequenceMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: tabletmanagerdata.UpdateSequenceTablesRequest.ISequenceMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a SequenceMetadata message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns SequenceMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata; + + /** + * Decodes a SequenceMetadata message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns SequenceMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata; + + /** + * Verifies a SequenceMetadata message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a SequenceMetadata message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns SequenceMetadata + */ + public static fromObject(object: { [k: string]: any }): tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata; + + /** + * Creates a plain object from a SequenceMetadata message. Also converts values to other types if specified. + * @param message SequenceMetadata + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this SequenceMetadata to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + + /** + * Gets the default type url for SequenceMetadata + * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") + * @returns The default type url + */ + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + /** Properties of an UpdateSequenceTablesResponse. */ + interface IUpdateSequenceTablesResponse { + } + + /** Represents an UpdateSequenceTablesResponse. */ + class UpdateSequenceTablesResponse implements IUpdateSequenceTablesResponse { + + /** + * Constructs a new UpdateSequenceTablesResponse. + * @param [properties] Properties to set + */ + constructor(properties?: tabletmanagerdata.IUpdateSequenceTablesResponse); + + /** + * Creates a new UpdateSequenceTablesResponse instance using the specified properties. + * @param [properties] Properties to set + * @returns UpdateSequenceTablesResponse instance + */ + public static create(properties?: tabletmanagerdata.IUpdateSequenceTablesResponse): tabletmanagerdata.UpdateSequenceTablesResponse; + + /** + * Encodes the specified UpdateSequenceTablesResponse message. Does not implicitly {@link tabletmanagerdata.UpdateSequenceTablesResponse.verify|verify} messages. + * @param message UpdateSequenceTablesResponse message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: tabletmanagerdata.IUpdateSequenceTablesResponse, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified UpdateSequenceTablesResponse message, length delimited. Does not implicitly {@link tabletmanagerdata.UpdateSequenceTablesResponse.verify|verify} messages. + * @param message UpdateSequenceTablesResponse message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: tabletmanagerdata.IUpdateSequenceTablesResponse, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an UpdateSequenceTablesResponse message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns UpdateSequenceTablesResponse + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): tabletmanagerdata.UpdateSequenceTablesResponse; + + /** + * Decodes an UpdateSequenceTablesResponse message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns UpdateSequenceTablesResponse + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): tabletmanagerdata.UpdateSequenceTablesResponse; + + /** + * Verifies an UpdateSequenceTablesResponse message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an UpdateSequenceTablesResponse message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns UpdateSequenceTablesResponse + */ + public static fromObject(object: { [k: string]: any }): tabletmanagerdata.UpdateSequenceTablesResponse; + + /** + * Creates a plain object from an UpdateSequenceTablesResponse message. Also converts values to other types if specified. + * @param message UpdateSequenceTablesResponse + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: tabletmanagerdata.UpdateSequenceTablesResponse, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this UpdateSequenceTablesResponse to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + + /** + * Gets the default type url for UpdateSequenceTablesResponse + * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") + * @returns The default type url + */ + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + /** Properties of a GetMaxValueForSequencesRequest. */ + interface IGetMaxValueForSequencesRequest { + + /** GetMaxValueForSequencesRequest sequences */ + sequences?: (tabletmanagerdata.GetMaxValueForSequencesRequest.ISequenceMetadata[]|null); + } + + /** Represents a GetMaxValueForSequencesRequest. */ + class GetMaxValueForSequencesRequest implements IGetMaxValueForSequencesRequest { + + /** + * Constructs a new GetMaxValueForSequencesRequest. + * @param [properties] Properties to set + */ + constructor(properties?: tabletmanagerdata.IGetMaxValueForSequencesRequest); + + /** GetMaxValueForSequencesRequest sequences. */ + public sequences: tabletmanagerdata.GetMaxValueForSequencesRequest.ISequenceMetadata[]; + + /** + * Creates a new GetMaxValueForSequencesRequest instance using the specified properties. + * @param [properties] Properties to set + * @returns GetMaxValueForSequencesRequest instance + */ + public static create(properties?: tabletmanagerdata.IGetMaxValueForSequencesRequest): tabletmanagerdata.GetMaxValueForSequencesRequest; + + /** + * Encodes the specified GetMaxValueForSequencesRequest message. Does not implicitly {@link tabletmanagerdata.GetMaxValueForSequencesRequest.verify|verify} messages. + * @param message GetMaxValueForSequencesRequest message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: tabletmanagerdata.IGetMaxValueForSequencesRequest, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified GetMaxValueForSequencesRequest message, length delimited. Does not implicitly {@link tabletmanagerdata.GetMaxValueForSequencesRequest.verify|verify} messages. + * @param message GetMaxValueForSequencesRequest message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: tabletmanagerdata.IGetMaxValueForSequencesRequest, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a GetMaxValueForSequencesRequest message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns GetMaxValueForSequencesRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): tabletmanagerdata.GetMaxValueForSequencesRequest; + + /** + * Decodes a GetMaxValueForSequencesRequest message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns GetMaxValueForSequencesRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): tabletmanagerdata.GetMaxValueForSequencesRequest; + + /** + * Verifies a GetMaxValueForSequencesRequest message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a GetMaxValueForSequencesRequest message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns GetMaxValueForSequencesRequest + */ + public static fromObject(object: { [k: string]: any }): tabletmanagerdata.GetMaxValueForSequencesRequest; + + /** + * Creates a plain object from a GetMaxValueForSequencesRequest message. Also converts values to other types if specified. + * @param message GetMaxValueForSequencesRequest + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: tabletmanagerdata.GetMaxValueForSequencesRequest, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this GetMaxValueForSequencesRequest to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + + /** + * Gets the default type url for GetMaxValueForSequencesRequest + * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") + * @returns The default type url + */ + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace GetMaxValueForSequencesRequest { + + /** Properties of a SequenceMetadata. */ + interface ISequenceMetadata { + + /** SequenceMetadata backing_table_name */ + backing_table_name?: (string|null); + + /** SequenceMetadata using_col_escaped */ + using_col_escaped?: (string|null); + + /** SequenceMetadata using_table_name_escaped */ + using_table_name_escaped?: (string|null); + + /** SequenceMetadata using_table_db_name_escaped */ + using_table_db_name_escaped?: (string|null); + } + + /** Represents a SequenceMetadata. */ + class SequenceMetadata implements ISequenceMetadata { + + /** + * Constructs a new SequenceMetadata. + * @param [properties] Properties to set + */ + constructor(properties?: tabletmanagerdata.GetMaxValueForSequencesRequest.ISequenceMetadata); + + /** SequenceMetadata backing_table_name. */ + public backing_table_name: string; + + /** SequenceMetadata using_col_escaped. */ + public using_col_escaped: string; + + /** SequenceMetadata using_table_name_escaped. */ + public using_table_name_escaped: string; + + /** SequenceMetadata using_table_db_name_escaped. */ + public using_table_db_name_escaped: string; + + /** + * Creates a new SequenceMetadata instance using the specified properties. + * @param [properties] Properties to set + * @returns SequenceMetadata instance + */ + public static create(properties?: tabletmanagerdata.GetMaxValueForSequencesRequest.ISequenceMetadata): tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata; + + /** + * Encodes the specified SequenceMetadata message. Does not implicitly {@link tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata.verify|verify} messages. + * @param message SequenceMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: tabletmanagerdata.GetMaxValueForSequencesRequest.ISequenceMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified SequenceMetadata message, length delimited. Does not implicitly {@link tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata.verify|verify} messages. + * @param message SequenceMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: tabletmanagerdata.GetMaxValueForSequencesRequest.ISequenceMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a SequenceMetadata message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns SequenceMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata; + + /** + * Decodes a SequenceMetadata message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns SequenceMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata; + + /** + * Verifies a SequenceMetadata message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a SequenceMetadata message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns SequenceMetadata + */ + public static fromObject(object: { [k: string]: any }): tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata; + + /** + * Creates a plain object from a SequenceMetadata message. Also converts values to other types if specified. + * @param message SequenceMetadata + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this SequenceMetadata to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + + /** + * Gets the default type url for SequenceMetadata + * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") + * @returns The default type url + */ + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + /** Properties of a GetMaxValueForSequencesResponse. */ + interface IGetMaxValueForSequencesResponse { + + /** GetMaxValueForSequencesResponse max_values_by_sequence_table */ + max_values_by_sequence_table?: ({ [k: string]: (number|Long) }|null); + } + + /** Represents a GetMaxValueForSequencesResponse. */ + class GetMaxValueForSequencesResponse implements IGetMaxValueForSequencesResponse { + + /** + * Constructs a new GetMaxValueForSequencesResponse. + * @param [properties] Properties to set + */ + constructor(properties?: tabletmanagerdata.IGetMaxValueForSequencesResponse); + + /** GetMaxValueForSequencesResponse max_values_by_sequence_table. */ + public max_values_by_sequence_table: { [k: string]: (number|Long) }; + + /** + * Creates a new GetMaxValueForSequencesResponse instance using the specified properties. + * @param [properties] Properties to set + * @returns GetMaxValueForSequencesResponse instance + */ + public static create(properties?: tabletmanagerdata.IGetMaxValueForSequencesResponse): tabletmanagerdata.GetMaxValueForSequencesResponse; + + /** + * Encodes the specified GetMaxValueForSequencesResponse message. Does not implicitly {@link tabletmanagerdata.GetMaxValueForSequencesResponse.verify|verify} messages. + * @param message GetMaxValueForSequencesResponse message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: tabletmanagerdata.IGetMaxValueForSequencesResponse, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified GetMaxValueForSequencesResponse message, length delimited. Does not implicitly {@link tabletmanagerdata.GetMaxValueForSequencesResponse.verify|verify} messages. + * @param message GetMaxValueForSequencesResponse message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: tabletmanagerdata.IGetMaxValueForSequencesResponse, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a GetMaxValueForSequencesResponse message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns GetMaxValueForSequencesResponse + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): tabletmanagerdata.GetMaxValueForSequencesResponse; + + /** + * Decodes a GetMaxValueForSequencesResponse message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns GetMaxValueForSequencesResponse + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): tabletmanagerdata.GetMaxValueForSequencesResponse; + + /** + * Verifies a GetMaxValueForSequencesResponse message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a GetMaxValueForSequencesResponse message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns GetMaxValueForSequencesResponse + */ + public static fromObject(object: { [k: string]: any }): tabletmanagerdata.GetMaxValueForSequencesResponse; + + /** + * Creates a plain object from a GetMaxValueForSequencesResponse message. Also converts values to other types if specified. + * @param message GetMaxValueForSequencesResponse + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: tabletmanagerdata.GetMaxValueForSequencesResponse, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this GetMaxValueForSequencesResponse to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + + /** + * Gets the default type url for GetMaxValueForSequencesResponse + * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") + * @returns The default type url + */ + public static getTypeUrl(typeUrlPrefix?: string): string; + } } /** Namespace binlogdata. */ @@ -39013,6 +39631,9 @@ export namespace binlogdata { /** VStreamOptions config_overrides */ config_overrides?: ({ [k: string]: string }|null); + + /** VStreamOptions tables_to_copy */ + tables_to_copy?: (string[]|null); } /** Represents a VStreamOptions. */ @@ -39030,6 +39651,9 @@ export namespace binlogdata { /** VStreamOptions config_overrides. */ public config_overrides: { [k: string]: string }; + /** VStreamOptions tables_to_copy. */ + public tables_to_copy: string[]; + /** * Creates a new VStreamOptions instance using the specified properties. * @param [properties] Properties to set @@ -50968,7 +51592,8 @@ export namespace vtctldata { enum MaterializationIntent { CUSTOM = 0, MOVETABLES = 1, - CREATELOOKUPINDEX = 2 + CREATELOOKUPINDEX = 2, + REFERENCE = 3 } /** Properties of a TableMaterializeSettings. */ @@ -51960,6 +52585,9 @@ export namespace vtctldata { /** WorkflowOptions global_keyspace */ global_keyspace?: (string|null); + + /** WorkflowOptions lookup_vindexes */ + lookup_vindexes?: (string[]|null); } /** Represents a WorkflowOptions. */ @@ -51986,6 +52614,9 @@ export namespace vtctldata { /** WorkflowOptions global_keyspace. */ public global_keyspace: string; + /** WorkflowOptions lookup_vindexes. */ + public lookup_vindexes: string[]; + /** * Creates a new WorkflowOptions instance using the specified properties. * @param [properties] Properties to set @@ -67432,6 +68063,212 @@ export namespace vtctldata { public static getTypeUrl(typeUrlPrefix?: string): string; } + /** Properties of a WorkflowAddTablesRequest. */ + interface IWorkflowAddTablesRequest { + + /** WorkflowAddTablesRequest workflow */ + workflow?: (string|null); + + /** WorkflowAddTablesRequest keyspace */ + keyspace?: (string|null); + + /** WorkflowAddTablesRequest table_settings */ + table_settings?: (vtctldata.ITableMaterializeSettings[]|null); + + /** WorkflowAddTablesRequest materialization_intent */ + materialization_intent?: (vtctldata.MaterializationIntent|null); + } + + /** Represents a WorkflowAddTablesRequest. */ + class WorkflowAddTablesRequest implements IWorkflowAddTablesRequest { + + /** + * Constructs a new WorkflowAddTablesRequest. + * @param [properties] Properties to set + */ + constructor(properties?: vtctldata.IWorkflowAddTablesRequest); + + /** WorkflowAddTablesRequest workflow. */ + public workflow: string; + + /** WorkflowAddTablesRequest keyspace. */ + public keyspace: string; + + /** WorkflowAddTablesRequest table_settings. */ + public table_settings: vtctldata.ITableMaterializeSettings[]; + + /** WorkflowAddTablesRequest materialization_intent. */ + public materialization_intent: vtctldata.MaterializationIntent; + + /** + * Creates a new WorkflowAddTablesRequest instance using the specified properties. + * @param [properties] Properties to set + * @returns WorkflowAddTablesRequest instance + */ + public static create(properties?: vtctldata.IWorkflowAddTablesRequest): vtctldata.WorkflowAddTablesRequest; + + /** + * Encodes the specified WorkflowAddTablesRequest message. Does not implicitly {@link vtctldata.WorkflowAddTablesRequest.verify|verify} messages. + * @param message WorkflowAddTablesRequest message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: vtctldata.IWorkflowAddTablesRequest, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified WorkflowAddTablesRequest message, length delimited. Does not implicitly {@link vtctldata.WorkflowAddTablesRequest.verify|verify} messages. + * @param message WorkflowAddTablesRequest message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: vtctldata.IWorkflowAddTablesRequest, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a WorkflowAddTablesRequest message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns WorkflowAddTablesRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): vtctldata.WorkflowAddTablesRequest; + + /** + * Decodes a WorkflowAddTablesRequest message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns WorkflowAddTablesRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): vtctldata.WorkflowAddTablesRequest; + + /** + * Verifies a WorkflowAddTablesRequest message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a WorkflowAddTablesRequest message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns WorkflowAddTablesRequest + */ + public static fromObject(object: { [k: string]: any }): vtctldata.WorkflowAddTablesRequest; + + /** + * Creates a plain object from a WorkflowAddTablesRequest message. Also converts values to other types if specified. + * @param message WorkflowAddTablesRequest + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: vtctldata.WorkflowAddTablesRequest, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this WorkflowAddTablesRequest to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + + /** + * Gets the default type url for WorkflowAddTablesRequest + * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") + * @returns The default type url + */ + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + /** Properties of a WorkflowAddTablesResponse. */ + interface IWorkflowAddTablesResponse { + } + + /** Represents a WorkflowAddTablesResponse. */ + class WorkflowAddTablesResponse implements IWorkflowAddTablesResponse { + + /** + * Constructs a new WorkflowAddTablesResponse. + * @param [properties] Properties to set + */ + constructor(properties?: vtctldata.IWorkflowAddTablesResponse); + + /** + * Creates a new WorkflowAddTablesResponse instance using the specified properties. + * @param [properties] Properties to set + * @returns WorkflowAddTablesResponse instance + */ + public static create(properties?: vtctldata.IWorkflowAddTablesResponse): vtctldata.WorkflowAddTablesResponse; + + /** + * Encodes the specified WorkflowAddTablesResponse message. Does not implicitly {@link vtctldata.WorkflowAddTablesResponse.verify|verify} messages. + * @param message WorkflowAddTablesResponse message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: vtctldata.IWorkflowAddTablesResponse, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified WorkflowAddTablesResponse message, length delimited. Does not implicitly {@link vtctldata.WorkflowAddTablesResponse.verify|verify} messages. + * @param message WorkflowAddTablesResponse message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: vtctldata.IWorkflowAddTablesResponse, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a WorkflowAddTablesResponse message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns WorkflowAddTablesResponse + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): vtctldata.WorkflowAddTablesResponse; + + /** + * Decodes a WorkflowAddTablesResponse message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns WorkflowAddTablesResponse + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): vtctldata.WorkflowAddTablesResponse; + + /** + * Verifies a WorkflowAddTablesResponse message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a WorkflowAddTablesResponse message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns WorkflowAddTablesResponse + */ + public static fromObject(object: { [k: string]: any }): vtctldata.WorkflowAddTablesResponse; + + /** + * Creates a plain object from a WorkflowAddTablesResponse message. Also converts values to other types if specified. + * @param message WorkflowAddTablesResponse + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: vtctldata.WorkflowAddTablesResponse, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this WorkflowAddTablesResponse to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + + /** + * Gets the default type url for WorkflowAddTablesResponse + * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") + * @returns The default type url + */ + public static getTypeUrl(typeUrlPrefix?: string): string; + } + /** Properties of a MigrateCreateRequest. */ interface IMigrateCreateRequest { diff --git a/web/vtadmin/src/proto/vtadmin.js b/web/vtadmin/src/proto/vtadmin.js index 1c6897eb2f5..4fc1d0f966d 100644 --- a/web/vtadmin/src/proto/vtadmin.js +++ b/web/vtadmin/src/proto/vtadmin.js @@ -79669,6 +79669,7 @@ export const tabletmanagerdata = $root.tabletmanagerdata = (() => { * @property {Array.|null} [shards] UpdateVReplicationWorkflowRequest shards * @property {Object.|null} [config_overrides] UpdateVReplicationWorkflowRequest config_overrides * @property {string|null} [message] UpdateVReplicationWorkflowRequest message + * @property {Array.|null} [filter_rules] UpdateVReplicationWorkflowRequest filter_rules */ /** @@ -79684,6 +79685,7 @@ export const tabletmanagerdata = $root.tabletmanagerdata = (() => { this.tablet_types = []; this.shards = []; this.config_overrides = {}; + this.filter_rules = []; if (properties) for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -79762,6 +79764,14 @@ export const tabletmanagerdata = $root.tabletmanagerdata = (() => { */ UpdateVReplicationWorkflowRequest.prototype.message = null; + /** + * UpdateVReplicationWorkflowRequest filter_rules. + * @member {Array.} filter_rules + * @memberof tabletmanagerdata.UpdateVReplicationWorkflowRequest + * @instance + */ + UpdateVReplicationWorkflowRequest.prototype.filter_rules = $util.emptyArray; + // OneOf field names bound to virtual getters and setters let $oneOfFields; @@ -79838,6 +79848,9 @@ export const tabletmanagerdata = $root.tabletmanagerdata = (() => { writer.uint32(/* id 8, wireType 2 =*/66).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 2 =*/18).string(message.config_overrides[keys[i]]).ldelim(); if (message.message != null && Object.hasOwnProperty.call(message, "message")) writer.uint32(/* id 9, wireType 2 =*/74).string(message.message); + if (message.filter_rules != null && message.filter_rules.length) + for (let i = 0; i < message.filter_rules.length; ++i) + $root.binlogdata.Rule.encode(message.filter_rules[i], writer.uint32(/* id 10, wireType 2 =*/82).fork()).ldelim(); return writer; }; @@ -79938,6 +79951,12 @@ export const tabletmanagerdata = $root.tabletmanagerdata = (() => { message.message = reader.string(); break; } + case 10: { + if (!(message.filter_rules && message.filter_rules.length)) + message.filter_rules = []; + message.filter_rules.push($root.binlogdata.Rule.decode(reader, reader.uint32())); + break; + } default: reader.skipType(tag & 7); break; @@ -80063,6 +80082,15 @@ export const tabletmanagerdata = $root.tabletmanagerdata = (() => { if (!$util.isString(message.message)) return "message: string expected"; } + if (message.filter_rules != null && message.hasOwnProperty("filter_rules")) { + if (!Array.isArray(message.filter_rules)) + return "filter_rules: array expected"; + for (let i = 0; i < message.filter_rules.length; ++i) { + let error = $root.binlogdata.Rule.verify(message.filter_rules[i]); + if (error) + return "filter_rules." + error; + } + } return null; }; @@ -80240,6 +80268,16 @@ export const tabletmanagerdata = $root.tabletmanagerdata = (() => { } if (object.message != null) message.message = String(object.message); + if (object.filter_rules) { + if (!Array.isArray(object.filter_rules)) + throw TypeError(".tabletmanagerdata.UpdateVReplicationWorkflowRequest.filter_rules: array expected"); + message.filter_rules = []; + for (let i = 0; i < object.filter_rules.length; ++i) { + if (typeof object.filter_rules[i] !== "object") + throw TypeError(".tabletmanagerdata.UpdateVReplicationWorkflowRequest.filter_rules: object expected"); + message.filter_rules[i] = $root.binlogdata.Rule.fromObject(object.filter_rules[i]); + } + } return message; }; @@ -80260,6 +80298,7 @@ export const tabletmanagerdata = $root.tabletmanagerdata = (() => { object.cells = []; object.tablet_types = []; object.shards = []; + object.filter_rules = []; } if (options.objects || options.defaults) object.config_overrides = {}; @@ -80308,6 +80347,11 @@ export const tabletmanagerdata = $root.tabletmanagerdata = (() => { if (options.oneofs) object._message = "message"; } + if (message.filter_rules && message.filter_rules.length) { + object.filter_rules = []; + for (let j = 0; j < message.filter_rules.length; ++j) + object.filter_rules[j] = $root.binlogdata.Rule.toObject(message.filter_rules[j], options); + } return object; }; @@ -84975,6 +85019,1414 @@ export const tabletmanagerdata = $root.tabletmanagerdata = (() => { return ChangeTagsResponse; })(); + tabletmanagerdata.UpdateSequenceTablesRequest = (function() { + + /** + * Properties of an UpdateSequenceTablesRequest. + * @memberof tabletmanagerdata + * @interface IUpdateSequenceTablesRequest + * @property {Array.|null} [sequences] UpdateSequenceTablesRequest sequences + */ + + /** + * Constructs a new UpdateSequenceTablesRequest. + * @memberof tabletmanagerdata + * @classdesc Represents an UpdateSequenceTablesRequest. + * @implements IUpdateSequenceTablesRequest + * @constructor + * @param {tabletmanagerdata.IUpdateSequenceTablesRequest=} [properties] Properties to set + */ + function UpdateSequenceTablesRequest(properties) { + this.sequences = []; + if (properties) + for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * UpdateSequenceTablesRequest sequences. + * @member {Array.} sequences + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest + * @instance + */ + UpdateSequenceTablesRequest.prototype.sequences = $util.emptyArray; + + /** + * Creates a new UpdateSequenceTablesRequest instance using the specified properties. + * @function create + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest + * @static + * @param {tabletmanagerdata.IUpdateSequenceTablesRequest=} [properties] Properties to set + * @returns {tabletmanagerdata.UpdateSequenceTablesRequest} UpdateSequenceTablesRequest instance + */ + UpdateSequenceTablesRequest.create = function create(properties) { + return new UpdateSequenceTablesRequest(properties); + }; + + /** + * Encodes the specified UpdateSequenceTablesRequest message. Does not implicitly {@link tabletmanagerdata.UpdateSequenceTablesRequest.verify|verify} messages. + * @function encode + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest + * @static + * @param {tabletmanagerdata.IUpdateSequenceTablesRequest} message UpdateSequenceTablesRequest message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + UpdateSequenceTablesRequest.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.sequences != null && message.sequences.length) + for (let i = 0; i < message.sequences.length; ++i) + $root.tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata.encode(message.sequences[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified UpdateSequenceTablesRequest message, length delimited. Does not implicitly {@link tabletmanagerdata.UpdateSequenceTablesRequest.verify|verify} messages. + * @function encodeDelimited + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest + * @static + * @param {tabletmanagerdata.IUpdateSequenceTablesRequest} message UpdateSequenceTablesRequest message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + UpdateSequenceTablesRequest.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an UpdateSequenceTablesRequest message from the specified reader or buffer. + * @function decode + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {tabletmanagerdata.UpdateSequenceTablesRequest} UpdateSequenceTablesRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + UpdateSequenceTablesRequest.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + let end = length === undefined ? reader.len : reader.pos + length, message = new $root.tabletmanagerdata.UpdateSequenceTablesRequest(); + while (reader.pos < end) { + let tag = reader.uint32(); + switch (tag >>> 3) { + case 1: { + if (!(message.sequences && message.sequences.length)) + message.sequences = []; + message.sequences.push($root.tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata.decode(reader, reader.uint32())); + break; + } + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an UpdateSequenceTablesRequest message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {tabletmanagerdata.UpdateSequenceTablesRequest} UpdateSequenceTablesRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + UpdateSequenceTablesRequest.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an UpdateSequenceTablesRequest message. + * @function verify + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + UpdateSequenceTablesRequest.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.sequences != null && message.hasOwnProperty("sequences")) { + if (!Array.isArray(message.sequences)) + return "sequences: array expected"; + for (let i = 0; i < message.sequences.length; ++i) { + let error = $root.tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata.verify(message.sequences[i]); + if (error) + return "sequences." + error; + } + } + return null; + }; + + /** + * Creates an UpdateSequenceTablesRequest message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest + * @static + * @param {Object.} object Plain object + * @returns {tabletmanagerdata.UpdateSequenceTablesRequest} UpdateSequenceTablesRequest + */ + UpdateSequenceTablesRequest.fromObject = function fromObject(object) { + if (object instanceof $root.tabletmanagerdata.UpdateSequenceTablesRequest) + return object; + let message = new $root.tabletmanagerdata.UpdateSequenceTablesRequest(); + if (object.sequences) { + if (!Array.isArray(object.sequences)) + throw TypeError(".tabletmanagerdata.UpdateSequenceTablesRequest.sequences: array expected"); + message.sequences = []; + for (let i = 0; i < object.sequences.length; ++i) { + if (typeof object.sequences[i] !== "object") + throw TypeError(".tabletmanagerdata.UpdateSequenceTablesRequest.sequences: object expected"); + message.sequences[i] = $root.tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata.fromObject(object.sequences[i]); + } + } + return message; + }; + + /** + * Creates a plain object from an UpdateSequenceTablesRequest message. Also converts values to other types if specified. + * @function toObject + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest + * @static + * @param {tabletmanagerdata.UpdateSequenceTablesRequest} message UpdateSequenceTablesRequest + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + UpdateSequenceTablesRequest.toObject = function toObject(message, options) { + if (!options) + options = {}; + let object = {}; + if (options.arrays || options.defaults) + object.sequences = []; + if (message.sequences && message.sequences.length) { + object.sequences = []; + for (let j = 0; j < message.sequences.length; ++j) + object.sequences[j] = $root.tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata.toObject(message.sequences[j], options); + } + return object; + }; + + /** + * Converts this UpdateSequenceTablesRequest to JSON. + * @function toJSON + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest + * @instance + * @returns {Object.} JSON object + */ + UpdateSequenceTablesRequest.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * Gets the default type url for UpdateSequenceTablesRequest + * @function getTypeUrl + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest + * @static + * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") + * @returns {string} The default type url + */ + UpdateSequenceTablesRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/tabletmanagerdata.UpdateSequenceTablesRequest"; + }; + + UpdateSequenceTablesRequest.SequenceMetadata = (function() { + + /** + * Properties of a SequenceMetadata. + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest + * @interface ISequenceMetadata + * @property {string|null} [backing_table_name] SequenceMetadata backing_table_name + * @property {string|null} [backing_table_db_name] SequenceMetadata backing_table_db_name + * @property {number|Long|null} [max_value] SequenceMetadata max_value + */ + + /** + * Constructs a new SequenceMetadata. + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest + * @classdesc Represents a SequenceMetadata. + * @implements ISequenceMetadata + * @constructor + * @param {tabletmanagerdata.UpdateSequenceTablesRequest.ISequenceMetadata=} [properties] Properties to set + */ + function SequenceMetadata(properties) { + if (properties) + for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * SequenceMetadata backing_table_name. + * @member {string} backing_table_name + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata + * @instance + */ + SequenceMetadata.prototype.backing_table_name = ""; + + /** + * SequenceMetadata backing_table_db_name. + * @member {string} backing_table_db_name + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata + * @instance + */ + SequenceMetadata.prototype.backing_table_db_name = ""; + + /** + * SequenceMetadata max_value. + * @member {number|Long} max_value + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata + * @instance + */ + SequenceMetadata.prototype.max_value = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * Creates a new SequenceMetadata instance using the specified properties. + * @function create + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata + * @static + * @param {tabletmanagerdata.UpdateSequenceTablesRequest.ISequenceMetadata=} [properties] Properties to set + * @returns {tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata} SequenceMetadata instance + */ + SequenceMetadata.create = function create(properties) { + return new SequenceMetadata(properties); + }; + + /** + * Encodes the specified SequenceMetadata message. Does not implicitly {@link tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata.verify|verify} messages. + * @function encode + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata + * @static + * @param {tabletmanagerdata.UpdateSequenceTablesRequest.ISequenceMetadata} message SequenceMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + SequenceMetadata.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.backing_table_name != null && Object.hasOwnProperty.call(message, "backing_table_name")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.backing_table_name); + if (message.backing_table_db_name != null && Object.hasOwnProperty.call(message, "backing_table_db_name")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.backing_table_db_name); + if (message.max_value != null && Object.hasOwnProperty.call(message, "max_value")) + writer.uint32(/* id 3, wireType 0 =*/24).int64(message.max_value); + return writer; + }; + + /** + * Encodes the specified SequenceMetadata message, length delimited. Does not implicitly {@link tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata.verify|verify} messages. + * @function encodeDelimited + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata + * @static + * @param {tabletmanagerdata.UpdateSequenceTablesRequest.ISequenceMetadata} message SequenceMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + SequenceMetadata.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a SequenceMetadata message from the specified reader or buffer. + * @function decode + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata} SequenceMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + SequenceMetadata.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + let end = length === undefined ? reader.len : reader.pos + length, message = new $root.tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata(); + while (reader.pos < end) { + let tag = reader.uint32(); + switch (tag >>> 3) { + case 1: { + message.backing_table_name = reader.string(); + break; + } + case 2: { + message.backing_table_db_name = reader.string(); + break; + } + case 3: { + message.max_value = reader.int64(); + break; + } + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a SequenceMetadata message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata} SequenceMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + SequenceMetadata.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a SequenceMetadata message. + * @function verify + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + SequenceMetadata.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.backing_table_name != null && message.hasOwnProperty("backing_table_name")) + if (!$util.isString(message.backing_table_name)) + return "backing_table_name: string expected"; + if (message.backing_table_db_name != null && message.hasOwnProperty("backing_table_db_name")) + if (!$util.isString(message.backing_table_db_name)) + return "backing_table_db_name: string expected"; + if (message.max_value != null && message.hasOwnProperty("max_value")) + if (!$util.isInteger(message.max_value) && !(message.max_value && $util.isInteger(message.max_value.low) && $util.isInteger(message.max_value.high))) + return "max_value: integer|Long expected"; + return null; + }; + + /** + * Creates a SequenceMetadata message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata + * @static + * @param {Object.} object Plain object + * @returns {tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata} SequenceMetadata + */ + SequenceMetadata.fromObject = function fromObject(object) { + if (object instanceof $root.tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata) + return object; + let message = new $root.tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata(); + if (object.backing_table_name != null) + message.backing_table_name = String(object.backing_table_name); + if (object.backing_table_db_name != null) + message.backing_table_db_name = String(object.backing_table_db_name); + if (object.max_value != null) + if ($util.Long) + (message.max_value = $util.Long.fromValue(object.max_value)).unsigned = false; + else if (typeof object.max_value === "string") + message.max_value = parseInt(object.max_value, 10); + else if (typeof object.max_value === "number") + message.max_value = object.max_value; + else if (typeof object.max_value === "object") + message.max_value = new $util.LongBits(object.max_value.low >>> 0, object.max_value.high >>> 0).toNumber(); + return message; + }; + + /** + * Creates a plain object from a SequenceMetadata message. Also converts values to other types if specified. + * @function toObject + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata + * @static + * @param {tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata} message SequenceMetadata + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + SequenceMetadata.toObject = function toObject(message, options) { + if (!options) + options = {}; + let object = {}; + if (options.defaults) { + object.backing_table_name = ""; + object.backing_table_db_name = ""; + if ($util.Long) { + let long = new $util.Long(0, 0, false); + object.max_value = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.max_value = options.longs === String ? "0" : 0; + } + if (message.backing_table_name != null && message.hasOwnProperty("backing_table_name")) + object.backing_table_name = message.backing_table_name; + if (message.backing_table_db_name != null && message.hasOwnProperty("backing_table_db_name")) + object.backing_table_db_name = message.backing_table_db_name; + if (message.max_value != null && message.hasOwnProperty("max_value")) + if (typeof message.max_value === "number") + object.max_value = options.longs === String ? String(message.max_value) : message.max_value; + else + object.max_value = options.longs === String ? $util.Long.prototype.toString.call(message.max_value) : options.longs === Number ? new $util.LongBits(message.max_value.low >>> 0, message.max_value.high >>> 0).toNumber() : message.max_value; + return object; + }; + + /** + * Converts this SequenceMetadata to JSON. + * @function toJSON + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata + * @instance + * @returns {Object.} JSON object + */ + SequenceMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * Gets the default type url for SequenceMetadata + * @function getTypeUrl + * @memberof tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata + * @static + * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") + * @returns {string} The default type url + */ + SequenceMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/tabletmanagerdata.UpdateSequenceTablesRequest.SequenceMetadata"; + }; + + return SequenceMetadata; + })(); + + return UpdateSequenceTablesRequest; + })(); + + tabletmanagerdata.UpdateSequenceTablesResponse = (function() { + + /** + * Properties of an UpdateSequenceTablesResponse. + * @memberof tabletmanagerdata + * @interface IUpdateSequenceTablesResponse + */ + + /** + * Constructs a new UpdateSequenceTablesResponse. + * @memberof tabletmanagerdata + * @classdesc Represents an UpdateSequenceTablesResponse. + * @implements IUpdateSequenceTablesResponse + * @constructor + * @param {tabletmanagerdata.IUpdateSequenceTablesResponse=} [properties] Properties to set + */ + function UpdateSequenceTablesResponse(properties) { + if (properties) + for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Creates a new UpdateSequenceTablesResponse instance using the specified properties. + * @function create + * @memberof tabletmanagerdata.UpdateSequenceTablesResponse + * @static + * @param {tabletmanagerdata.IUpdateSequenceTablesResponse=} [properties] Properties to set + * @returns {tabletmanagerdata.UpdateSequenceTablesResponse} UpdateSequenceTablesResponse instance + */ + UpdateSequenceTablesResponse.create = function create(properties) { + return new UpdateSequenceTablesResponse(properties); + }; + + /** + * Encodes the specified UpdateSequenceTablesResponse message. Does not implicitly {@link tabletmanagerdata.UpdateSequenceTablesResponse.verify|verify} messages. + * @function encode + * @memberof tabletmanagerdata.UpdateSequenceTablesResponse + * @static + * @param {tabletmanagerdata.IUpdateSequenceTablesResponse} message UpdateSequenceTablesResponse message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + UpdateSequenceTablesResponse.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + return writer; + }; + + /** + * Encodes the specified UpdateSequenceTablesResponse message, length delimited. Does not implicitly {@link tabletmanagerdata.UpdateSequenceTablesResponse.verify|verify} messages. + * @function encodeDelimited + * @memberof tabletmanagerdata.UpdateSequenceTablesResponse + * @static + * @param {tabletmanagerdata.IUpdateSequenceTablesResponse} message UpdateSequenceTablesResponse message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + UpdateSequenceTablesResponse.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an UpdateSequenceTablesResponse message from the specified reader or buffer. + * @function decode + * @memberof tabletmanagerdata.UpdateSequenceTablesResponse + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {tabletmanagerdata.UpdateSequenceTablesResponse} UpdateSequenceTablesResponse + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + UpdateSequenceTablesResponse.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + let end = length === undefined ? reader.len : reader.pos + length, message = new $root.tabletmanagerdata.UpdateSequenceTablesResponse(); + while (reader.pos < end) { + let tag = reader.uint32(); + switch (tag >>> 3) { + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an UpdateSequenceTablesResponse message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof tabletmanagerdata.UpdateSequenceTablesResponse + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {tabletmanagerdata.UpdateSequenceTablesResponse} UpdateSequenceTablesResponse + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + UpdateSequenceTablesResponse.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an UpdateSequenceTablesResponse message. + * @function verify + * @memberof tabletmanagerdata.UpdateSequenceTablesResponse + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + UpdateSequenceTablesResponse.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + return null; + }; + + /** + * Creates an UpdateSequenceTablesResponse message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof tabletmanagerdata.UpdateSequenceTablesResponse + * @static + * @param {Object.} object Plain object + * @returns {tabletmanagerdata.UpdateSequenceTablesResponse} UpdateSequenceTablesResponse + */ + UpdateSequenceTablesResponse.fromObject = function fromObject(object) { + if (object instanceof $root.tabletmanagerdata.UpdateSequenceTablesResponse) + return object; + return new $root.tabletmanagerdata.UpdateSequenceTablesResponse(); + }; + + /** + * Creates a plain object from an UpdateSequenceTablesResponse message. Also converts values to other types if specified. + * @function toObject + * @memberof tabletmanagerdata.UpdateSequenceTablesResponse + * @static + * @param {tabletmanagerdata.UpdateSequenceTablesResponse} message UpdateSequenceTablesResponse + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + UpdateSequenceTablesResponse.toObject = function toObject() { + return {}; + }; + + /** + * Converts this UpdateSequenceTablesResponse to JSON. + * @function toJSON + * @memberof tabletmanagerdata.UpdateSequenceTablesResponse + * @instance + * @returns {Object.} JSON object + */ + UpdateSequenceTablesResponse.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * Gets the default type url for UpdateSequenceTablesResponse + * @function getTypeUrl + * @memberof tabletmanagerdata.UpdateSequenceTablesResponse + * @static + * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") + * @returns {string} The default type url + */ + UpdateSequenceTablesResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/tabletmanagerdata.UpdateSequenceTablesResponse"; + }; + + return UpdateSequenceTablesResponse; + })(); + + tabletmanagerdata.GetMaxValueForSequencesRequest = (function() { + + /** + * Properties of a GetMaxValueForSequencesRequest. + * @memberof tabletmanagerdata + * @interface IGetMaxValueForSequencesRequest + * @property {Array.|null} [sequences] GetMaxValueForSequencesRequest sequences + */ + + /** + * Constructs a new GetMaxValueForSequencesRequest. + * @memberof tabletmanagerdata + * @classdesc Represents a GetMaxValueForSequencesRequest. + * @implements IGetMaxValueForSequencesRequest + * @constructor + * @param {tabletmanagerdata.IGetMaxValueForSequencesRequest=} [properties] Properties to set + */ + function GetMaxValueForSequencesRequest(properties) { + this.sequences = []; + if (properties) + for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * GetMaxValueForSequencesRequest sequences. + * @member {Array.} sequences + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest + * @instance + */ + GetMaxValueForSequencesRequest.prototype.sequences = $util.emptyArray; + + /** + * Creates a new GetMaxValueForSequencesRequest instance using the specified properties. + * @function create + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest + * @static + * @param {tabletmanagerdata.IGetMaxValueForSequencesRequest=} [properties] Properties to set + * @returns {tabletmanagerdata.GetMaxValueForSequencesRequest} GetMaxValueForSequencesRequest instance + */ + GetMaxValueForSequencesRequest.create = function create(properties) { + return new GetMaxValueForSequencesRequest(properties); + }; + + /** + * Encodes the specified GetMaxValueForSequencesRequest message. Does not implicitly {@link tabletmanagerdata.GetMaxValueForSequencesRequest.verify|verify} messages. + * @function encode + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest + * @static + * @param {tabletmanagerdata.IGetMaxValueForSequencesRequest} message GetMaxValueForSequencesRequest message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + GetMaxValueForSequencesRequest.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.sequences != null && message.sequences.length) + for (let i = 0; i < message.sequences.length; ++i) + $root.tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata.encode(message.sequences[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified GetMaxValueForSequencesRequest message, length delimited. Does not implicitly {@link tabletmanagerdata.GetMaxValueForSequencesRequest.verify|verify} messages. + * @function encodeDelimited + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest + * @static + * @param {tabletmanagerdata.IGetMaxValueForSequencesRequest} message GetMaxValueForSequencesRequest message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + GetMaxValueForSequencesRequest.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a GetMaxValueForSequencesRequest message from the specified reader or buffer. + * @function decode + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {tabletmanagerdata.GetMaxValueForSequencesRequest} GetMaxValueForSequencesRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + GetMaxValueForSequencesRequest.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + let end = length === undefined ? reader.len : reader.pos + length, message = new $root.tabletmanagerdata.GetMaxValueForSequencesRequest(); + while (reader.pos < end) { + let tag = reader.uint32(); + switch (tag >>> 3) { + case 1: { + if (!(message.sequences && message.sequences.length)) + message.sequences = []; + message.sequences.push($root.tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata.decode(reader, reader.uint32())); + break; + } + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a GetMaxValueForSequencesRequest message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {tabletmanagerdata.GetMaxValueForSequencesRequest} GetMaxValueForSequencesRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + GetMaxValueForSequencesRequest.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a GetMaxValueForSequencesRequest message. + * @function verify + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + GetMaxValueForSequencesRequest.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.sequences != null && message.hasOwnProperty("sequences")) { + if (!Array.isArray(message.sequences)) + return "sequences: array expected"; + for (let i = 0; i < message.sequences.length; ++i) { + let error = $root.tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata.verify(message.sequences[i]); + if (error) + return "sequences." + error; + } + } + return null; + }; + + /** + * Creates a GetMaxValueForSequencesRequest message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest + * @static + * @param {Object.} object Plain object + * @returns {tabletmanagerdata.GetMaxValueForSequencesRequest} GetMaxValueForSequencesRequest + */ + GetMaxValueForSequencesRequest.fromObject = function fromObject(object) { + if (object instanceof $root.tabletmanagerdata.GetMaxValueForSequencesRequest) + return object; + let message = new $root.tabletmanagerdata.GetMaxValueForSequencesRequest(); + if (object.sequences) { + if (!Array.isArray(object.sequences)) + throw TypeError(".tabletmanagerdata.GetMaxValueForSequencesRequest.sequences: array expected"); + message.sequences = []; + for (let i = 0; i < object.sequences.length; ++i) { + if (typeof object.sequences[i] !== "object") + throw TypeError(".tabletmanagerdata.GetMaxValueForSequencesRequest.sequences: object expected"); + message.sequences[i] = $root.tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata.fromObject(object.sequences[i]); + } + } + return message; + }; + + /** + * Creates a plain object from a GetMaxValueForSequencesRequest message. Also converts values to other types if specified. + * @function toObject + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest + * @static + * @param {tabletmanagerdata.GetMaxValueForSequencesRequest} message GetMaxValueForSequencesRequest + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + GetMaxValueForSequencesRequest.toObject = function toObject(message, options) { + if (!options) + options = {}; + let object = {}; + if (options.arrays || options.defaults) + object.sequences = []; + if (message.sequences && message.sequences.length) { + object.sequences = []; + for (let j = 0; j < message.sequences.length; ++j) + object.sequences[j] = $root.tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata.toObject(message.sequences[j], options); + } + return object; + }; + + /** + * Converts this GetMaxValueForSequencesRequest to JSON. + * @function toJSON + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest + * @instance + * @returns {Object.} JSON object + */ + GetMaxValueForSequencesRequest.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * Gets the default type url for GetMaxValueForSequencesRequest + * @function getTypeUrl + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest + * @static + * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") + * @returns {string} The default type url + */ + GetMaxValueForSequencesRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/tabletmanagerdata.GetMaxValueForSequencesRequest"; + }; + + GetMaxValueForSequencesRequest.SequenceMetadata = (function() { + + /** + * Properties of a SequenceMetadata. + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest + * @interface ISequenceMetadata + * @property {string|null} [backing_table_name] SequenceMetadata backing_table_name + * @property {string|null} [using_col_escaped] SequenceMetadata using_col_escaped + * @property {string|null} [using_table_name_escaped] SequenceMetadata using_table_name_escaped + * @property {string|null} [using_table_db_name_escaped] SequenceMetadata using_table_db_name_escaped + */ + + /** + * Constructs a new SequenceMetadata. + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest + * @classdesc Represents a SequenceMetadata. + * @implements ISequenceMetadata + * @constructor + * @param {tabletmanagerdata.GetMaxValueForSequencesRequest.ISequenceMetadata=} [properties] Properties to set + */ + function SequenceMetadata(properties) { + if (properties) + for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * SequenceMetadata backing_table_name. + * @member {string} backing_table_name + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata + * @instance + */ + SequenceMetadata.prototype.backing_table_name = ""; + + /** + * SequenceMetadata using_col_escaped. + * @member {string} using_col_escaped + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata + * @instance + */ + SequenceMetadata.prototype.using_col_escaped = ""; + + /** + * SequenceMetadata using_table_name_escaped. + * @member {string} using_table_name_escaped + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata + * @instance + */ + SequenceMetadata.prototype.using_table_name_escaped = ""; + + /** + * SequenceMetadata using_table_db_name_escaped. + * @member {string} using_table_db_name_escaped + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata + * @instance + */ + SequenceMetadata.prototype.using_table_db_name_escaped = ""; + + /** + * Creates a new SequenceMetadata instance using the specified properties. + * @function create + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata + * @static + * @param {tabletmanagerdata.GetMaxValueForSequencesRequest.ISequenceMetadata=} [properties] Properties to set + * @returns {tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata} SequenceMetadata instance + */ + SequenceMetadata.create = function create(properties) { + return new SequenceMetadata(properties); + }; + + /** + * Encodes the specified SequenceMetadata message. Does not implicitly {@link tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata.verify|verify} messages. + * @function encode + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata + * @static + * @param {tabletmanagerdata.GetMaxValueForSequencesRequest.ISequenceMetadata} message SequenceMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + SequenceMetadata.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.backing_table_name != null && Object.hasOwnProperty.call(message, "backing_table_name")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.backing_table_name); + if (message.using_col_escaped != null && Object.hasOwnProperty.call(message, "using_col_escaped")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.using_col_escaped); + if (message.using_table_name_escaped != null && Object.hasOwnProperty.call(message, "using_table_name_escaped")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.using_table_name_escaped); + if (message.using_table_db_name_escaped != null && Object.hasOwnProperty.call(message, "using_table_db_name_escaped")) + writer.uint32(/* id 4, wireType 2 =*/34).string(message.using_table_db_name_escaped); + return writer; + }; + + /** + * Encodes the specified SequenceMetadata message, length delimited. Does not implicitly {@link tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata.verify|verify} messages. + * @function encodeDelimited + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata + * @static + * @param {tabletmanagerdata.GetMaxValueForSequencesRequest.ISequenceMetadata} message SequenceMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + SequenceMetadata.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a SequenceMetadata message from the specified reader or buffer. + * @function decode + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata} SequenceMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + SequenceMetadata.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + let end = length === undefined ? reader.len : reader.pos + length, message = new $root.tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata(); + while (reader.pos < end) { + let tag = reader.uint32(); + switch (tag >>> 3) { + case 1: { + message.backing_table_name = reader.string(); + break; + } + case 2: { + message.using_col_escaped = reader.string(); + break; + } + case 3: { + message.using_table_name_escaped = reader.string(); + break; + } + case 4: { + message.using_table_db_name_escaped = reader.string(); + break; + } + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a SequenceMetadata message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata} SequenceMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + SequenceMetadata.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a SequenceMetadata message. + * @function verify + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + SequenceMetadata.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.backing_table_name != null && message.hasOwnProperty("backing_table_name")) + if (!$util.isString(message.backing_table_name)) + return "backing_table_name: string expected"; + if (message.using_col_escaped != null && message.hasOwnProperty("using_col_escaped")) + if (!$util.isString(message.using_col_escaped)) + return "using_col_escaped: string expected"; + if (message.using_table_name_escaped != null && message.hasOwnProperty("using_table_name_escaped")) + if (!$util.isString(message.using_table_name_escaped)) + return "using_table_name_escaped: string expected"; + if (message.using_table_db_name_escaped != null && message.hasOwnProperty("using_table_db_name_escaped")) + if (!$util.isString(message.using_table_db_name_escaped)) + return "using_table_db_name_escaped: string expected"; + return null; + }; + + /** + * Creates a SequenceMetadata message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata + * @static + * @param {Object.} object Plain object + * @returns {tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata} SequenceMetadata + */ + SequenceMetadata.fromObject = function fromObject(object) { + if (object instanceof $root.tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata) + return object; + let message = new $root.tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata(); + if (object.backing_table_name != null) + message.backing_table_name = String(object.backing_table_name); + if (object.using_col_escaped != null) + message.using_col_escaped = String(object.using_col_escaped); + if (object.using_table_name_escaped != null) + message.using_table_name_escaped = String(object.using_table_name_escaped); + if (object.using_table_db_name_escaped != null) + message.using_table_db_name_escaped = String(object.using_table_db_name_escaped); + return message; + }; + + /** + * Creates a plain object from a SequenceMetadata message. Also converts values to other types if specified. + * @function toObject + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata + * @static + * @param {tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata} message SequenceMetadata + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + SequenceMetadata.toObject = function toObject(message, options) { + if (!options) + options = {}; + let object = {}; + if (options.defaults) { + object.backing_table_name = ""; + object.using_col_escaped = ""; + object.using_table_name_escaped = ""; + object.using_table_db_name_escaped = ""; + } + if (message.backing_table_name != null && message.hasOwnProperty("backing_table_name")) + object.backing_table_name = message.backing_table_name; + if (message.using_col_escaped != null && message.hasOwnProperty("using_col_escaped")) + object.using_col_escaped = message.using_col_escaped; + if (message.using_table_name_escaped != null && message.hasOwnProperty("using_table_name_escaped")) + object.using_table_name_escaped = message.using_table_name_escaped; + if (message.using_table_db_name_escaped != null && message.hasOwnProperty("using_table_db_name_escaped")) + object.using_table_db_name_escaped = message.using_table_db_name_escaped; + return object; + }; + + /** + * Converts this SequenceMetadata to JSON. + * @function toJSON + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata + * @instance + * @returns {Object.} JSON object + */ + SequenceMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * Gets the default type url for SequenceMetadata + * @function getTypeUrl + * @memberof tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata + * @static + * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") + * @returns {string} The default type url + */ + SequenceMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/tabletmanagerdata.GetMaxValueForSequencesRequest.SequenceMetadata"; + }; + + return SequenceMetadata; + })(); + + return GetMaxValueForSequencesRequest; + })(); + + tabletmanagerdata.GetMaxValueForSequencesResponse = (function() { + + /** + * Properties of a GetMaxValueForSequencesResponse. + * @memberof tabletmanagerdata + * @interface IGetMaxValueForSequencesResponse + * @property {Object.|null} [max_values_by_sequence_table] GetMaxValueForSequencesResponse max_values_by_sequence_table + */ + + /** + * Constructs a new GetMaxValueForSequencesResponse. + * @memberof tabletmanagerdata + * @classdesc Represents a GetMaxValueForSequencesResponse. + * @implements IGetMaxValueForSequencesResponse + * @constructor + * @param {tabletmanagerdata.IGetMaxValueForSequencesResponse=} [properties] Properties to set + */ + function GetMaxValueForSequencesResponse(properties) { + this.max_values_by_sequence_table = {}; + if (properties) + for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * GetMaxValueForSequencesResponse max_values_by_sequence_table. + * @member {Object.} max_values_by_sequence_table + * @memberof tabletmanagerdata.GetMaxValueForSequencesResponse + * @instance + */ + GetMaxValueForSequencesResponse.prototype.max_values_by_sequence_table = $util.emptyObject; + + /** + * Creates a new GetMaxValueForSequencesResponse instance using the specified properties. + * @function create + * @memberof tabletmanagerdata.GetMaxValueForSequencesResponse + * @static + * @param {tabletmanagerdata.IGetMaxValueForSequencesResponse=} [properties] Properties to set + * @returns {tabletmanagerdata.GetMaxValueForSequencesResponse} GetMaxValueForSequencesResponse instance + */ + GetMaxValueForSequencesResponse.create = function create(properties) { + return new GetMaxValueForSequencesResponse(properties); + }; + + /** + * Encodes the specified GetMaxValueForSequencesResponse message. Does not implicitly {@link tabletmanagerdata.GetMaxValueForSequencesResponse.verify|verify} messages. + * @function encode + * @memberof tabletmanagerdata.GetMaxValueForSequencesResponse + * @static + * @param {tabletmanagerdata.IGetMaxValueForSequencesResponse} message GetMaxValueForSequencesResponse message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + GetMaxValueForSequencesResponse.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.max_values_by_sequence_table != null && Object.hasOwnProperty.call(message, "max_values_by_sequence_table")) + for (let keys = Object.keys(message.max_values_by_sequence_table), i = 0; i < keys.length; ++i) + writer.uint32(/* id 1, wireType 2 =*/10).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 0 =*/16).int64(message.max_values_by_sequence_table[keys[i]]).ldelim(); + return writer; + }; + + /** + * Encodes the specified GetMaxValueForSequencesResponse message, length delimited. Does not implicitly {@link tabletmanagerdata.GetMaxValueForSequencesResponse.verify|verify} messages. + * @function encodeDelimited + * @memberof tabletmanagerdata.GetMaxValueForSequencesResponse + * @static + * @param {tabletmanagerdata.IGetMaxValueForSequencesResponse} message GetMaxValueForSequencesResponse message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + GetMaxValueForSequencesResponse.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a GetMaxValueForSequencesResponse message from the specified reader or buffer. + * @function decode + * @memberof tabletmanagerdata.GetMaxValueForSequencesResponse + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {tabletmanagerdata.GetMaxValueForSequencesResponse} GetMaxValueForSequencesResponse + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + GetMaxValueForSequencesResponse.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + let end = length === undefined ? reader.len : reader.pos + length, message = new $root.tabletmanagerdata.GetMaxValueForSequencesResponse(), key, value; + while (reader.pos < end) { + let tag = reader.uint32(); + switch (tag >>> 3) { + case 1: { + if (message.max_values_by_sequence_table === $util.emptyObject) + message.max_values_by_sequence_table = {}; + let end2 = reader.uint32() + reader.pos; + key = ""; + value = 0; + while (reader.pos < end2) { + let tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = reader.int64(); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.max_values_by_sequence_table[key] = value; + break; + } + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a GetMaxValueForSequencesResponse message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof tabletmanagerdata.GetMaxValueForSequencesResponse + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {tabletmanagerdata.GetMaxValueForSequencesResponse} GetMaxValueForSequencesResponse + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + GetMaxValueForSequencesResponse.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a GetMaxValueForSequencesResponse message. + * @function verify + * @memberof tabletmanagerdata.GetMaxValueForSequencesResponse + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + GetMaxValueForSequencesResponse.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.max_values_by_sequence_table != null && message.hasOwnProperty("max_values_by_sequence_table")) { + if (!$util.isObject(message.max_values_by_sequence_table)) + return "max_values_by_sequence_table: object expected"; + let key = Object.keys(message.max_values_by_sequence_table); + for (let i = 0; i < key.length; ++i) + if (!$util.isInteger(message.max_values_by_sequence_table[key[i]]) && !(message.max_values_by_sequence_table[key[i]] && $util.isInteger(message.max_values_by_sequence_table[key[i]].low) && $util.isInteger(message.max_values_by_sequence_table[key[i]].high))) + return "max_values_by_sequence_table: integer|Long{k:string} expected"; + } + return null; + }; + + /** + * Creates a GetMaxValueForSequencesResponse message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof tabletmanagerdata.GetMaxValueForSequencesResponse + * @static + * @param {Object.} object Plain object + * @returns {tabletmanagerdata.GetMaxValueForSequencesResponse} GetMaxValueForSequencesResponse + */ + GetMaxValueForSequencesResponse.fromObject = function fromObject(object) { + if (object instanceof $root.tabletmanagerdata.GetMaxValueForSequencesResponse) + return object; + let message = new $root.tabletmanagerdata.GetMaxValueForSequencesResponse(); + if (object.max_values_by_sequence_table) { + if (typeof object.max_values_by_sequence_table !== "object") + throw TypeError(".tabletmanagerdata.GetMaxValueForSequencesResponse.max_values_by_sequence_table: object expected"); + message.max_values_by_sequence_table = {}; + for (let keys = Object.keys(object.max_values_by_sequence_table), i = 0; i < keys.length; ++i) + if ($util.Long) + (message.max_values_by_sequence_table[keys[i]] = $util.Long.fromValue(object.max_values_by_sequence_table[keys[i]])).unsigned = false; + else if (typeof object.max_values_by_sequence_table[keys[i]] === "string") + message.max_values_by_sequence_table[keys[i]] = parseInt(object.max_values_by_sequence_table[keys[i]], 10); + else if (typeof object.max_values_by_sequence_table[keys[i]] === "number") + message.max_values_by_sequence_table[keys[i]] = object.max_values_by_sequence_table[keys[i]]; + else if (typeof object.max_values_by_sequence_table[keys[i]] === "object") + message.max_values_by_sequence_table[keys[i]] = new $util.LongBits(object.max_values_by_sequence_table[keys[i]].low >>> 0, object.max_values_by_sequence_table[keys[i]].high >>> 0).toNumber(); + } + return message; + }; + + /** + * Creates a plain object from a GetMaxValueForSequencesResponse message. Also converts values to other types if specified. + * @function toObject + * @memberof tabletmanagerdata.GetMaxValueForSequencesResponse + * @static + * @param {tabletmanagerdata.GetMaxValueForSequencesResponse} message GetMaxValueForSequencesResponse + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + GetMaxValueForSequencesResponse.toObject = function toObject(message, options) { + if (!options) + options = {}; + let object = {}; + if (options.objects || options.defaults) + object.max_values_by_sequence_table = {}; + let keys2; + if (message.max_values_by_sequence_table && (keys2 = Object.keys(message.max_values_by_sequence_table)).length) { + object.max_values_by_sequence_table = {}; + for (let j = 0; j < keys2.length; ++j) + if (typeof message.max_values_by_sequence_table[keys2[j]] === "number") + object.max_values_by_sequence_table[keys2[j]] = options.longs === String ? String(message.max_values_by_sequence_table[keys2[j]]) : message.max_values_by_sequence_table[keys2[j]]; + else + object.max_values_by_sequence_table[keys2[j]] = options.longs === String ? $util.Long.prototype.toString.call(message.max_values_by_sequence_table[keys2[j]]) : options.longs === Number ? new $util.LongBits(message.max_values_by_sequence_table[keys2[j]].low >>> 0, message.max_values_by_sequence_table[keys2[j]].high >>> 0).toNumber() : message.max_values_by_sequence_table[keys2[j]]; + } + return object; + }; + + /** + * Converts this GetMaxValueForSequencesResponse to JSON. + * @function toJSON + * @memberof tabletmanagerdata.GetMaxValueForSequencesResponse + * @instance + * @returns {Object.} JSON object + */ + GetMaxValueForSequencesResponse.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * Gets the default type url for GetMaxValueForSequencesResponse + * @function getTypeUrl + * @memberof tabletmanagerdata.GetMaxValueForSequencesResponse + * @static + * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") + * @returns {string} The default type url + */ + GetMaxValueForSequencesResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/tabletmanagerdata.GetMaxValueForSequencesResponse"; + }; + + return GetMaxValueForSequencesResponse; + })(); + return tabletmanagerdata; })(); @@ -92260,6 +93712,7 @@ export const binlogdata = $root.binlogdata = (() => { * @interface IVStreamOptions * @property {Array.|null} [internal_tables] VStreamOptions internal_tables * @property {Object.|null} [config_overrides] VStreamOptions config_overrides + * @property {Array.|null} [tables_to_copy] VStreamOptions tables_to_copy */ /** @@ -92273,6 +93726,7 @@ export const binlogdata = $root.binlogdata = (() => { function VStreamOptions(properties) { this.internal_tables = []; this.config_overrides = {}; + this.tables_to_copy = []; if (properties) for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -92295,6 +93749,14 @@ export const binlogdata = $root.binlogdata = (() => { */ VStreamOptions.prototype.config_overrides = $util.emptyObject; + /** + * VStreamOptions tables_to_copy. + * @member {Array.} tables_to_copy + * @memberof binlogdata.VStreamOptions + * @instance + */ + VStreamOptions.prototype.tables_to_copy = $util.emptyArray; + /** * Creates a new VStreamOptions instance using the specified properties. * @function create @@ -92325,6 +93787,9 @@ export const binlogdata = $root.binlogdata = (() => { if (message.config_overrides != null && Object.hasOwnProperty.call(message, "config_overrides")) for (let keys = Object.keys(message.config_overrides), i = 0; i < keys.length; ++i) writer.uint32(/* id 2, wireType 2 =*/18).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 2 =*/18).string(message.config_overrides[keys[i]]).ldelim(); + if (message.tables_to_copy != null && message.tables_to_copy.length) + for (let i = 0; i < message.tables_to_copy.length; ++i) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.tables_to_copy[i]); return writer; }; @@ -92388,6 +93853,12 @@ export const binlogdata = $root.binlogdata = (() => { message.config_overrides[key] = value; break; } + case 3: { + if (!(message.tables_to_copy && message.tables_to_copy.length)) + message.tables_to_copy = []; + message.tables_to_copy.push(reader.string()); + break; + } default: reader.skipType(tag & 7); break; @@ -92438,6 +93909,13 @@ export const binlogdata = $root.binlogdata = (() => { if (!$util.isString(message.config_overrides[key[i]])) return "config_overrides: string{k:string} expected"; } + if (message.tables_to_copy != null && message.hasOwnProperty("tables_to_copy")) { + if (!Array.isArray(message.tables_to_copy)) + return "tables_to_copy: array expected"; + for (let i = 0; i < message.tables_to_copy.length; ++i) + if (!$util.isString(message.tables_to_copy[i])) + return "tables_to_copy: string[] expected"; + } return null; }; @@ -92467,6 +93945,13 @@ export const binlogdata = $root.binlogdata = (() => { for (let keys = Object.keys(object.config_overrides), i = 0; i < keys.length; ++i) message.config_overrides[keys[i]] = String(object.config_overrides[keys[i]]); } + if (object.tables_to_copy) { + if (!Array.isArray(object.tables_to_copy)) + throw TypeError(".binlogdata.VStreamOptions.tables_to_copy: array expected"); + message.tables_to_copy = []; + for (let i = 0; i < object.tables_to_copy.length; ++i) + message.tables_to_copy[i] = String(object.tables_to_copy[i]); + } return message; }; @@ -92483,8 +93968,10 @@ export const binlogdata = $root.binlogdata = (() => { if (!options) options = {}; let object = {}; - if (options.arrays || options.defaults) + if (options.arrays || options.defaults) { object.internal_tables = []; + object.tables_to_copy = []; + } if (options.objects || options.defaults) object.config_overrides = {}; if (message.internal_tables && message.internal_tables.length) { @@ -92498,6 +93985,11 @@ export const binlogdata = $root.binlogdata = (() => { for (let j = 0; j < keys2.length; ++j) object.config_overrides[keys2[j]] = message.config_overrides[keys2[j]]; } + if (message.tables_to_copy && message.tables_to_copy.length) { + object.tables_to_copy = []; + for (let j = 0; j < message.tables_to_copy.length; ++j) + object.tables_to_copy[j] = message.tables_to_copy[j]; + } return object; }; @@ -124766,12 +126258,14 @@ export const vtctldata = $root.vtctldata = (() => { * @property {number} CUSTOM=0 CUSTOM value * @property {number} MOVETABLES=1 MOVETABLES value * @property {number} CREATELOOKUPINDEX=2 CREATELOOKUPINDEX value + * @property {number} REFERENCE=3 REFERENCE value */ vtctldata.MaterializationIntent = (function() { const valuesById = {}, values = Object.create(valuesById); values[valuesById[0] = "CUSTOM"] = 0; values[valuesById[1] = "MOVETABLES"] = 1; values[valuesById[2] = "CREATELOOKUPINDEX"] = 2; + values[valuesById[3] = "REFERENCE"] = 3; return values; })(); @@ -125460,6 +126954,7 @@ export const vtctldata = $root.vtctldata = (() => { case 0: case 1: case 2: + case 3: break; } if (message.source_time_zone != null && message.hasOwnProperty("source_time_zone")) @@ -125563,6 +127058,10 @@ export const vtctldata = $root.vtctldata = (() => { case 2: message.materialization_intent = 2; break; + case "REFERENCE": + case 3: + message.materialization_intent = 3; + break; } if (object.source_time_zone != null) message.source_time_zone = String(object.source_time_zone); @@ -127938,6 +129437,7 @@ export const vtctldata = $root.vtctldata = (() => { * @property {Array.|null} [shards] WorkflowOptions shards * @property {Object.|null} [config] WorkflowOptions config * @property {string|null} [global_keyspace] WorkflowOptions global_keyspace + * @property {Array.|null} [lookup_vindexes] WorkflowOptions lookup_vindexes */ /** @@ -127951,6 +129451,7 @@ export const vtctldata = $root.vtctldata = (() => { function WorkflowOptions(properties) { this.shards = []; this.config = {}; + this.lookup_vindexes = []; if (properties) for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -127997,6 +129498,14 @@ export const vtctldata = $root.vtctldata = (() => { */ WorkflowOptions.prototype.global_keyspace = ""; + /** + * WorkflowOptions lookup_vindexes. + * @member {Array.} lookup_vindexes + * @memberof vtctldata.WorkflowOptions + * @instance + */ + WorkflowOptions.prototype.lookup_vindexes = $util.emptyArray; + /** * Creates a new WorkflowOptions instance using the specified properties. * @function create @@ -128033,6 +129542,9 @@ export const vtctldata = $root.vtctldata = (() => { writer.uint32(/* id 4, wireType 2 =*/34).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 2 =*/18).string(message.config[keys[i]]).ldelim(); if (message.global_keyspace != null && Object.hasOwnProperty.call(message, "global_keyspace")) writer.uint32(/* id 5, wireType 2 =*/42).string(message.global_keyspace); + if (message.lookup_vindexes != null && message.lookup_vindexes.length) + for (let i = 0; i < message.lookup_vindexes.length; ++i) + writer.uint32(/* id 6, wireType 2 =*/50).string(message.lookup_vindexes[i]); return writer; }; @@ -128108,6 +129620,12 @@ export const vtctldata = $root.vtctldata = (() => { message.global_keyspace = reader.string(); break; } + case 6: { + if (!(message.lookup_vindexes && message.lookup_vindexes.length)) + message.lookup_vindexes = []; + message.lookup_vindexes.push(reader.string()); + break; + } default: reader.skipType(tag & 7); break; @@ -128173,6 +129691,13 @@ export const vtctldata = $root.vtctldata = (() => { if (message.global_keyspace != null && message.hasOwnProperty("global_keyspace")) if (!$util.isString(message.global_keyspace)) return "global_keyspace: string expected"; + if (message.lookup_vindexes != null && message.hasOwnProperty("lookup_vindexes")) { + if (!Array.isArray(message.lookup_vindexes)) + return "lookup_vindexes: array expected"; + for (let i = 0; i < message.lookup_vindexes.length; ++i) + if (!$util.isString(message.lookup_vindexes[i])) + return "lookup_vindexes: string[] expected"; + } return null; }; @@ -128226,6 +129751,13 @@ export const vtctldata = $root.vtctldata = (() => { } if (object.global_keyspace != null) message.global_keyspace = String(object.global_keyspace); + if (object.lookup_vindexes) { + if (!Array.isArray(object.lookup_vindexes)) + throw TypeError(".vtctldata.WorkflowOptions.lookup_vindexes: array expected"); + message.lookup_vindexes = []; + for (let i = 0; i < object.lookup_vindexes.length; ++i) + message.lookup_vindexes[i] = String(object.lookup_vindexes[i]); + } return message; }; @@ -128242,8 +129774,10 @@ export const vtctldata = $root.vtctldata = (() => { if (!options) options = {}; let object = {}; - if (options.arrays || options.defaults) + if (options.arrays || options.defaults) { object.shards = []; + object.lookup_vindexes = []; + } if (options.objects || options.defaults) object.config = {}; if (options.defaults) { @@ -128268,6 +129802,11 @@ export const vtctldata = $root.vtctldata = (() => { } if (message.global_keyspace != null && message.hasOwnProperty("global_keyspace")) object.global_keyspace = message.global_keyspace; + if (message.lookup_vindexes && message.lookup_vindexes.length) { + object.lookup_vindexes = []; + for (let j = 0; j < message.lookup_vindexes.length; ++j) + object.lookup_vindexes[j] = message.lookup_vindexes[j]; + } return object; }; @@ -165169,6 +166708,505 @@ export const vtctldata = $root.vtctldata = (() => { return MaterializeCreateResponse; })(); + vtctldata.WorkflowAddTablesRequest = (function() { + + /** + * Properties of a WorkflowAddTablesRequest. + * @memberof vtctldata + * @interface IWorkflowAddTablesRequest + * @property {string|null} [workflow] WorkflowAddTablesRequest workflow + * @property {string|null} [keyspace] WorkflowAddTablesRequest keyspace + * @property {Array.|null} [table_settings] WorkflowAddTablesRequest table_settings + * @property {vtctldata.MaterializationIntent|null} [materialization_intent] WorkflowAddTablesRequest materialization_intent + */ + + /** + * Constructs a new WorkflowAddTablesRequest. + * @memberof vtctldata + * @classdesc Represents a WorkflowAddTablesRequest. + * @implements IWorkflowAddTablesRequest + * @constructor + * @param {vtctldata.IWorkflowAddTablesRequest=} [properties] Properties to set + */ + function WorkflowAddTablesRequest(properties) { + this.table_settings = []; + if (properties) + for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * WorkflowAddTablesRequest workflow. + * @member {string} workflow + * @memberof vtctldata.WorkflowAddTablesRequest + * @instance + */ + WorkflowAddTablesRequest.prototype.workflow = ""; + + /** + * WorkflowAddTablesRequest keyspace. + * @member {string} keyspace + * @memberof vtctldata.WorkflowAddTablesRequest + * @instance + */ + WorkflowAddTablesRequest.prototype.keyspace = ""; + + /** + * WorkflowAddTablesRequest table_settings. + * @member {Array.} table_settings + * @memberof vtctldata.WorkflowAddTablesRequest + * @instance + */ + WorkflowAddTablesRequest.prototype.table_settings = $util.emptyArray; + + /** + * WorkflowAddTablesRequest materialization_intent. + * @member {vtctldata.MaterializationIntent} materialization_intent + * @memberof vtctldata.WorkflowAddTablesRequest + * @instance + */ + WorkflowAddTablesRequest.prototype.materialization_intent = 0; + + /** + * Creates a new WorkflowAddTablesRequest instance using the specified properties. + * @function create + * @memberof vtctldata.WorkflowAddTablesRequest + * @static + * @param {vtctldata.IWorkflowAddTablesRequest=} [properties] Properties to set + * @returns {vtctldata.WorkflowAddTablesRequest} WorkflowAddTablesRequest instance + */ + WorkflowAddTablesRequest.create = function create(properties) { + return new WorkflowAddTablesRequest(properties); + }; + + /** + * Encodes the specified WorkflowAddTablesRequest message. Does not implicitly {@link vtctldata.WorkflowAddTablesRequest.verify|verify} messages. + * @function encode + * @memberof vtctldata.WorkflowAddTablesRequest + * @static + * @param {vtctldata.IWorkflowAddTablesRequest} message WorkflowAddTablesRequest message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + WorkflowAddTablesRequest.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.workflow != null && Object.hasOwnProperty.call(message, "workflow")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.workflow); + if (message.keyspace != null && Object.hasOwnProperty.call(message, "keyspace")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.keyspace); + if (message.table_settings != null && message.table_settings.length) + for (let i = 0; i < message.table_settings.length; ++i) + $root.vtctldata.TableMaterializeSettings.encode(message.table_settings[i], writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); + if (message.materialization_intent != null && Object.hasOwnProperty.call(message, "materialization_intent")) + writer.uint32(/* id 4, wireType 0 =*/32).int32(message.materialization_intent); + return writer; + }; + + /** + * Encodes the specified WorkflowAddTablesRequest message, length delimited. Does not implicitly {@link vtctldata.WorkflowAddTablesRequest.verify|verify} messages. + * @function encodeDelimited + * @memberof vtctldata.WorkflowAddTablesRequest + * @static + * @param {vtctldata.IWorkflowAddTablesRequest} message WorkflowAddTablesRequest message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + WorkflowAddTablesRequest.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a WorkflowAddTablesRequest message from the specified reader or buffer. + * @function decode + * @memberof vtctldata.WorkflowAddTablesRequest + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {vtctldata.WorkflowAddTablesRequest} WorkflowAddTablesRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + WorkflowAddTablesRequest.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + let end = length === undefined ? reader.len : reader.pos + length, message = new $root.vtctldata.WorkflowAddTablesRequest(); + while (reader.pos < end) { + let tag = reader.uint32(); + switch (tag >>> 3) { + case 1: { + message.workflow = reader.string(); + break; + } + case 2: { + message.keyspace = reader.string(); + break; + } + case 3: { + if (!(message.table_settings && message.table_settings.length)) + message.table_settings = []; + message.table_settings.push($root.vtctldata.TableMaterializeSettings.decode(reader, reader.uint32())); + break; + } + case 4: { + message.materialization_intent = reader.int32(); + break; + } + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a WorkflowAddTablesRequest message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof vtctldata.WorkflowAddTablesRequest + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {vtctldata.WorkflowAddTablesRequest} WorkflowAddTablesRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + WorkflowAddTablesRequest.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a WorkflowAddTablesRequest message. + * @function verify + * @memberof vtctldata.WorkflowAddTablesRequest + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + WorkflowAddTablesRequest.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.workflow != null && message.hasOwnProperty("workflow")) + if (!$util.isString(message.workflow)) + return "workflow: string expected"; + if (message.keyspace != null && message.hasOwnProperty("keyspace")) + if (!$util.isString(message.keyspace)) + return "keyspace: string expected"; + if (message.table_settings != null && message.hasOwnProperty("table_settings")) { + if (!Array.isArray(message.table_settings)) + return "table_settings: array expected"; + for (let i = 0; i < message.table_settings.length; ++i) { + let error = $root.vtctldata.TableMaterializeSettings.verify(message.table_settings[i]); + if (error) + return "table_settings." + error; + } + } + if (message.materialization_intent != null && message.hasOwnProperty("materialization_intent")) + switch (message.materialization_intent) { + default: + return "materialization_intent: enum value expected"; + case 0: + case 1: + case 2: + case 3: + break; + } + return null; + }; + + /** + * Creates a WorkflowAddTablesRequest message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof vtctldata.WorkflowAddTablesRequest + * @static + * @param {Object.} object Plain object + * @returns {vtctldata.WorkflowAddTablesRequest} WorkflowAddTablesRequest + */ + WorkflowAddTablesRequest.fromObject = function fromObject(object) { + if (object instanceof $root.vtctldata.WorkflowAddTablesRequest) + return object; + let message = new $root.vtctldata.WorkflowAddTablesRequest(); + if (object.workflow != null) + message.workflow = String(object.workflow); + if (object.keyspace != null) + message.keyspace = String(object.keyspace); + if (object.table_settings) { + if (!Array.isArray(object.table_settings)) + throw TypeError(".vtctldata.WorkflowAddTablesRequest.table_settings: array expected"); + message.table_settings = []; + for (let i = 0; i < object.table_settings.length; ++i) { + if (typeof object.table_settings[i] !== "object") + throw TypeError(".vtctldata.WorkflowAddTablesRequest.table_settings: object expected"); + message.table_settings[i] = $root.vtctldata.TableMaterializeSettings.fromObject(object.table_settings[i]); + } + } + switch (object.materialization_intent) { + default: + if (typeof object.materialization_intent === "number") { + message.materialization_intent = object.materialization_intent; + break; + } + break; + case "CUSTOM": + case 0: + message.materialization_intent = 0; + break; + case "MOVETABLES": + case 1: + message.materialization_intent = 1; + break; + case "CREATELOOKUPINDEX": + case 2: + message.materialization_intent = 2; + break; + case "REFERENCE": + case 3: + message.materialization_intent = 3; + break; + } + return message; + }; + + /** + * Creates a plain object from a WorkflowAddTablesRequest message. Also converts values to other types if specified. + * @function toObject + * @memberof vtctldata.WorkflowAddTablesRequest + * @static + * @param {vtctldata.WorkflowAddTablesRequest} message WorkflowAddTablesRequest + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + WorkflowAddTablesRequest.toObject = function toObject(message, options) { + if (!options) + options = {}; + let object = {}; + if (options.arrays || options.defaults) + object.table_settings = []; + if (options.defaults) { + object.workflow = ""; + object.keyspace = ""; + object.materialization_intent = options.enums === String ? "CUSTOM" : 0; + } + if (message.workflow != null && message.hasOwnProperty("workflow")) + object.workflow = message.workflow; + if (message.keyspace != null && message.hasOwnProperty("keyspace")) + object.keyspace = message.keyspace; + if (message.table_settings && message.table_settings.length) { + object.table_settings = []; + for (let j = 0; j < message.table_settings.length; ++j) + object.table_settings[j] = $root.vtctldata.TableMaterializeSettings.toObject(message.table_settings[j], options); + } + if (message.materialization_intent != null && message.hasOwnProperty("materialization_intent")) + object.materialization_intent = options.enums === String ? $root.vtctldata.MaterializationIntent[message.materialization_intent] === undefined ? message.materialization_intent : $root.vtctldata.MaterializationIntent[message.materialization_intent] : message.materialization_intent; + return object; + }; + + /** + * Converts this WorkflowAddTablesRequest to JSON. + * @function toJSON + * @memberof vtctldata.WorkflowAddTablesRequest + * @instance + * @returns {Object.} JSON object + */ + WorkflowAddTablesRequest.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * Gets the default type url for WorkflowAddTablesRequest + * @function getTypeUrl + * @memberof vtctldata.WorkflowAddTablesRequest + * @static + * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") + * @returns {string} The default type url + */ + WorkflowAddTablesRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/vtctldata.WorkflowAddTablesRequest"; + }; + + return WorkflowAddTablesRequest; + })(); + + vtctldata.WorkflowAddTablesResponse = (function() { + + /** + * Properties of a WorkflowAddTablesResponse. + * @memberof vtctldata + * @interface IWorkflowAddTablesResponse + */ + + /** + * Constructs a new WorkflowAddTablesResponse. + * @memberof vtctldata + * @classdesc Represents a WorkflowAddTablesResponse. + * @implements IWorkflowAddTablesResponse + * @constructor + * @param {vtctldata.IWorkflowAddTablesResponse=} [properties] Properties to set + */ + function WorkflowAddTablesResponse(properties) { + if (properties) + for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Creates a new WorkflowAddTablesResponse instance using the specified properties. + * @function create + * @memberof vtctldata.WorkflowAddTablesResponse + * @static + * @param {vtctldata.IWorkflowAddTablesResponse=} [properties] Properties to set + * @returns {vtctldata.WorkflowAddTablesResponse} WorkflowAddTablesResponse instance + */ + WorkflowAddTablesResponse.create = function create(properties) { + return new WorkflowAddTablesResponse(properties); + }; + + /** + * Encodes the specified WorkflowAddTablesResponse message. Does not implicitly {@link vtctldata.WorkflowAddTablesResponse.verify|verify} messages. + * @function encode + * @memberof vtctldata.WorkflowAddTablesResponse + * @static + * @param {vtctldata.IWorkflowAddTablesResponse} message WorkflowAddTablesResponse message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + WorkflowAddTablesResponse.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + return writer; + }; + + /** + * Encodes the specified WorkflowAddTablesResponse message, length delimited. Does not implicitly {@link vtctldata.WorkflowAddTablesResponse.verify|verify} messages. + * @function encodeDelimited + * @memberof vtctldata.WorkflowAddTablesResponse + * @static + * @param {vtctldata.IWorkflowAddTablesResponse} message WorkflowAddTablesResponse message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + WorkflowAddTablesResponse.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a WorkflowAddTablesResponse message from the specified reader or buffer. + * @function decode + * @memberof vtctldata.WorkflowAddTablesResponse + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {vtctldata.WorkflowAddTablesResponse} WorkflowAddTablesResponse + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + WorkflowAddTablesResponse.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + let end = length === undefined ? reader.len : reader.pos + length, message = new $root.vtctldata.WorkflowAddTablesResponse(); + while (reader.pos < end) { + let tag = reader.uint32(); + switch (tag >>> 3) { + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a WorkflowAddTablesResponse message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof vtctldata.WorkflowAddTablesResponse + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {vtctldata.WorkflowAddTablesResponse} WorkflowAddTablesResponse + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + WorkflowAddTablesResponse.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a WorkflowAddTablesResponse message. + * @function verify + * @memberof vtctldata.WorkflowAddTablesResponse + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + WorkflowAddTablesResponse.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + return null; + }; + + /** + * Creates a WorkflowAddTablesResponse message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof vtctldata.WorkflowAddTablesResponse + * @static + * @param {Object.} object Plain object + * @returns {vtctldata.WorkflowAddTablesResponse} WorkflowAddTablesResponse + */ + WorkflowAddTablesResponse.fromObject = function fromObject(object) { + if (object instanceof $root.vtctldata.WorkflowAddTablesResponse) + return object; + return new $root.vtctldata.WorkflowAddTablesResponse(); + }; + + /** + * Creates a plain object from a WorkflowAddTablesResponse message. Also converts values to other types if specified. + * @function toObject + * @memberof vtctldata.WorkflowAddTablesResponse + * @static + * @param {vtctldata.WorkflowAddTablesResponse} message WorkflowAddTablesResponse + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + WorkflowAddTablesResponse.toObject = function toObject() { + return {}; + }; + + /** + * Converts this WorkflowAddTablesResponse to JSON. + * @function toJSON + * @memberof vtctldata.WorkflowAddTablesResponse + * @instance + * @returns {Object.} JSON object + */ + WorkflowAddTablesResponse.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * Gets the default type url for WorkflowAddTablesResponse + * @function getTypeUrl + * @memberof vtctldata.WorkflowAddTablesResponse + * @static + * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") + * @returns {string} The default type url + */ + WorkflowAddTablesResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/vtctldata.WorkflowAddTablesResponse"; + }; + + return WorkflowAddTablesResponse; + })(); + vtctldata.MigrateCreateRequest = (function() { /**