From bcdd3ff0001b4c7959c8b2775e05dc894fa5a57d Mon Sep 17 00:00:00 2001 From: Radu Berinde Date: Wed, 7 Aug 2019 06:13:01 -0400 Subject: [PATCH] sql: optimizer always on This change deprecates the `optimizer` session setting and associated cluster setting. It is no longer possible to disable the optimizer. The settings still exist but the only allowed value is "on" (mostly so that `SET OPTIMIZER = ON` still works). The logic test configurations are reworked: they now all use the optimizer, and the `-opt` versions are gone (e.g. what used to be `local-opt` is now `local`). The HP-specific planner tests are removed. Release note: None --- Makefile | 16 +- build/teamcity-sqllogictest.sh | 2 +- build/teamcity-testlogicrace.sh | 4 +- docs/generated/settings/settings.html | 2 +- .../logictestccl/testdata/logic_test/as_of | 2 +- .../testdata/logic_test/case_sensitive_names | 2 +- .../testdata/logic_test/crdb_internal | 2 +- .../testdata/logic_test/distsql_partitioning | 2 +- .../testdata/logic_test/drop_index | 2 +- .../testdata/logic_test/partitioning | 2 +- .../logic_test/partitioning_constrained_scans | 2 +- .../testdata/logic_test/partitioning_index | 2 +- .../logictestccl/testdata/logic_test/restore | 2 +- pkg/ccl/logictestccl/testdata/logic_test/role | 2 +- pkg/ccl/logictestccl/testdata/logic_test/zone | 2 +- pkg/sql/conn_executor_exec.go | 38 +- pkg/sql/conn_executor_prepare.go | 51 +- pkg/sql/exec_util.go | 13 +- pkg/sql/logictest/logic.go | 117 +- pkg/sql/logictest/logic_test.go | 12 - .../testdata/logic_test/aggregate-opt | 2 +- .../logictest/testdata/logic_test/apply_join | 2 +- pkg/sql/logictest/testdata/logic_test/as_of | 2 +- pkg/sql/logictest/testdata/logic_test/ccl | 2 +- .../logictest/testdata/logic_test/create_as | 2 +- .../testdata/logic_test/create_as_opt | 2 +- .../logictest/testdata/logic_test/database | 2 +- .../logictest/testdata/logic_test/distsql_agg | 2 +- .../logic_test/distsql_automatic_stats | 2 +- .../testdata/logic_test/distsql_distinct_on | 2 +- .../testdata/logic_test/distsql_event_log | 2 +- .../logic_test/distsql_interleaved_join | 2 +- .../testdata/logic_test/distsql_join | 2 +- .../testdata/logic_test/distsql_numtables | 2 +- .../testdata/logic_test/distsql_srfs | 2 +- .../testdata/logic_test/distsql_stats | 2 +- .../testdata/logic_test/distsql_tighten_spans | 2 +- .../testdata/logic_test/distsql_union | 2 +- .../testdata/logic_test/drop_database | 2 +- .../logictest/testdata/logic_test/drop_index | 2 +- .../logictest/testdata/logic_test/drop_table | 2 +- .../logictest/testdata/logic_test/drop_user | 2 +- .../logictest/testdata/logic_test/drop_view | 2 +- .../testdata/logic_test/explain_analyze | 2 +- .../testdata/logic_test/explain_analyze_plans | 6 +- pkg/sql/logictest/testdata/logic_test/fk_opt | 2 +- .../testdata/logic_test/grant_database | 2 +- .../logictest/testdata/logic_test/grant_table | 2 +- .../testdata/logic_test/information_schema | 2 +- .../logictest/testdata/logic_test/interleaved | 2 +- .../logictest/testdata/logic_test/locality | 2 +- .../logictest/testdata/logic_test/lookup_join | 2 +- .../testdata/logic_test/numeric_references | 2 +- .../logic_test/numeric_references_opt | 2 +- .../logictest/testdata/logic_test/optimizer | 91 - .../logictest/testdata/logic_test/ordinality | 2 +- pkg/sql/logictest/testdata/logic_test/orms | 2 +- .../logictest/testdata/logic_test/orms-opt | 2 +- .../logictest/testdata/logic_test/overflow | 2 +- .../testdata/logic_test/partitioning | 2 +- .../logictest/testdata/logic_test/pg_catalog | 2 +- pkg/sql/logictest/testdata/logic_test/prepare | 2 +- .../testdata/logic_test/prepare_opt_plan | 2 +- pkg/sql/logictest/testdata/logic_test/ranges | 2 +- pkg/sql/logictest/testdata/logic_test/reset | 2 +- pkg/sql/logictest/testdata/logic_test/role | 2 +- .../logictest/testdata/logic_test/save_table | 2 +- pkg/sql/logictest/testdata/logic_test/scatter | 2 +- pkg/sql/logictest/testdata/logic_test/select | 2 +- .../testdata/logic_test/sequences_distsql | 2 +- pkg/sql/logictest/testdata/logic_test/set | 6 +- .../logictest/testdata/logic_test/show_source | 2 +- .../testdata/logic_test/statement_statistics | 2 +- .../testdata/logic_test/subquery-opt | 2 +- .../testdata/logic_test/subquery_correlated | 2 +- .../testdata/logic_test/target_names | 2 +- .../logictest/testdata/logic_test/txn_as_of | 2 +- .../logictest/testdata/logic_test/txn_retry | 2 +- pkg/sql/logictest/testdata/logic_test/typing | 2 +- pkg/sql/logictest/testdata/logic_test/union | 2 +- .../logictest/testdata/logic_test/union-opt | 2 +- .../logictest/testdata/logic_test/update_from | 2 +- pkg/sql/logictest/testdata/logic_test/user | 2 +- .../testdata/logic_test/vectorize_threshold | 2 +- .../logictest/testdata/logic_test/views_opt | 2 +- pkg/sql/logictest/testdata/logic_test/window | 2 +- pkg/sql/logictest/testdata/logic_test/with-hp | 42 - .../logictest/testdata/logic_test/with-opt | 2 +- .../logictest/testdata/logic_test/zigzag_join | 2 +- .../logictest/testdata/planner_test/aggregate | 891 ---------- .../planner_test/aggregate_vectorize_off | 115 -- .../logictest/testdata/planner_test/cascade | 623 ------- .../testdata/planner_test/check_constraints | 61 - .../planner_test/custom_mutation_indexes | 77 - pkg/sql/logictest/testdata/planner_test/ddl | 264 --- .../logictest/testdata/planner_test/delete | 225 --- .../testdata/planner_test/delete_range | 19 - .../logictest/testdata/planner_test/distinct | 207 --- .../testdata/planner_test/distinct_on | 468 ------ .../testdata/planner_test/distsql_agg | 287 ---- .../testdata/planner_test/distsql_auto_mode | 130 -- .../testdata/planner_test/distsql_distinct_on | 157 -- .../testdata/planner_test/distsql_indexjoin | 45 - .../planner_test/distsql_interleaved_join | 481 ------ .../testdata/planner_test/distsql_join | 209 --- .../testdata/planner_test/distsql_misc | 98 -- .../testdata/planner_test/distsql_numtables | 171 -- .../testdata/planner_test/distsql_sort | 47 - .../testdata/planner_test/distsql_srfs | 46 - .../testdata/planner_test/distsql_subquery | 37 - .../planner_test/distsql_tighten_spans | 328 ---- .../testdata/planner_test/distsql_union | 285 ---- .../testdata/planner_test/distsql_window | 64 - .../logictest/testdata/planner_test/explain | 745 --------- .../logictest/testdata/planner_test/insert | 402 ----- .../testdata/planner_test/insert_plans | 90 - .../testdata/planner_test/interleaved | 433 ----- .../testdata/planner_test/inverted_index | 189 --- pkg/sql/logictest/testdata/planner_test/join | 1464 ----------------- pkg/sql/logictest/testdata/planner_test/limit | 137 -- .../testdata/planner_test/needed_columns | 245 --- .../logictest/testdata/planner_test/order_by | 817 --------- .../testdata/planner_test/ordinal_references | 43 - .../testdata/planner_test/ordinality | 34 - .../testdata/planner_test/physical_props | 213 --- .../testdata/planner_test/planning_errors | 7 - .../logictest/testdata/planner_test/rows_from | 48 - .../logictest/testdata/planner_test/select | 658 -------- .../testdata/planner_test/select_index | 1233 -------------- .../testdata/planner_test/select_index_flags | 182 -- .../planner_test/select_index_vectorize_off | 69 - .../testdata/planner_test/show_trace | 325 ---- pkg/sql/logictest/testdata/planner_test/spool | 245 --- pkg/sql/logictest/testdata/planner_test/srfs | 153 -- .../logictest/testdata/planner_test/subquery | 188 --- pkg/sql/logictest/testdata/planner_test/tuple | 134 -- pkg/sql/logictest/testdata/planner_test/union | 44 - .../logictest/testdata/planner_test/update | 299 ---- .../logictest/testdata/planner_test/upsert | 176 -- .../logictest/testdata/planner_test/window | 264 --- pkg/sql/opt/exec/execbuilder/builder_test.go | 4 +- .../opt/exec/execbuilder/testdata/aggregate | 2 +- pkg/sql/opt/exec/execbuilder/testdata/cascade | 2 +- pkg/sql/opt/exec/execbuilder/testdata/catalog | 2 +- .../execbuilder/testdata/check_constraints | 2 +- pkg/sql/opt/exec/execbuilder/testdata/ddl | 2 +- pkg/sql/opt/exec/execbuilder/testdata/delete | 2 +- .../opt/exec/execbuilder/testdata/distinct | 2 +- .../opt/exec/execbuilder/testdata/distinct_on | 2 +- .../opt/exec/execbuilder/testdata/distsql_agg | 2 +- .../execbuilder/testdata/distsql_auto_mode | 2 +- .../execbuilder/testdata/distsql_distinct_on | 2 +- .../execbuilder/testdata/distsql_indexjoin | 2 +- .../testdata/distsql_interleaved_join | 2 +- .../exec/execbuilder/testdata/distsql_join | 2 +- .../exec/execbuilder/testdata/distsql_misc | 2 +- .../execbuilder/testdata/distsql_numtables | 2 +- .../execbuilder/testdata/distsql_ordinality | 2 +- .../testdata/distsql_tighten_spans | 2 +- .../exec/execbuilder/testdata/distsql_union | 2 +- pkg/sql/opt/exec/execbuilder/testdata/explain | 2 +- .../opt/exec/execbuilder/testdata/explain_env | 2 +- pkg/sql/opt/exec/execbuilder/testdata/fk | 2 +- pkg/sql/opt/exec/execbuilder/testdata/fk_opt | 2 +- .../execbuilder/testdata/information_schema | 2 +- pkg/sql/opt/exec/execbuilder/testdata/insert | 2 +- .../opt/exec/execbuilder/testdata/interleaved | 2 +- .../exec/execbuilder/testdata/inverted_index | 2 +- pkg/sql/opt/exec/execbuilder/testdata/join | 2 +- .../opt/exec/execbuilder/testdata/join_order | 2 +- pkg/sql/opt/exec/execbuilder/testdata/limit | 2 +- .../opt/exec/execbuilder/testdata/lookup_join | 2 +- pkg/sql/opt/exec/execbuilder/testdata/orderby | 2 +- .../opt/exec/execbuilder/testdata/ordinality | 2 +- pkg/sql/opt/exec/execbuilder/testdata/prepare | 2 +- pkg/sql/opt/exec/execbuilder/testdata/scalar | 2 +- pkg/sql/opt/exec/execbuilder/testdata/select | 2 +- .../exec/execbuilder/testdata/select_index | 2 +- .../execbuilder/testdata/select_index_flags | 2 +- .../testdata/select_index_vectorize_off | 2 +- .../opt/exec/execbuilder/testdata/show_trace | 2 +- pkg/sql/opt/exec/execbuilder/testdata/spool | 2 +- pkg/sql/opt/exec/execbuilder/testdata/srfs | 2 +- pkg/sql/opt/exec/execbuilder/testdata/stats | 2 +- .../opt/exec/execbuilder/testdata/subquery | 2 +- .../execbuilder/testdata/subquery_correlated | 5 +- .../opt/exec/execbuilder/testdata/telemetry | 2 +- pkg/sql/opt/exec/execbuilder/testdata/tuple | 2 +- pkg/sql/opt/exec/execbuilder/testdata/union | 2 +- pkg/sql/opt/exec/execbuilder/testdata/update | 2 +- .../opt/exec/execbuilder/testdata/update_from | 2 +- pkg/sql/opt/exec/execbuilder/testdata/upsert | 2 +- pkg/sql/opt/exec/execbuilder/testdata/values | 2 +- pkg/sql/opt/exec/execbuilder/testdata/window | 2 +- pkg/sql/opt/exec/execbuilder/testdata/with | 2 +- pkg/sql/plan.go | 5 - pkg/sql/schema_changer.go | 3 +- pkg/sql/sessiondata/session_data.go | 50 - pkg/sql/vars.go | 12 +- 199 files changed, 261 insertions(+), 14648 deletions(-) delete mode 100644 pkg/sql/logictest/testdata/logic_test/optimizer delete mode 100644 pkg/sql/logictest/testdata/logic_test/with-hp delete mode 100644 pkg/sql/logictest/testdata/planner_test/aggregate delete mode 100644 pkg/sql/logictest/testdata/planner_test/aggregate_vectorize_off delete mode 100644 pkg/sql/logictest/testdata/planner_test/cascade delete mode 100644 pkg/sql/logictest/testdata/planner_test/check_constraints delete mode 100644 pkg/sql/logictest/testdata/planner_test/custom_mutation_indexes delete mode 100644 pkg/sql/logictest/testdata/planner_test/ddl delete mode 100644 pkg/sql/logictest/testdata/planner_test/delete delete mode 100644 pkg/sql/logictest/testdata/planner_test/delete_range delete mode 100644 pkg/sql/logictest/testdata/planner_test/distinct delete mode 100644 pkg/sql/logictest/testdata/planner_test/distinct_on delete mode 100644 pkg/sql/logictest/testdata/planner_test/distsql_agg delete mode 100644 pkg/sql/logictest/testdata/planner_test/distsql_auto_mode delete mode 100644 pkg/sql/logictest/testdata/planner_test/distsql_distinct_on delete mode 100644 pkg/sql/logictest/testdata/planner_test/distsql_indexjoin delete mode 100644 pkg/sql/logictest/testdata/planner_test/distsql_interleaved_join delete mode 100644 pkg/sql/logictest/testdata/planner_test/distsql_join delete mode 100644 pkg/sql/logictest/testdata/planner_test/distsql_misc delete mode 100644 pkg/sql/logictest/testdata/planner_test/distsql_numtables delete mode 100644 pkg/sql/logictest/testdata/planner_test/distsql_sort delete mode 100644 pkg/sql/logictest/testdata/planner_test/distsql_srfs delete mode 100644 pkg/sql/logictest/testdata/planner_test/distsql_subquery delete mode 100644 pkg/sql/logictest/testdata/planner_test/distsql_tighten_spans delete mode 100644 pkg/sql/logictest/testdata/planner_test/distsql_union delete mode 100644 pkg/sql/logictest/testdata/planner_test/distsql_window delete mode 100644 pkg/sql/logictest/testdata/planner_test/explain delete mode 100644 pkg/sql/logictest/testdata/planner_test/insert delete mode 100644 pkg/sql/logictest/testdata/planner_test/insert_plans delete mode 100644 pkg/sql/logictest/testdata/planner_test/interleaved delete mode 100644 pkg/sql/logictest/testdata/planner_test/inverted_index delete mode 100644 pkg/sql/logictest/testdata/planner_test/join delete mode 100644 pkg/sql/logictest/testdata/planner_test/limit delete mode 100644 pkg/sql/logictest/testdata/planner_test/needed_columns delete mode 100644 pkg/sql/logictest/testdata/planner_test/order_by delete mode 100644 pkg/sql/logictest/testdata/planner_test/ordinal_references delete mode 100644 pkg/sql/logictest/testdata/planner_test/ordinality delete mode 100644 pkg/sql/logictest/testdata/planner_test/physical_props delete mode 100644 pkg/sql/logictest/testdata/planner_test/planning_errors delete mode 100644 pkg/sql/logictest/testdata/planner_test/rows_from delete mode 100644 pkg/sql/logictest/testdata/planner_test/select delete mode 100644 pkg/sql/logictest/testdata/planner_test/select_index delete mode 100644 pkg/sql/logictest/testdata/planner_test/select_index_flags delete mode 100644 pkg/sql/logictest/testdata/planner_test/select_index_vectorize_off delete mode 100644 pkg/sql/logictest/testdata/planner_test/show_trace delete mode 100644 pkg/sql/logictest/testdata/planner_test/spool delete mode 100644 pkg/sql/logictest/testdata/planner_test/srfs delete mode 100644 pkg/sql/logictest/testdata/planner_test/subquery delete mode 100644 pkg/sql/logictest/testdata/planner_test/tuple delete mode 100644 pkg/sql/logictest/testdata/planner_test/union delete mode 100644 pkg/sql/logictest/testdata/planner_test/update delete mode 100644 pkg/sql/logictest/testdata/planner_test/upsert delete mode 100644 pkg/sql/logictest/testdata/planner_test/window diff --git a/Makefile b/Makefile index d8ce87d09e36..9c7eabbed32a 100644 --- a/Makefile +++ b/Makefile @@ -51,10 +51,10 @@ TESTS := . ## Benchmarks to run for use with `make bench`. BENCHES := -## Space delimited list of logic test files to run, for make testlogic/testccllogic/testoptlogic/testplannerlogic. +## Space delimited list of logic test files to run, for make testlogic/testccllogic/testoptlogic. FILES := -## Name of a logic test configuration to run, for make testlogic/testccllogic/testoptlogic/testplannerlogic. +## Name of a logic test configuration to run, for make testlogic/testccllogic/testoptlogic. ## (default: all configs. It's not possible yet to specify multiple configs in this way.) TESTCONFIG := @@ -947,7 +947,7 @@ bench benchshort: TESTTIMEOUT := $(BENCHTIMEOUT) # that longer running benchmarks can skip themselves. benchshort: override TESTFLAGS += -benchtime=1ns -short -.PHONY: check test testshort testrace testlogic testbaselogic testplannerlogic testccllogic testoptlogic bench benchshort +.PHONY: check test testshort testrace testlogic testbaselogic testccllogic testoptlogic bench benchshort test: ## Run tests. check test testshort testrace bench benchshort: $(xgo) test $(GOFLAGS) -tags '$(TAGS)' -ldflags '$(LINKFLAGS)' -run "$(TESTS)" $(if $(BENCHES),-bench "$(BENCHES)") -timeout $(TESTTIMEOUT) $(PKG) $(TESTFLAGS) @@ -970,14 +970,11 @@ roachprod-stress roachprod-stressrace: bin/roachprod-stress -test.run "$(TESTS)" $(filter-out -v,$(TESTFLAGS)) -test.v -test.timeout $(TESTTIMEOUT); \ fi -testlogic: testbaselogic testplannerlogic testoptlogic testccllogic +testlogic: testbaselogic testoptlogic testccllogic testbaselogic: ## Run SQL Logic Tests. testbaselogic: bin/logictest -testplannerlogic: ## Run SQL Logic Tests for the heuristic planner. -testplannerlogic: bin/logictest - testccllogic: ## Run SQL CCL Logic Tests. testccllogic: bin/logictestccl @@ -987,7 +984,6 @@ testoptlogic: bin/logictestopt logic-test-selector := $(if $(TESTCONFIG),^$(TESTCONFIG)$$)/$(if $(FILES),^$(subst $(space),$$|^,$(FILES))$$)/$(SUBTESTS) testbaselogic: TESTS := TestLogic/$(logic-test-selector) testccllogic: TESTS := TestCCLLogic/$(logic-test-selector) -testplannerlogic: TESTS := TestPlannerLogic/$(logic-test-selector) testoptlogic: TESTS := TestExecBuild/$(logic-test-selector) # Note: we specify -config here in addition to the filter on TESTS @@ -996,8 +992,8 @@ testoptlogic: TESTS := TestExecBuild/$(logic-test-selector) # does not prevent loading and initializing every default config in # turn (including setting up the test clusters, etc.). By specifying # -config, the extra initialization overhead is averted. -testbaselogic testccllogic testplannerlogic testoptlogic: TESTFLAGS := -test.v $(if $(FILES),-show-sql) $(if $(TESTCONFIG),-config $(TESTCONFIG)) -testbaselogic testccllogic testplannerlogic testoptlogic: +testbaselogic testccllogic testoptlogic: TESTFLAGS := -test.v $(if $(FILES),-show-sql) $(if $(TESTCONFIG),-config $(TESTCONFIG)) +testbaselogic testccllogic testoptlogic: cd $($(&1 \ + make test TESTFLAGS="-v -bigtest -config local,fakedist -flex-types" TESTTIMEOUT='24h' PKG='./pkg/sql/logictest' TESTS='^TestSqlLiteCorrelatedLogic$$' 2>&1 \ | tee "artifacts/sqllite-correlated.log" \ | go-test-teamcity diff --git a/build/teamcity-testlogicrace.sh b/build/teamcity-testlogicrace.sh index af4750280db6..bd8d9be725f8 100755 --- a/build/teamcity-testlogicrace.sh +++ b/build/teamcity-testlogicrace.sh @@ -25,7 +25,7 @@ build/builder.sh \ stdbuf -oL -eL \ make testrace \ PKG=./pkg/sql/logictest \ - TESTS='^TestLogic/local-opt$$' \ + TESTS='^TestLogic/local$$' \ TESTFLAGS='-optimizer-cost-perturbation=0.9 -v' \ ENABLE_ROCKSDB_ASSERTIONS=1 \ 2>&1 \ @@ -48,7 +48,7 @@ for file in $LOGICTESTS; do stdbuf -oL -eL \ make testrace \ PKG=./pkg/sql/logictest \ - TESTS='^TestLogic/local-opt/'${file}'$$' \ + TESTS='^TestLogic/local/'${file}'$$' \ TESTFLAGS='-disable-opt-rule-probability=0.5 -v' \ ENABLE_ROCKSDB_ASSERTIONS=1 \ 2>&1 \ diff --git a/docs/generated/settings/settings.html b/docs/generated/settings/settings.html index 5cc133424d0a..d41619187476 100644 --- a/docs/generated/settings/settings.html +++ b/docs/generated/settings/settings.html @@ -84,7 +84,7 @@ server.web_session_timeoutduration168h0m0sthe duration that a newly created web session will be valid sql.defaults.default_int_sizeinteger8the size, in bytes, of an INT type sql.defaults.distsqlenumerationautodefault distributed SQL execution mode [off = 0, auto = 1, on = 2] -sql.defaults.optimizerenumerationondefault cost-based optimizer mode [off = 0, on = 1, local = 2] +sql.defaults.optimizerenumerationondefault cost-based optimizer mode [on = 1] sql.defaults.reorder_joins_limitinteger4default number of joins to reorder sql.defaults.results_buffer.sizebyte size16 KiBdefault size of the buffer that accumulates results for a statement or a batch of statements before they are sent to the client. This can be overridden on an individual connection with the 'results_buffer_size' parameter. Note that auto-retries generally only happen while no results have been delivered to the client, so reducing this size can increase the number of retriable errors a client receives. On the other hand, increasing the buffer size can increase the delay until the client receives the first result row. Updating the setting only affects new connections. Setting to 0 disables any buffering. sql.defaults.serial_normalizationenumerationrowiddefault handling of SERIAL in table definitions [rowid = 0, virtual_sequence = 1, sql_sequence = 2] diff --git a/pkg/ccl/logictestccl/testdata/logic_test/as_of b/pkg/ccl/logictestccl/testdata/logic_test/as_of index 7c9f129afd26..930f686486fb 100644 --- a/pkg/ccl/logictestccl/testdata/logic_test/as_of +++ b/pkg/ccl/logictestccl/testdata/logic_test/as_of @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE t (i INT) diff --git a/pkg/ccl/logictestccl/testdata/logic_test/case_sensitive_names b/pkg/ccl/logictestccl/testdata/logic_test/case_sensitive_names index 58a4e36db27b..0c3ecbe3d12e 100644 --- a/pkg/ccl/logictestccl/testdata/logic_test/case_sensitive_names +++ b/pkg/ccl/logictestccl/testdata/logic_test/case_sensitive_names @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE p (a INT PRIMARY KEY) PARTITION BY LIST (a) ( diff --git a/pkg/ccl/logictestccl/testdata/logic_test/crdb_internal b/pkg/ccl/logictestccl/testdata/logic_test/crdb_internal index 3592a60e1e27..4b2b0dafee77 100644 --- a/pkg/ccl/logictestccl/testdata/logic_test/crdb_internal +++ b/pkg/ccl/logictestccl/testdata/logic_test/crdb_internal @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local query IITTITTT colnames SELECT * FROM crdb_internal.partitions diff --git a/pkg/ccl/logictestccl/testdata/logic_test/distsql_partitioning b/pkg/ccl/logictestccl/testdata/logic_test/distsql_partitioning index f3da5659d0da..4c103f9e2525 100644 --- a/pkg/ccl/logictestccl/testdata/logic_test/distsql_partitioning +++ b/pkg/ccl/logictestccl/testdata/logic_test/distsql_partitioning @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist-opt +# LogicTest: 5node-dist # Tests for the show partitions command. diff --git a/pkg/ccl/logictestccl/testdata/logic_test/drop_index b/pkg/ccl/logictestccl/testdata/logic_test/drop_index index e2a9bab95a26..c39156b6e701 100644 --- a/pkg/ccl/logictestccl/testdata/logic_test/drop_index +++ b/pkg/ccl/logictestccl/testdata/logic_test/drop_index @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist-opt +# LogicTest: 5node-dist statement ok CREATE TABLE t ( diff --git a/pkg/ccl/logictestccl/testdata/logic_test/partitioning b/pkg/ccl/logictestccl/testdata/logic_test/partitioning index eb20a738d193..0774d5f74b01 100644 --- a/pkg/ccl/logictestccl/testdata/logic_test/partitioning +++ b/pkg/ccl/logictestccl/testdata/logic_test/partitioning @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement error syntax CREATE TABLE t (a INT, b INT, c INT, PRIMARY KEY (a, b)) PARTITION BY LIST () diff --git a/pkg/ccl/logictestccl/testdata/logic_test/partitioning_constrained_scans b/pkg/ccl/logictestccl/testdata/logic_test/partitioning_constrained_scans index da4381db08c6..a9a9eb6afa82 100644 --- a/pkg/ccl/logictestccl/testdata/logic_test/partitioning_constrained_scans +++ b/pkg/ccl/logictestccl/testdata/logic_test/partitioning_constrained_scans @@ -1,4 +1,4 @@ -# LogicTest: local-opt fakedist-opt +# LogicTest: local fakedist # Simple partitioning example. statement ok diff --git a/pkg/ccl/logictestccl/testdata/logic_test/partitioning_index b/pkg/ccl/logictestccl/testdata/logic_test/partitioning_index index 00dd1da8ba12..65e1b4275cd1 100644 --- a/pkg/ccl/logictestccl/testdata/logic_test/partitioning_index +++ b/pkg/ccl/logictestccl/testdata/logic_test/partitioning_index @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE ok1 ( diff --git a/pkg/ccl/logictestccl/testdata/logic_test/restore b/pkg/ccl/logictestccl/testdata/logic_test/restore index 209689edeff8..2855a1ae4f1d 100644 --- a/pkg/ccl/logictestccl/testdata/logic_test/restore +++ b/pkg/ccl/logictestccl/testdata/logic_test/restore @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local # Check that we get through parsing and license check. statement error pq: failed to read backup descriptor: unsupported storage scheme: "" diff --git a/pkg/ccl/logictestccl/testdata/logic_test/role b/pkg/ccl/logictestccl/testdata/logic_test/role index 7b58d84b1d6d..cd4fee6cec5f 100644 --- a/pkg/ccl/logictestccl/testdata/logic_test/role +++ b/pkg/ccl/logictestccl/testdata/logic_test/role @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local query T colnames SHOW ROLES diff --git a/pkg/ccl/logictestccl/testdata/logic_test/zone b/pkg/ccl/logictestccl/testdata/logic_test/zone index 06616f2023ce..c855b66b1464 100644 --- a/pkg/ccl/logictestccl/testdata/logic_test/zone +++ b/pkg/ccl/logictestccl/testdata/logic_test/zone @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist-opt +# LogicTest: 5node-dist # Ensure that cost-based-optimizer uses an index with zone constraints that most # closely matches the gateway's locality. Use "retry" option, since it can take diff --git a/pkg/sql/conn_executor_exec.go b/pkg/sql/conn_executor_exec.go index c0b268ceca8a..c82812ad5e84 100644 --- a/pkg/sql/conn_executor_exec.go +++ b/pkg/sql/conn_executor_exec.go @@ -24,7 +24,6 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgcode" "github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgerror" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" - "github.com/cockroachdb/cockroach/pkg/sql/sessiondata" "github.com/cockroachdb/cockroach/pkg/sql/sqlbase" "github.com/cockroachdb/cockroach/pkg/sql/types" "github.com/cockroachdb/cockroach/pkg/util/errorutil/unimplemented" @@ -659,13 +658,9 @@ func (ex *connExecutor) dispatchToExecutionEngine( ex.sessionTracing.TracePlanCheckStart(ctx) distributePlan := false - // If we use the optimizer and we are in "local" mode, don't try to - // distribute. - if ex.sessionData.OptimizerMode != sessiondata.OptimizerLocal { - planner.prepareForDistSQLSupportCheck() - distributePlan = shouldDistributePlan( - ctx, ex.sessionData.DistSQLMode, ex.server.cfg.DistSQLPlanner, planner.curPlan.plan) - } + planner.prepareForDistSQLSupportCheck() + distributePlan = shouldDistributePlan( + ctx, ex.sessionData.DistSQLMode, ex.server.cfg.DistSQLPlanner, planner.curPlan.plan) ex.sessionTracing.TracePlanCheckEnd(ctx, nil, distributePlan) if ex.server.cfg.TestingKnobs.BeforeExecute != nil { @@ -727,25 +722,16 @@ func (ex *connExecutor) makeExecPlan(ctx context.Context, planner *planner) erro // in error cases. planner.curPlan = planTop{AST: stmt.AST} - if optMode := ex.sessionData.OptimizerMode; optMode != sessiondata.OptimizerOff { - log.VEvent(ctx, 2, "generating optimizer plan") - var result *planTop - var err error - result, err = planner.makeOptimizerPlan(ctx) - if err != nil { - log.VEventf(ctx, 1, "optimizer plan failed: %v", err) - return err - } - planner.curPlan = *result - return nil + log.VEvent(ctx, 2, "generating optimizer plan") + var result *planTop + var err error + result, err = planner.makeOptimizerPlan(ctx) + if err != nil { + log.VEventf(ctx, 1, "optimizer plan failed: %v", err) + return err } - - log.VEvent(ctx, 2, "optimizer disabled") - // Use the heuristic planner. - optFlags := planner.curPlan.flags - err := planner.makePlan(ctx) - planner.curPlan.flags |= optFlags - return err + planner.curPlan = *result + return nil } // saveLogicalPlanDescription returns whether we should save this as a sample logical plan diff --git a/pkg/sql/conn_executor_prepare.go b/pkg/sql/conn_executor_prepare.go index eb2f83eeb50b..06d36e7b38c1 100644 --- a/pkg/sql/conn_executor_prepare.go +++ b/pkg/sql/conn_executor_prepare.go @@ -19,7 +19,6 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgerror" "github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgwirebase" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" - "github.com/cockroachdb/cockroach/pkg/sql/sessiondata" "github.com/cockroachdb/cockroach/pkg/sql/sqlbase" "github.com/cockroachdb/cockroach/pkg/util/fsm" "github.com/cockroachdb/cockroach/pkg/util/log" @@ -182,8 +181,6 @@ func (ex *connExecutor) populatePrepared( if err := p.semaCtx.Placeholders.Init(stmt.NumPlaceholders, placeholderHints); err != nil { return 0, err } - prepared := stmt.Prepared - p.extendedEvalCtx.PrepareOnly = true protoTS, err := p.isAsOf(stmt.AST) @@ -203,52 +200,14 @@ func (ex *connExecutor) populatePrepared( // As of right now, the optimizer only works on SELECT statements and will // fallback for all others, so this should be safe for the foreseeable // future. - var flags planFlags - if optMode := ex.sessionData.OptimizerMode; optMode != sessiondata.OptimizerOff { - log.VEvent(ctx, 2, "preparing using optimizer") - var err error - flags, err = p.prepareUsingOptimizer(ctx) - if err == nil { - log.VEvent(ctx, 2, "optimizer prepare succeeded") - // stmt.Prepared fields have been populated. - return flags, nil - } + flags, err := p.prepareUsingOptimizer(ctx) + if err != nil { log.VEventf(ctx, 1, "optimizer prepare failed: %v", err) return 0, err } - log.VEvent(ctx, 2, "optimizer disabled (prepare)") - - // Fallback on the heuristic planner if the optimizer was not enabled: create - // a plan for the statement to figure out the typing, then close the plan. - prepared.AnonymizedStr = anonymizeStmt(stmt.AST) - if err := p.prepare(ctx, stmt.AST); err != nil { - return 0, err - } - - if p.curPlan.plan == nil { - // Statement with no result columns and no support for placeholders. - // - // Note: we're combining `flags` which comes from - // `prepareUsingOptimizer`, with `p.curPlan.flags` which ensures - // the new flags combine with the existing flags (this is used - // e.g. to maintain the count of times the optimizer was used). - return flags | p.curPlan.flags, nil - } - defer p.curPlan.close(ctx) - - prepared.Columns = p.curPlan.columns() - for _, c := range prepared.Columns { - if err := checkResultType(c.Typ); err != nil { - return 0, err - } - } - // Verify that all placeholder types have been set. - if err := p.semaCtx.Placeholders.Types.AssertAllSet(); err != nil { - return 0, err - } - prepared.Types = p.semaCtx.Placeholders.Types - // The flags are combined, see the comment above for why. - return flags | p.curPlan.flags, nil + log.VEvent(ctx, 2, "optimizer prepare succeeded") + // stmt.Prepared fields have been populated. + return flags, nil } func (ex *connExecutor) execBind( diff --git a/pkg/sql/exec_util.go b/pkg/sql/exec_util.go index 5a35c9a21068..9f59d2b8cb19 100644 --- a/pkg/sql/exec_util.go +++ b/pkg/sql/exec_util.go @@ -115,15 +115,14 @@ var traceSessionEventLogEnabled = settings.RegisterBoolSetting( "set to true to enable session tracing", false, ) -// OptimizerClusterMode controls the cluster default for when the cost-based optimizer is used. -var OptimizerClusterMode = settings.RegisterEnumSetting( +// This used to control the cluster default for when the cost-based optimizer is used. +// It is deprecated; the only allowable setting is "on". +var _ = settings.RegisterEnumSetting( "sql.defaults.optimizer", "default cost-based optimizer mode", "on", map[int64]string{ - int64(sessiondata.OptimizerLocal): "local", - int64(sessiondata.OptimizerOff): "off", - int64(sessiondata.OptimizerOn): "on", + 1: "on", }, ) @@ -1824,10 +1823,6 @@ func (m *sessionDataMutator) SetVectorizeRowCountThreshold(val uint64) { m.data.VectorizeRowCountThreshold = val } -func (m *sessionDataMutator) SetOptimizerMode(val sessiondata.OptimizerMode) { - m.data.OptimizerMode = val -} - func (m *sessionDataMutator) SetOptimizerFKs(val bool) { m.data.OptimizerFKs = val } diff --git a/pkg/sql/logictest/logic.go b/pkg/sql/logictest/logic.go index fe7138579483..40fd0a2b3f06 100644 --- a/pkg/sql/logictest/logic.go +++ b/pkg/sql/logictest/logic.go @@ -260,7 +260,7 @@ import ( // files that lack LogicTest directives; must be one // of `logicTestConfigs`. // Example: -// -config local-opt,fakedist-opt +// -config local,fakedist // // Error mode: // @@ -380,8 +380,6 @@ type testClusterConfig struct { numNodes int useFakeSpanResolver bool // if non-empty, overrides the default optimizer mode. - overrideOptimizerMode string - // if non-empty, overrides the default distsql mode. overrideDistSQLMode string // if non-empty, overrides the default vectorize mode. overrideVectorize string @@ -412,32 +410,97 @@ type testClusterConfig struct { // If no configs are indicated, the default one is used (unless overridden // via -config). var logicTestConfigs = []testClusterConfig{ - {name: "local", numNodes: 1, overrideDistSQLMode: "off", overrideOptimizerMode: "off"}, - {name: "local-v1.1@v1.0-noupgrade", numNodes: 1, - overrideDistSQLMode: "off", overrideOptimizerMode: "off", + { + name: "local", + numNodes: 1, + overrideDistSQLMode: "off", + overrideAutoStats: "false", + }, + { + name: "local-v1.1@v1.0-noupgrade", + numNodes: 1, + overrideDistSQLMode: "off", + overrideAutoStats: "false", bootstrapVersion: cluster.ClusterVersion{ Version: roachpb.Version{Major: 1}, }, serverVersion: roachpb.Version{Major: 1, Minor: 1}, disableUpgrade: true, }, - {name: "local-opt", numNodes: 1, overrideDistSQLMode: "off", overrideOptimizerMode: "on", overrideAutoStats: "false"}, - {name: "local-vec", numNodes: 1, overrideOptimizerMode: "on", overrideVectorize: "experimental_on"}, - {name: "fakedist", numNodes: 3, useFakeSpanResolver: true, overrideDistSQLMode: "on", overrideOptimizerMode: "off"}, - {name: "fakedist-opt", numNodes: 3, useFakeSpanResolver: true, overrideDistSQLMode: "on", overrideOptimizerMode: "on", overrideAutoStats: "false"}, - {name: "fakedist-vec", numNodes: 3, useFakeSpanResolver: true, overrideDistSQLMode: "on", overrideOptimizerMode: "on", overrideAutoStats: "false", overrideVectorize: "experimental_on"}, - {name: "fakedist-metadata", numNodes: 3, useFakeSpanResolver: true, overrideDistSQLMode: "on", overrideOptimizerMode: "off", - distSQLMetadataTestEnabled: true, skipShort: true}, - {name: "fakedist-disk", numNodes: 3, useFakeSpanResolver: true, overrideDistSQLMode: "on", overrideOptimizerMode: "off", - distSQLUseDisk: true, skipShort: true}, - {name: "5node-local", numNodes: 5, overrideDistSQLMode: "off", overrideOptimizerMode: "off"}, - {name: "5node-dist", numNodes: 5, overrideDistSQLMode: "on", overrideOptimizerMode: "off"}, - {name: "5node-dist-vec", numNodes: 5, overrideDistSQLMode: "on", overrideOptimizerMode: "on", overrideVectorize: "experimental_on", overrideAutoStats: "false"}, - {name: "5node-dist-opt", numNodes: 5, overrideDistSQLMode: "on", overrideOptimizerMode: "on", overrideAutoStats: "false"}, - {name: "5node-dist-metadata", numNodes: 5, overrideDistSQLMode: "on", distSQLMetadataTestEnabled: true, - skipShort: true, overrideOptimizerMode: "off"}, - {name: "5node-dist-disk", numNodes: 5, overrideDistSQLMode: "on", distSQLUseDisk: true, skipShort: true, - overrideOptimizerMode: "off"}, + { + name: "local-vec", + numNodes: 1, + overrideAutoStats: "false", + overrideVectorize: "experimental_on", + }, + { + name: "fakedist", + numNodes: 3, + useFakeSpanResolver: true, + overrideDistSQLMode: "on", + overrideAutoStats: "false", + }, + { + name: "fakedist-vec", + numNodes: 3, + useFakeSpanResolver: true, + overrideDistSQLMode: "on", + overrideAutoStats: "false", + overrideVectorize: "experimental_on", + }, + { + name: "fakedist-metadata", + numNodes: 3, + useFakeSpanResolver: true, + overrideDistSQLMode: "on", + overrideAutoStats: "false", + distSQLMetadataTestEnabled: true, + skipShort: true, + }, + { + name: "fakedist-disk", + numNodes: 3, + useFakeSpanResolver: true, + overrideDistSQLMode: "on", + overrideAutoStats: "false", + distSQLUseDisk: true, + skipShort: true, + }, + { + name: "5node-local", + numNodes: 5, + overrideDistSQLMode: "off", + overrideAutoStats: "false", + }, + { + name: "5node-dist", + numNodes: 5, + overrideDistSQLMode: "on", + overrideAutoStats: "false", + }, + { + name: "5node-dist-vec", + numNodes: 5, + overrideDistSQLMode: "on", + overrideVectorize: "experimental_on", + overrideAutoStats: "false", + }, + { + name: "5node-dist-metadata", + numNodes: 5, + overrideDistSQLMode: "on", + distSQLMetadataTestEnabled: true, + skipShort: true, + overrideAutoStats: "false", + }, + { + name: "5node-dist-disk", + numNodes: 5, + overrideDistSQLMode: "on", + distSQLUseDisk: true, + skipShort: true, + overrideAutoStats: "false", + }, } func parseTestConfig(names []string) []logicTestConfigIdx { @@ -455,9 +518,7 @@ func parseTestConfig(names []string) []logicTestConfigIdx { var ( defaultConfigNames = []string{ "local", - "local-opt", "fakedist", - "fakedist-opt", "fakedist-metadata", "fakedist-disk", } @@ -923,12 +984,6 @@ func (t *logicTest) setUser(user string) func() { if err != nil { t.Fatal(err) } - // Enable the cost-based optimizer rather than the heuristic planner. - if optMode := t.cfg.overrideOptimizerMode; optMode != "" { - if _, err := db.Exec(fmt.Sprintf("SET OPTIMIZER = %s;", optMode)); err != nil { - t.Fatal(err) - } - } // The default value for extra_float_digits assumed by tests is // 0. However, lib/pq by default configures this to 2 during // connection initialization, so we need to set it back to 0 before diff --git a/pkg/sql/logictest/logic_test.go b/pkg/sql/logictest/logic_test.go index f9482c71a2e3..6df0e36c0e4e 100644 --- a/pkg/sql/logictest/logic_test.go +++ b/pkg/sql/logictest/logic_test.go @@ -32,18 +32,6 @@ func TestLogic(t *testing.T) { RunLogicTest(t, "testdata/logic_test/[^.]*") } -// TestPlannerLogic tests the heuristic planner by running EXPLAIN and SHOW -// TRACE queries that show the plan that was produced. These tests are split -// off from the TestLogic tests because the expected output is specific to how -// the planner works. The cost-based optimizer will often return different -// results for the same EXPLAIN statement, as it often chooses different ways -// to execute the same logical query. Note that the cost-based optimizer tests -// are housed in the various sql/opt packages. -func TestPlannerLogic(t *testing.T) { - defer leaktest.AfterTest(t)() - RunLogicTest(t, "testdata/planner_test/[^.]*") -} - // TestSqlLiteLogic runs the subset of SqlLite logic tests that do not require // support for correlated subqueries. The heuristic planner does not support // correlated subqueries, so until that is fully deprecated, it can only run diff --git a/pkg/sql/logictest/testdata/logic_test/aggregate-opt b/pkg/sql/logictest/testdata/logic_test/aggregate-opt index 5aa1eb9c134c..02f3fbceb6b9 100644 --- a/pkg/sql/logictest/testdata/logic_test/aggregate-opt +++ b/pkg/sql/logictest/testdata/logic_test/aggregate-opt @@ -1,4 +1,4 @@ -# LogicTest: local-opt fakedist-opt +# LogicTest: local fakedist statement ok CREATE TABLE tab ( diff --git a/pkg/sql/logictest/testdata/logic_test/apply_join b/pkg/sql/logictest/testdata/logic_test/apply_join index cc842dd2d395..9b069f95abaf 100644 --- a/pkg/sql/logictest/testdata/logic_test/apply_join +++ b/pkg/sql/logictest/testdata/logic_test/apply_join @@ -1,4 +1,4 @@ -# LogicTest: local-opt fakedist-opt +# LogicTest: local fakedist statement ok CREATE TABLE t (k INT PRIMARY KEY, str STRING); diff --git a/pkg/sql/logictest/testdata/logic_test/as_of b/pkg/sql/logictest/testdata/logic_test/as_of index 66f7fc3c3e34..5150a08678d5 100644 --- a/pkg/sql/logictest/testdata/logic_test/as_of +++ b/pkg/sql/logictest/testdata/logic_test/as_of @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local statement ok CREATE TABLE t (i INT) diff --git a/pkg/sql/logictest/testdata/logic_test/ccl b/pkg/sql/logictest/testdata/logic_test/ccl index 7de5054b9562..b5907b7380e8 100644 --- a/pkg/sql/logictest/testdata/logic_test/ccl +++ b/pkg/sql/logictest/testdata/logic_test/ccl @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local # CCL-only statements error out trying to handle the parsed statements. diff --git a/pkg/sql/logictest/testdata/logic_test/create_as b/pkg/sql/logictest/testdata/logic_test/create_as index f4dbbaf3eda0..a1c2dce743e9 100644 --- a/pkg/sql/logictest/testdata/logic_test/create_as +++ b/pkg/sql/logictest/testdata/logic_test/create_as @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local statement ok CREATE TABLE stock (item, quantity) AS VALUES ('cups', 10), ('plates', 15), ('forks', 30) diff --git a/pkg/sql/logictest/testdata/logic_test/create_as_opt b/pkg/sql/logictest/testdata/logic_test/create_as_opt index 813ea6032209..806aab1830f7 100644 --- a/pkg/sql/logictest/testdata/logic_test/create_as_opt +++ b/pkg/sql/logictest/testdata/logic_test/create_as_opt @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local # Test CREATE TABLE AS with a correlated subquery. statement ok diff --git a/pkg/sql/logictest/testdata/logic_test/database b/pkg/sql/logictest/testdata/logic_test/database index 7fdde8bc2184..283f3cbe5430 100644 --- a/pkg/sql/logictest/testdata/logic_test/database +++ b/pkg/sql/logictest/testdata/logic_test/database @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local statement ok CREATE DATABASE a diff --git a/pkg/sql/logictest/testdata/logic_test/distsql_agg b/pkg/sql/logictest/testdata/logic_test/distsql_agg index 9cca20ac5a0c..63daf9987277 100644 --- a/pkg/sql/logictest/testdata/logic_test/distsql_agg +++ b/pkg/sql/logictest/testdata/logic_test/distsql_agg @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist 5node-dist-opt 5node-dist-metadata 5node-dist-disk +# LogicTest: 5node-dist 5node-dist-metadata 5node-dist-disk statement ok CREATE TABLE data (a INT, b INT, c FLOAT, d DECIMAL, PRIMARY KEY (a, b, c, d)) diff --git a/pkg/sql/logictest/testdata/logic_test/distsql_automatic_stats b/pkg/sql/logictest/testdata/logic_test/distsql_automatic_stats index 50a474d53c9b..f67fd1830630 100644 --- a/pkg/sql/logictest/testdata/logic_test/distsql_automatic_stats +++ b/pkg/sql/logictest/testdata/logic_test/distsql_automatic_stats @@ -1,4 +1,4 @@ -# LogicTest: fakedist fakedist-opt fakedist-metadata +# LogicTest: fakedist fakedist-metadata # Disable automatic stats statement ok diff --git a/pkg/sql/logictest/testdata/logic_test/distsql_distinct_on b/pkg/sql/logictest/testdata/logic_test/distsql_distinct_on index 3bb7bab9c8b8..ef0363ea0c1b 100644 --- a/pkg/sql/logictest/testdata/logic_test/distsql_distinct_on +++ b/pkg/sql/logictest/testdata/logic_test/distsql_distinct_on @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist 5node-dist-metadata 5node-dist-opt 5node-dist-disk +# LogicTest: 5node-dist 5node-dist-metadata 5node-dist-disk statement ok CREATE TABLE xyz ( diff --git a/pkg/sql/logictest/testdata/logic_test/distsql_event_log b/pkg/sql/logictest/testdata/logic_test/distsql_event_log index 3b836b8250cb..03bd6016b366 100644 --- a/pkg/sql/logictest/testdata/logic_test/distsql_event_log +++ b/pkg/sql/logictest/testdata/logic_test/distsql_event_log @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist 5node-dist-opt 5node-dist-metadata +# LogicTest: 5node-dist 5node-dist-metadata ################### # CREATE STATISTICS diff --git a/pkg/sql/logictest/testdata/logic_test/distsql_interleaved_join b/pkg/sql/logictest/testdata/logic_test/distsql_interleaved_join index cfbf2e799f0e..c0d9ec6c1480 100644 --- a/pkg/sql/logictest/testdata/logic_test/distsql_interleaved_join +++ b/pkg/sql/logictest/testdata/logic_test/distsql_interleaved_join @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist 5node-dist-opt 5node-dist-metadata +# LogicTest: 5node-dist 5node-dist-metadata # The following tables form the interleaved hierarchy: # name: primary key: # rows: 'a' = id mod X : diff --git a/pkg/sql/logictest/testdata/logic_test/distsql_join b/pkg/sql/logictest/testdata/logic_test/distsql_join index cf2e340f2efb..ee5e1954950e 100644 --- a/pkg/sql/logictest/testdata/logic_test/distsql_join +++ b/pkg/sql/logictest/testdata/logic_test/distsql_join @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist 5node-dist-opt 5node-dist-metadata +# LogicTest: 5node-dist 5node-dist-metadata # Test that the distSQL MergeJoiner follows SQL NULL semantics for ON predicate # equivilance. The use of sorts here force the planning of merge join. diff --git a/pkg/sql/logictest/testdata/logic_test/distsql_numtables b/pkg/sql/logictest/testdata/logic_test/distsql_numtables index 46518159a740..6d3c9ed83021 100644 --- a/pkg/sql/logictest/testdata/logic_test/distsql_numtables +++ b/pkg/sql/logictest/testdata/logic_test/distsql_numtables @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist 5node-dist-opt 5node-dist-metadata 5node-dist-disk +# LogicTest: 5node-dist 5node-dist-metadata 5node-dist-disk # First, we set up two data tables: # - NumToSquare maps integers from 1 to 100 to their squares diff --git a/pkg/sql/logictest/testdata/logic_test/distsql_srfs b/pkg/sql/logictest/testdata/logic_test/distsql_srfs index e9cd87c7fa49..face789b112b 100644 --- a/pkg/sql/logictest/testdata/logic_test/distsql_srfs +++ b/pkg/sql/logictest/testdata/logic_test/distsql_srfs @@ -1,4 +1,4 @@ -# LogicTest: fakedist fakedist-opt fakedist-metadata +# LogicTest: fakedist fakedist-metadata statement ok CREATE TABLE data (a INT PRIMARY KEY) diff --git a/pkg/sql/logictest/testdata/logic_test/distsql_stats b/pkg/sql/logictest/testdata/logic_test/distsql_stats index c606aec68e36..ca0b9b933410 100644 --- a/pkg/sql/logictest/testdata/logic_test/distsql_stats +++ b/pkg/sql/logictest/testdata/logic_test/distsql_stats @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist 5node-dist-opt 5node-dist-metadata +# LogicTest: 5node-dist 5node-dist-metadata # Disable automatic stats. statement ok diff --git a/pkg/sql/logictest/testdata/logic_test/distsql_tighten_spans b/pkg/sql/logictest/testdata/logic_test/distsql_tighten_spans index c02ff2a369bf..5974d27f9d18 100644 --- a/pkg/sql/logictest/testdata/logic_test/distsql_tighten_spans +++ b/pkg/sql/logictest/testdata/logic_test/distsql_tighten_spans @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist 5node-dist-opt 5node-dist-metadata +# LogicTest: 5node-dist 5node-dist-metadata # This test verifies that we correctly tighten spans during index selection as # well as after partitioning spans in distsql. diff --git a/pkg/sql/logictest/testdata/logic_test/distsql_union b/pkg/sql/logictest/testdata/logic_test/distsql_union index 95c3360a6452..724c29310a46 100644 --- a/pkg/sql/logictest/testdata/logic_test/distsql_union +++ b/pkg/sql/logictest/testdata/logic_test/distsql_union @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist 5node-dist-opt 5node-dist-metadata 5node-dist-disk +# LogicTest: 5node-dist 5node-dist-metadata 5node-dist-disk statement ok CREATE TABLE xyz ( diff --git a/pkg/sql/logictest/testdata/logic_test/drop_database b/pkg/sql/logictest/testdata/logic_test/drop_database index ccbee6748b6e..fc8768cd2aaf 100644 --- a/pkg/sql/logictest/testdata/logic_test/drop_database +++ b/pkg/sql/logictest/testdata/logic_test/drop_database @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local statement ok CREATE DATABASE "foo-bar" diff --git a/pkg/sql/logictest/testdata/logic_test/drop_index b/pkg/sql/logictest/testdata/logic_test/drop_index index 61b316c7e680..e66f6177bd12 100644 --- a/pkg/sql/logictest/testdata/logic_test/drop_index +++ b/pkg/sql/logictest/testdata/logic_test/drop_index @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local statement ok CREATE TABLE users ( diff --git a/pkg/sql/logictest/testdata/logic_test/drop_table b/pkg/sql/logictest/testdata/logic_test/drop_table index fa3dea7d1324..5f70e3f7b76e 100644 --- a/pkg/sql/logictest/testdata/logic_test/drop_table +++ b/pkg/sql/logictest/testdata/logic_test/drop_table @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local statement ok CREATE TABLE a (id INT PRIMARY KEY) diff --git a/pkg/sql/logictest/testdata/logic_test/drop_user b/pkg/sql/logictest/testdata/logic_test/drop_user index 8a90a4a8a7b6..ff278b928098 100644 --- a/pkg/sql/logictest/testdata/logic_test/drop_user +++ b/pkg/sql/logictest/testdata/logic_test/drop_user @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local statement ok CREATE USER user1 diff --git a/pkg/sql/logictest/testdata/logic_test/drop_view b/pkg/sql/logictest/testdata/logic_test/drop_view index 2468d7106415..decd7638c6ad 100644 --- a/pkg/sql/logictest/testdata/logic_test/drop_view +++ b/pkg/sql/logictest/testdata/logic_test/drop_view @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local statement ok CREATE TABLE a (k STRING PRIMARY KEY, v STRING) diff --git a/pkg/sql/logictest/testdata/logic_test/explain_analyze b/pkg/sql/logictest/testdata/logic_test/explain_analyze index f51e8a7d7d6f..d81521b7c3f2 100644 --- a/pkg/sql/logictest/testdata/logic_test/explain_analyze +++ b/pkg/sql/logictest/testdata/logic_test/explain_analyze @@ -1,4 +1,4 @@ -# LogicTest: fakedist fakedist-opt +# LogicTest: fakedist # Regression tests for weird explain analyze cases. diff --git a/pkg/sql/logictest/testdata/logic_test/explain_analyze_plans b/pkg/sql/logictest/testdata/logic_test/explain_analyze_plans index 0994ea5fd27b..951425823e3d 100644 --- a/pkg/sql/logictest/testdata/logic_test/explain_analyze_plans +++ b/pkg/sql/logictest/testdata/logic_test/explain_analyze_plans @@ -32,7 +32,7 @@ ALTER TABLE kw EXPERIMENTAL_RELOCATE SELECT ARRAY[i], i FROM generate_series(1, # statistics. # Verify data placement. -query TTTI colnames +query TTTI colnames,rowsort SELECT start_key, end_key, replicas, lease_holder from [SHOW RANGES FROM TABLE kv] ---- start_key end_key replicas lease_holder @@ -44,7 +44,7 @@ NULL /1 {1} 1 /5 NULL {5} 5 # Verify data placement. -query TTTI colnames +query TTTI colnames,rowsort SELECT start_key, end_key, replicas, lease_holder from [SHOW RANGES FROM TABLE kw] ---- start_key end_key replicas lease_holder @@ -66,7 +66,7 @@ https://cockroachdb.github.io/distsqlplan/decode.html#eJzcWF1vo0YUfe-vQPO01WLBDO query T SELECT url FROM [EXPLAIN ANALYZE (DISTSQL) SELECT DISTINCT(kw.w) FROM kv JOIN kw ON kv.k = kw.w ORDER BY kw.w] ---- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzkWNFuo0YUfe9XoPvUqlgwAzg2UqVo1YduKzXVbt8qPxAzjdHaYM2Muxut8u8V2BYBnLlDTGZGylsMXObcy5lz5uQ7lFXO_sx2TED6DxDwgYIPEfgQgw8JrHzY82rNhKh4_cix4GP-DdLQh6LcH2R9eeXDuuIM0u8gC7llkMLf2f2WfWJZzngQgg85k1mxbZbZ82KX8cfbL_-BD5_3WSlSbxbUC98dZOrd1jB49VV4nGV56tU_hcy2W08WO5Z6oQAf7h8lOz9Al94HWD35UB3kCVCL4_7R22Ri00VwS2D1tGpe-8AgJU_-6xqbv9DY17axgDxvjZpujb7YWvueQ1nxnHGWd960qiuxRy7M57dMbH6vipLxgPQ-_Jb9K3-8JT_9wouHTfNXZzD1ba83nebaYERNff_R48XBs0JWnOWeKHKWes0z4MMu--bt2K7ij95BsHrQofdH8eF0Jy_El9P1cDD_drbRGNp8rrisR5L0P9fPGpQYwCWvgBuPgftrIWRRrmVAwwG_fLg7kkFzrw7Qq1AmGoS9xMVmkhcJ2bYymL2qleTqVuadVoi-rBBcLwM6CyJXFHNEazcaitlpzbJiEsOKSa5SzFBfMUNNxaxf9xLxr1BLhDJntZwjahlqb9IrpBLB2uoLGaMv-tD1pJLqb0KqoS_RLIhd0ZcRrS009KXTmmV9oYb1hb4TfUEoc9aXGxf0BcHa6gu1qS-R_iaMNPQlngWJK_oyorWlhr50WrOsL5FhfYmu0pdYX19i-4kPoc1ZYxaIxsSGEh8Ct5WZaIzM6KHXl5lYfy_GGjKTzFwRmRGNJbjIzALiZWXuEa-SG8ZdkZvYsNzE7-Q4g5DnLDVLF44zCNZWZ2Kbxxnk_1-fmNhXpWB9xl58c1jTlOUP7Eh7UR34mv3Fq3WzzPHnXVPXhMmcCXm8S48_PpbnW0JmzbtPnVcHyU69D1u98I2g2VP66y-mXv8sLoKV8hV4SOQaIM0JEVOAqPkJkREUpm9AYfX6i6nXv3IePQo7AEhzQhNSGGGM-QnRPqDwOaAunrBfHCmLY3VxrCxOupu5X5woi-m8u_QbbL25WfdCv6Maz-RuNnJ9C-6FADLvXghjzE_oxqx7XYlncjcbub4F90IAmXcvhDHmJ7RQ2sBSbUBLZTEJ1dVkcBpV-dezWWAnhDGHSiOH3DGnTAcATe81oxGYNxeMNRay0eBkadleEEAW0pIa0PSGMxqBhXyEsMZChFSHHIKkHKKOOSRBytVB5_Uu41p-QQBZcBnnEg2GaHLXGc0aCzNxLcQggCy4jHOxBkM0ueuMZo2FmaiTDEGiDFFnGYpkGfpGWYZOkmUmPF4ggMy7DALIgstgiJyb0fSuM0QwSZaZkseuZRkEkAWXwRA5N6PpXWeIQJ1lKJJlqDrLUCTL0KmyzOrph_8DAAD__5BI_B4= +https://cockroachdb.github.io/distsqlplan/decode.html#eJzkWV1v2zYUfd-vIO7ThsmQSEmOLWBAUOxh3YB1aPc2-EGxuFioLRkkvTYo8t8HyQ4ciQk_LJY0kLfqg-K5l-fc0xN_g6at6J_ljnIo_gEMERCIIIUIMoggh1UEe9auKect6145LnhffYUiiaBu9gfR3V5FsG4ZheIbiFpsKRTwd3m3pR9pWVEWJxBBRUVZb_tt9qzelezh9vN_EMGnfdnwAs3ibuMPB1Gg2w4Ga79wxGhZFai75KLcbpGod7RACYcI7h4EfXqBLNE7WD1G0B7ECdAZx90D2pR8M0Rwi2H1uOo_e0-hwI_RZYXNXynsy7mwGD8vjfgujbxa2vk7h6ZlFWW0Gnxp1a3UvfJCf34r-eb3tm4oi_Ho4Lf0X_HjLf7pF1bfb_p_DRrTPUaj7vT3pBb168evHm9K73LRMlohXle0QP07EMGu_Ip2dNeyB3TgtGt0gv6o352eVDX_fLqfSP0_9za1oc2vNRd1sxYxzqUD03NCwqvClU04cxVykqiR55OR5zYd_dQyQVlM8BjVz5fAwhcQYD6Ai83nBtYPxJjM4vRaRqJFaTcGI3FQWuCRiD2PRDxpJCbmIzExHInd517T6YRxqKHMeRzO1UMlcTwOiTmViYFK01mcXYtKLUpbGKh0UFpglRLPKiVvRKUaypxVeuNXpak5lVMDlWazOL8WlVqUtjRQ6aC0wCpNPas0naTSzFylWfh4oaHNWakLtVIzx0rNzOmcGSg1n12LTi0Ky_U6ncUYlU2FMGrFhrJrUWzmWbHZG_FVDXnOal369VVNpP5I-b5tOB2f-4tfTrrDptU9PZKHtwe2pn-xdt1vc7z80K_r00BFuTg-JceL983TIy7K_tunytuDoKfa5VJfOBXomWm-_8L1_k8S5bQRF-DBzhsyFdDcDBD2BYgk3juELShMvgOF1fsvXO8_sR_YeUOmApqbAXJIYQ1jEu8dImNAyXNA6QBPMl6cKhdnQz2OF2fKxbl651y5mAyZlnwH6c39upf2HNV4nLuZ5f4B3EsDyL97aRjj371u_LrXRDzO3cxy_wDupQHk3700jPHvXgulDSzVHrK0ca9nxegs3nOw0f-f49qSjgaQe7OwRuDfHXSsCRBuPKebqYACxB3feccaQYCAc3UJB6sjDtZkHGwVcixsQso_oW1CDSiATagBBcgUOkTObcOaNQFsQorioW1CDSiATagBhfizmAaRc9uwZk0Am5Dy-dAmbjQ2IWUjRzYhRZxLbMKlwasBBbAJNaAQNqFBZGgT_hC5tw0ZgZS2L7EJlzxWAwpgE2pAIWxCg8jQJvwhcm8b8u8lUk4f_vKA1TZBpHh0oU2sHn_4PwAA__-RJ7dt # This query verifies stats collection for WITH ORDINALITY and the hashJoiner. query T diff --git a/pkg/sql/logictest/testdata/logic_test/fk_opt b/pkg/sql/logictest/testdata/logic_test/fk_opt index 5ceec03137ba..7849b50080fd 100644 --- a/pkg/sql/logictest/testdata/logic_test/fk_opt +++ b/pkg/sql/logictest/testdata/logic_test/fk_opt @@ -1,4 +1,4 @@ -# LogicTest: local-opt fakedist-opt +# LogicTest: local fakedist statement ok SET experimental_optimizer_foreign_keys = true diff --git a/pkg/sql/logictest/testdata/logic_test/grant_database b/pkg/sql/logictest/testdata/logic_test/grant_database index cec6c1f41f1d..7e90b6354985 100644 --- a/pkg/sql/logictest/testdata/logic_test/grant_database +++ b/pkg/sql/logictest/testdata/logic_test/grant_database @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local statement ok CREATE DATABASE a diff --git a/pkg/sql/logictest/testdata/logic_test/grant_table b/pkg/sql/logictest/testdata/logic_test/grant_table index df17cc379c47..023d547e01e1 100644 --- a/pkg/sql/logictest/testdata/logic_test/grant_table +++ b/pkg/sql/logictest/testdata/logic_test/grant_table @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local statement ok CREATE DATABASE a diff --git a/pkg/sql/logictest/testdata/logic_test/information_schema b/pkg/sql/logictest/testdata/logic_test/information_schema index a1d3c4e1525f..04509802287c 100644 --- a/pkg/sql/logictest/testdata/logic_test/information_schema +++ b/pkg/sql/logictest/testdata/logic_test/information_schema @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local # Verify information_schema database handles mutation statements correctly. diff --git a/pkg/sql/logictest/testdata/logic_test/interleaved b/pkg/sql/logictest/testdata/logic_test/interleaved index 8b2cadfb3c06..40e23064feef 100644 --- a/pkg/sql/logictest/testdata/logic_test/interleaved +++ b/pkg/sql/logictest/testdata/logic_test/interleaved @@ -1,4 +1,4 @@ -# LogicTest: local local-opt local-vec fakedist fakedist-opt fakedist-metadata +# LogicTest: local local-vec fakedist fakedist-metadata # Grandparent table statement ok diff --git a/pkg/sql/logictest/testdata/logic_test/locality b/pkg/sql/logictest/testdata/logic_test/locality index abf9ef071ca6..d59e572cf22c 100644 --- a/pkg/sql/logictest/testdata/logic_test/locality +++ b/pkg/sql/logictest/testdata/logic_test/locality @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist 5node-dist-opt +# LogicTest: 5node-dist query T SELECT crdb_internal.locality_value('region') diff --git a/pkg/sql/logictest/testdata/logic_test/lookup_join b/pkg/sql/logictest/testdata/logic_test/lookup_join index 57e6288ca9c5..a8670d68f74f 100644 --- a/pkg/sql/logictest/testdata/logic_test/lookup_join +++ b/pkg/sql/logictest/testdata/logic_test/lookup_join @@ -1,4 +1,4 @@ -# LogicTest: fakedist-opt local-opt +# LogicTest: fakedist local statement ok CREATE TABLE abc (a INT, b INT, c INT, PRIMARY KEY (a, c)); diff --git a/pkg/sql/logictest/testdata/logic_test/numeric_references b/pkg/sql/logictest/testdata/logic_test/numeric_references index 4be31f18eb0e..6cf17d1207eb 100644 --- a/pkg/sql/logictest/testdata/logic_test/numeric_references +++ b/pkg/sql/logictest/testdata/logic_test/numeric_references @@ -1,4 +1,4 @@ -# LogicTest: local-opt local +# LogicTest: local statement ok CREATE TABLE x (a INT PRIMARY KEY, xx INT, b INT, c INT, INDEX bc (b,c)) diff --git a/pkg/sql/logictest/testdata/logic_test/numeric_references_opt b/pkg/sql/logictest/testdata/logic_test/numeric_references_opt index a32f3b972366..c17d437afdb6 100644 --- a/pkg/sql/logictest/testdata/logic_test/numeric_references_opt +++ b/pkg/sql/logictest/testdata/logic_test/numeric_references_opt @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local # ------------------------------------------------------------------------------ # Numeric References Tests. # These are put at the beginning of the file to ensure the numeric table diff --git a/pkg/sql/logictest/testdata/logic_test/optimizer b/pkg/sql/logictest/testdata/logic_test/optimizer deleted file mode 100644 index fdc13b8ce941..000000000000 --- a/pkg/sql/logictest/testdata/logic_test/optimizer +++ /dev/null @@ -1,91 +0,0 @@ -statement ok -CREATE TABLE t (k INT PRIMARY KEY, v INT) - -statement ok -CREATE VIEW tview AS SELECT k, v FROM t - -statement ok -INSERT INTO t VALUES (1, 10), (2, 20), (3, 30) - -statement ok -CREATE TABLE xy (x INT PRIMARY KEY, y INT) - -statement ok -INSERT INTO xy VALUES (2, 200), (3, 300), (4, 400) - -statement ok -SET OPTIMIZER = ON - -# ParenSelect -query II rowsort -(SELECT * FROM test.t) ----- -1 10 -2 20 -3 30 - -# Select -query II -SELECT * FROM test.t ORDER BY 1-t.k ----- -3 30 -2 20 -1 10 - -# SelectClause -query II rowsort -SELECT * FROM test.t ----- -1 10 -2 20 -3 30 - -# UnionClause -query II rowsort -SELECT * FROM test.t UNION SELECT * FROM test.t ----- -1 10 -2 20 -3 30 - -# Correlated subquery (only supported by cost-based optimizer) -query II rowsort -SELECT * FROM t WHERE EXISTS(SELECT * FROM xy WHERE x=t.k) ----- -2 20 -3 30 - -# Insert -statement ok -INSERT INTO t VALUES (4, 40) - -query B -SELECT EXISTS(SELECT * FROM t WHERE k > 2) ----- -true - -query II rowsort -SELECT * FROM test.t WHERE 2*v > (SELECT max(v) FROM test.t) ----- -3 30 -4 40 - -query II rowsort -SELECT * FROM tview ----- -1 10 -2 20 -3 30 -4 40 - -statement ok -SET OPTIMIZER = LOCAL - -# In local mode, we should always get the results in order (no rowsort). -query II -SELECT * FROM test.t ----- -1 10 -2 20 -3 30 -4 40 diff --git a/pkg/sql/logictest/testdata/logic_test/ordinality b/pkg/sql/logictest/testdata/logic_test/ordinality index f53afdb638c8..cd6efc76ae35 100644 --- a/pkg/sql/logictest/testdata/logic_test/ordinality +++ b/pkg/sql/logictest/testdata/logic_test/ordinality @@ -1,4 +1,4 @@ -# LogicTest: local local-opt fakedist fakedist-opt fakedist-metadata fakedist-disk fakedist-vec +# LogicTest: local fakedist fakedist-metadata fakedist-disk fakedist-vec query TI colnames SELECT * FROM (VALUES ('a'), ('b')) WITH ORDINALITY AS x(name, i) diff --git a/pkg/sql/logictest/testdata/logic_test/orms b/pkg/sql/logictest/testdata/logic_test/orms index aa29e67b80cc..f6db57c5a8c5 100644 --- a/pkg/sql/logictest/testdata/logic_test/orms +++ b/pkg/sql/logictest/testdata/logic_test/orms @@ -1,6 +1,6 @@ # TODO(mjibson): The fakedist-disk config produces an error. When fixed, # remove this config line. See #38985. -# LogicTest: local local-opt fakedist fakedist-opt fakedist-metadata +# LogicTest: local fakedist fakedist-metadata ## This test file contains various complex queries that ORMs issue during ## startup or general use. diff --git a/pkg/sql/logictest/testdata/logic_test/orms-opt b/pkg/sql/logictest/testdata/logic_test/orms-opt index a46796550169..384789a662ec 100644 --- a/pkg/sql/logictest/testdata/logic_test/orms-opt +++ b/pkg/sql/logictest/testdata/logic_test/orms-opt @@ -1,4 +1,4 @@ -# LogicTest: local-opt fakedist-opt +# LogicTest: local fakedist ## This test file contains various complex queries that ORMs issue during ## startup or general use, that pre-CBO code can't handle. This file should be diff --git a/pkg/sql/logictest/testdata/logic_test/overflow b/pkg/sql/logictest/testdata/logic_test/overflow index c88b1672682f..fc6bdde55116 100644 --- a/pkg/sql/logictest/testdata/logic_test/overflow +++ b/pkg/sql/logictest/testdata/logic_test/overflow @@ -1,4 +1,4 @@ -# LogicTest: local-vec local-opt fakedist fakedist-opt fakedist-metadata fakedist-vec +# LogicTest: local local-vec fakedist fakedist-metadata fakedist-vec # Test for overflow handling in sum aggregate. diff --git a/pkg/sql/logictest/testdata/logic_test/partitioning b/pkg/sql/logictest/testdata/logic_test/partitioning index 5228a1e52640..22a32d68d9d0 100644 --- a/pkg/sql/logictest/testdata/logic_test/partitioning +++ b/pkg/sql/logictest/testdata/logic_test/partitioning @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local statement error pgcode XXC01 creating or manipulating partitions requires a CCL binary CREATE TABLE t (a INT, b INT, c INT, PRIMARY KEY (a, b)) PARTITION BY LIST (a) ( diff --git a/pkg/sql/logictest/testdata/logic_test/pg_catalog b/pkg/sql/logictest/testdata/logic_test/pg_catalog index 91a1b91309a0..f7afea0669f6 100644 --- a/pkg/sql/logictest/testdata/logic_test/pg_catalog +++ b/pkg/sql/logictest/testdata/logic_test/pg_catalog @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local statement ok SET CLUSTER SETTING sql.stats.automatic_collection.enabled = false diff --git a/pkg/sql/logictest/testdata/logic_test/prepare b/pkg/sql/logictest/testdata/logic_test/prepare index f0c55a5a88b0..a003a697b698 100644 --- a/pkg/sql/logictest/testdata/logic_test/prepare +++ b/pkg/sql/logictest/testdata/logic_test/prepare @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local ## Tests for ensuring that prepared statements can't get overwritten and for ## deallocate and deallocate all. diff --git a/pkg/sql/logictest/testdata/logic_test/prepare_opt_plan b/pkg/sql/logictest/testdata/logic_test/prepare_opt_plan index 9a01bf0b3f95..aa6a339b7bb6 100644 --- a/pkg/sql/logictest/testdata/logic_test/prepare_opt_plan +++ b/pkg/sql/logictest/testdata/logic_test/prepare_opt_plan @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local # TODO(radu): when we no longer have a heuristic planner, merge this file with # the rest of the prepare tests. diff --git a/pkg/sql/logictest/testdata/logic_test/ranges b/pkg/sql/logictest/testdata/logic_test/ranges index f4358a4bc19f..d033f3c68f0d 100644 --- a/pkg/sql/logictest/testdata/logic_test/ranges +++ b/pkg/sql/logictest/testdata/logic_test/ranges @@ -1,4 +1,4 @@ -# LogicTest: 5node-local 5node-dist-opt +# LogicTest: 5node-local 5node-dist statement ok CREATE TABLE t (k1 INT, k2 INT, v INT, w INT, PRIMARY KEY (k1, k2)) diff --git a/pkg/sql/logictest/testdata/logic_test/reset b/pkg/sql/logictest/testdata/logic_test/reset index c0055dfc8f4e..e9e547a4f173 100644 --- a/pkg/sql/logictest/testdata/logic_test/reset +++ b/pkg/sql/logictest/testdata/logic_test/reset @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local statement error unrecognized configuration parameter "foo" RESET FOO diff --git a/pkg/sql/logictest/testdata/logic_test/role b/pkg/sql/logictest/testdata/logic_test/role index 54d52fbdad54..a748a5ec038d 100644 --- a/pkg/sql/logictest/testdata/logic_test/role +++ b/pkg/sql/logictest/testdata/logic_test/role @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local query T colnames SHOW ROLES diff --git a/pkg/sql/logictest/testdata/logic_test/save_table b/pkg/sql/logictest/testdata/logic_test/save_table index 2a77799f0384..d404dc804038 100644 --- a/pkg/sql/logictest/testdata/logic_test/save_table +++ b/pkg/sql/logictest/testdata/logic_test/save_table @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local # savetables is the name of the database where tables created by the # saveTableNode are stored. diff --git a/pkg/sql/logictest/testdata/logic_test/scatter b/pkg/sql/logictest/testdata/logic_test/scatter index 2482f1184a15..5e9902a0d6ec 100644 --- a/pkg/sql/logictest/testdata/logic_test/scatter +++ b/pkg/sql/logictest/testdata/logic_test/scatter @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local statement ok CREATE TABLE t (a INT PRIMARY KEY) diff --git a/pkg/sql/logictest/testdata/logic_test/select b/pkg/sql/logictest/testdata/logic_test/select index 12d8fcc62bd6..a26c88f51e02 100644 --- a/pkg/sql/logictest/testdata/logic_test/select +++ b/pkg/sql/logictest/testdata/logic_test/select @@ -1,4 +1,4 @@ -# LogicTest: local local-opt local-vec fakedist fakedist-opt fakedist-metadata +# LogicTest: local local-vec fakedist fakedist-metadata # SELECT with no table. diff --git a/pkg/sql/logictest/testdata/logic_test/sequences_distsql b/pkg/sql/logictest/testdata/logic_test/sequences_distsql index a30106b2c689..b53cff55472d 100644 --- a/pkg/sql/logictest/testdata/logic_test/sequences_distsql +++ b/pkg/sql/logictest/testdata/logic_test/sequences_distsql @@ -1,4 +1,4 @@ -# LogicTest: fakedist fakedist-opt fakedist-metadata +# LogicTest: fakedist fakedist-metadata # Test that sequence functions work in DistSQL queries. diff --git a/pkg/sql/logictest/testdata/logic_test/set b/pkg/sql/logictest/testdata/logic_test/set index e288fa33e241..9cf992f5a62e 100644 --- a/pkg/sql/logictest/testdata/logic_test/set +++ b/pkg/sql/logictest/testdata/logic_test/set @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local statement error unrecognized configuration parameter "foo" SET foo = bar @@ -186,10 +186,10 @@ SET vectorize = bogus statement ok SET optimizer = on -statement ok +statement error invalid value for parameter "optimizer": "local" SET optimizer = local -statement ok +statement error invalid value for parameter "optimizer": "off" SET optimizer = off statement error invalid value for parameter "optimizer": "bogus" diff --git a/pkg/sql/logictest/testdata/logic_test/show_source b/pkg/sql/logictest/testdata/logic_test/show_source index 9fe075827d4c..4685c8936861 100644 --- a/pkg/sql/logictest/testdata/logic_test/show_source +++ b/pkg/sql/logictest/testdata/logic_test/show_source @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local query T colnames SELECT * FROM [SHOW client_encoding] diff --git a/pkg/sql/logictest/testdata/logic_test/statement_statistics b/pkg/sql/logictest/testdata/logic_test/statement_statistics index c30a1a828d3d..0db7a5131ae5 100644 --- a/pkg/sql/logictest/testdata/logic_test/statement_statistics +++ b/pkg/sql/logictest/testdata/logic_test/statement_statistics @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local # Check that node_statement_statistics report per application diff --git a/pkg/sql/logictest/testdata/logic_test/subquery-opt b/pkg/sql/logictest/testdata/logic_test/subquery-opt index 4bcf495572cb..9082a8d6db55 100644 --- a/pkg/sql/logictest/testdata/logic_test/subquery-opt +++ b/pkg/sql/logictest/testdata/logic_test/subquery-opt @@ -1,4 +1,4 @@ -# LogicTest: local-opt fakedist-opt +# LogicTest: local fakedist # Regression test for #37263. This test is broken in the heuristic planner # because it does not correctly type check subqueries. diff --git a/pkg/sql/logictest/testdata/logic_test/subquery_correlated b/pkg/sql/logictest/testdata/logic_test/subquery_correlated index bc72d4ba991f..6e799c7ca825 100644 --- a/pkg/sql/logictest/testdata/logic_test/subquery_correlated +++ b/pkg/sql/logictest/testdata/logic_test/subquery_correlated @@ -1,4 +1,4 @@ -# LogicTest: local-opt fakedist-opt +# LogicTest: local fakedist # ------------------------------------------------------------------------------ # Create a simple schema that models customers and orders. Each customer has an diff --git a/pkg/sql/logictest/testdata/logic_test/target_names b/pkg/sql/logictest/testdata/logic_test/target_names index af9a1be41794..1a97ac11e772 100644 --- a/pkg/sql/logictest/testdata/logic_test/target_names +++ b/pkg/sql/logictest/testdata/logic_test/target_names @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local statement ok CREATE TABLE t(a INT[], t STRING); diff --git a/pkg/sql/logictest/testdata/logic_test/txn_as_of b/pkg/sql/logictest/testdata/logic_test/txn_as_of index e8c3a3a27f50..737f06ad0c39 100644 --- a/pkg/sql/logictest/testdata/logic_test/txn_as_of +++ b/pkg/sql/logictest/testdata/logic_test/txn_as_of @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local statement ok CREATE TABLE t (i INT) diff --git a/pkg/sql/logictest/testdata/logic_test/txn_retry b/pkg/sql/logictest/testdata/logic_test/txn_retry index 3a3f082777a3..fc5834e9774c 100644 --- a/pkg/sql/logictest/testdata/logic_test/txn_retry +++ b/pkg/sql/logictest/testdata/logic_test/txn_retry @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local # Check that we auto-retry pushed transactions which can't be refreshed - if # they're pushed while we can still auto-retry them. diff --git a/pkg/sql/logictest/testdata/logic_test/typing b/pkg/sql/logictest/testdata/logic_test/typing index 8605d33cdecb..7c520c8c3214 100644 --- a/pkg/sql/logictest/testdata/logic_test/typing +++ b/pkg/sql/logictest/testdata/logic_test/typing @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local statement ok CREATE TABLE f (x FLOAT) diff --git a/pkg/sql/logictest/testdata/logic_test/union b/pkg/sql/logictest/testdata/logic_test/union index 276cd048c167..fd0125cc40a1 100644 --- a/pkg/sql/logictest/testdata/logic_test/union +++ b/pkg/sql/logictest/testdata/logic_test/union @@ -1,6 +1,6 @@ # TODO(mjibson): The fakedist-disk config produces a panic. When fixed, # remove this config line. See #38987. -# LogicTest: local local-opt fakedist fakedist-opt fakedist-metadata +# LogicTest: local fakedist fakedist-metadata query I rowsort VALUES (1), (1), (1), (2), (2) UNION VALUES (1), (3), (1) diff --git a/pkg/sql/logictest/testdata/logic_test/union-opt b/pkg/sql/logictest/testdata/logic_test/union-opt index be62fb387699..ddfa97f0fd59 100644 --- a/pkg/sql/logictest/testdata/logic_test/union-opt +++ b/pkg/sql/logictest/testdata/logic_test/union-opt @@ -1,4 +1,4 @@ -# LogicTest: local-opt fakedist-opt +# LogicTest: local fakedist # This test is broken in the heuristic planner. It pushes down the filter when # it shouldn't because of the composite type in the filter condition. diff --git a/pkg/sql/logictest/testdata/logic_test/update_from b/pkg/sql/logictest/testdata/logic_test/update_from index 6028ca4aa528..bef4f10f80ef 100644 --- a/pkg/sql/logictest/testdata/logic_test/update_from +++ b/pkg/sql/logictest/testdata/logic_test/update_from @@ -1,4 +1,4 @@ -# LogicTest: local-opt fakedist-opt +# LogicTest: local fakedist statement ok CREATE TABLE abc (a int primary key, b int, c int) diff --git a/pkg/sql/logictest/testdata/logic_test/user b/pkg/sql/logictest/testdata/logic_test/user index 7d83ccd4401c..b32961b3a608 100644 --- a/pkg/sql/logictest/testdata/logic_test/user +++ b/pkg/sql/logictest/testdata/logic_test/user @@ -1,4 +1,4 @@ -# LogicTest: local local-opt +# LogicTest: local query T colnames SHOW USERS diff --git a/pkg/sql/logictest/testdata/logic_test/vectorize_threshold b/pkg/sql/logictest/testdata/logic_test/vectorize_threshold index 6920a223fb7f..32ad69bb36a9 100644 --- a/pkg/sql/logictest/testdata/logic_test/vectorize_threshold +++ b/pkg/sql/logictest/testdata/logic_test/vectorize_threshold @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist-opt +# LogicTest: 5node-dist # Disable automatic stats. statement ok diff --git a/pkg/sql/logictest/testdata/logic_test/views_opt b/pkg/sql/logictest/testdata/logic_test/views_opt index 8ac70d8f3ac3..8b3e6713f904 100644 --- a/pkg/sql/logictest/testdata/logic_test/views_opt +++ b/pkg/sql/logictest/testdata/logic_test/views_opt @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE ab (a INT PRIMARY KEY, b INT) diff --git a/pkg/sql/logictest/testdata/logic_test/window b/pkg/sql/logictest/testdata/logic_test/window index 2fd272a30416..6af08c28b7f7 100644 --- a/pkg/sql/logictest/testdata/logic_test/window +++ b/pkg/sql/logictest/testdata/logic_test/window @@ -1,4 +1,4 @@ -# LogicTest: local local-opt fakedist fakedist-opt fakedist-metadata 5node-local 5node-dist 5node-dist-opt 5node-dist-metadata 5node-dist-disk +# LogicTest: local fakedist fakedist-metadata 5node-local 5node-dist 5node-dist-metadata 5node-dist-disk statement ok CREATE TABLE kv ( diff --git a/pkg/sql/logictest/testdata/logic_test/with-hp b/pkg/sql/logictest/testdata/logic_test/with-hp deleted file mode 100644 index 2a5e7770a35f..000000000000 --- a/pkg/sql/logictest/testdata/logic_test/with-hp +++ /dev/null @@ -1,42 +0,0 @@ -# LogicTest: local fakedist - -statement ok -CREATE TABLE x(a) AS SELECT generate_series(1, 3) - -statement ok -CREATE TABLE y(a) AS SELECT generate_series(2, 4) - -# Regression test for #24307 until CockroachDB learns how to execute -# side effects no matter what. -query error unimplemented: common table expression "t" with side effects was not used in query -WITH t AS ( - INSERT INTO x(a) VALUES(0) RETURNING a -) -SELECT 1 - -query error unimplemented: common table expression "t" with side effects was not used in query -WITH t AS ( - SELECT * FROM ( - WITH b AS (INSERT INTO x(a) VALUES(0) RETURNING a) - TABLE b - ) -) -SELECT 1 - -query error unimplemented: common table expression "t" with side effects was not used in query -WITH t AS ( - DELETE FROM x RETURNING a -) -SELECT 1 - -query error unimplemented: common table expression "t" with side effects was not used in query -WITH t AS ( - UPSERT INTO x(a) VALUES(0) RETURNING a -) -SELECT 1 - -query error unimplemented: common table expression "t" with side effects was not used in query -WITH t AS ( - UPDATE x SET a = 0 RETURNING a -) -SELECT 1 diff --git a/pkg/sql/logictest/testdata/logic_test/with-opt b/pkg/sql/logictest/testdata/logic_test/with-opt index e6a659691c0b..2082ebf88a25 100644 --- a/pkg/sql/logictest/testdata/logic_test/with-opt +++ b/pkg/sql/logictest/testdata/logic_test/with-opt @@ -1,4 +1,4 @@ -# LogicTest: local-opt fakedist-opt +# LogicTest: local fakedist statement ok CREATE TABLE x(a) AS SELECT generate_series(1, 3) diff --git a/pkg/sql/logictest/testdata/logic_test/zigzag_join b/pkg/sql/logictest/testdata/logic_test/zigzag_join index bb42b271e953..7588062c22db 100644 --- a/pkg/sql/logictest/testdata/logic_test/zigzag_join +++ b/pkg/sql/logictest/testdata/logic_test/zigzag_join @@ -1,4 +1,4 @@ -# LogicTest: fakedist fakedist-opt +# LogicTest: fakedist # ------------------------------------------------------------------------------ # Zigzag join tests on non-inverted indexes. diff --git a/pkg/sql/logictest/testdata/planner_test/aggregate b/pkg/sql/logictest/testdata/planner_test/aggregate deleted file mode 100644 index 6974164c69ee..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/aggregate +++ /dev/null @@ -1,891 +0,0 @@ -# LogicTest: local - -statement ok -CREATE TABLE kv ( - k INT PRIMARY KEY, - v INT, - w INT, - s STRING -) - -# Selecting and grouping on a more complex expression works. -query TTTTT -EXPLAIN (VERBOSE) SELECT count(*), k+v AS r FROM kv GROUP BY k+v ----- -group · · (count, r) weak-key(r) - │ aggregate 0 count_rows() · · - │ aggregate 1 ?column? · · - │ group by ?column? · · - └── render · · ("?column?") · - │ render 0 test.public.kv.k + test.public.kv.v · · - └── scan · · (k, v, w[omitted], s[omitted]) k!=NULL; key(k) -· table kv@primary · · -· spans ALL · · - -# Selecting a more complex expression, made up of things which are each grouped, works. -query TTTTT -EXPLAIN (VERBOSE) SELECT count(*), k+v AS r FROM kv GROUP BY k, v ----- -render · · (count, r) · - │ render 0 agg0 · · - │ render 1 agg1 + agg2 · · - └── group · · (agg0, agg1, agg2) agg1!=NULL; key(agg1) - │ aggregate 0 count_rows() · · - │ aggregate 1 k · · - │ aggregate 2 v · · - │ group by k, v · · - │ ordered +k · · - └── render · · (k, v) k!=NULL; key(k); +k - │ render 0 test.public.kv.k · · - │ render 1 test.public.kv.v · · - └── scan · · (k, v, w[omitted], s[omitted]) k!=NULL; key(k); +k -· table kv@primary · · -· spans ALL · · - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT count(k) FROM kv -] ----- -group · · - │ aggregate 0 count(k) - │ scalar · - └── render · · - │ render 0 test.public.kv.k - └── scan · · -· table kv@primary -· spans ALL - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT count(k), sum(k), max(k) FROM kv -] ----- -group · · - │ aggregate 0 count(k) - │ aggregate 1 sum(k) - │ aggregate 2 max(k) - │ scalar · - └── render · · - │ render 0 test.public.kv.k - └── scan · · -· table kv@primary -· spans ALL - -query TTTTT -EXPLAIN (VERBOSE) SELECT count(DISTINCT a.*) FROM kv a, kv b ----- -group · · (count) · - │ aggregate 0 count(DISTINCT ((k, v, w, s) AS k, v, w, s)) · · - │ scalar · · · - └── render · · ("((k, v, w, s) AS k, v, w, s)") · - │ render 0 ((a.k, a.v, a.w, a.s) AS k, v, w, s) · · - └── hash-join · · (k, v, w, s, k[omitted], v[omitted], w[omitted], s[omitted]) · - │ type cross · · - ├── scan · · (k, v, w, s) k!=NULL; key(k) - │ table kv@primary · · - │ spans ALL · · - └── scan · · (k[omitted], v[omitted], w[omitted], s[omitted]) k!=NULL; key(k) -· table kv@primary · · -· spans ALL · · - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT min(b.k) FROM kv a, kv b GROUP BY a.* -] ----- -group · · - │ aggregate 0 min(k) - │ group by k, v, w, s - └── render · · - │ render 0 a.k - │ render 1 a.v - │ render 2 a.w - │ render 3 a.s - │ render 4 b.k - └── hash-join · · - │ type cross - ├── scan · · - │ table kv@primary - │ spans ALL - └── scan · · -· table kv@primary -· spans ALL - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT min(b.k) FROM kv a, kv b GROUP BY (1, (a.*)) -] ----- -group · · - │ aggregate 0 min(k) - │ group by 1, k, v, w, s - └── render · · - │ render 0 1 - │ render 1 a.k - │ render 2 a.v - │ render 3 a.w - │ render 4 a.s - │ render 5 b.k - └── hash-join · · - │ type cross - ├── scan · · - │ table kv@primary - │ spans ALL - └── scan · · -· table kv@primary -· spans ALL - -# A useful optimization: naked tuple expansion in GROUP BY clause. -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT min(b.k) FROM kv a, kv b GROUP BY (a.*) -] ----- -group · · - │ aggregate 0 min(k) - │ group by k, v, w, s - └── render · · - │ render 0 a.k - │ render 1 a.v - │ render 2 a.w - │ render 3 a.s - │ render 4 b.k - └── hash-join · · - │ type cross - ├── scan · · - │ table kv@primary - │ spans ALL - └── scan · · -· table kv@primary -· spans ALL - -# Show reuse of renders expression inside an expansion. -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT a.k FROM kv a, kv b GROUP BY a.* -] ----- -group · · - │ aggregate 0 k - │ group by k, v, w, s - └── render · · - │ render 0 a.k - │ render 1 a.v - │ render 2 a.w - │ render 3 a.s - └── hash-join · · - │ type cross - ├── scan · · - │ table kv@primary - │ spans ALL - └── scan · · -· table kv@primary -· spans ALL - -statement ok -CREATE TABLE abc ( - a CHAR PRIMARY KEY, - b FLOAT, - c BOOLEAN, - d DECIMAL -) - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT min(a) FROM abc -] ----- -group · · - │ aggregate 0 min(a) - │ scalar · - └── render · · - │ render 0 test.public.abc.a - └── scan · · -· table abc@primary -· spans ALL -· limit 1 - -# Verify summing of intervals -statement ok -CREATE TABLE intervals ( - a INTERVAL PRIMARY KEY -) - -statement ok -CREATE TABLE xyz ( - x INT PRIMARY KEY, - y INT, - z FLOAT, - INDEX xy (x, y), - INDEX zyx (z, y, x), - FAMILY (x), - FAMILY (y), - FAMILY (z) -) - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT min(x) FROM xyz -] ----- -group · · - │ aggregate 0 min(x) - │ scalar · - └── render · · - │ render 0 test.public.xyz.x - └── scan · · -· table xyz@xy -· spans ALL -· limit 1 - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT min(x) FROM xyz WHERE x in (0, 4, 7) -] ----- -group · · - │ aggregate 0 min(x) - │ scalar · - └── render · · - │ render 0 test.public.xyz.x - └── scan · · -· table xyz@xy -· spans /0-/1 /4-/5 /7-/8 -· limit 1 - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT max(x) FROM xyz -] ----- -group · · - │ aggregate 0 max(x) - │ scalar · - └── render · · - │ render 0 test.public.xyz.x - └── revscan · · -· table xyz@xy -· spans ALL -· limit 1 - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT min(y) FROM xyz WHERE x = 1 -] ----- -group · · - │ aggregate 0 min(y) - │ scalar · - └── render · · - │ render 0 test.public.xyz.y - └── scan · · -· table xyz@xy -· spans /1/!NULL-/2 -· limit 1 - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT max(y) FROM xyz WHERE x = 1 -] ----- -group · · - │ aggregate 0 max(y) - │ scalar · - └── render · · - │ render 0 test.public.xyz.y - └── revscan · · -· table xyz@xy -· spans /1/!NULL-/2 -· limit 1 - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT min(y) FROM xyz WHERE x = 7 -] ----- -group · · - │ aggregate 0 min(y) - │ scalar · - └── render · · - │ render 0 test.public.xyz.y - └── scan · · -· table xyz@xy -· spans /7/!NULL-/8 -· limit 1 - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT max(y) FROM xyz WHERE x = 7 -] ----- -group · · - │ aggregate 0 max(y) - │ scalar · - └── render · · - │ render 0 test.public.xyz.y - └── revscan · · -· table xyz@xy -· spans /7/!NULL-/8 -· limit 1 - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT min(x) FROM xyz WHERE (y, z) = (2, 3.0) -] ----- -group · · - │ aggregate 0 min(x) - │ scalar · - └── render · · - │ render 0 test.public.xyz.x - └── scan · · -· table xyz@zyx -· spans /3/2-/3/3 -· limit 1 - -statement okSE -INSERT INTO xyz VALUES (1, 2, 3.0), (4, 5, 6.0), (7, NULL, 8.0) - -statement ok -SET tracing = on,kv,results; SELECT min(x) FROM xyz WHERE (y, z) = (2, 3.0); SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /xyz/zyx/3.0/2/1 -> NULL -output row: [1] - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT max(x) FROM xyz WHERE (z, y) = (3.0, 2) -] ----- -group · · - │ aggregate 0 max(x) - │ scalar · - └── render · · - │ render 0 test.public.xyz.x - └── revscan · · -· table xyz@zyx -· spans /3/2-/3/3 -· limit 1 - -# VARIANCE/STDDEV - -statement ok -SET tracing = on,kv,results; SELECT variance(x), variance(y::decimal), round(variance(z), 14) FROM xyz; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /xyz/primary/1 -> NULL -fetched: /xyz/primary/1/y -> 2 -fetched: /xyz/primary/1/z -> 3.0 -fetched: /xyz/primary/4 -> NULL -fetched: /xyz/primary/4/y -> 5 -fetched: /xyz/primary/4/z -> 6.0 -fetched: /xyz/primary/7 -> NULL -fetched: /xyz/primary/7/z -> 8.0 -output row: [9 4.5 6.33333333333333] - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT variance(x) FROM xyz WHERE x = 1 -] ----- -group · · - │ aggregate 0 variance(x) - │ scalar · - └── render · · - │ render 0 test.public.xyz.x - └── scan · · -· table xyz@xy -· spans /1-/2 - -# Tests for the single-row optimization. -statement OK -CREATE TABLE ab ( - a INT PRIMARY KEY, - b INT, - FAMILY (a), - FAMILY (b) -) - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT min(a) FROM abc -] ----- -group · · - │ aggregate 0 min(a) - │ scalar · - └── render · · - │ render 0 test.public.abc.a - └── scan · · -· table abc@primary -· spans ALL -· limit 1 - -statement OK -INSERT INTO ab VALUES - (1, 10), - (2, 20), - (3, 30), - (4, 40), - (5, 50) - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT max(a) FROM abc -] ----- -group · · - │ aggregate 0 max(a) - │ scalar · - └── render · · - │ render 0 test.public.abc.a - └── revscan · · -· table abc@primary -· spans ALL -· limit 1 - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT v, count(k) FROM kv GROUP BY v ORDER BY count(k) -] ----- -sort · · - │ order +count - └── group · · - │ aggregate 0 v - │ aggregate 1 count(k) - │ group by v - └── render · · - │ render 0 test.public.kv.v - │ render 1 test.public.kv.k - └── scan · · -· table kv@primary -· spans ALL - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT v, count(*) FROM kv GROUP BY v ORDER BY count(*) -] ----- -sort · · - │ order +count - └── group · · - │ aggregate 0 v - │ aggregate 1 count_rows() - │ group by v - └── render · · - │ render 0 test.public.kv.v - └── scan · · -· table kv@primary -· spans ALL - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT v, count(1) FROM kv GROUP BY v ORDER BY count(1) -] ----- -sort · · - │ order +count - └── group · · - │ aggregate 0 v - │ aggregate 1 count(1) - │ group by v - └── render · · - │ render 0 test.public.kv.v - │ render 1 1 - └── scan · · -· table kv@primary -· spans ALL - -# Check that filters propagate through no-op aggregation. -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT * FROM (SELECT v, count(1) FROM kv GROUP BY v) WHERE v > 10 -] ----- -group · · - │ aggregate 0 v - │ aggregate 1 count(1) - │ group by v - └── render · · - │ render 0 test.public.kv.v - │ render 1 1 - └── scan · · -· table kv@primary -· spans ALL -· filter v > 10 - -# Verify that FILTER works. - -statement ok -CREATE TABLE filter_test ( - k INT, - v INT, - mark BOOL -) - -# Check that filter expressions are only rendered once. -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT count(*) FILTER (WHERE k>5), max(k>5) FILTER(WHERE k>5) FROM filter_test GROUP BY v -] ----- -group · · - │ aggregate 0 count_rows() FILTER (WHERE ?column?) - │ aggregate 1 max(?column?) FILTER (WHERE ?column?) - │ group by v - └── render · · - │ render 0 test.public.filter_test.v - │ render 1 test.public.filter_test.k > 5 - └── scan · · -· table filter_test@primary -· spans ALL - -query TTTTT -EXPLAIN (TYPES) SELECT count(*) FILTER (WHERE k > 5) FROM filter_test GROUP BY v ----- -group · · (count int) · - │ aggregate 0 count_rows() FILTER (WHERE ?column?) · · - │ group by v · · - └── render · · (v int, "?column?" bool) · - │ render 0 (v)[int] · · - │ render 1 ((k)[int] > (5)[int])[bool] · · - └── scan · · (k int, v int, mark[omitted] bool, rowid[hidden,omitted] int) rowid!=NULL; key(rowid) -· table filter_test@primary · · -· spans ALL · · - -# Tests with * inside GROUP BY. -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT 1 FROM kv GROUP BY kv.* -] ----- -render · · - │ render 0 1 - └── group · · - │ group by k, v, w, s - │ ordered +k - └── scan · · -· table kv@primary -· spans ALL - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT sum(abc.d) FROM kv JOIN abc ON kv.k >= abc.d GROUP BY kv.* -] ----- -group · · - │ aggregate 0 sum(d) - │ group by k, v, w, s - └── render · · - │ render 0 test.public.kv.k - │ render 1 test.public.kv.v - │ render 2 test.public.kv.w - │ render 3 test.public.kv.s - │ render 4 test.public.abc.d - └── hash-join · · - │ type inner - │ pred test.public.kv.k >= test.public.abc.d - ├── scan · · - │ table kv@primary - │ spans ALL - └── scan · · -· table abc@primary -· spans ALL - -# opt_test is used for tests around the single-row optimization for MIN/MAX. -statement ok -CREATE TABLE opt_test (k INT PRIMARY KEY, v INT, INDEX v(v)) - -# Verify that we correctly add the v IS NOT NULL constraint (which restricts the span). -query TTTTT -EXPLAIN (VERBOSE) SELECT min(v) FROM opt_test ----- -group · · (min) · - │ aggregate 0 min(v) · · - │ scalar · · · - └── render · · (v) v!=NULL; +v - │ render 0 test.public.opt_test.v · · - └── scan · · (k[omitted], v) k!=NULL; v!=NULL; key(k,v); +v -· table opt_test@v · · -· spans /!NULL- · · -· limit 1 · · - -# Repeat test when there is an existing filter. -query TTTTT -EXPLAIN (VERBOSE) SELECT min(v) FROM opt_test WHERE k <> 4 ----- -group · · (min) · - │ aggregate 0 min(v) · · - │ scalar · · · - └── render · · (v) v!=NULL; +v - │ render 0 test.public.opt_test.v · · - └── scan · · (k, v) k!=NULL; v!=NULL; key(k,v); +v -· table opt_test@v · · -· spans /!NULL- · · -· filter k != 4 · · - -# Check the optimization when the argument is non-trivial. The renderNode can't -# present an ordering on v+1 so the optimization is not applied, but the IS NOT -# NULL filter should be added. -query TTTTT -EXPLAIN (VERBOSE) SELECT min(v+1) FROM opt_test WHERE k <> 4 ----- -group · · (min) · - │ aggregate 0 min(v + 1) · · - │ scalar · · · - └── render · · ("v + 1") · - │ render 0 test.public.opt_test.v + 1 · · - └── scan · · (k[omitted], v) k!=NULL; v!=NULL; key(k) -· table opt_test@primary · · -· spans -/3/# /5- · · -· filter (v + 1) IS NOT NULL · · - -# Verify that we don't use the optimization if there is a GROUP BY. -query TTTTT -EXPLAIN (VERBOSE) SELECT min(v) FROM opt_test GROUP BY k ----- -group · · (min) · - │ aggregate 0 min(v) · · - │ group by k · · - │ ordered +k · · - └── scan · · (k, v) k!=NULL; key(k) -· table opt_test@primary · · -· spans ALL · · - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT (b, a) FROM ab GROUP BY (b, a) -] ----- -render · · - │ render 0 (agg0, agg1) - └── group · · - │ aggregate 0 b - │ aggregate 1 a - │ group by b, a - │ ordered +a - └── render · · - │ render 0 test.public.ab.b - │ render 1 test.public.ab.a - └── scan · · -· table ab@primary -· spans ALL - -statement ok -CREATE TABLE xy(x STRING, y STRING); - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) - SELECT min(y), (b, a) - FROM ab, xy GROUP BY (x, (a, b)) -] ----- -render · · - │ render 0 agg0 - │ render 1 (agg1, agg2) - └── group · · - │ aggregate 0 min(y) - │ aggregate 1 b - │ aggregate 2 a - │ group by x, a, b - └── render · · - │ render 0 test.public.xy.x - │ render 1 test.public.ab.a - │ render 2 test.public.ab.b - │ render 3 test.public.xy.y - └── hash-join · · - │ type cross - ├── scan · · - │ table ab@primary - │ spans ALL - └── scan · · -· table xy@primary -· spans ALL - -# Test that ordering on GROUP BY columns is maintained. -statement ok -CREATE TABLE group_ord ( - x INT PRIMARY KEY, - y INT, - z INT, - INDEX foo(z) -) - -# The ordering is on all the GROUP BY columns, and isn't preserved after the -# aggregation. -query TTTTT -EXPLAIN (VERBOSE) SELECT x, max(y) FROM group_ord GROUP BY x ----- -group · · (x, max) x!=NULL; key(x) - │ aggregate 0 x · · - │ aggregate 1 max(y) · · - │ group by x · · - │ ordered +x · · - └── render · · (x, y) x!=NULL; key(x); +x - │ render 0 test.public.group_ord.x · · - │ render 1 test.public.group_ord.y · · - └── scan · · (x, y, z[omitted]) x!=NULL; key(x); +x -· table group_ord@primary · · -· spans ALL · · - -# The ordering is on all the GROUP BY columns, and is preserved after the -# aggregation. -query TTTTT -EXPLAIN (VERBOSE) SELECT x, max(y) FROM group_ord GROUP BY x ORDER BY x ----- -group · · (x, max) x!=NULL; key(x); +x - │ aggregate 0 x · · - │ aggregate 1 max(y) · · - │ group by x · · - │ ordered +x · · - └── render · · (x, y) x!=NULL; key(x); +x - │ render 0 test.public.group_ord.x · · - │ render 1 test.public.group_ord.y · · - └── scan · · (x, y, z[omitted]) x!=NULL; key(x); +x -· table group_ord@primary · · -· spans ALL · · - -# The ordering is on some of the GROUP BY columns, and isn't preserved after -# the aggregation. -query TTTTT -EXPLAIN (VERBOSE) SELECT z, x, max(y) FROM group_ord GROUP BY x, z ----- -group · · (z, x, max) x!=NULL; key(x) - │ aggregate 0 z · · - │ aggregate 1 x · · - │ aggregate 2 max(y) · · - │ group by x, z · · - │ ordered +x · · - └── render · · (x, z, y) x!=NULL; key(x); +x - │ render 0 test.public.group_ord.x · · - │ render 1 test.public.group_ord.z · · - │ render 2 test.public.group_ord.y · · - └── scan · · (x, y, z) x!=NULL; key(x); +x -· table group_ord@primary · · -· spans ALL · · - -# The ordering is on some of the GROUP BY columns, and is preserved after -# the aggregation. -query TTTTT -EXPLAIN (VERBOSE) SELECT z, x, max(y) FROM group_ord GROUP BY x, z ORDER BY x ----- -group · · (z, x, max) x!=NULL; key(x); +x - │ aggregate 0 z · · - │ aggregate 1 x · · - │ aggregate 2 max(y) · · - │ group by x, z · · - │ ordered +x · · - └── render · · (x, z, y) x!=NULL; key(x); +x - │ render 0 test.public.group_ord.x · · - │ render 1 test.public.group_ord.z · · - │ render 2 test.public.group_ord.y · · - └── scan · · (x, y, z) x!=NULL; key(x); +x -· table group_ord@primary · · -· spans ALL · · - -# If the underlying ordering isn't from the primary index, it needs to be hinted -# for now. -query TTTTT -EXPLAIN (VERBOSE) SELECT z, max(y) FROM group_ord@foo GROUP BY z ----- -group · · (z, max) weak-key(z) - │ aggregate 0 z · · - │ aggregate 1 max(y) · · - │ group by z · · - │ ordered +z · · - └── render · · (z, y) +z - │ render 0 test.public.group_ord.z · · - │ render 1 test.public.group_ord.y · · - └── index-join · · (x[omitted], y, z) x!=NULL; weak-key(x,z); +z - │ table group_ord@primary · · - └── scan · · (x, y[omitted], z[omitted]) x!=NULL; weak-key(x,z); +z -· table group_ord@foo · · -· spans ALL · · - -# Test that a merge join is used on two aggregate subqueries with orderings on -# the GROUP BY columns. Note that an ORDER BY is not necessary on the -# subqueries. -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM (SELECT x, max(y) FROM group_ord GROUP BY x) JOIN (SELECT z, min(y) FROM group_ord@foo GROUP BY z) ON x = z ----- -merge-join · · (x, max, z, min) x=z; x!=NULL - │ type inner · · - │ equality (x) = (z) · · - │ mergeJoinOrder +"(x=z)" · · - ├── group · · (x, max) x!=NULL; key(x); +x - │ │ aggregate 0 x · · - │ │ aggregate 1 max(y) · · - │ │ group by x · · - │ │ ordered +x · · - │ └── render · · (x, y) x!=NULL; key(x); +x - │ │ render 0 test.public.group_ord.x · · - │ │ render 1 test.public.group_ord.y · · - │ └── scan · · (x, y, z[omitted]) x!=NULL; key(x); +x - │ table group_ord@primary · · - │ spans ALL · · - └── group · · (z, min) weak-key(z); +z - │ aggregate 0 z · · - │ aggregate 1 min(y) · · - │ group by z · · - │ ordered +z · · - └── render · · (z, y) +z - │ render 0 test.public.group_ord.z · · - │ render 1 test.public.group_ord.y · · - └── index-join · · (x[omitted], y, z) x!=NULL; weak-key(x,z); +z - │ table group_ord@primary · · - └── scan · · (x, y[omitted], z[omitted]) x!=NULL; weak-key(x,z); +z -· table group_ord@foo · · -· spans ALL · · - -# Regression test for #25533 (crash when propagating filter through GROUP BY). -query TTTTT -EXPLAIN (VERBOSE) SELECT 1 a FROM kv GROUP BY v, w::DECIMAL HAVING w::DECIMAL > 1; ----- -render · · (a) a=CONST - │ render 0 1 · · - └── group · · (agg0) weak-key(agg0) - │ aggregate 0 w · · - │ group by v, w · · - └── filter · · (v, w) w!=NULL - │ filter w > 1 · · - └── render · · (v, w) · - │ render 0 test.public.kv.v · · - │ render 1 test.public.kv.w::DECIMAL · · - └── scan · · (k[omitted], v, w, s[omitted]) k!=NULL; key(k) -· table kv@primary · · -· spans ALL · · - -# Regression test for #26419 -query TTTTT -EXPLAIN (VERBOSE) SELECT 123 a FROM kv ORDER BY max(v) ----- -sort · · (a) a=CONST - │ order +max · · - └── render · · (a, max) a=CONST - │ render 0 123 · · - │ render 1 agg0 · · - └── group · · (agg0) · - │ aggregate 0 max(v) · · - │ scalar · · · - └── render · · (v) v!=NULL - │ render 0 test.public.kv.v · · - └── scan · · (k[omitted], v, w[omitted], s[omitted]) k!=NULL; v!=NULL; key(k) -· table kv@primary · · -· spans ALL · · -· filter v IS NOT NULL · · - -# Limitation test for #26349 -statement error HAVING clause without FROM -SELECT 1 HAVING false diff --git a/pkg/sql/logictest/testdata/planner_test/aggregate_vectorize_off b/pkg/sql/logictest/testdata/planner_test/aggregate_vectorize_off deleted file mode 100644 index 1421ddb1343c..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/aggregate_vectorize_off +++ /dev/null @@ -1,115 +0,0 @@ -# LogicTest: local - -# This file contains test cases that cannot be run with the vectorized -# execution engine. - -statement ok -SET vectorize=off - -statement ok -CREATE TABLE xyz ( - x INT PRIMARY KEY, - y INT, - z FLOAT, - INDEX xy (x, y), - INDEX zyx (z, y, x), - FAMILY (x), - FAMILY (y), - FAMILY (z) -) - -statement okSE -INSERT INTO xyz VALUES (1, 2, 3.0), (4, 5, 6.0), (7, NULL, 8.0) - -# Verify we only look at one row for MIN when we have an index on that column. -statement ok -SET tracing = on,kv,results; SELECT min(z) FROM xyz; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /xyz/zyx/3.0/2/1 -> NULL -output row: [3.0] - -# Tests for the single-row optimization. -statement OK -CREATE TABLE ab ( - a INT PRIMARY KEY, - b INT, - FAMILY (a), - FAMILY (b) -) - -statement ok -CREATE TABLE abc ( - a CHAR PRIMARY KEY, - b FLOAT, - c BOOLEAN, - d DECIMAL -) - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT min(a) FROM abc -] ----- -group · · - │ aggregate 0 min(a) - │ scalar · - └── render · · - │ render 0 test.public.abc.a - └── scan · · -· table abc@primary -· spans ALL -· limit 1 - -statement OK -INSERT INTO ab VALUES - (1, 10), - (2, 20), - (3, 30), - (4, 40), - (5, 50) - -# Verify we only buffer one row. -statement ok -SET tracing = on,kv,results; SELECT min(a) FROM ab; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /ab/primary/1 -> NULL -fetched: /ab/primary/1/b -> 10 -output row: [1] - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT max(a) FROM abc -] ----- -group · · - │ aggregate 0 max(a) - │ scalar · - └── render · · - │ render 0 test.public.abc.a - └── revscan · · -· table abc@primary -· spans ALL -· limit 1 - -# Verify we only buffer one row. -statement ok -SET tracing = on,kv,results; SELECT max(a) FROM ab; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /ab/primary/5/b -> 50 -fetched: /ab/primary/5 -> NULL -output row: [5] diff --git a/pkg/sql/logictest/testdata/planner_test/cascade b/pkg/sql/logictest/testdata/planner_test/cascade deleted file mode 100644 index f9925522d8e0..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/cascade +++ /dev/null @@ -1,623 +0,0 @@ -# LogicTest: local - -subtest DeleteCascade_Basic -### Basic Delete Cascade -# a -# / \ -# b1 b2 -# / \ \ -# c1 c2 c3 - -statement ok -CREATE TABLE a ( - id STRING PRIMARY KEY -); - -statement ok -CREATE TABLE b1 ( - id STRING PRIMARY KEY - ,delete_cascade STRING NOT NULL REFERENCES a ON DELETE CASCADE -); - -statement ok -CREATE TABLE b2 ( - id STRING PRIMARY KEY - ,delete_cascade STRING NOT NULL REFERENCES a ON DELETE CASCADE -); - -statement ok -CREATE TABLE c1 ( - id STRING PRIMARY KEY - ,delete_cascade STRING NOT NULL REFERENCES b1 ON DELETE CASCADE -); - -statement ok -CREATE TABLE c2 ( - id STRING PRIMARY KEY - ,delete_cascade STRING NOT NULL REFERENCES b1 ON DELETE CASCADE -); - -statement ok -CREATE TABLE c3 ( - id STRING PRIMARY KEY REFERENCES b2 ON DELETE CASCADE -); - -statement ok -INSERT INTO a VALUES ('a-pk1'); -INSERT INTO b1 VALUES ('b1-pk1', 'a-pk1'), ('b1-pk2', 'a-pk1'); -INSERT INTO b2 VALUES ('b2-pk1', 'a-pk1'), ('b2-pk2', 'a-pk1'); -INSERT INTO c1 VALUES - ('c1-pk1-b1-pk1', 'b1-pk1') - ,('c1-pk2-b1-pk1', 'b1-pk1') - ,('c1-pk3-b1-pk2', 'b1-pk2') - ,('c1-pk4-b1-pk2', 'b1-pk2') -; -INSERT INTO c2 VALUES - ('c2-pk1-b1-pk1', 'b1-pk1') - ,('c2-pk2-b1-pk1', 'b1-pk1') - ,('c2-pk3-b1-pk2', 'b1-pk2') - ,('c2-pk4-b1-pk2', 'b1-pk2') -; -INSERT INTO c3 VALUES ('b2-pk1'), ('b2-pk2'); - -statement ok -SET tracing = on,kv,results; DELETE FROM a WHERE id = 'a-pk1'; SET tracing = off - -query I -SELECT count(*) FROM [SHOW KV TRACE FOR SESSION] WHERE message LIKE 'cascading %'; ----- -5 - -# Clean up after the test. -statement ok -DROP TABLE c3, c2, c1, b2, b1, a; - -subtest UpdateCascade_Basic -### Basic Update Cascade -# a -# / \ -# b1 b2 -# / \ \ -# c1 c2 c3 - -statement ok -CREATE TABLE a ( - id STRING PRIMARY KEY -); - -statement ok -CREATE TABLE b1 ( - id STRING PRIMARY KEY - ,update_cascade STRING NOT NULL UNIQUE REFERENCES a ON UPDATE CASCADE -); - -statement ok -CREATE TABLE b2 ( - id STRING PRIMARY KEY - ,update_cascade STRING NOT NULL UNIQUE REFERENCES a ON UPDATE CASCADE -); - -statement ok -CREATE TABLE c1 ( - id STRING PRIMARY KEY - ,update_cascade STRING NOT NULL REFERENCES b1 (update_cascade) ON UPDATE CASCADE -); - -statement ok -CREATE TABLE c2 ( - id STRING PRIMARY KEY - ,update_cascade STRING NOT NULL REFERENCES b1 (update_cascade) ON UPDATE CASCADE -); - -statement ok -CREATE TABLE c3 ( - id STRING PRIMARY KEY REFERENCES b2(update_cascade) ON UPDATE CASCADE -); - -statement ok -INSERT INTO a VALUES ('original'); -INSERT INTO b1 VALUES ('b1-pk1', 'original'); -INSERT INTO b2 VALUES ('b2-pk1', 'original'); -INSERT INTO c1 VALUES - ('c1-pk1', 'original') - ,('c1-pk2', 'original') - ,('c1-pk3', 'original') - ,('c1-pk4', 'original') -; -INSERT INTO c2 VALUES - ('c2-pk1', 'original') - ,('c2-pk2', 'original') - ,('c2-pk3', 'original') - ,('c2-pk4', 'original') -; -INSERT INTO c3 VALUES ('original'); - -# ON UPDATE CASCADE -statement ok -UPDATE a SET id = 'updated' WHERE id = 'original'; - -statement ok -SET tracing = on,kv,results; UPDATE a SET id = 'updated2' WHERE id = 'updated'; SET tracing = off - -query I -SELECT count(*) FROM [SHOW KV TRACE FOR SESSION] WHERE message LIKE 'cascading %'; ----- -5 - -# Clean up after the test. -statement ok -DROP TABLE c3, c2, c1, b2, b1, a; - -subtest DeleteSetNull_Basic1 -### Basic Delete Set Null -# a -# // \\ -# / | | \ -# b1 b2 b3 b4 - -statement ok -CREATE TABLE a ( - id STRING PRIMARY KEY -); -CREATE TABLE b1 ( - id STRING PRIMARY KEY - ,delete_set_null STRING REFERENCES a ON DELETE SET NULL -); -CREATE TABLE b2 ( - id STRING PRIMARY KEY - ,delete_set_null STRING REFERENCES a ON DELETE SET NULL -); -CREATE TABLE b3 ( - id STRING PRIMARY KEY - ,delete_set_null STRING REFERENCES a ON DELETE SET NULL -); -CREATE TABLE b4 ( - id STRING PRIMARY KEY - ,delete_set_null STRING REFERENCES a ON DELETE SET NULL -); - -statement ok -INSERT INTO a VALUES ('delete_me'), ('untouched'); -INSERT INTO b1 VALUES ('b1-pk1', 'untouched'), ('b1-pk2', 'untouched'); -INSERT INTO b2 VALUES ('b2-pk1', 'untouched'), ('b2-pk2', 'delete_me'); -INSERT INTO b3 VALUES ('b3-pk1', 'delete_me'), ('b3-pk2', 'untouched'); -INSERT INTO b4 VALUES ('b4-pk1', 'delete_me'), ('b4-pk2', 'delete_me'); - -# Ensure that show trace adds a cascade message for each of the tables that is -# cascaded into. -statement ok -SET tracing = on,kv,results; DELETE FROM a WHERE id = 'delete_me'; SET tracing = off - -query I -SELECT count(*) FROM [SHOW KV TRACE FOR SESSION] WHERE message LIKE 'cascading %'; ----- -4 - -# Clean up after the test. -statement ok -DROP TABLE b4, b3, b2, b1, a; - -subtest DeleteSetNull_Basic2 -### Basic Delete Set Null -# a -# / \ -# b1 b2 -# / \ \ -# c1 c2 c3 - -statement ok -CREATE TABLE a ( - id STRING PRIMARY KEY -); -CREATE TABLE b1 ( - id STRING PRIMARY KEY - ,delete_cascade STRING NOT NULL REFERENCES a ON DELETE CASCADE -); -CREATE TABLE b2 ( - id STRING PRIMARY KEY - ,delete_cascade STRING NOT NULL REFERENCES a ON DELETE CASCADE -); -CREATE TABLE c1 ( - id STRING PRIMARY KEY - ,delete_set_null STRING REFERENCES b1 ON DELETE SET NULL -); -CREATE TABLE c2 ( - id STRING PRIMARY KEY - ,delete_set_null STRING REFERENCES b1 ON DELETE SET NULL -); -CREATE TABLE c3 ( - id STRING PRIMARY KEY - ,delete_set_null STRING REFERENCES b2 ON DELETE SET NULL -); - -statement ok -INSERT INTO a VALUES ('a-pk1'); -INSERT INTO b1 VALUES ('b1-pk1', 'a-pk1'), ('b1-pk2', 'a-pk1'); -INSERT INTO b2 VALUES ('b2-pk1', 'a-pk1'), ('b2-pk2', 'a-pk1'); -INSERT INTO c1 VALUES - ('c1-pk1-b1-pk1', 'b1-pk1') - ,('c1-pk2-b1-pk1', 'b1-pk1') - ,('c1-pk3-b1-pk2', 'b1-pk2') - ,('c1-pk4-b1-pk2', 'b1-pk2') -; -INSERT INTO c2 VALUES - ('c2-pk1-b1-pk1', 'b1-pk1') - ,('c2-pk2-b1-pk1', 'b1-pk1') - ,('c2-pk3-b1-pk2', 'b1-pk2') - ,('c2-pk4-b1-pk2', 'b1-pk2') -; -INSERT INTO c3 VALUES - ('c3-pk1-b2-pk1', 'b2-pk1') - ,('c3-pk2-b2-pk1', 'b2-pk1') - ,('c3-pk3-b2-pk2', 'b2-pk2') - ,('c3-pk4-b2-pk2', 'b2-pk2') -; - -statement ok -SET tracing = on,kv,results; DELETE FROM a WHERE id = 'a-pk1'; SET tracing = off - -query I -SELECT count(*) FROM [SHOW KV TRACE FOR SESSION] WHERE message LIKE 'cascading %'; ----- -5 - -# Clean up after the test. -statement ok -DROP TABLE c3, c2, c1, b2, b1, a; - -subtest UpdateSetNull_Basic1 -### Basic Update Set Null -# a -# // \\ -# / | | \ -# b1 b2 b3 b4 - -statement ok -CREATE TABLE a ( - id STRING PRIMARY KEY -); -CREATE TABLE b1 ( - id STRING PRIMARY KEY - ,update_set_null STRING REFERENCES a ON UPDATE SET NULL -); -CREATE TABLE b2 ( - id STRING PRIMARY KEY - ,update_set_null STRING REFERENCES a ON UPDATE SET NULL -); -CREATE TABLE b3 ( - id STRING PRIMARY KEY - ,update_set_null STRING REFERENCES a ON UPDATE SET NULL -); -CREATE TABLE b4 ( - id STRING PRIMARY KEY - ,update_set_null STRING REFERENCES a ON UPDATE SET NULL -); - -statement ok -INSERT INTO a VALUES ('original'), ('untouched'); -INSERT INTO b1 VALUES ('b1-pk1', 'untouched'), ('b1-pk2', 'untouched'); -INSERT INTO b2 VALUES ('b2-pk1', 'untouched'), ('b2-pk2', 'original'); -INSERT INTO b3 VALUES ('b3-pk1', 'original'), ('b3-pk2', 'untouched'); -INSERT INTO b3 VALUES ('b4-pk1', 'original'), ('b4-pk2', 'original'); - -# Ensure that show trace adds a cascade message for each of the tables that is -# cascaded into. -statement ok -SET tracing = on,kv,results; UPDATE a SET id = 'updated' WHERE id = 'original'; SET tracing = off - -query I -SELECT count(*) FROM [SHOW KV TRACE FOR SESSION] WHERE message LIKE 'cascading %'; ----- -4 - -# Clean up after the test. -statement ok -DROP TABLE b4, b3, b2, b1, a; - -subtest UpdateSetNull_Basic2 -### Basic Update Set Null -# a -# / \ -# b1 b2 -# / \ \ -# c1 c2 c3 - -statement ok -CREATE TABLE a ( - id STRING PRIMARY KEY -); -CREATE TABLE b1 ( - id STRING PRIMARY KEY - ,update_cascade STRING UNIQUE NOT NULL REFERENCES a ON UPDATE CASCADE -); -CREATE TABLE b2 ( - id STRING PRIMARY KEY - ,update_cascade STRING UNIQUE NOT NULL REFERENCES a ON UPDATE CASCADE -); -CREATE TABLE c1 ( - id STRING PRIMARY KEY - ,update_set_null STRING REFERENCES b1(update_cascade) ON UPDATE SET NULL -); -CREATE TABLE c2 ( - id STRING PRIMARY KEY - ,update_set_null STRING REFERENCES b1(update_cascade) ON UPDATE SET NULL -); -CREATE TABLE c3 ( - id STRING PRIMARY KEY - ,update_set_null STRING REFERENCES b2(update_cascade) ON UPDATE SET NULL -); - -statement ok -INSERT INTO a VALUES ('original'), ('untouched'); -INSERT INTO b1 VALUES ('b1-pk1', 'original'), ('b1-pk2', 'untouched'); -INSERT INTO b2 VALUES ('b2-pk1', 'original'), ('b2-pk2', 'untouched'); -INSERT INTO c1 VALUES - ('c1-pk1-b1-pk1', 'original') - ,('c1-pk2-b1-pk1', 'original') - ,('c1-pk3-b1-pk2', 'untouched') - ,('c1-pk4-b1-pk2', 'untouched') -; -INSERT INTO c2 VALUES - ('c2-pk1-b1-pk1', 'original') - ,('c2-pk2-b1-pk1', 'original') - ,('c2-pk3-b1-pk2', 'untouched') - ,('c2-pk4-b1-pk2', 'untouched') -; -INSERT INTO c3 VALUES - ('c3-pk1-b2-pk1', 'original') - ,('c3-pk2-b2-pk1', 'original') - ,('c3-pk3-b2-pk2', 'untouched') - ,('c3-pk4-b2-pk2', 'untouched') -; - -# Ensure that show trace adds a cascade message for each of the tables that is -# cascaded into. -statement ok -SET tracing = on,kv,results; UPDATE a SET id = 'updated' WHERE id = 'original'; SET tracing = off - -query I -SELECT count(*) FROM [SHOW KV TRACE FOR SESSION] WHERE message LIKE 'cascading %'; ----- -5 - -# Clean up after the test. -statement ok -DROP TABLE c3, c2, c1, b2, b1, a; - -############## - -subtest DeleteSetDefault_Basic1 -### Basic Delete Set Default -# a -# // \\ -# / | | \ -# b1 b2 b3 b4 - -statement ok -CREATE TABLE a ( - id STRING PRIMARY KEY -); -CREATE TABLE b1 ( - id STRING PRIMARY KEY - ,delete_set_default STRING DEFAULT 'b1-default' REFERENCES a ON DELETE SET DEFAULT -); -CREATE TABLE b2 ( - id STRING PRIMARY KEY - ,delete_set_default STRING DEFAULT 'b2-default' REFERENCES a ON DELETE SET DEFAULT -); -CREATE TABLE b3 ( - id STRING PRIMARY KEY - ,delete_set_default STRING DEFAULT 'b3-default' REFERENCES a ON DELETE SET DEFAULT -); -CREATE TABLE b4 ( - id STRING PRIMARY KEY - ,delete_set_default STRING DEFAULT 'b4-default' REFERENCES a ON DELETE SET DEFAULT -); - -statement ok -INSERT INTO a VALUES ('delete_me'), ('untouched'), ('b2-default'), ('b3-default'), ('b4-default'); -INSERT INTO b1 VALUES ('b1-pk1', 'untouched'), ('b1-pk2', 'untouched'); -INSERT INTO b2 VALUES ('b2-pk1', 'untouched'), ('b2-pk2', 'delete_me'); -INSERT INTO b3 VALUES ('b3-pk1', 'delete_me'), ('b3-pk2', 'untouched'); -INSERT INTO b4 VALUES ('b4-pk1', 'delete_me'), ('b4-pk2', 'delete_me'); - -# Ensure that show trace adds a cascade message for each of the tables that is -# cascaded into. -statement ok -SET tracing = on,kv,results; DELETE FROM a WHERE id = 'delete_me'; SET tracing = off - -query I -SELECT count(*) FROM [SHOW KV TRACE FOR SESSION] WHERE message LIKE 'cascading %'; ----- -4 - -# Clean up after the test. -statement ok -DROP TABLE b4, b3, b2, b1, a; - -subtest DeleteSetDefault_Basic2 -### Basic Delete Set Null via an ON DELETE CASCADE -# a -# / \ -# b1 b2 -# / \ \ -# c1 c2 c3 - -statement ok -CREATE TABLE a ( - id STRING PRIMARY KEY -); -CREATE TABLE b1 ( - id STRING PRIMARY KEY - ,delete_cascade STRING NOT NULL REFERENCES a ON DELETE CASCADE -); -CREATE TABLE b2 ( - id STRING PRIMARY KEY - ,delete_cascade STRING NOT NULL REFERENCES a ON DELETE CASCADE -); -CREATE TABLE c1 ( - id STRING PRIMARY KEY - ,delete_set_default STRING DEFAULT 'b1-default' REFERENCES b1 ON DELETE SET DEFAULT -); -CREATE TABLE c2 ( - id STRING PRIMARY KEY - ,delete_set_default STRING DEFAULT 'b1-default' REFERENCES b1 ON DELETE SET DEFAULT -); -CREATE TABLE c3 ( - id STRING PRIMARY KEY - ,delete_set_default STRING DEFAULT 'b2-default' REFERENCES b2 ON DELETE SET DEFAULT -); - -statement ok -INSERT INTO a VALUES ('a-pk1'), ('a-default'); -INSERT INTO b1 VALUES ('b1-pk1', 'a-pk1'), ('b1-pk2', 'a-pk1'), ('b1-default', 'a-default'); -INSERT INTO b2 VALUES ('b2-pk1', 'a-pk1'), ('b2-pk2', 'a-pk1'), ('b2-default', 'a-default'); -INSERT INTO c1 VALUES - ('c1-pk1-b1-pk1', 'b1-pk1') - ,('c1-pk2-b1-pk1', 'b1-pk1') - ,('c1-pk3-b1-pk2', 'b1-pk2') - ,('c1-pk4-b1-pk2', 'b1-pk2') -; -INSERT INTO c2 VALUES - ('c2-pk1-b1-pk1', 'b1-pk1') - ,('c2-pk2-b1-pk1', 'b1-pk1') - ,('c2-pk3-b1-pk2', 'b1-pk2') - ,('c2-pk4-b1-pk2', 'b1-pk2') -; -INSERT INTO c3 VALUES - ('c3-pk1-b2-pk1', 'b2-pk1') - ,('c3-pk2-b2-pk1', 'b2-pk1') - ,('c3-pk3-b2-pk2', 'b2-pk2') - ,('c3-pk4-b2-pk2', 'b2-pk2') -; - -statement ok -SET tracing = on,kv,results; DELETE FROM a WHERE id = 'a-pk1'; SET tracing = off - -query I -SELECT count(*) FROM [SHOW KV TRACE FOR SESSION] WHERE message LIKE 'cascading %'; ----- -5 - -# Clean up after the test. -statement ok -DROP TABLE c3, c2, c1, b2, b1, a; - -subtest UpdateSetDefault_Basic1 -### Basic Update Set Default -# a -# // \\ -# / | | \ -# b1 b2 b3 b4 - -statement ok -CREATE TABLE a ( - id STRING PRIMARY KEY -); -CREATE TABLE b1 ( - id STRING PRIMARY KEY - ,update_set_null STRING DEFAULT 'b1-default' REFERENCES a ON UPDATE SET DEFAULT -); -CREATE TABLE b2 ( - id STRING PRIMARY KEY - ,update_set_null STRING DEFAULT 'b2-default' REFERENCES a ON UPDATE SET DEFAULT -); -CREATE TABLE b3 ( - id STRING PRIMARY KEY - ,update_set_null STRING DEFAULT 'b3-default' REFERENCES a ON UPDATE SET DEFAULT -); -CREATE TABLE b4 ( - id STRING PRIMARY KEY - ,update_set_null STRING DEFAULT 'b4-default' REFERENCES a ON UPDATE SET DEFAULT -); - -statement ok -INSERT INTO a VALUES ('original'), ('untouched'), ('b1-default'), ('b2-default'), ('b3-default'), ('b4-default'); -INSERT INTO b1 VALUES ('b1-pk1', 'untouched'), ('b1-pk2', 'untouched'); -INSERT INTO b2 VALUES ('b2-pk1', 'untouched'), ('b2-pk2', 'original'); -INSERT INTO b3 VALUES ('b3-pk1', 'original'), ('b3-pk2', 'untouched'); -INSERT INTO b3 VALUES ('b4-pk1', 'original'), ('b4-pk2', 'original'); - -# Ensure that show trace adds a cascade message for each of the tables that is -# cascaded into. -statement ok -SET tracing = on,kv,results; UPDATE a SET id = 'updated' WHERE id = 'original'; SET tracing = off - -query I -SELECT count(*) FROM [SHOW KV TRACE FOR SESSION] WHERE message LIKE 'cascading %'; ----- -4 - -# Clean up after the test. -statement ok -DROP TABLE b4, b3, b2, b1, a; - -subtest UpdateSetDefault_Basic2 -### Basic UPDATE SET DEFAULT via an UPDATE CASCADE -# a -# / \ -# b1 b2 -# / \ \ -# c1 c2 c3 - -statement ok -CREATE TABLE a ( - id STRING PRIMARY KEY -); -CREATE TABLE b1 ( - id STRING PRIMARY KEY - ,update_cascade STRING UNIQUE NOT NULL REFERENCES a ON UPDATE CASCADE -); -CREATE TABLE b2 ( - id STRING PRIMARY KEY - ,update_cascade STRING UNIQUE NOT NULL REFERENCES a ON UPDATE CASCADE -); -CREATE TABLE c1 ( - id STRING PRIMARY KEY - ,update_set_null STRING DEFAULT 'b1-default' REFERENCES b1(update_cascade) ON UPDATE SET DEFAULT -); -CREATE TABLE c2 ( - id STRING PRIMARY KEY - ,update_set_null STRING DEFAULT 'b1-default' REFERENCES b1(update_cascade) ON UPDATE SET DEFAULT -); -CREATE TABLE c3 ( - id STRING PRIMARY KEY - ,update_set_null STRING DEFAULT 'b2-default' REFERENCES b2(update_cascade) ON UPDATE SET DEFAULT -); - -statement ok -INSERT INTO a VALUES ('original'), ('untouched'), ('b1-default'), ('b2-default'); -INSERT INTO b1 VALUES ('b1-pk1', 'original'), ('b1-pk2', 'untouched'), ('b1-default', 'b1-default'); -INSERT INTO b2 VALUES ('b2-pk1', 'original'), ('b2-pk2', 'untouched'), ('b2-default', 'b2-default'); -INSERT INTO c1 VALUES - ('c1-pk1-b1-pk1', 'original') - ,('c1-pk2-b1-pk1', 'original') - ,('c1-pk3-b1-pk2', 'untouched') - ,('c1-pk4-b1-pk2', 'untouched') -; -INSERT INTO c2 VALUES - ('c2-pk1-b1-pk1', 'original') - ,('c2-pk2-b1-pk1', 'original') - ,('c2-pk3-b1-pk2', 'untouched') - ,('c2-pk4-b1-pk2', 'untouched') -; -INSERT INTO c3 VALUES - ('c3-pk1-b2-pk1', 'original') - ,('c3-pk2-b2-pk1', 'original') - ,('c3-pk3-b2-pk2', 'untouched') - ,('c3-pk4-b2-pk2', 'untouched') -; - -# Ensure that show trace adds a cascade message for each of the tables that is -# cascaded into. -statement ok -SET tracing = on,kv,results; UPDATE a SET id = 'updated' WHERE id = 'original'; SET tracing = off - -query I -SELECT count(*) FROM [SHOW KV TRACE FOR SESSION] WHERE message LIKE 'cascading %'; ----- -5 - -# Clean up after the test. -statement ok -DROP TABLE c3, c2, c1, b2, b1, a; diff --git a/pkg/sql/logictest/testdata/planner_test/check_constraints b/pkg/sql/logictest/testdata/planner_test/check_constraints deleted file mode 100644 index 686c9242a31f..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/check_constraints +++ /dev/null @@ -1,61 +0,0 @@ -# LogicTest: local - -# Use multiple column families. - -statement ok -CREATE TABLE t9 ( - a INT PRIMARY KEY, - b INT, - c INT, - d INT, - e INT, - FAMILY (a), - FAMILY (b), - FAMILY (c), - FAMILY (d, e), - CHECK (a > b), - CHECK (d IS NULL) -) - -# Only column families that are needed to validate check constraints are fetched. -query TTTTT -EXPLAIN (VERBOSE) UPDATE t9 SET b = 2 WHERE a = 5 ----- -count · · () · - └── update · · () · - │ table t9 · · - │ set b · · - │ strategy updater · · - │ check 0 t9.a > t9.b · · - │ check 1 t9.d IS NULL · · - └── render · · (a, b, d, "?column?") a=CONST; "?column?"=CONST; key() - │ render 0 test.public.t9.a · · - │ render 1 test.public.t9.b · · - │ render 2 test.public.t9.d · · - │ render 3 2 · · - └── scan · · (a, b, c[omitted], d, e[omitted]) a=CONST; key() -· table t9@primary · · -· spans /5/0-/5/1/2 /5/3/1-/5/3/2 · · -· parallel · · · - - -query TTTTT -EXPLAIN (VERBOSE) UPDATE t9 SET a = 2 WHERE a = 5 ----- -count · · () · - └── update · · () · - │ table t9 · · - │ set a · · - │ strategy updater · · - │ check 0 t9.a > t9.b · · - │ check 1 t9.d IS NULL · · - └── render · · (a, b, c, d, e, "?column?") a=CONST; "?column?"=CONST; key() - │ render 0 test.public.t9.a · · - │ render 1 test.public.t9.b · · - │ render 2 test.public.t9.c · · - │ render 3 test.public.t9.d · · - │ render 4 test.public.t9.e · · - │ render 5 2 · · - └── scan · · (a, b, c, d, e) a=CONST; key() -· table t9@primary · · -· spans /5-/5/# · · diff --git a/pkg/sql/logictest/testdata/planner_test/custom_mutation_indexes b/pkg/sql/logictest/testdata/planner_test/custom_mutation_indexes deleted file mode 100644 index a7287badd594..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/custom_mutation_indexes +++ /dev/null @@ -1,77 +0,0 @@ -# LogicTest: local - -statement ok -CREATE TABLE a ( - a INT NOT NULL, - b STRING NOT NULL, - c INT NOT NULL, - d INT NOT NULL, - e STRING NOT NULL, - f BOOL NOT NULL DEFAULT false, - g TIMESTAMP NOT NULL DEFAULT now(), - h STRING NOT NULL DEFAULT 'foo', - i TIMESTAMP NOT NULL DEFAULT now(), - j STRING NOT NULL DEFAULT 'foo', - k DATE NULL, - l STRING NULL, - PRIMARY KEY (a, b, c, d, e, f), - INDEX (a, e, k, l), - INDEX (a, e, k, l) STORING (g, h) -); - -# See #30734: the user considers the default index selection to be a bug. -query TTT -EXPLAIN DELETE FROM a WHERE a=10 AND b='10' AND c=1 AND d=3; ----- -count · · - └── delete · · - │ from a - │ strategy deleter - └── render · · - └── scan · · -· table a@a_a_e_k_l_idx -· spans /10-/11 -· filter ((b = '10') AND (c = 1)) AND (d = 3) - -query TTT -EXPLAIN UPDATE a SET a = 3 WHERE a=10 AND b='10' AND c=1 AND d=3; ----- -count · · - └── update · · - │ table a - │ set a - │ strategy updater - └── render · · - └── scan · · -· table a@primary -· spans /10/"10"/1/3-/10/"10"/1/4 - -# Check that the default index selection can be overridden. - -query TTT -EXPLAIN DELETE FROM a@primary WHERE a=10 AND b='10' AND c=1 AND d=3; ----- -count · · - └── delete · · - │ from a - │ strategy deleter - └── render · · - └── scan · · -· table a@primary -· spans /10/"10"/1/3-/10/"10"/1/4 - -query TTT -EXPLAIN UPDATE a@a_a_e_k_l_idx SET a = 3 WHERE a=10 AND b='10' AND c=1 AND d=3; ----- -count · · - └── update · · - │ table a - │ set a - │ strategy updater - └── render · · - └── index-join · · - │ table a@primary - └── scan · · -· table a@a_a_e_k_l_idx -· spans /10-/11 -· filter ((b = '10') AND (c = 1)) AND (d = 3) diff --git a/pkg/sql/logictest/testdata/planner_test/ddl b/pkg/sql/logictest/testdata/planner_test/ddl deleted file mode 100644 index c404a31e99b9..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/ddl +++ /dev/null @@ -1,264 +0,0 @@ -# LogicTest: local - -# ------------------------------------------------------------------------------ -# ALTER TABLE tests. -# ------------------------------------------------------------------------------ -statement ok -CREATE TABLE other (b INT PRIMARY KEY) - -statement ok -INSERT INTO other VALUES (9) - -statement ok -CREATE TABLE t (a INT PRIMARY KEY CHECK(a > 0), f INT REFERENCES other, INDEX (f)) - -statement ok -INSERT INTO t VALUES (1, 9) - -statement ok -SET tracing = on,kv,results; SELECT * FROM t; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/primary/1/f -> /9 -output row: [1 9] - -statement ok -ALTER TABLE t ADD b INT - -statement ok -ALTER TABLE t ADD CONSTRAINT foo UNIQUE (b) - -statement ok -SET tracing = on,kv,results; SELECT b FROM t@foo; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/foo/NULL -> /1 -output row: [NULL] - -statement ok -ALTER TABLE t ADD c INT - -statement ok -INSERT INTO t VALUES (2, 9, 1, 1), (3, 9, 2, 1) - -statement ok -ALTER TABLE t DROP CONSTRAINT check_a - -statement ok -DROP INDEX foo CASCADE - -statement ok -SET tracing = on,kv,results; SELECT * FROM t; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/primary/1/f -> /9 -fetched: /t/primary/2/f/b/c -> /9/1/1 -fetched: /t/primary/3/f/b/c -> /9/2/1 -output row: [1 9 NULL NULL] -output row: [2 9 1 1] -output row: [3 9 2 1] - -statement ok -ALTER TABLE t DROP b, DROP c - -statement ok -SET tracing = on,kv,results; SELECT * FROM t; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/primary/1/f -> /9 -fetched: /t/primary/2/f -> /9 -fetched: /t/primary/3/f -> /9 -output row: [1 9] -output row: [2 9] -output row: [3 9] - -# Verify limits and orderings are propagated correctly to the select. -statement ok -CREATE TABLE s (k1 INT, k2 INT, v INT, PRIMARY KEY (k1,k2)) - -query TTTTT colnames -EXPLAIN (VERBOSE) ALTER TABLE s SPLIT AT SELECT k1,k2 FROM s ORDER BY k1 LIMIT 3 ----- -tree field description columns ordering -split · · (key, pretty, split_enforced_until) · - └── limit · · (k1, k2) k1!=NULL; k2!=NULL; key(k1,k2); +k1 - │ count 3 · · - └── render · · (k1, k2) k1!=NULL; k2!=NULL; key(k1,k2); +k1 - │ render 0 test.public.s.k1 · · - │ render 1 test.public.s.k2 · · - └── scan · · (k1, k2, v[omitted]) k1!=NULL; k2!=NULL; key(k1,k2); +k1 -· table s@primary · · -· spans ALL · · -· limit 3 · · - -statement ok -DROP TABLE t; DROP TABLE other - -# ------------------------------------------------------------------------------ -# CREATE INDEX tests. -# ------------------------------------------------------------------------------ -statement ok -CREATE TABLE t ( - a INT PRIMARY KEY, - b INT, - FAMILY (a), - FAMILY (b) -) - -statement ok -INSERT INTO t VALUES (1,1) - -statement ok -SET tracing = on,kv,results; SELECT * FROM t; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/primary/1 -> NULL -fetched: /t/primary/1/b -> 1 -output row: [1 1] - -user root - -statement ok -CREATE INDEX foo ON t (b) - -statement error duplicate index name: \"foo\" -CREATE INDEX foo ON t (a) - -statement error index \"bar\" contains unknown column \"c\" -CREATE INDEX bar ON t (c) - -statement error index \"bar\" contains duplicate column \"b\" -CREATE INDEX bar ON t (b, b); - -statement ok -SET tracing = on,kv,results; SELECT * FROM t@foo; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/foo/1/1 -> NULL -output row: [1 1] - -statement ok -INSERT INTO t VALUES (2,1) - -statement ok -SET tracing = on,kv,results; SELECT * FROM t@foo; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/foo/1/1 -> NULL -fetched: /t/foo/1/2 -> NULL -output row: [1 1] -output row: [2 1] - -# test for DESC index - -statement ok -DROP TABLE t - -statement ok -CREATE TABLE t ( - a INT PRIMARY KEY, - b INT, - c INT -) - -statement ok -INSERT INTO t VALUES (1,1,1), (2,2,2) - -statement ok -CREATE INDEX b_desc ON t (b DESC) - -statement ok -CREATE INDEX b_asc ON t (b ASC, c DESC) - -# index b_desc is well formed and column c is scanned using the primary index. -statement ok -SET tracing = on,kv,results; SELECT * FROM t@b_desc; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/b_desc/2/2 -> NULL -fetched: /t/b_desc/1/1 -> NULL -fetched: /t/primary/2/b/c -> /2/2 -fetched: /t/primary/1/b/c -> /1/1 -output row: [2 2 2] -output row: [1 1 1] - -statement ok -DROP table t - -# ------------------------------------------------------------------------------ -# CREATE VIEW tests. -# ------------------------------------------------------------------------------ -statement ok -CREATE TABLE test_kv(k INT PRIMARY KEY, v INT, w DECIMAL); - CREATE UNIQUE INDEX test_v_idx ON test_kv(v); - CREATE INDEX test_v_idx2 ON test_kv(v DESC) STORING(w); - CREATE INDEX test_v_idx3 ON test_kv(w) STORING(v); - CREATE TABLE test_kvr1(k INT PRIMARY KEY REFERENCES test_kv(k)); - CREATE TABLE test_kvr2(k INT, v INT UNIQUE REFERENCES test_kv(k)); - CREATE TABLE test_kvr3(k INT, v INT UNIQUE REFERENCES test_kv(v)); - CREATE TABLE test_kvi1(k INT PRIMARY KEY) INTERLEAVE IN PARENT test_kv(k); - CREATE TABLE test_kvi2(k INT PRIMARY KEY, v INT); - CREATE UNIQUE INDEX test_kvi2_idx ON test_kvi2(v) INTERLEAVE IN PARENT test_kv(v); - CREATE VIEW test_v1 AS SELECT v FROM test_kv; - CREATE VIEW test_v2 AS SELECT v FROM test_v1; - -# Verify that we report a dependency on a column that is being mutated. -statement ok -CREATE TABLE kv (k INT PRIMARY KEY, v INT); -BEGIN; - ALTER TABLE kv ADD COLUMN z INT DEFAULT 123; - CREATE VIEW v AS SELECT k FROM [UPDATE kv SET v = 444 WHERE k > 0 RETURNING k]; -COMMIT - -# The view should contain column z. -query TTTTT colnames -EXPLAIN (VERBOSE) SELECT * FROM v ----- -tree field description columns ordering -render · · (k) · - │ render 0 test.public.kv.k · · - └── run · · (k, v, z) · - └── update · · (k, v, z) · - │ table kv · · - │ set v · · - │ strategy updater · · - └── render · · (k, v, z, "?column?") "?column?"=CONST; k!=NULL; key(k) - │ render 0 test.public.kv.k · · - │ render 1 test.public.kv.v · · - │ render 2 test.public.kv.z · · - │ render 3 444 · · - └── scan · · (k, v, z) k!=NULL; key(k) -· table kv@primary · · -· spans /1- · · diff --git a/pkg/sql/logictest/testdata/planner_test/delete b/pkg/sql/logictest/testdata/planner_test/delete deleted file mode 100644 index e8998db6e0d2..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/delete +++ /dev/null @@ -1,225 +0,0 @@ -# LogicTest: local - -statement ok -CREATE TABLE kv ( - k INT PRIMARY KEY, - v INT, - UNIQUE INDEX foo (v), - INDEX bar (k, v) -) - -statement ok -CREATE TABLE unindexed ( - k INT PRIMARY KEY, - v INT -) - -statement ok -CREATE TABLE indexed (id int primary key, value int, other int, index (value)) - -statement count 4 -INSERT INTO kv VALUES (1, 2), (3, 4), (5, 6), (7, 8) - -statement count 2 -DELETE FROM kv WHERE k=3 OR v=6 - -query II -DELETE FROM kv RETURNING k, v ----- -1 2 -7 8 - -statement ok -SET tracing = on,kv,results; SELECT * FROM kv; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- - -statement ok -SET tracing = on,kv,results; SELECT * FROM kv@foo; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- - -statement ok -SET tracing = on,kv,results; SELECT * FROM kv@bar; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- - -# Check that EXPLAIN does not destroy data (#6613) -query TTT colnames -EXPLAIN DELETE FROM unindexed ----- -tree field description -count · · - └── delete range · · -· from unindexed -· spans ALL - -query TTT -EXPLAIN DELETE FROM unindexed WHERE v = 7 ORDER BY v ----- -count · · - └── delete · · - │ from unindexed - │ strategy deleter - └── nosort · · - │ order +v - └── scan · · -· table unindexed@primary -· spans ALL -· filter v = 7 - -# Check DELETE with LIMIT clause (MySQL extension) -query TTT -EXPLAIN DELETE FROM unindexed WHERE v = 5 LIMIT 10 ----- -count · · - └── delete · · - │ from unindexed - │ strategy deleter - └── limit · · - │ count 10 - └── render · · - └── scan · · -· table unindexed@primary -· spans ALL -· filter v = 5 - -# Check fast DELETE. -query TTT -EXPLAIN DELETE FROM unindexed WHERE k > 0 ----- -count · · - └── delete range · · -· from unindexed -· spans /1- - - -# Check fast DELETE with reverse scan (not supported by heuristic planner) -query TTT -EXPLAIN DELETE FROM unindexed WHERE k > 0 ORDER BY k DESC ----- -count · · - └── delete · · - │ from unindexed - │ strategy deleter - └── render · · - └── revscan · · -· table unindexed@primary -· spans /1- - -# Check that limits don't permit fast deletes. -query TTT -EXPLAIN DELETE FROM unindexed WHERE k > 0 LIMIT 1 ----- -count · · - └── delete · · - │ from unindexed - │ strategy deleter - └── limit · · - │ count 1 - └── render · · - └── scan · · -· table unindexed@primary -· spans /1- -· limit 1 - -query TTT -EXPLAIN DELETE FROM indexed WHERE value = 5 LIMIT 10 ----- -count · · - └── delete · · - │ from indexed - │ strategy deleter - └── limit · · - │ count 10 - └── render · · - └── scan · · -· table indexed@indexed_value_idx -· spans /5-/6 -· limit 10 - -query TTT -EXPLAIN DELETE FROM indexed LIMIT 10 ----- -count · · - └── delete · · - │ from indexed - │ strategy deleter - └── limit · · - │ count 10 - └── render · · - └── scan · · -· table indexed@primary -· spans ALL -· limit 10 - -query TTT -EXPLAIN DELETE FROM indexed WHERE value = 5 LIMIT 10 RETURNING id ----- -render · · - └── run · · - └── delete · · - │ from indexed - │ strategy deleter - └── limit · · - │ count 10 - └── index-join · · - │ table indexed@primary - └── scan · · -· table indexed@indexed_value_idx -· spans /5-/6 -· limit 10 - -# Ensure that the scan for cross-range point deletes are parallelized. -statement ok -CREATE TABLE a (a INT PRIMARY KEY, b INT, INDEX(b)) - -query TTT -EXPLAIN DELETE FROM a WHERE a IN (10, 20) ----- -count · · - └── delete · · - │ from a - │ strategy deleter - └── scan · · -· table a@primary -· spans /10-/10/# /20-/20/# -· parallel · - -statement ok -ALTER TABLE a SPLIT AT VALUES(5) - -# Run a select to prime the range cache to simplify the trace below. -statement ok -SELECT * FROM a - -# Make sure that the scan for the update actually gets parallelized. -statement ok -SET tracing = on; DELETE FROM a WHERE a = 0 OR a = 10; SET tracing = off - -# The span "sending partial batch" means that the scan was parallelized. -# If this test is failing and doesn't have that span, it means that the scanNode -# was improperly configured to add a limit to the ScanRequest batch. -# See #30943 for more details. -query T -SELECT message FROM [SHOW TRACE FOR SESSION] WHERE message IN - ('querying next range at /Table/56/1/0', - 'querying next range at /Table/56/1/10', - '=== SPAN START: kv.DistSender: sending partial batch ===' - ) ----- -querying next range at /Table/56/1/0 -=== SPAN START: kv.DistSender: sending partial batch === -querying next range at /Table/56/1/10 diff --git a/pkg/sql/logictest/testdata/planner_test/delete_range b/pkg/sql/logictest/testdata/planner_test/delete_range deleted file mode 100644 index 21a085f554e2..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/delete_range +++ /dev/null @@ -1,19 +0,0 @@ -# LogicTest: local - -statement ok -CREATE TABLE a (a INT PRIMARY KEY) - -# Delete range operates in chunks of 600 (defined by sql.TableTruncateChunkSize). -statement ok -INSERT INTO a SELECT * FROM generate_series(1,1000) - -statement ok -SET tracing = on,kv; DELETE FROM a; SET tracing = off - -# Ensure that DelRange requests are chunked for DELETE FROM... -query TT -SELECT operation, message FROM [SHOW KV TRACE FOR SESSION] -WHERE message LIKE '%DelRange%' ----- -flow DelRange /Table/53/1 - /Table/53/2 -flow DelRange /Table/53/1/601/0 - /Table/53/2 diff --git a/pkg/sql/logictest/testdata/planner_test/distinct b/pkg/sql/logictest/testdata/planner_test/distinct deleted file mode 100644 index 0fa35cccc51f..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/distinct +++ /dev/null @@ -1,207 +0,0 @@ -# LogicTest: local - -statement ok -CREATE TABLE xyz ( - x INT PRIMARY KEY, - y INT, - z INT, - INDEX foo (z, y) -) - -# TODO(vivek): Use the secondary index. Use distinct in index selection. -query TTT -EXPLAIN SELECT DISTINCT y, z FROM xyz ----- -distinct · · - └── render · · - └── scan · · -· table xyz@primary -· spans ALL - -query TTT -EXPLAIN SELECT DISTINCT y, z FROM xyz ORDER BY z ----- -distinct · · - │ order key y, z - └── render · · - └── scan · · -· table xyz@foo -· spans ALL - -query TTT -EXPLAIN SELECT DISTINCT y, z FROM xyz ORDER BY y ----- -distinct · · - │ order key y - └── sort · · - │ order +y - └── render · · - └── scan · · -· table xyz@foo -· spans ALL - -query TTT -EXPLAIN SELECT DISTINCT y, z FROM xyz ORDER BY y, z ----- -distinct · · - │ order key y, z - └── sort · · - │ order +y,+z - └── render · · - └── scan · · -· table xyz@foo -· spans ALL - -query TTT -EXPLAIN SELECT DISTINCT y + z AS a FROM xyz ORDER BY a ----- -distinct · · - │ order key a - └── sort · · - │ order +a - └── render · · - └── scan · · -· table xyz@primary -· spans ALL - -query TTT -EXPLAIN SELECT DISTINCT y AS w FROM xyz ORDER BY z ----- -distinct · · - └── nosort · · - │ order +z - └── render · · - └── scan · · -· table xyz@foo -· spans ALL - -query TTT -EXPLAIN SELECT DISTINCT y AS w FROM xyz ORDER BY y ----- -distinct · · - │ order key w - └── sort · · - │ order +w - └── render · · - └── scan · · -· table xyz@foo -· spans ALL - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT x FROM xyz ----- -render · · (x) x!=NULL; key(x) - │ render 0 test.public.xyz.x · · - └── scan · · (x, y[omitted], z[omitted]) x!=NULL; key(x) -· table xyz@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT x, y, z FROM xyz ----- -scan · · (x, y, z) x!=NULL; key(x) -· table xyz@primary · · -· spans ALL · · - -statement ok -CREATE TABLE abcd ( - a INT, - b INT, - c INT, - d INT NOT NULL, - PRIMARY KEY (a, b, c), - UNIQUE INDEX (d, b) -) - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT 1 AS x, d, b FROM abcd ORDER BY d, b ----- -render · · (x, d, b) x=CONST; d!=NULL; b!=NULL; key(d,b); +d,+b - │ render 0 1 · · - │ render 1 test.public.abcd.d · · - │ render 2 test.public.abcd.b · · - └── scan · · (a[omitted], b, c[omitted], d) b!=NULL; d!=NULL; key(b,d); +d,+b -· table abcd@abcd_d_b_key · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT a, b FROM abcd ----- -distinct · · (a, b) a!=NULL; b!=NULL; key(a,b); +a,+b - │ order key a, b · · - └── render · · (a, b) a!=NULL; b!=NULL; +a,+b - │ render 0 test.public.abcd.a · · - │ render 1 test.public.abcd.b · · - └── scan · · (a, b, c[omitted], d[omitted]) a!=NULL; b!=NULL; c!=NULL; key(a,b,c); +a,+b -· table abcd@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT a, b, c FROM abcd ----- -render · · (a, b, c) a!=NULL; b!=NULL; c!=NULL; key(a,b,c) - │ render 0 test.public.abcd.a · · - │ render 1 test.public.abcd.b · · - │ render 2 test.public.abcd.c · · - └── scan · · (a, b, c, d[omitted]) a!=NULL; b!=NULL; c!=NULL; key(a,b,c) -· table abcd@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT a, b, c, d FROM abcd ----- -scan · · (a, b, c, d) a!=NULL; b!=NULL; c!=NULL; key(a,b,c) -· table abcd@primary · · -· spans ALL · · - -statement ok -CREATE TABLE kv (k INT PRIMARY KEY, v INT, UNIQUE INDEX idx(v)) - -query TTTTT colnames -EXPLAIN (VERBOSE) SELECT DISTINCT v FROM kv ----- -tree field description columns ordering -distinct · · (v) weak-key(v) - └── render · · (v) · - │ render 0 test.public.kv.v · · - └── scan · · (k[omitted], v) k!=NULL; key(k) -· table kv@primary · · -· spans ALL · · - -# Verify we don't incorrectly elide the distinct node when we only have a weak key (#19343). -query TTTTT colnames -EXPLAIN (VERBOSE) SELECT DISTINCT v FROM kv@idx ----- -tree field description columns ordering -distinct · · (v) weak-key(v); +v - │ order key v · · - └── render · · (v) weak-key(v); +v - │ render 0 test.public.kv.v · · - └── scan · · (k[omitted], v) weak-key(v); +v -· table kv@idx · · -· spans ALL · · - -# Here we can infer that v is not-NULL so eliding the node is correct. -query TTTTT colnames -EXPLAIN (VERBOSE) SELECT DISTINCT v FROM kv@idx WHERE v > 0 ----- -tree field description columns ordering -render · · (v) v!=NULL; key(v) - │ render 0 test.public.kv.v · · - └── scan · · (k[omitted], v) v!=NULL; key(v) -· table kv@idx · · -· spans /1- · · - -statement ok -CREATE TABLE kv2 (k INT PRIMARY KEY, v INT NOT NULL, UNIQUE INDEX idx(v)) - -# In this case it is correct to elide the distinct node. -query TTTTT colnames -EXPLAIN (VERBOSE) SELECT DISTINCT v FROM kv2@idx ----- -tree field description columns ordering -render · · (v) v!=NULL; key(v) - │ render 0 test.public.kv2.v · · - └── scan · · (k[omitted], v) v!=NULL; key(v) -· table kv2@idx · · -· spans ALL · · diff --git a/pkg/sql/logictest/testdata/planner_test/distinct_on b/pkg/sql/logictest/testdata/planner_test/distinct_on deleted file mode 100644 index 8cd582e720cc..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/distinct_on +++ /dev/null @@ -1,468 +0,0 @@ -# LogicTest: local - -statement ok -CREATE TABLE xyz ( - x INT, - y INT, - z INT, - pk1 INT, - pk2 INT, - PRIMARY KEY (pk1, pk2) -) - -statement ok -CREATE TABLE abc ( - a STRING, - b STRING, - c STRING, - PRIMARY KEY (a, b, c) -) - -################## -# Simple queries # -################## - -# 3/3 columns - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON (x, y, z) x, y, z FROM xyz ----- -distinct · · (x, y, z) weak-key(x,y,z) - │ distinct on x, y, z · · - └── render · · (x, y, z) · - │ render 0 test.public.xyz.x · · - │ render 1 test.public.xyz.y · · - │ render 2 test.public.xyz.z · · - └── scan · · (x, y, z, pk1[omitted], pk2[omitted]) pk1!=NULL; pk2!=NULL; key(pk1,pk2) -· table xyz@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON (z, x, y) x FROM xyz ----- -render · · (x) · - │ render 0 x · · - └── distinct · · (x, z, y) weak-key(x,z,y) - │ distinct on x, z, y · · - └── render · · (x, z, y) · - │ render 0 test.public.xyz.x · · - │ render 1 test.public.xyz.z · · - │ render 2 test.public.xyz.y · · - └── scan · · (x, y, z, pk1[omitted], pk2[omitted]) pk1!=NULL; pk2!=NULL; key(pk1,pk2) -· table xyz@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON (b, c, a) a, c, b FROM abc ----- -render · · (a, c, b) a!=NULL; c!=NULL; b!=NULL; key(a,c,b) - │ render 0 test.public.abc.a · · - │ render 1 test.public.abc.c · · - │ render 2 test.public.abc.b · · - └── scan · · (a, b, c) a!=NULL; b!=NULL; c!=NULL; key(a,b,c) -· table abc@primary · · -· spans ALL · · - -# Distinct node should be elided since we have a strong key. -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON (b, c, a) a FROM abc ----- -render · · (a) a!=NULL - │ render 0 a · · - └── scan · · (a, b, c) a!=NULL; b!=NULL; c!=NULL; key(a,b,c) -· table abc@primary · · -· spans ALL · · - -# Distinct node should be elided since we have a strong key. -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON (c, a, b) b FROM abc ORDER BY b ----- -render · · (b) b!=NULL; +b - │ render 0 b · · - └── sort · · (b, c[omitted], a[omitted]) b!=NULL; c!=NULL; a!=NULL; key(b,c,a); +b - │ order +b · · - └── render · · (b, c[omitted], a[omitted]) b!=NULL; c!=NULL; a!=NULL; key(b,c,a) - │ render 0 test.public.abc.b · · - │ render 1 NULL · · - │ render 2 NULL · · - └── scan · · (a[omitted], b, c[omitted]) a!=NULL; b!=NULL; c!=NULL; key(a,b,c) -· table abc@primary · · -· spans ALL · · - - -# 2/3 columns - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON (x, y) y, x FROM xyz ----- -distinct · · (y, x) weak-key(y,x) - │ distinct on y, x · · - └── render · · (y, x) · - │ render 0 test.public.xyz.y · · - │ render 1 test.public.xyz.x · · - └── scan · · (x, y, z[omitted], pk1[omitted], pk2[omitted]) pk1!=NULL; pk2!=NULL; key(pk1,pk2) -· table xyz@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON (y, x) x FROM xyz ----- -render · · (x) · - │ render 0 x · · - └── distinct · · (x, y) weak-key(x,y) - │ distinct on x, y · · - └── render · · (x, y) · - │ render 0 test.public.xyz.x · · - │ render 1 test.public.xyz.y · · - └── scan · · (x, y, z[omitted], pk1[omitted], pk2[omitted]) pk1!=NULL; pk2!=NULL; key(pk1,pk2) -· table xyz@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON (y, x, x, y, x) x, y FROM xyz ----- -distinct · · (x, y) weak-key(x,y) - │ distinct on x, y · · - └── render · · (x, y) · - │ render 0 test.public.xyz.x · · - │ render 1 test.public.xyz.y · · - └── scan · · (x, y, z[omitted], pk1[omitted], pk2[omitted]) pk1!=NULL; pk2!=NULL; key(pk1,pk2) -· table xyz@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON(pk1, x) pk1, x FROM xyz ORDER BY pk1 ----- -distinct · · (pk1, x) pk1!=NULL; weak-key(pk1,x); +pk1 - │ distinct on pk1, x · · - │ order key pk1 · · - └── render · · (pk1, x) pk1!=NULL; +pk1 - │ render 0 test.public.xyz.pk1 · · - │ render 1 test.public.xyz.x · · - └── scan · · (x, y[omitted], z[omitted], pk1, pk2[omitted]) pk1!=NULL; pk2!=NULL; key(pk1,pk2); +pk1 -· table xyz@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON (a, c) a, b FROM abc ----- -render · · (a, b) a!=NULL; b!=NULL; +a - │ render 0 a · · - │ render 1 b · · - └── distinct · · (a, b, c) a!=NULL; b!=NULL; c!=NULL; key(a,c); +a - │ distinct on a, c · · - │ order key a · · - └── scan · · (a, b, c) a!=NULL; b!=NULL; c!=NULL; key(a,b,c); +a -· table abc@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON (c, a) b, c, a FROM abc ----- -distinct · · (b, c, a) b!=NULL; c!=NULL; a!=NULL; key(c,a); +a - │ distinct on c, a · · - │ order key a · · - └── render · · (b, c, a) b!=NULL; c!=NULL; a!=NULL; key(b,c,a); +a - │ render 0 test.public.abc.b · · - │ render 1 test.public.abc.c · · - │ render 2 test.public.abc.a · · - └── scan · · (a, b, c) a!=NULL; b!=NULL; c!=NULL; key(a,b,c); +a -· table abc@primary · · -· spans ALL · · - - -# 1/3 columns - -# Check that distinct propagates the smaller, tighter key (pk1) as opposed to -# the original key (pk1, pk2). -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON (pk1) pk1, pk2 FROM xyz ----- -distinct · · (pk1, pk2) pk1!=NULL; pk2!=NULL; key(pk1); +pk1 - │ distinct on pk1 · · - │ order key pk1 · · - └── render · · (pk1, pk2) pk1!=NULL; pk2!=NULL; key(pk1,pk2); +pk1 - │ render 0 test.public.xyz.pk1 · · - │ render 1 test.public.xyz.pk2 · · - └── scan · · (x[omitted], y[omitted], z[omitted], pk1, pk2) pk1!=NULL; pk2!=NULL; key(pk1,pk2); +pk1 -· table xyz@primary · · -· spans ALL · · - -# Ensure order simplification on DISTINCT ON columns does not simplifying out -# an explicit order from ORDER BY. -# Note that the -c ordering was reduced after the distinct: this is because -# we have a strong key on 'a' so ordering after '+a' is unnecessary. -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON (a) a, c FROM abc ORDER BY a, c DESC, b ----- -distinct · · (a, c) a!=NULL; c!=NULL; key(a); +a - │ distinct on a · · - │ order key a · · - └── sort · · (a, c) a!=NULL; c!=NULL; +a,-c - │ order +a,-c,+b · · - └── render · · (a, c, b) a!=NULL; c!=NULL; b!=NULL; key(a,c,b); +a - │ render 0 test.public.abc.a · · - │ render 1 test.public.abc.c · · - │ render 2 test.public.abc.b · · - └── scan · · (a, b, c) a!=NULL; b!=NULL; c!=NULL; key(a,b,c); +a -· table abc@primary · · -· spans ALL · · - -################# -# With ORDER BY # -################# - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON (x) x FROM xyz ORDER BY x DESC ----- -distinct · · (x) weak-key(x); -x - │ distinct on x · · - │ order key x · · - └── sort · · (x) -x - │ order -x · · - └── render · · (x) · - │ render 0 test.public.xyz.x · · - └── scan · · (x, y[omitted], z[omitted], pk1[omitted], pk2[omitted]) pk1!=NULL; pk2!=NULL; key(pk1,pk2) -· table xyz@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON (x, z) y, z, x FROM xyz ORDER BY z ----- -distinct · · (y, z, x) weak-key(z,x); +z - │ distinct on z, x · · - │ order key z · · - └── sort · · (y, z, x) +z - │ order +z · · - └── render · · (y, z, x) · - │ render 0 test.public.xyz.y · · - │ render 1 test.public.xyz.z · · - │ render 2 test.public.xyz.x · · - └── scan · · (x, y, z, pk1[omitted], pk2[omitted]) pk1!=NULL; pk2!=NULL; key(pk1,pk2) -· table xyz@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON (x) y, z, x FROM xyz ORDER BY x ASC, z DESC, y DESC ----- -distinct · · (y, z, x) weak-key(x); +x,-z,-y - │ distinct on x · · - │ order key x · · - └── sort · · (y, z, x) +x,-z,-y - │ order +x,-z,-y · · - └── render · · (y, z, x) · - │ render 0 test.public.xyz.y · · - │ render 1 test.public.xyz.z · · - │ render 2 test.public.xyz.x · · - └── scan · · (x, y, z, pk1[omitted], pk2[omitted]) pk1!=NULL; pk2!=NULL; key(pk1,pk2) -· table xyz@primary · · -· spans ALL · · - -##################### -# With aggregations # -##################### - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON (max(y)) max(x) FROM xyz ----- -render · · (max) · - │ render 0 max · · - └── distinct · · (max, max) weak-key(max) - │ distinct on max · · - └── group · · (max, max) · - │ aggregate 0 max(x) · · - │ aggregate 1 max(y) · · - │ scalar · · · - └── render · · (x, y) · - │ render 0 test.public.xyz.x · · - │ render 1 test.public.xyz.y · · - └── scan · · (x, y, z[omitted], pk1[omitted], pk2[omitted]) pk1!=NULL; pk2!=NULL; key(pk1,pk2) -· table xyz@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON(min(a), max(b), min(c)) max(a) FROM abc ----- -render · · (max) · - │ render 0 max · · - └── distinct · · (max, min, max, min) weak-key(min,max,min) - │ distinct on min, max, min · · - └── group · · (max, min, max, min) · - │ aggregate 0 max(a) · · - │ aggregate 1 min(a) · · - │ aggregate 2 max(b) · · - │ aggregate 3 min(c) · · - │ scalar · · · - └── scan · · (a, b, c) a!=NULL; b!=NULL; c!=NULL; key(a,b,c) -· table abc@primary · · -· spans ALL · · - -################# -# With GROUP BY # -################# - -# TODO(richardwu): we can elide the DISTINCT ON since its key is equivalent -# to the group key. -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON(y) min(x) FROM xyz GROUP BY y ----- -render · · (min) · - │ render 0 min · · - └── distinct · · (min, y) weak-key(y) - │ distinct on y · · - └── group · · (min, y) weak-key(y) - │ aggregate 0 min(x) · · - │ aggregate 1 y · · - │ group by y · · - └── render · · (y, x) · - │ render 0 test.public.xyz.y · · - │ render 1 test.public.xyz.x · · - └── scan · · (x, y, z[omitted], pk1[omitted], pk2[omitted]) pk1!=NULL; pk2!=NULL; key(pk1,pk2) -· table xyz@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON(min(x)) min(x) FROM xyz GROUP BY y HAVING min(x) = 1 ----- -distinct · · (min) min=CONST; key() - │ distinct on min · · - └── filter · · (min) min=CONST - │ filter agg0 = 1 · · - └── group · · (min) · - │ aggregate 0 min(x) · · - │ group by y · · - └── render · · (y, x) · - │ render 0 test.public.xyz.y · · - │ render 1 test.public.xyz.x · · - └── scan · · (x, y, z[omitted], pk1[omitted], pk2[omitted]) pk1!=NULL; pk2!=NULL; key(pk1,pk2) -· table xyz@primary · · -· spans ALL · · - -######################### -# With window functions # -######################### - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON(row_number() OVER()) y FROM xyz ----- -render · · (y) · - │ render 0 y · · - └── distinct · · (y, row_number) weak-key(row_number) - │ distinct on row_number · · - └── window · · (y, row_number) · - │ window 0 row_number() OVER () · · - │ render 1 row_number() OVER () · · - └── render · · (y) · - │ render 0 test.public.xyz.y · · - └── scan · · (x[omitted], y, z[omitted], pk1[omitted], pk2[omitted]) pk1!=NULL; pk2!=NULL; key(pk1,pk2) -· table xyz@primary · · -· spans ALL · · - -########################### -# With ordinal references # -########################### - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON (1) x, y, z FROM xyz ----- -distinct · · (x, y, z) weak-key(x) - │ distinct on x · · - └── render · · (x, y, z) · - │ render 0 test.public.xyz.x · · - │ render 1 test.public.xyz.y · · - │ render 2 test.public.xyz.z · · - └── scan · · (x, y, z, pk1[omitted], pk2[omitted]) pk1!=NULL; pk2!=NULL; key(pk1,pk2) -· table xyz@primary · · -· spans ALL · · - -# Distinct node elided because of strong key. -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON (1,2,3) a, b, c FROM abc ----- -scan · · (a, b, c) a!=NULL; b!=NULL; c!=NULL; key(a,b,c) -· table abc@primary · · -· spans ALL · · - -######################### -# With alias references # -######################### - -# This should priortize alias (use 'x' as the key). -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON(y) x AS y, y AS x FROM xyz ----- -distinct · · (y, x) weak-key(y) - │ distinct on y · · - └── render · · (y, x) · - │ render 0 test.public.xyz.x · · - │ render 1 test.public.xyz.y · · - └── scan · · (x, y, z[omitted], pk1[omitted], pk2[omitted]) pk1!=NULL; pk2!=NULL; key(pk1,pk2) -· table xyz@primary · · -· spans ALL · · - -# Ignores the alias. -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON(x) x AS y FROM xyz ----- -distinct · · (y) weak-key(y) - │ distinct on y · · - └── render · · (y) · - │ render 0 test.public.xyz.x · · - └── scan · · (x, y[omitted], z[omitted], pk1[omitted], pk2[omitted]) pk1!=NULL; pk2!=NULL; key(pk1,pk2) -· table xyz@primary · · -· spans ALL · · - -################################## -# With nested parentheses/tuples # -################################## - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON(((x)), (x, y)) x, y FROM xyz ----- -distinct · · (x, y) weak-key(x,y) - │ distinct on x, y · · - └── render · · (x, y) · - │ render 0 test.public.xyz.x · · - │ render 1 test.public.xyz.y · · - └── scan · · (x, y, z[omitted], pk1[omitted], pk2[omitted]) pk1!=NULL; pk2!=NULL; key(pk1,pk2) -· table xyz@primary · · -· spans ALL · · - -################################ -# Hybrid PK and non-PK queries # -################################ - -# Distinct elided because of strong key presence. -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON(pk1, pk2, x, y) x, y, z FROM xyz ORDER BY x, y ----- -render · · (x, y, z) +x,+y - │ render 0 x · · - │ render 1 y · · - │ render 2 z · · - └── sort · · (x, y, z, pk1[omitted], pk2[omitted]) pk1!=NULL; pk2!=NULL; key(pk1,pk2); +x,+y - │ order +x,+y · · - └── scan · · (x, y, z, pk1[omitted], pk2[omitted]) pk1!=NULL; pk2!=NULL; key(pk1,pk2) -· table xyz@primary · · -· spans ALL · · - -# Ordering only propagates up until distinctNode. -# pk1 ordering does not propagate at all since it's not explicitly needed. -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON (x, y, z) pk1 FROM xyz ORDER BY x ----- -render · · (pk1) pk1!=NULL - │ render 0 pk1 · · - └── distinct · · (pk1, x, y, z) pk1!=NULL; weak-key(x,y,z); +x - │ distinct on x, y, z · · - │ order key x · · - └── sort · · (pk1, x, y, z) pk1!=NULL; +x - │ order +x · · - └── render · · (pk1, x, y, z) pk1!=NULL - │ render 0 test.public.xyz.pk1 · · - │ render 1 test.public.xyz.x · · - │ render 2 test.public.xyz.y · · - │ render 3 test.public.xyz.z · · - └── scan · · (x, y, z, pk1, pk2[omitted]) pk1!=NULL; pk2!=NULL; key(pk1,pk2) -· table xyz@primary · · -· spans ALL · · diff --git a/pkg/sql/logictest/testdata/planner_test/distsql_agg b/pkg/sql/logictest/testdata/planner_test/distsql_agg deleted file mode 100644 index 5b349f32be63..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/distsql_agg +++ /dev/null @@ -1,287 +0,0 @@ -# LogicTest: 5node-dist - -statement ok -CREATE TABLE data (a INT, b INT, c FLOAT, d DECIMAL, PRIMARY KEY (a, b, c, d)) - -# Split into ten parts. -statement ok -ALTER TABLE data SPLIT AT SELECT i FROM generate_series(1, 9) AS g(i) - -# Relocate the ten parts to the five nodes. -statement ok -ALTER TABLE data EXPERIMENTAL_RELOCATE - SELECT ARRAY[i%5+1], i FROM generate_series(0, 9) AS g(i) - -# Verify data placement. -query TTTI colnames -SELECT start_key, end_key, replicas, lease_holder FROM [SHOW RANGES FROM TABLE data] ----- -start_key end_key replicas lease_holder -NULL /1 {1} 1 -/1 /2 {2} 2 -/2 /3 {3} 3 -/3 /4 {4} 4 -/4 /5 {5} 5 -/5 /6 {1} 1 -/6 /7 {2} 2 -/7 /8 {3} 3 -/8 /9 {4} 4 -/9 NULL {5} 5 - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum(a) FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyslE2PmzAQhu_9FWhOrWRkbCCb5ZQe99ButWlPFQcXjyhSgpFtpFYR_70CDoEoMa68Rz5eP--jseYCrZL4VZzRQPETGBDgQCAFAhkQyKEk0GlVoTFKj7_MgRf5B4qEQNN2vR1flwQqpRGKC9jGnhAK-C5-nfANhURNEyAg0YrmNGE63ZyF_nuQwgogcOxEa4oopiwSrYxYpOxv1EDgtbdFdGBQDgRUb68sY0WNULCB-Pf5XNcaa2GVpvm6zvHHl48H9ukhhj_EXE_vW6UlapSro8vBXYQl_9ckXTVh_gNgPgOgLKY8aAQbjRbmu5ARcH9x7iXOY5oGiW80Wog_hYin_uKpl3ga0yxIfKPRQnwfIp75i2de4llM8yDxjUYL8ef32jZ3MG9oOtUavNk6909Oxm2EssZ5dRnV6wq_aVVNmPnxdcpNLyQaO39l88NLO38aCy7DzBnmqzC7DXM3eQOdOtOZO5yF9M6d4Z2bvAshPznDezd5H0J-ds8q2bgm7kt2yy6HD_8CAAD__8HMzUU= - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum((a-1)*1000 + (b-1)*100 + (c::INT-1)*10 + (d-1)) FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzUlUFr2zAUx-_7FOad3E3GluykqU4u2w6BtRtpdxo-aNHDC6SSkRTYKPnuIzaldmhkDe_im5-f_vq_93uC9wxKS7wXT2iB_wAKBBgQyIFAAQQWUBFojN6itdqcjnSCtfwNPCOwU83BnX5XBLbaIPBncDu3R-DwKH7ucYNCokkzICDRid2-tWnM7kmYP6UUTgCBh0Yoy6MkpZFQMqKRdr_QAIENKomGR3EcxyVNKOd8ff-4unpPsyx7CT7EccmGuZfvNpd3weBE70BZtJlPnz-u726_XEF1JKAP7rUv60SNwOmRhPd-W9cGa-G0SRfD1h--38UlvWzDLtq83n5Q2kg0KAdXV0d_ITT7t0ryQSU0fNg0ZNgpTVI2m3GPdN-jvJwybhYOmQVBZkmazwbySPc9yNdTIOfhkPMgyHmSFrOBPNJ9D_JqCuQiHHIRBLlI0sVsII9034N887-2wxs2G7SNVhbPtsTbN2en7YGyxm7VWH0wW_xm9La16cKvra79IdG6Lku7YK261KnAvph6xWwgpudi5ncesc696sIvLqbUvfCKl37n5RTna6945XdeTXG-8c8qG3km_kd27l0d3_0NAAD__0t5SGo= - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum(a), count(a), max(a) FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy0lEFr2zAUx-_7FOadNpCRJTlp6lPKTjmkGU0Dg2GGFj28QGoZSYaNku8-bI_VDrUscHazrfzz-_N74r1CqRU-yhe0kH0DBgQ4EBBAIAUCC8gJVEYf0Vptmp90gY36BVlC4FRWtWs-5wSO2iBkr-BO7oyQwbP8ccYnlAoNTYCAQidP5xZTmdOLNL_XSjoJBPaVLG0WxZRFslQRi7T7iQYI7GqXRWsG-YWArt0byzpZIGTsQsL7PBSFwUI6behiWGd_2H5cs09A4PPu8Pj893n78LV9GoPzUfgbsy61UWhQDYD5xV-PJWP99oft903TkP9rKMYbikFDFj4uFjIuymLKZw1solHPyPL2A-PhOniQDh5TMUvHRKOejrvb6xDhOkSQDhHTdJaOiUY9Havb60jDdaRBOtKYLmbpmGjU03H_f7fbO_AntJUuLV5tuff_OWm2H6oCu1VpdW2O-MXoY4vpXndtrv2g0LrulHUvm7I7agr2w8wb5oMwuw5zP3kCLbzp1B9O5_ReeMNLP3k5h3znDa_85NUc8r1_VsnENfFfsmt2fvnwJwAA__-Um-rw - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum(a+b), count(a+b), max(a+b) FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy0lEFr2zAUx-_7FOadNiYjS3LS1KeUnXJIO5IGBsMMLXp4gVQykgIbJd992B6rExJZEPdmW_nn9-f3xHsFbRQ-yhd0UHwHBgQ4EBBAIAcCEygJ1NZs0Tljm590gYX6DUVGYKfrg28-lwS2xiIUr-B3fo9QwLP8uccVSoWWZkBAoZe7fYup7e5F2j9zJb0EAutaalckKWWJ1CphifG_0AKBFWqFtkjm7POcQ3kkYA7-jei8rBAKdiTxrR6qymIlvbF0clpqvVl-nLNPQODL0-bx-d_z8uFb-3QNzq_C35gHbaxCi-oEWB7D9Vh2rd96s_yxaBry_w3F9YbipCGLHxqLGRplKeUjjG2gV8_LdPyx8XgpPEoKT6kYQcpAr56Uu_GliHgpIkqKSGk-gpSBXj0ps_Gl5PFS8igpeUonI0gZ6NWTcv--W-8CfIWuNtrh2fa7_M9ZsxVRVditUGcOdotfrdm2mO71qc21HxQ6352y7mWhu6OmYD_MgmF-EmbnYR4mD6BFMJ2Hw_ktvSfB8DRMnt5CvguGZ2Hy7BbyfXhW2cA1CV-yc3Z5_PA3AAD__4rp88k= - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum((a-1)*1000) + sum((b-1)*100) + sum((c::INT-1)*10) + sum(d-1) FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzMVc2K2zAQvvcpzJziRsbWT7JZnby0PQS625LdnooPajS4gaxlZAValrx7sV2ydtjIpiElt5HGn78fDcwLFEbjg3rGCuR3oECAAQEOBAQQmEFGoLRmjVVlbP1JC1jqXyATApui3Ln6OiOwNhZBvoDbuC2ChCf1Y4srVBptnAABjU5ttg1NaTfPyv5OtXIKCDyWqqhkEMU0UIUOaGDcT7RAYIWFRiuDSUojKqVcPjwtwvc0SZK_BxJMUtZvdTq8LXv9QzsVzf3HTx-W93efIdsTMDv3aqdyKkeQdE_GW77Lc4u5csbGs77jx2_3k5SGtdm6YoeKHyoRnhTBTop45d4Vxmq0qHvE2d4vkyb_orPzMpOUTlMWTlMeTlNx0gHvOaDjJ4eOmZyYRjG79tkZMN15lPnlZoeNT56NSp5FMb_25AdMd5K_uVzyfHzyfFTyPIrFtSc_YLqT_OJyyYvxyYtRyYsonl178gOmO8nf_p9N9YaIFValKSo82lhv_zmpNxnqHNu1V5mdXeNXa9YNTXv80uCaC42Va7u0PSyLtlUL7IKpF8x6YHoMZn7mAWruRQs_WJyje-YFz_3M83OYb7zghZ95cQ7zrf-tkoEx8Q_ZMXe2f_cnAAD__yELbdQ= - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum(a), min(b), max(c), count(d) FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8lM9r2zAUx-_7K8I7pSAj60fS1CeXnXJIOpoGBsMMLXp4gdQykgIbJf_7sH2oExpZS0hvtpVvvh8-T7w3qIzGpXpFB9kPYECAAwEBBCQQmEBBoLZmg84Z2_ykC8z1H8hSAtuq3vvmc0FgYyxC9gZ-63cIGbyoXzt8RqXR0hQIaPRqu2trart9VfZvrpVXQGBVq8plo4Sykar0iI2M_40WigMBs_fvDc6rEiFjBxJP8ViWFkvljaWTY4jVejHO2R0QWMyX45y3T4_fx7lonr4-rZcv41zencXgZzHe2_eVsRot6qPq4hAGZen_kK7Wi5_zAVZxxMriB8diBkdZQvkFoxvg6BmZ3nJ0PF4Hj9LBEyou0DHA0dNxf0sdIl6HiNIhEiov0DHA0dMxu6UOGa9DRumQCZ1coGOAo6fj4bP23AcYz-hqUzk82Xcf_3Pa7EHUJXZL05m93eA3azZtTff61ObaDxqd705Z9zKvuqMGsB9mwTA_CrPTMA83D1SLYFqGw_Ia7kkwPA03T69pvg-GZ-Hm2TXND-FZpQPXJHzJTruLw5d_AQAA__-ZF-tW - -# AVG is more tricky: we do two aggregations (for the sum and for the count) -# and calculate the average at the end. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT avg(a+b+c::INT+d) FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy0lM-L4jAUx-_7V8g7KaakSavj5NRlTx7GWfxxWsqSNY-u4DQlibDL4P8-tD1MlTENaG-28dvvh88L7x1KrXAl39CC-AUMCHAgkACBFAjMICdQGb1Ha7Wp_9IGluofiJjAoaxOrn6dE9hrgyDewR3cEUHAVv454hqlQkNjIKDQycOxqanM4U2a_5mSTgKBTSVLK0YRZSNZqhEbafcXDRBYY6nQiNF4nLFpxifTLBFiudouJtMshfxMQJ_cJ4F1skAQ7EzCKb8XhcFCOm3o7BJys3sZZ2wCBH687lbb5vetSn6z8rPpVGqj0KC6qMnPfigW36La7F5-L2suPumoyhjN-E3O5IKThQ-QhQyQsojyAUbYw9mxNX_UCHm4Gh6khkc0GUBND2dHzdOj1CThapIgNUlE0wHU9HB21CwepSYNV5MGqUkjOhtATQ9nR83zEDvxi8o12kqXFq9249dfjuudiarAdsFafTJ7_Gn0vqlpH1-bXPNCoXXtKWsflmV7VAN2w8wb5hdhdh3m_uae6sSbTv3h9B7umTc89zfP72l-8oYX_ubFPc3P_lnFPdfEf8muu_Pzt48AAAD__6i1_ME= - -# VARIANCE/STDDEV have three local (sqrdiff, sum, and count) and one final stage aggregations. -# We calculate and render the variance/stddev at the end. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum(a), round(stddev(b), 1) FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8lEGL2zAQhe_9FWZOKcjYkp1sVicvTQOGNmmTbC_FFDUa3EDWMrIMLUv-e7F9WCckssBkb5LGz-_pGzGvUCiJK_GCFfCfQIEAAwIREIiBwBQyAqVWe6wqpZtPOkEq_wIPCRyKsjbNcUZgrzQCfwVzMEcEDjvx-4gbFBJ1EAIBiUYcjq1NqQ8vQv9LpDACCGxLUVTc8wPqiUJ61FPmD2ogsK4N9xJKEgbZiYCqzZtdZUSOwOmJuEd6ynONuTBKB9PzRNvnr5OEfmzCfN8s0uVykrB215y3q0_r59WuXd-Kwm5GeUtQF0pL1CjP7LOTPSwNb6VdpqunL7-2u8Xi849JwkgSkSRuChssJOqWnqdVXcimSjnn6Wo3v32H6OwO1L3D1KXDAfUDNrbHA6F62Gb37jFz58Oc-DA_iMbyGQjV4_Nwbz6RO5_IiU_kB_FYPgOhenzm9-YTu_OJnfjEfjAdy2cgVI_P43vO0CtRNliVqqjwYpZe_3PYzFiUOXYDuVK13uM3rfatTbddt7r2QGJluirtNmnRlZqAfTG1itmZmF6Kmd15wDqyqmO7OB6Te2oVz-zOszHOD1bx3O48H-P8aO9VOPBM7I_s0js7ffgfAAD__xebCC0= - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum(a), round(variance(b), 1) FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8lEGL2zAQhe_9FWZOKSjYkp1sVieHbQOG1mm92V6KKWo0uIGsZWQZWpb892L7sE7YyAKTvUkaP7-nb8S8QKkkpuIZa-A_gQIBBgRCIBABgQXkBCqt9ljXSref9IJE_gUeEDiUVWPa45zAXmkE_gLmYI4IHHbi9xEzFBK1HwABiUYcjp1NpQ_PQv-LpTACCDxWoqy5N_epJ0rpUU-ZP6iBwLYx3IspiRnkJwKqMa92tREFAqcn4h5pXRQaC2GU9hfniR6fvs5i-rEN8z37lGw2s5h1u_a8Wz1sn9Jdt74WhV2N8pqgKZWWqFGe2ecne1gaXEu7SdL1l18_1lmyTh8-z2JG4pDEUVvKsJSoO36eVk0p2yrlnCfpbnX9FuHZLah7j6lLj30699nULo-EGoBb3rrLzJ0Pc-LD5n44lc9IqAGfu1vzCd35hE58wrkfTeUzEmrAZ3VrPpE7n8iJTzT3F1P5jIQa8Ll_zyn6RpQM60qVNV5M07f_HLRTFmWB_UiuVaP3-E2rfWfTb7edrjuQWJu-SvtNUvalNuBQTK1idiaml2Jmdx6xDq3qyC6OpuReWMVLu_NyivOdVbyyO6-mON_bexWMPBP7I7v0zk8f_gcAAP__EtIIrA== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT stddev(a+b+c::INT+d) FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy0lNFq2zAUhu_3FOZcpUTGkeykqa9UlgUMW7ol6W6GGVp08AKpZSQFNkrefdge1AmNLAi-s638-T--I84rlEriSryggfQHUCDAgEAMBBIgMIWcQKXVDo1Ruv5JG8jkH0gnBPZldbT155zATmmE9BXs3h4QUtiKXwdco5CoowkQkGjF_tDUVHr_IvRfLoUVQGBTidKkQRjRQJQyoIGyv1EDgTWWEnUajEacjjm7G_M4TbPVdn435gnkJwLqaN8IjBUFQkpPxJ_ysSg0FsIqHU3PITff1otsuRxxelczPn_5__Tx6Xm1bZ6vAbCrAG-9x1JpiRrlWWl-ciPSC5HLbPX4-edmu1h8-j7ilHBGeHwdLD4Do_7zoz7zi2gYsQEm2MPZ0TMbZoLMXxTzEsXCKB5AVA9nR9T9MKJif1Gxl6g4jJIBRPVwdkTNhxGV-ItKvEQlYTQdQFQPZ0fUw_DL8x2ANZpKlQYvluj7_zyplyvKAttNbNRR7_CrVrumpn19anLNB4nGtqe0fcnK9qgG7IapM8zOwvQyzNzNPdWxM524w8kt3FNneOZunt3SfO8Mz93N81uaH9yzmvRcE_clu-zOTx_-BQAA__880AlC - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT variance(a+b+c::INT+d) FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy0lNGKm0AUhu_7FHKuEjJiZjTZrFeGbQNC67ZutjdFyjRzsIGsIzMTaFny7kUtrAmbcSB4p07-_B_fGc4rVFJgxl9QQ_wDKBBgQCAEAhEQWEBBoFZyh1pL1fykC6TiD8RzAvuqPprmc0FgJxVC_Apmbw4IMWz5rwPmyAWqYA4EBBq-P7Q1tdq_cPU3EdxwIPBU80rHnh9Qj1fCo540v1EBgRwrgSr2JpOEzhI2nSVhHKfZdjWdJREUJwLyaN4ItOElQkxPxJ1yXZYKS26kChbnkE_f8o_pZjNJ6LRhfP7y_-nh8Tnbts_XANhVgLfeYyWVQIXirLQ42RHphchNmq0___y-ztN19vBpklCSMJKE19HCMzTqPkHqMsGA-gEbYYYDnD1By3FmyNxFMSdRzA_CEUQNcPZE3Y0jKnQXFTqJCv0gGkHUAGdP1GocUZG7qMhJVOQHixFEDXD2RN2Pvz7fAchR17LSeLFG3__nebNeUZTY7WItj2qHX5XctTXd62Obaz8I1KY7pd1LWnVHDWA_TK1hdhaml2Fmbx6oDq3pyB6ObuFeWMNLe_PyluY7a3hlb17d0nxvn9V84JrYL9lld3H68C8AAP__OhwJwQ== - -# Test various combinations of aggregation functions and verify that the -# aggregation processors are set up correctly. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum(a), avg(b), sum(c), avg(d), stddev(a), variance(b), sum(a+b+c::INT+d) FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzUlk-L4kwQxu_vp2jqpExJ0p1EY04t4wiBd5xd_8xlkSFrCldw0tKJsMvgd1-SOGt0105AELxVd-Xpeqp_BZ0PSFRM4-idUgi-AQcEAQgOILiA4MECYavVktJU6fyTUhDGPyGwEdbJdpfl2wuEpdIEwQdk62xDEMAs-r6hCUUxacsGhJiyaL0pymz1-j3Sv2QcZREgTLdRkgasY3EWJTHjTGU_SAPChJKYdMAkRyYFMukgky6yVkvyBynaD9IJgnA889sP0oXFHkHtsqOjNItWBAHfY3PXg9VK0yrKlLa8U9PT-XNL8nbuN49EHj2-zMezQ1zsOn8it5Iv4unXyTAcjQ5nHDL8JHM8x2tfbEdcbOfYxS5ROiZN8UkLi725YW7XdzydP7-FufOzTj9dV77o5qtROB78_zadDYdPry3ZQ8lR-sfE62ASDsaPTy3ZRymwciq3239NgPU5ANKzZBeZ7CGTPjLZv3hbzslt8eYjy5uMrMU7lrjB0Nb4rjDs3sPQiuYYRCMMomM5N8BQ47uCoXcPGJzmGJxGGJyO5d4AQ43vCgb_HjC4zTG4jTC4Hcu7AYYa3xUM_XvAUPNjMKF0q5KUzl7Uf59s5y8txSsqn-VU7fSSvmi1LMqUy5dCV2zElGZllpeLMClTucGqmBvF4kTMz8XCXLmmtGNUu2axe41vzyjumit3r6ncM4p9c2X_msp9Myu7ZkzMQ3Zee7H_73cAAAD__8UQkPI= - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum(a), min(b), max(c), count(d), avg(a+b+c::INT+d), stddev(a+b), variance(c::INT+d) FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzUll-L2kAUxd_7KcJ9inglmfzfPF3ZXSFQs61_lkKRJTUXK7iJTCK0LH73kgQ0ypqk-CC-Te7c45kzvwvOByRpzGH0zhn4P0EAggEIJiBYgGDDAmEr0yVnWSqLlkoQxH_A1xHWyXaXF-UFwjKVDP4H5Ot8w-DDLPq14QlHMUtNB4SY82i9KW22cv0eyb8UR3kECNNtlGS-MtCEEiWxIpQ0_80SECacxCx9hQQqZKBCJipkoaKqJPpk9Ppk-n4QzrxevyiXxaKrKvbJgsUeId3lx1NmebRi8MUeuycZrlaSV1GeSs0-DTKdj1USPUAYB6FKRrka_lDJLFaPL_NwppJVrMtOu1Yt19Pvk6dgNFLJOfQ4tR7npMc99Li1Hrd3MaRxMeQx2y5JZcyS45Ngi33zNQj9f-5hOh-_BZ_cxKFe5hwF4fDr23T29PT8qpKL5CE9HDdeh5NgGD4-qyR0JCGQRGlzaUbI1shBhVxUyLt4RebJFYnuEy26TLQmBppxo5luyVKD6dzvTBvdgRmdgBkDzbwRsJYsNWDu_QIzuwMzOwEzB5p1I2AtWWrAvPsFZnUHZnUCZg00-0bAWrLUgD3cL7CWt8yEs22aZHz2d__5L-vFM4DjFVdvhizdySV_k-mytKk-X0pdWYg5y6tdUX0ESbVVHLAuFo1i40QszsVGs3OLtdmotprF1jXnthvFTrOzc42z2yj2mp29a5wfmlnpLWPSPGTn3ov9l38BAAD__9YvvFg= - -# Verify that local and final aggregation is correctly shared and de-duplicated. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum(a), stddev(a), avg(a) FILTER (WHERE a > 5), count(b), avg(b), variance(b) FILTER (WHERE b < 8), sum(b) FILTER (WHERE b < 8), stddev(b) FILTER (WHERE b > 2) FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzslkGL2kAUx-_9FMM7bWEkmZlEY04jq0Jg67bR3UsrS2oeVnATmURoWfzuJYnVxCaTgAcvHpZ13rz_-897-Q3MB0RxiLPgHRNwvwMDChwoCKBgAQUblhR2Kl5hksQqSykEXvgbXJPCJtrt0yy8pLCKFYL7Aekm3SK4sAh-btHHIERlmEAhxDTYbHObndq8B-qPDIM0AArzXRAlLukZjARRSBiJ01-ogIKPUYjKJZJRItmPvWkKtF3X9WYLhxLJs788unJK0SKPHyOwPFCI9-n5oEkarBFcdqDdmxmt1wrXQRorw672Mn_58iDZ56yNb_7Ym06Pq8fnl9ni306RQ6be02LiE8nL-3VRcVKJSmVxzrbOGZXYqUI1s6aCXVPBrq1gNw6RNw7xPLt9FKsQFYaVwS0P-jEzs2nOU282enqbL8bjyeuD5FQyWhqYdfz15mVN2JVV_5Q1OBd6HfneaPY4eZAOlUMqmXnKGv5vxxiVLPPMHSuAZjgKQ1qUSJsS2TfyfwNKZIblsHGGojJD1v1WsS63ymA9g9_uXrW0U_rg_fu9arpXvDsTvBMTvGeI2zHR0k6JicGdiSYmRHcmRCcmRM-wbsdESzslJpw7E01MWN2ZsDoxYfUM-3ZMtLRTYmJ4Z6LLm6xmiD4muzhK8OJtVl_ZzN5sGK6xeOAl8V6t8KuKV7lNsXzOdXkgxCQtdlmx8KJiKztgWcy0Yl4Rs0sx1zu3WAut2tKLrWvObWvFfb1z_xrngVbs6J2da5yH-m9ltmCih-zSe3n49DcAAP__yWRJgQ== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum(a), avg(DISTINCT a), variance(a) FILTER (WHERE a > 0) FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy0k0GL1DAUx-9-ivBOK6SkSTsiOXVYVynoKJ26F-0hTh61MJuUJAVl6XeXtoe1y4xEZvaYl_zyfu_B_xGM1bhTD-hBfgMOFARQyIBCDhQ20FDonT2g99ZNTxag1L9AphQ60w9hKjcUDtYhyEcIXTgiSKjVjyNWqDQ6lgIFjUF1x7lN77oH5X4XWgUFFPa9Ml6ShHGijCac2PATHVCo0Gh0khSckoJ_H9I0w1RKWe7qt9CMFOwQngR8UC2C5CM9I_nkNhjrNDrUK69mPDHGtm0dtipYxzbrKfZfP90U_DVQ2N5_uHlX7utyd1uTpXS_rcrt7vZuekHelx_ru4oU4qy0WEnz-M3ymM0ynjBx_d2KeE0RpSkSll1fM4vXzKI0s4Tl19fM4zXzKM08YZuXDdQJzQp9b43HZ8E6_XM6BQ51i0s6vR3cAb84e5jbLMfPMzcXNPqw3PLlUJr5ahb8G-b_hN-s4PQ5LC7pnF0C55fAm_-Cm_HVnwAAAP__MOHnFQ== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum(a), avg(a), count(a), stddev(a), variance(a) FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy0lNGLm0AQxt_7V8g8XWFFdzW5nE-GywWEXtJqci9Fjm12sIGcK-sKLUf-96IWTsNlFSQPgcxOvnzf_maZd8ilwA1_wxKCn0CBAAMCHhDwgcAMUgKFkgcsS6nqn7SCSPyBwCVwzItK18cpgYNUCME76KM-IQSw479OGCMXqBwXCAjU_HhqbAp1fOPqbyi45kAgKXheBpbtUIvnwqKW1L9RAYFtpQMrpJCeCchKf3iVmmcIAT2T8XmWWaYw41oqZ9aPk-yf70L6FQg8bveb3f_vyY94Fa3XTXUtALsa4MO3yqUSqFD0TNOzOSJ1r2VM9s-vUZ2S1dU62iy_vSa71erp5S70SEhJt_GyjKPl5vGp14oxF6hqssQKqRMyYjUfj1ihf_WuXu-udPzw6ZjhO9R22KTxDyTqsJ3fZvxsPBI2CgmzHW8SkoFEHST3t0HijUfijULi2Y4_CclAog6SxW2Q-OOR-KOQ-LYzm4RkIFEHycPt9-YnAWIsC5mXeLE_P_9nt96rKDJsl3ApK3XA70oeGpu23Da65kBgqdsubYsob1t1wK6YGsWsJ6aXYmZ2HrD2jGrfLPan5J4ZxXOz83yK871RvDA7L6Y4P5hn5Q48E_Mju_ROz1_-BQAA__-gWwJr - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum(a), avg(b), sum(a), sum(a), avg(b) FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy0lEGL2z4Qxe__T2Hm9C_IyJKcbNYnl55y2E1JNqdiihoNbiBrGUmGliXfvcimrBM2ssDpbcbKy3v6jZg3aLTCZ_mKFopvwIAABwICCORAYAEVgdboA1qrjf_JIFirX1BkBI5N2zn_uSJw0AaheAN3dCeEAl7kjxNuUSo0NAMCCp08nnqb1hxfpfldKukkENi1srFFklKWyEYlLNHuJxogsOlckZSMlByqMwHduXc762SNULAziY_0ua4N1tJpQxeXiXb7p_9L9smH8RX31ZfN_vmlr2-Z85vm755do41Cg-rCsDqH47FsOt9u__R97RMK322xUWh6XEnJaSnIUP5tb15CXFyCxQ-VxQyVspTyuWOdCDXitrz_WHk8ER5FhKdUzCUyEWpE5OH-REQ8ERFFRKQ0n0tkItSIyOr-RPJ4InkUkTyli7lEJkKNiDz-22X4gfkWbasbi1dL8eN_zvyyRFXjsFmt7swBvxp96G2GdtPr-g8KrRtO2dCsm-HIBxyLWVDML8TsWszDzhPWIqjOw-J8Tu5FULwMOy_nOD8Exauw82qO82N4VtnEMwk_smvv6vzfnwAAAP__B8X2Pw== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT avg(c), sum(c), avg(d), sum(d) FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8lF-L4jAUxd_3U5T7tEIk5o-O06fKwIKwMy5Wn5ayZM2lKzhNSVPYZfC7L22FaWVMC8V50tzk9Jz8brhvkBmNL-oVCwh_AgMCHAgIICCBwBwSArk1BywKY6sjjWCt_0I4I3DM8tJV5YTAwViE8A3c0Z0QQtip3yfcotJo6QwIaHTqeKptcnt8VfZfpJVTQCDOVVaEwZSyQGU6YIFxf9ACgU3pwiASJJKQnAmY0r3bFU6lCCE7k-GRVmlqMVXOWDrvJor3z18jNgECT5v9y-7yv67yVpVPbgbhN4O8-5eZsRot6o55cvZHZbNbWeP986_1JdclrejUZbXaYqbRhkHE6NMqrk6v4m_fN6vdckKCiJEgEjSS1c_Ny4nO5djwxrMhjadsSvnY1veEavFc3Lf1fDgdPogOn1Ixlk5PqBadh_vSEcPpiEF0xJTKsXR6QrXoLO9LRw6nIwfRkVM6H0unJ1SLzuPnDdUPgmyxyE1W4NVw_fjLs2rook6xmdCFKe0Bf1hzqG2a5abW1QWNhWt2WbNYZ81WFbAtZl4x74jZtZj7nXushVct_WI5JvfcK174nRdjnB-84qXfeTnG-dHfq1nPM_E_smvv5PzlfwAAAP__uBQKgA== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT max(a), min(b) FROM data HAVING min(b) > 2] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyslEFr2zAUx-_7FOKdWpCRJTlpqpN7GeTQdHQ9DDYftOjhGVLLSDJslHz3kfhQJ7SywD5ayj-_P78n3hu01uBOv6IH9RM4UBBAQQKFAiisoKLQObtH7607_WQIbM1fUDmFpu36cDquKOytQ1BvEJpwQFDwon8f8Bm1QcdyoGAw6OZwxnSuedXuX2l00EDhe6dbr0jGONGtIZzY8AcdUHjqgyKloCWH6kjB9uEd54OuERQ_0vRKD3XtsNbBOra6bPS43d2U_BYoPD78uCnF7adA8SnwndO31hl0aC4g1TFeiedTnSh8bQ4BnSIlJ7_6PJdIhFJqu3vZpOmSF-15-gR5ygQZz5iYO8OJUiNh62VmKNItiCQLImNyroWJUiMLd8tYkOkWZJIFmbFiroWJUiMLm2UsFOkWiiQLRcZWcy1MlBpZuF9-q30AfEbf2dbj1Xb7-J_z09ZDU-OwIr3t3R6_Obs_Y4bPp3PufGDQh-GWDx_bdrg6FRyHeTQsLsL8Oizi5Am0jKaLeLiY03sVDa_j5PUc8l00vImTN3PI9_FZ5RPPJP7IrtnV8cv_AAAA__-XOudJ - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT DISTINCT (a) FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyslD2vmzAUhvf-CnTWGhkbyAdThi5ZmirtVjG4-ChFSjCyjdQq4r9fARK5RDfGujBi5_XzPjmW71Apid_FDQ1kv4EBAQ4EYiCQAIEUcgK1VgUao3T3kyFwlP8giwiUVd3YbjknUCiNkN3BlvaKkMEv8eeKZxQSNY2AgEQrymuPqXV5E_r_QQorgMDPWlQmC0LKAlHJgAXK_kUNBE6NzYIDg7wloBr7YBkrLggZa4l_n2-lsWVVWJpOyxw66ZOWqFE6afwl7QFRwznPhK-Qt65KLPpkp3jSiflPhPlMhLKQ8kUzmWk0_gGbVWbC_f25lz8PabzIf6bR6L9dxT_294-9_OOQJov8ZxqN_rtV_BN__8TLPwlpush_ptHov1_9TfqAdkZTq8rghPXq5Kh7sFBecHjgjGp0gT-0KnrM8Hnqc_2CRGOHXTZ8HKthqyv4PsycYT4Js-cwd5Nn0LEznbjDyZLeqTO8cZM3S8hbZ3jnJu-WkPfuWUUz18R9yZ7ZefvlLQAA__-HYNkY - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT SUM (DISTINCT A) FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyslEGPmzAQhe_9FWhOrWTk2JBsllOq7iWH7lab9FRxcPGIImVtZBup1Yr_XgESW1DWWKFH7Lx578uz5hWUlvgoXtBC9gMYEOBAIAECKRDYQk6gNrpAa7XpfjIIjvI3ZBsClaob1x3nBAptELJXcJW7IGRwFj8v-IxCoqEbICDRierS29SmehHmz0EKJ4DAqRbKZlFMWSSUjFik3S80QOCpcVl0YJC3BHTj3rysEyVCxloSnuehsq5ShaPbaRjPfP7u_LexjdJGokE5mZq3VxJ8LkuDpXDaUDb7R07fv358OJ7Ox8cv5-jAPr0bKZlEYuEVsJAKKIspX1XCQqKxhN2NJfBwYh5EzGOarCJeSDQS391InIQTJ0HESUzTVcQLiUbi_Y3EaThxGkScxnS7ingh0Uh8_x9Wy5X5z2hrrSzOVsz1yZtu9aAscdhTVjemwG9GF73N8PnU6_oDidYNt2z4OKrhqgv4r5h5xXwiZnMx9zsvWCdedeoXp2tyb73ind95t8b5zive-533a5zv_V1tFp6J_5HNvfP2w98AAAD__4HrxaQ= - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT SUM (DISTINCT A), SUM (DISTINCT B) FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyslMFvmzAYxe_7K9B3WiUjx4akKadM6yWHtVOTnSYOHv7EkFIb2UbaVOV_nwCJDpQYK_SIzfN7Pz_rewOlJT6JV7SQ_QQGBDgQSIBACgTWkBOojS7QWm3aX3rBXv6BbEWgUnXj2uWcQKENQvYGrnInhAyO4tcJX1BINHQFBCQ6UZ06m9pUr8L83UnhBBA41ELZLIopi4SSEYu0-40GCDw3Lot2jOw45GcCunHvdtaJEiFjZxIe6bGyrlKFo-txHr8Fv2rxfnKjtJFoUI4Ozs8XQnwpS4OlcNpQNrmXw49vnx_3h-P-6esx2rG79m5GS_zuaspklJKFd8NCuqEspnxpOzOhhnY2t7fDw7l5EDePabKUeybUwH1_O3cSzp0EcScxTZdyz4QauLe3c6fh3GkQdxrT9VLumVAD98PHTKELFi9oa60sTqbR5ZNX7ZRCWWI_0qxuTIHfjS46m_7zudN1CxKt63dZ_7FX_VYb8H8x84r5SMymYu53nrFOvOrUL06X5F57xRu_82aJ871XvPU7b5c4P_i7Ws08E_8jm3rn50__AgAA__-0ndB6 - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT DISTINCT a, b FROM data WHERE (a + b + c::INT) = 27 ORDER BY a,b] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8lE9r2zAYxu_7FOI9tUTGluT8qWDgwxjk0oyut-GDZr10htQykgIbJd99OIJ0CYssSOpLQHYe_x79XqE36IzGR_WKDuQPYECBAwUBFEqgMIeaQm9Ng84ZO_wlBNb6N8iCQtv1Oz88rik0xiLIN_Ct3yJIeFY_t_iESqPNC6Cg0at2e8D0tn1V9k-llVdA4XuvOidJljOiOk0YMf4XWqDwtd16tJLc3VWMzEjF74dfIeX68Xl1Tz4TvpRhARQ2Oy9JxWjFod5TMDv_3s159YIg2Z6m9__SOt92jc_np-UDgsLGarSox5j8IvMdZcKnzjkzWvEZ1PtYOVZc1U6ctGPpE2UpE81ZlvNJZzqyg6O2xQ1nytOt8SRrPMvFpNZGdnC0tryhNZFuTSRZE1leTmptZAdHa6sbWivTrZVJ1sosn09qbWQHR2sPH3Tr_of5hK43ncMT4qUvF8N1jPoFwxXuzM42-M2a5oAJy80hd3ig0fnwloXFuguvhoL_hlk0zE_C7DzM4-QRtIimy3i4vKb3PBpexMmLa8jLaHgVJ6-uIT_EZ1WMHJP4ITtn1_tPfwMAAP__0NQX6g== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT DISTINCT a, b FROM data WHERE (a + b + c::INT) = 27 ORDER BY b,a] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8lV9r2zAUxd_3KcR9aqmCcyXnn2DghzHISzPavo08aNGlM6SWkRTYKPnuw3HAS1gkF2d5CcjK0TlXvwN6h8oaetRv5EF9BwQOAjhI4JADhwmsOdTObsh765q_tIKl-QVqzKGs6l1oPq85bKwjUO8QyrAlUPCif2zpibQhl42Bg6Ggy-3Bpnblm3a_C6ODBg7Pta68YqMMma4MQ2bDT3LA4Wu5DeQUu7srkD2wQtw3v1Kp5ePL_J59ZmKm2gVwWO2CYgXyQsB6z8HuQpfNB_1KoHDP--d_ti6Qyyan0QvxwAt8uGghPmLxpfShrDYhw7MLasfgsHKGHJnUXPKiaedl26MuTRNNd34HH0uXn6TD_q3BPq3JcJSJm_YmMcGxN9MhvUlYdGTwir0R_cmIXmTEKJM3JZOY4EhmNoRMwqIjI65IRvYnI3uRkaMsvymZxARHMvMhZBIWHRl5RTJ5fzJ5LzL5KJvclExigiOZxRAyCYuOTP6fXsF_mD6Rr23l6cTx0snj5nkk80rtk-rtzm3om7Obg027XB10hw-GfGh3sV0sq3arCfi3GKNiEReLqFieiPFcLOOxp3HrPKqexMWTqDjhPB0y9Cwqnsed51HxIi5eDImNiY6lShZvGSZqhoN6homi5QnzeNMwUTWMd-08-3r_6U8AAAD__8krHYs= - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT c, d, sum(a+c::INT) + avg(b+d) FROM data GROUP BY c, d] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzUll9r4lAQxd_3U4R5aumVODc3_slTyj4JrV1afVgWKam5WKHNlZsIW4rffYmRNZp2JmIEfYsxJzN3zm8O-YTExHoYvesUgj-AIECCAA8EKBDgw0TAwpqpTlNj80cKwSD-C0FbwDxZLLP89kTA1FgNwSdk8-xNQwCj6OVNP-oo1tZtg4BYZ9H8bV1mYefvkf0I4yiLQMDTIkrSwGm56ERJ7KBjsldtQcCjTmJtAyf0hBMq4YR4E3pBMBiOesIJ5U2oYLISYJbZto00i2YaAlyJ-q3ezmZWz6LMWNff7TREEeYDuR3-fh4-jJ6H47u7qxCvK7dkfutpfH8Vev-vVH7182E8HK2vd1vdVn_5cF6j9PWrwpPV9kTy2xNtX7VMjI211fHOy9ZvIc6M7aYP_TS-fx7kx_avyzZi7prY2OmG_rfueYe4NzQts3Bxz7lqUQoX1exwi5Zke-_Jr2v7O7Wx_lZhna1yseXKU-0V02yJsc6F7BU2uVd43nvFuLfZq05zeyXrsy1rsS1brncqtplmSz53L4Rt2STb8rzZZtzbsN1tjm2vPtteLba9lqtOxTbTbMnn3oWw7TXJtnfebDPubdjuNce2qs-2qsW2arn-qdhmmi353L8QtlWTbKvzZptxb8N2_zTf-l8UfNTpwiSprvUl386Hr-OZLpxKzdJO9S9rpusyxc-HtW59I9ZpVvyLxY9BUvyVN1gW474Yy2K5I8bDxN1jxIhHqf2j1H1aLcmBe_TAPVKs6MqKFEvGa59Ud2hx5xhQaDEDCi3mQGHUDCiMmgGlSw68Rw-8dwwofToT2kwoVCLloFSg1Vws0Go2Fxg5FwyMnDEcK8GyO3fJzJ1OFsZzpKMFFVO8Ei4HmU6rOdNpNWs6I-dMZ-Sc6XSuIhOsWMmYg0ynMwaZkMFKyhxkOq3mTKfVrOmMnDOdkXOm0wkrmYSV9EfbvumT1Y9_AQAA__-dgfBv - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT c, d, sum(a+c::INT) + avg(b+d) FROM data GROUP BY c, d ORDER BY c, d] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzUl09vsloQxvf3U5BZtfEYnAP4hxXNXZm09Kbq4ubGNFROrEkL5oDJbRq_-xv884pFZ-AFE90h9jnPnJn5PanfEMWh8oNPlYD7HyAIkCDAAgE2CHBgKmCp45lKklhnf7IVDMP_we0IWETLVZq9ngqYxVqB-w3pIv1Q4MI4ePtQLyoIlTY7ICBUabD42Ngs9eIz0F9eGKQBCBgtgyhxjbaJRhCFBhpx-q40CHhRUai0a3iWMDxbGB62PMt1h_64LwxPtjwbpmsB8So9lJGkwVyBi2tRvtSH-VyreZDG2nSOK_VQeFlDHvx_X_3n8as_eXy88_C-8Epmr0aTpzvP-v1kZ09_P0_88eb5uNSD-9uX8R4k76eMp-vDjeTZGx2OWkWxDpVW4dFhm1OIO2On6UuPJk-vw-zazn1-jJhNTezGaXrO2elZVabnx-14aeKPyRVNqXWxqxiOYp0qbcpC21rCk62zHk6JAZ4aX-7gs7eXzo-Jny6he1QClgcYywBsYtuUl0KYKTa3zt0bQRibRBivG2FmejuEu80hzBjuES60rQrCsjw_shQ_sm1al-KHKTa3S70b4Uc2yY-8bn6Y6e346TXHD2O456fQtir8WOX5sUrxY7VN-1L8MMXmdql_I_xYTfJjXTc_zPR2_PSb44cx3PNTaFsVfuzy_Nil-LHbpnMpfphic7s0uBF-7Cb5sa-bH2Z6O34GzfHDGO75KbTtT3-CnfB4UckyjhJV6pdVJxuwCudquw1JvNIz9Y-OZxub7cfnjW7zIlRJuv0Wtx-G0farrMC8GH-KMS-WR2KsJu7XEaNVS13LWzLekmy4RTfcIsU2LbZJsUOX7ZBi2aWtu6S6R4t7dbaMFjOTpsXcljHqWt7clvXJhg_ohg_oTOgwoUBHCrNnWKDr2Fwy5gW8KkUSreZygVazocTI67lzC4N0tCCTLUiHCzqMnI4XbmfoeEEmX7BWwDBqbmr1IoaT13Nnd4ZOGWRiBumckUzOyFo5I-mckUzOyFo5w6iZqTFqbmc4eT139t8fOmckkzOSzhnJ5IysljPT9V-_AgAA__-id_cn - -# There should be no "by hash" routers if there is a single stream. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT c, d, sum(a+c::INT) + avg(b+d) FROM data WHERE a > 9 GROUP BY c, d] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyUks9qg0AQh-99CplTQiboagplT5NTCaSm5E-hFAlbdxAhcWV3Ay3Bdy_qoUlLbXuc38w3fjqeoTKaU3VkB_IFBCDcQoZQW5Ozc8a2cT-00G8gI4Syqk--jTOE3FgGeQZf-gODhNRMTR3GgKDZq_LQjTUI5uQ_IedVwSCTBi8Wi-HFW_V64DUrzTaMrtZDbcujsu-klVeAsKlV5WQQimgKCGuuNFsZUIIBzTAgMaFEykW6vcOA4gnN4Cc_8R-_eVFYLpQ3NhTXeiSQ2g8yT5_36Wq7T3fL5YjE-FsUt9Fm9zCipGs-3Y9oNr58B9EqY0DJkHZ8pf3LvdbsalM5_tPBoiZDYF1w_084c7I5P1qTd4_py1XHdYFm5_tu0heLqm-1gpewGITjYTgehKMvcNbcfAQAAP__AbDtGA== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum(a), sum(b), sum(c) FROM data GROUP BY d HAVING sum(a+b) > 10] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzMlltr4zwQhu-_X2HmquVTsEeS09ZXLnuAQpsuPVwsu6GosUgDqRVkBbaU_PfFzm5z2mpclICvoth-rBk9L4NfoTSFHqhnXUH2AxAYcGAggIEEBikMGcysGemqMrZ-ZAlcFL8gSxhMytnc1ZeHDEbGashewU3cVEMGd-pxqm-0KrSNE2BQaKcm02abmZ08K_uSF8opYHA7U2WVRb0YI1UWEUbGPWkLDG50WWibRblkUY7_57z-YVHzK2C4YGDmblVB5dRYQ4YL1r7K8_HY6rFyxsbpZpF5fRi391dHOT_-uxJvK_m2SuvV-eD7w-D67mFwf3l5lOPxVnGr_R5foidVPW1tlcJwsWqAv9vA6j3z0thCW11svKl5i6dFTHY2_tMFHpPdfp1MXWMDo5_zJBE6wiTLss9fPl1cnV8Cg-u5y2o5uWC5fFeP2G93A9MzsxjTrSf_vbfc2BvbBxjbBDjGXswPEGGizjW__W5GGPcZYexahHn7GPFWMeK9WBwgRkSda2d80s0Y8X3GiHctRqJ9jESrGIleLA8QI6LOtTM-7WaMxD5jJLoWI9k-RrJVjGQvTg8QI6LOtTM-62aM5D5jJLsWI-Kz-UZXM1NWutVXV1J3r4uxXh5VZeZ2pL9ZM2q2Wf69brjmQqErt7yLyz8X5fJWXeA6jNswrsN8A8aPwf0Q-CwExqC6MfXT3Hvewg8Lv6y-35b00qkfTkNU-2FCtR8mVPthSjVBE6r7IapPvPCpX9ZpiCw_TMjyw4QsP0zJImhC1lmILCSmKDVGw-Zo2CANm6SBozRslmLQMEVimkpC2s44_ZA0P01J89OUND9NSiNwStrOUPVKGy7--x0AAP__KNymtA== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT avg(a+b), c FROM data GROUP BY c, d HAVING c = d] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzMlt9qo0AUh-_3KeRcteyImT-mrbBgWVgotHZpm4tlCWEahySQOjIa2FLy7ot6EW3aOZYx4J2Ofs458_04-AaZTlUiX1QB0V-gQIABAQ4EBBAIYU4gN3qpikKb6pUGuEn_QTQhsMnyXVktzwkstVEQvUG5KbcKIniSz1v1oGSqTDABAqkq5WZbb5ObzYs0r3EqSwkEHnOZFZHnB9STWepRT5drZYDAr822VCbyYu798OKqoAeVpc0K8WJBvJh-jxnM9wT0rjzUUpRypSCie9K_3uvVyqiVLLUJwm65MSVxdSrXyZ9Fcv-0SGa3t2cxPT9aYtXS4-zuLObV1c_7WfJUX3cLPOz5_OqtZbH-aLv5_tAH-7SPw6d2mTapMirtfKz-iqVTOhmm1cfZ3eKmalacdywFjaRPDfFhO0u0r_OAhu_e_Hhv0dmb9k8z7ZPmgPoBO2mekYpblqejzjMdMs90THlm_TPFemWK-QE_aaaQilsnfTHqTLEhM8XGlCneP1O8V6a4H4iTZgqpuHXSl6POFB8yU3xMmRL9MyV6ZUr4QXjSTCEVt076atSZEkNmSowpU8jf9oMqcp0Vqtef2qTqXKUr1RxToXdmqX4bvay3aW7va65eSFVRNk9pc3OTNY-qAtswfQ_TNsw6MP0aPHWBr1xg6lQ3De00s543t8PcLmtqtyWsdGiHQxfVdhhRbYcR1XYYU43QiOqpi-oLK3xpl3XpIssOI7LsMCLLDmOyEBqRdeUiiyJTFBujbnPUbZC6TVLHUeo2S6nTMKXINBWItKNx-iVpdhqTZqcxaXYalYbgmLSjoWqVNt9_-x8AAP__oZ7D4g== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum(a+b), sum(a+b) FILTER (WHERE a < d), sum(a+b) FILTER (WHERE a = c) FROM data GROUP BY d] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzMlk9r20AQxe_9FGJOCV0h7R85iaCgHFowuE5xnENpTdhYi21wtGIlQ0Pwdy-yCpL_dEdhLfDJ1ko_zZt5j0HvkOlUjeWrKiD-BRQIMCDAgYAAAhHMCORGz1VRaFM9UgPD9A_EIYFVlm_K6nhGYK6NgvgdylW5VhDDVL6s1UTJVJkgBAKpKuVqvSuTm9WrNG9JKksJBB5zmRWx5wfUk1nqUU-XS2WAwERlqTKxlwjiJfRzwqqf35sw5PP66EvCYbYloDdlI6Qo5UJBTLeku9j7xcKohSy1CaJ9rUk1k8en71cJu27-ed-Go-nXiZfwE2fV5O7HP5_HD9Pn8dNodJXQ6wOZTeWXN28pi-VBUQGzbdMK-28rzXs2mTapMirde9PuLZZmaXhU-F8_9Pq4b37YRiORn1fiWPs6D2h08OTp2mKvNu0eS9ollgH1A9ZfMBG5La8Glx5Mes5g0l6CybqHg3UKB_MD3l84ELmted1cejjYOcPBegkH7x4O3ikc3A9Ef-FA5LbmdXvp4eDnDAfvJRyiezhEp3AIP4j6CwcitzWvu0sPhzhnOETv3zsnBExUkeusUJ2-ZsKqBZUuVN1voTdmrn4YPd-VqS8fdtzuIFVFWd-l9cUwq29VAtswPYRpG2Z7MP0YPHCB71xg6qSbRnaaWefN7TC3mzWwuyWsdGSHIxer7TBitR1GrLbDmNUIjVg9cLH6xgrf2s26dTHLDiNm2WHELDuMmYXQiFl3LmZRZItia9Rtj7otUrdN6rhK3XYpdVqmFNmmAjHtaJ1-yDQ7jZlmpzHT7DRqGoJjph0tVatps-2nvwEAAP__N5l2wQ== - -# Same query but restricted to a single range; no local aggregation stage. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum(a+b), sum(a+b) FILTER (WHERE a < d), sum(a+b) FILTER (WHERE a = c) FROM data WHERE a = 1 GROUP BY d] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyUkUFLwzAUx-9-ivJOihlN0p0CQjwoDHRKN0_aQ2wepbAlIUlBGf3u0uawVVzVU_v-7_1efvAOYKzGtdpjAPEKDAhwqAg4b2sMwfohTkMr_QGCEmiN6-IQVwRq6xHEAWIbdwgC1nZhXc6BgMao2t041hOwXTxCIaoGQRQ9OVnM5hdv1fsOS1QafU4n68H5dq_8p9QqKiCwccoEkeVsMXqUaDR6kcklySS7lnz4vHWUFnWKbmQB5xTZfxRvm8Zjo6L1OZsayqHevDxeSn51_MvuVw_buzKTxQ_Z8qwTnzj9co8Sg7Mm4J8OQvuKAOoG082D7XyNz97W4zOpfBq5MdAYYuoWqViZ1BoET2E2C_N5mM_C9Btc9RdfAQAA__-VFuTI - -# Verify the XOR execution plan -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT xor_agg(to_hex(a)::bytes) FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyslE1r3DAQhu_9FWZOLcjIkr2bjU5JoYRcmrLJoaWYoK4GZ2EjGUmGlOD_XmwfYi-JrGIf_fHqeXlGzCtoo_C7fEYH4jcwIMCBQA4ECiCwgZJAbc0BnTO2-2UI3KoXEBmBo64b370uCRyMRRCv4I_-hCDgQf454R6lQkszIKDQy-Opx9T2-Czt3yslvQQC97XUTiQpZYnUKmGJ8U9ogcAetUIrEm8en_Dl8xX7IsTXXw_f7qFsCZjGv9GdlxWCYC2Jb3hdVRYr6Y2lm2nBn3f7x-ubm474IYp_iHojNNpYhRbV5PiyDZdh2f-3ySdtWPxoWMxoKEspX3k4Mx1HPrZLh8PjdfAoHTyl-co6ZjqOdFws1ZHH68ijdOQpLVbWMdNxpGO3VEcRr6OI0lGkdLOyjpmOIx2Xa26yd1B7dLXRDs822vsnZ92mQ1XhsBadaewBf1hz6DHD412f618odH74yoaHWz186gqOwywY5pMwOw_zMHkGnQfTRThcLOm9CYa3YfJ2CfkiGN6Fybsl5MvwrLKZaxK-ZOfssv30LwAA__8kYPJY - -# Verify the XOR execution plan -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT xor_agg(a) FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyslM-LnDAUx-_9K-SdWojERJ2d9TR7WvbSKdMeCkVKah5WmDWSRGhZ_N-LehgdZmJK9uiPbz7fDy-8N2iVxM_iFQ0UP4ABAQ4EUiCQAYEcSgKdVhUao_T4yxx4kX-gSAg0bdfb8XVJoFIaoXgD29gzQgHfxK8znlBI1DQBAhKtaM4TptPNq9B_D1JYAQS-dqI1RRRTFolWRixS9jdqIHDsbREdGJQDAdXbC8tYUSMUbCD-fZ7qWmMtrNI0X9f5fjz9fHp-_nhgn-6i-F3UhdC3SkvUKFfHl4O7DEv-v026asP8B8F8BkFZTHnQKDYaLex3oaPg_vLcS57HNA2S32i0kH8IlU_95VMv-TSmWZD8RqOF_D5UPvOXz7zks5jmQfIbjRbyj--5gW6gTmg61Rq82kS3T07GDYWyxnmdGdXrCr9oVU2Y-fE45aYXEo2dv7L54aWdP40Fl2HmDPNVmF2HuZu8gU6d6cwdzkJ6587wzk3ehZAfnOG9m7wPIT-6Z5VsXBP3Jbtml8OHfwEAAP__W2jUcQ== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT max(t.a), min(t.b), avg(t.c) FROM (VALUES (1, 2, 3), (4, 5, 6), (7, 8, 0)) AS t(a, b, c) WHERE b > 3] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyUkM1KxDAUhfc-RTmrGQhM0m4kq3ajdDFVRETQLkJ7KYXYW_IjwtB3lzYLHWFEd7nn5jtfyAkT99SYN_LQL1BoBWbHHXnPbo3Shbr_gJYC4zTHsMatQMeOoE8IY7AEDcudsdm7sZF8Jg8SAj0FM9qt-Wa0gZzOyjx7jVIWlBVa67p5vEa7CHAMX80-mIGg1SL-bq-GwdFgAruDOjcfq-ddqfYQONbNrszXU_V0uyuL_UV1_h_1A_mZJ09n2kvNcmkFqB8ofa7n6Dq6d9xtmjTebdwW9ORD2qo01FNarQ_8Dqtf4fwH3C5XnwEAAP__aQiixw== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM (VALUES (1, '222'), (2, '444')) t1(a,b) JOIN (VALUES (1, 100.0), (3, 32.0)) t2(a,b) ON t1.a = t2.a] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyckUFL_DAQxe__T1Hm9BcCbVJPAaFH14MrXqWH0IzdQsyUTCLC0u8uTQ7rLq7ueuvMvN-8zssePFl8NG_IoF9AQi9gDjQgM4W1VQQb-wG6ETD5OcW13QsYKCDoPcQpOgQNjgbjqnfjEnLV1A0IsBjN5LJ-EUApHmiOZkTQchF_dJC1vMhBnXU4LE6egsWA9nTj75JvfvPe8O6BJo-hVkdqcPga_3fy5i5M4y5_gYBtirrqpOiU6FrR3cK5S9prsnpGnskzXpRRs56BdsQSC1MKAz4FGrJNKbeZyw2LHMtUlWLj8yg_5ldYXgGrU1j9CLdHcLP0y7_PAAAA__870evq - -statement ok -CREATE TABLE nullables (a INT, b INT, c INT, PRIMARY KEY (a)) - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT array_agg(a) FROM (SELECT a FROM data WHERE b = 1 AND c = 1.0 AND d = 1.0 ORDER BY a)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzMlEGL00AUx-9-iuF_anFiMkkqy4CQ4LpLYW2l9iISZOw8YqCbCTNTUJZ-d2mC1ojVkV5ynPfyy3u__-E9oTWaVuqRHORHCHCk4MjAkYNjgYqjs2ZHzhl7-mQAlvorZMLRtN3Bn8oVx85YgnyCb_yeILFVn_e0IaXJxgk4NHnV7PsxnW0elf1WaOUVON53qnWSRbFgqtVMMOO_kAXHXbP3ZCWbzYqUvWJCSrlcbW_mrFzdslmRnWovEinl3cO63N7MfzTyn43bN6-Xb8uHOTjWBy9ZIVAdOczBnxd3XtUEKY78gtzZyVhNlvTYphDPUR3_kEBZ15Zq5Y2NF2Ok3GzKD5_K-_tZIeYXN0pHG4nwuEVI3LGI4nQ6gafhemmQXhrF2XT0snC9LEgvi-J8Onp5uF4epJdH8WI6ev84dRtynWkdjcwu_Tk5nQrSNQ2nxZmD3dE7a3b9mOG57rm-oMn5oSuGx7LtW_2Cv8Lir_DLEZz8DqfXTM6ugfNr4MV_wdXx2fcAAAD__6aqGXg= - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT json_agg(a) FROM (SELECT a FROM data WHERE b = 1 AND c = 1.0 AND d = 1.0 ORDER BY a)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzMlEGL00AUx-9-iuF_anFiMkkqy4CQ4LpLZW1ltzcJMnYeMdDNhJkpKEu_uzRBa8TqLL3kOO_ll_d-_8N7Qms0rdQjOchPEOBIwZGBIwfHAhVHZ82WnDP2-MkALPU3yISjabu9P5Yrjq2xBPkE3_gdQWKjvuzonpQmGyfg0ORVs-vHdLZ5VPZ7oZVX4HjoVOski2LBVKuZYMZ_JQuOm2bnyUo2mxUpe8OElHK52lzNWbm6ZrMiO9ZeJVLKm7t1ubma_2zkvxrX794uP5R3c3Cs916yQqA6cJi9Py3uvKoJUhz4GbmTk7GaLOmxTSFeojr8JYGyri3VyhsbL8bI-4f16nN5ezsrxPzsQuloIRGetghJOxZRnE4n7zRcLw3SS6M4m45eFq6XBellUZxPRy8P18uD9PIoXkxH7z-X7p5cZ1pHI7Nzf06Ol4J0TcNlcWZvt_TRmm0_Zniue64vaHJ-6IrhsWz7Vr_g77D4J_x6BCd_wuklk7NL4PwSePEsuDq8-BEAAP__vcYZMw== - -# Test that orderings on GROUP BY columns are propagated through aggregations. -statement ok -CREATE TABLE sorted_data (a INT PRIMARY KEY, b INT, c FLOAT, INDEX foo(b)) - -# Split into ten parts. -statement ok -ALTER TABLE sorted_data SPLIT AT SELECT i FROM generate_series(1, 9) AS g(i) - -# Relocate the ten parts to the five nodes. -statement ok -ALTER TABLE sorted_data EXPERIMENTAL_RELOCATE - SELECT ARRAY[i%5+1], i FROM generate_series(0, 9) AS g(i) - -# Verify data placement. -query TTTI colnames -SELECT start_key, end_key, replicas, lease_holder FROM [SHOW RANGES FROM TABLE sorted_data] ----- -start_key end_key replicas lease_holder -NULL /1 {1} 1 -/1 /2 {2} 2 -/2 /3 {3} 3 -/3 /4 {4} 4 -/4 /5 {5} 5 -/5 /6 {1} 1 -/6 /7 {2} 2 -/7 /8 {3} 3 -/8 /9 {4} 4 -/9 NULL {5} 5 - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT a, max(b) FROM sorted_data GROUP BY a] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzMll1r2zAUhu_3K8y5apmMc2Q7TXzlXBa6ZHQdbIwQ1FgkgdQysgIrJf99OL6I8zEdGyUll_54dF7pORz0AbnK5Fi8yRKSP4DAgAODEBhEwCCGKYNCq7ksS6WrX2rgMfsLSY_BKi82pno9ZTBXWkLyAWZl1hISeBGva_ksRSZ10AMGmTRitd6VKfTqTej3tFTayGyWCSOAwY9C5GXi-QF6Is889JRZSg0MJhuTeCmylMN0y0BtzL5qacRCQoJb1j7ZaLHQciGM0kF8GCytDmCiM6llVpUEBqPx79l48jIb_3x6ukvxHhh8G_26S_n9UZj9-q_v3lKUy5Olp9t9YP7fwPt1VB3keJ2v9UKWXWHvctvaRw5bRN7k50KfzTtWvioCjI_-PF87OqiN7TsPO3RegH7AXXuPyNaw1L-N3sML9x5ev_d4e_-8i3_uB6GrfyJb46QebsM_v7B_fn3_YXv_YRf_oR9Erv6JbI2TGtyG__DC_sPr-4_a-4-6-I_8IHb1T2RrnNTwNvxHF_Yffe7d40yaZ1kWKi9lq5tFr9qPzBay3n-pNnouv2s135WpHyc7bvcik6Wpv2L98JjXn6qATRiPYWzC_ADGbnDfBR66wOiUG2M7za3nHdrh0C6rb7cVWenYDscuqu0wodoOE6rtMKWaoAnVfRfVD1Z4YJc1cJFlhwlZdpiQZYcpWQRNyBq6yEJiilJj1G2Oug1St0nqOErdZik6DVMkpmlESDsZp52k2WlKmp2mpNlpUhqBU9JOhqpV2nT75V8AAAD__xjiYmc= - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT a, max(b) FROM sorted_data GROUP BY a ORDER BY a] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzMllGL4jwUhu-_X1HO1QxfSj1p62iv6uXArC6zs7DLIpKxQQWnKWmEHQb_-1J7YdWdnJbUxUtbn-RNnsNLPyBXmZyKN1lC8gsQGHBgEAKDCBjEMGdQaLWUZal09ZcaeMx-QzJgsMmLnakezxkslZaQfIDZmK2EBF7E61Y-S5FJHQyAQSaN2GwP2xR68yb0e1oqbWS2yIQRwOBbIfIy8fwAPZFnHnrKrKUGBrOdSbwUWcphvmegdua4a2nESkKCe9Y-2WS10nIljNJBfBosrS5gpjOpZVZtCQwm05-L6exlMf3-9HSX4j0w-DL5cZfy-7Mwx_Vf3721KNcXS8_3x8D808DHdVQd5Hyd_-uFLKfCQX_HOkYOe488Vb4qAjyV8Nn20cn22H74sMPwBegH3HX8iGwNUcPbGD_sefzw-uPH2_vnXfxzPwhd_RPZGjf1cBv-ec_--fX9h-39h138h34QufonsjVuanQb_sOe_YfX9x-19x918R_5Qezqn8jWuKnxbfiPevYf_dvPj7-keZZlofJStvqyGFTnkdlK1ucv1U4v5Vetlodt6p-zA3d4kMnS1G-x_vGY16-qgE0Yz2FswvwExm7w0AUeu8DolBtjO82t9x3a4dAua2i3FVnp2A7HLqrtMKHaDhOq7TClmqAJ1UMX1Q9WeGSXNXKRZYcJWXaYkGWHKVkETcgau8hCokWpGnXrUbcidWtSxyp161J0KlMk2jQipF3UaSdpdpqSZqcpaXaalEbglLSLUrVKm-__-xMAAP__HM5iZA== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT c, min(b), a FROM sorted_data GROUP BY a, c] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzMlsFr2zAUxu_7K8w7tUzGkWSnrU_usdA5o-sOY4SgxiIJpJaRFVgp-d-H40Ecx9OzkSE52vJP733v-3j4E3KVyVS8yxLi30CBAAMCHAiEQCCCOYFCq6UsS6WrT2rgKfsD8YTAJi92pno9J7BUWkL8CWZjthJieBVvW_kiRSZ1MAECmTRisz2UKfTmXeiPpFTayGyRCSOAwI9C5GXs-QH1RJ551FNmLTUQmO1M7CWUJJwkDOZ7AmpnjoVLI1YSYron_Zt7XK20XAmjdBCd9lbVqUYw05nUMqsKA4HH9Ncinb0u0p_PzzcJuwUC357Sm4Tfnh3S21aLx6pvH95alOtWQU4SCvP9UQn7r5LjVapur33V1_oii1w66Srf1Mu7JP3Ty8718rbeoxDeQ8gu75LSqSJVvioCGrW-7K4dntSm_bNKB2Q1oH7ARkgr0l7DvumVp5WOnFZ6qbSy_olhQxLD_ICPkBikvcYI7648MWzkxLBLJYb3TwwfkhjuB-EIiUHaa4zw_soTw0dODL9UYsL-iQmHJCb0g2iExCDtNUb4cOWJCUdOTHgN_1AdPb7IslB5KXv9IU0qlTJbyXoqpdrppfyu1fJQpn6cHbjDi0yWpj6l9cNTXh9VDTZh2oZpE2YnMB0GT13gBxeYOvVNIzvNrPPmdpjbzZra3QqtdGSHIxer7TBitR1GrLbDmNUIjVg9dbH6zgrf2826dzHLDiNm2WHELDuMmYXQiFkPLmZRZItia9Rtj7otUrdN6rhK3XYpdVqmFNmmIWLa2TodZJqdxkyz05hpdho1DcEx086WqtW0-f7L3wAAAP__OzShCg== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT c, min(b), a FROM sorted_data GROUP BY a, c ORDER BY a] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzMll-L4jwUh-_fT1HO1cibUpO0jvaqcynM1mV29mJZRDI2qOA0JY2ww-B3X2oXrH8mpyUFvbT1yTknz49DPyFXmUzFuywh_g0UCDAgwIFACAQimBMotFrKslS6-ksNTLM_EA8JbPJiZ6rHcwJLpSXEn2A2ZishhlfxtpUvUmRSB0MgkEkjNttDmUJv3oX-SEqljcwWmTACCPwoRF7Gnh9QT-SZRz1l1lIDgdnOxF5CScJJwmC-J6B25li4NGIlIaZ70r65p9VKy5UwSgfRaW9VneoKZjqTWmZVYSDwlP5apLPXRfrz-fkhYQMg8G2aPiR8cPGSDs5aPFZ9-_DWolyfFeQkoTDfHydhX05yPErV7Z0f9X99kGVcOrxWvjkvvzbSv3nZ5bz8fN7jILz3QVLlqyKgp86-Kh-elKft40o7xDWgfsB6CCzSXsPg6M4DS3sOLL1VYFn7xLAuiWF-wHtIDNJe4wof7zwxrOfEsFslhrdPDO-SGO4HYQ-JQdprXOH4zhPDe04Mv1ViwvaJCbskJvSDqIfEIO01rnBy54kJe05MeA-fUVd6fJFlofJStvpCGlZTymwl61sp1U4v5Xetlocy9c_ZgTs8yGRp6re0_jHN61dVg02YnsO0CbMTmHaDRy7wxAWmTn3TyE4z631zO8ztskZ2W6GVjuxw5KLaDiOq7TCi2g5jqhEaUT1yUf1ohcd2WWMXWXYYkWWHEVl2GJOF0IisiYssimxRbI267VG3Req2SR1XqdsupU7LlCLbNESkXazTTtLsNCbNTmPS7DQqDcExaRdL1Sptvv_vbwAAAP__hqehCQ== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT b, max(c) FROM sorted_data@foo GROUP BY b] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyUkk9r8kAQxu_vp5DnpLBi_vhecopHi02KtdBSgmyz0xDQTNjdQIvku5dkCzWCaT3uzPzm-YXJCRUrSuSRDKJX-BD4j0yg1pyTMay7shtaqw9EnkBZ1Y3typlAzpoQnWBLeyBESHjO9SKEgCIry0M_1gpwY38gY2VBiJatOFvsjy_eybcDbUkq0gtvsB7vzLFhbUntlbQSAo-1rEw0mUMgbWw0iX1ck_Bvkbjjsvp28IcOtS6PUn9eeLjwQMTh1fzglvxVUWgqpGW9CIb5ceeTakWaVP-9AqvkZZ-ku33ytNlMY38GgfvV8zQOZldlwoHML6fekqm5MvSnW3ttJkCqIPc7GW50Tg-a8z7GPdOe6wuKjHXdpXusK9fqBM9hfxQOxuFgFA7H4XAU9i7grP33FQAA__9E9hy_ - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM (SELECT a, max(c) FROM sorted_data GROUP BY a) JOIN (SELECT b, min(c) FROM sorted_data@foo GROUP BY b) ON a = b] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzMl11v4kYUhu_7K9C5SrSDzIzNp1TJuUy1C9V2K7WqUOTgCSARDxobqVHEf6_AqvgwnNeTIa3vAviZOYd53hzmnTKT6nHyqnMa_UWSBCkSFJKgiAR1aSpobc1M57mxu0dK4DH9m0YdQctsvSl2b08FzYzVNHqnYlmsNI3oR_K80t91kmobdEhQqotkudpvs7bL18S-xbmxhU6f0qRISNBv6yTLR612IFtJlrZkyxQLbUnQZFOMWrEUcUjTrSCzKQ675kUy1zSSW1G_sof53Op5UhgbdE8Li3dfwMSm2up0tyUJehj_-TSe_Hga__71610s70nQt4c_7mJ1f1bMYf3nt9YiyReVpafbQ8HqasGHdUxZyPk6X8qFmK5k5_9qK_RrSxye2mSXnrvY-Tdt5_oXs8y0DeTgdN2VfinuYvnl_me7nC_KP4-VUiIORRxdFatfoyGHUsembdaBCs-evLz34GRvWT9u0iFugWwHyjdwoLYjNXvNCJy8ceBkMwLn3NYNAjf8zMCp-tIrF-lVOwh9pQe1HenRb4b06sbSq2ZI79yWv_Sq85nSh_WlD12kD9tB5Cs9qO1Ij0EzpA9vLH3YDOmd27qB9PIzpY_qSx-5SB-1g66v9KC2Iz2GzZA-urH0UTOkd3BEnt3sXoy5ct08CHHVhsilil1a_i2iV8fUcnfF6dj9oI7yY788HsfeB9fz8_EG_63Uf3URvFDId52vTZbrWte8zq4Vnc51-e3kZmNn-ldrZvttypeTPbd_I9V5UX4qyxePWfnRrsBjWJ7D8hhWJ7B0g_s-sJRedNeLHvK0YunQBx74wBIcF6B7PrQCbYespBEPRyysIl7xLkv3eLjnkw8eBvngYZQPQIN8ABrko--TDx4G-eBhlA9Ag3zwNMrHwCcfQ34CdMAIqAwQpxnA02gI8DScAgBHYwDgwHPJjxFw4oAGpgMaqY5w4DrAkeyyMktcbJf8LJFgHMjKNHHSnaeR7jwNdQc40h3gSPfKIHXSnaeR7jwNdQc40p3Hoe6Vceqke2WwnOo-ALpXJouT7jyNdOdpqDvAke4AR7pXpqqT7jyNdOdpqDvAke48jnRX_IVUgRupqsyWU1wB3OV2phzpgRd9dmzOeM8LV6h1tyvadPvTPwEAAP__qGgS1A== diff --git a/pkg/sql/logictest/testdata/planner_test/distsql_auto_mode b/pkg/sql/logictest/testdata/planner_test/distsql_auto_mode deleted file mode 100644 index 20e71f3ca428..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/distsql_auto_mode +++ /dev/null @@ -1,130 +0,0 @@ -# LogicTest: fakedist - -# -# Tests that verify DistSQL support and auto mode determination. -# The cluster size or distsql mode aren't important for these tests. -# - -statement ok -CREATE TABLE kv (k INT PRIMARY KEY, v INT) - -# Verify that EXPLAIN (DISTSQL) hides the JSON column by default (#21089) -query BT colnames -EXPLAIN (DISTSQL) SELECT 1 ----- -automatic url -false https://cockroachdb.github.io/distsqlplan/decode.html#eJyMjzFLxTAUhXd_RTmTQsB0kzu6dXnKQ1wkQ0kOz2JNSm4CwqP_XZoM4iA4nnOS7-NeEVPgaf6kQt4wwhlsOXmqpnxU_cEUviDWYIlbLUftDHzKhFxRlrISgtd5rdR7C4PAMi9rI9rhcbi1g3-v8UPvYHBmDMwyjCIynV4e4HaDVMsPWMt8IcTu5v_yM3VLUflL_jfZGTBc2A_UVLPnc06-aXp8av9aEailr2MPU-zT7vab7wAAAP__8hZoQg== - -# Check the JSON column is still there, albeit hidden. -query T colnames -SELECT json FROM [EXPLAIN (DISTSQL) SELECT * FROM kv] WHERE false ----- -json - -# Full table scan - distribute. -query B -SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM kv] ----- -true - -# Partial scan - don't distribute. -query B -SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM kv WHERE k=1] ----- -false - -# Partial scan - don't distribute. -query B -SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM kv WHERE k>1] ----- -false - -# Partial scan with filter - distribute. -query B -SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM kv WHERE k>1 AND v=1] ----- -true - -# Sort - distribute. -query B -SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM kv WHERE k>1 ORDER BY v] ----- -true - -# Aggregation - distribute. -query B -SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT k, sum(v) FROM kv WHERE k>1 GROUP BY k] ----- -true - -# Hard limit in scan - distribute. -query B -SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM kv LIMIT 1] ----- -true - -# Soft limit in scan - don't distribute. -query B -SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM kv UNION SELECT * FROM kv LIMIT 1] ----- -false - -# Limit after sort - distribute. -query B -SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM kv WHERE k>1 ORDER BY v LIMIT 1] ----- -true - -# Limit after aggregation - distribute. -query B -SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT k, sum(v) FROM kv WHERE k>1 GROUP BY k LIMIT 1] ----- -true - -statement ok -CREATE TABLE kw (k INT PRIMARY KEY, w INT) - -# Join - distribute. -query B -SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM kv NATURAL JOIN kw] ----- -true - -# Join with span - distribute. -query B -SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM kv NATURAL JOIN kw WHERE k=1] ----- -true - -statement ok -CREATE TABLE abc (a INT PRIMARY KEY, b INT, c INT, INDEX b (b)) - -# Index join - don't distribute. -query B -SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM abc WHERE b=1] ----- -false - -# Index join with filter on result - don't distribute. -query B -SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM abc WHERE b>1 AND c%2=0] ----- -false - -# Index join with filter on index scan - distribute. -query B -SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM abc WHERE b=1 AND a%2=0] ----- -true - -# OID cast - don't distribute (#22249). -query BT -EXPLAIN (DISTSQL) SELECT t1.a FROM abc t1 INNER JOIN abc t2 on t1.a::REGCLASS = t2.a::REGCLASS; ----- -false https://cockroachdb.github.io/distsqlplan/decode.html#eJyskU9LxDAQxe9-ivLOkW2yt4BQEdEV2ZXWm_SQbYa10E1KkoKy9LtL00Ptsv5Z8TiT-c17b3KAsZrWak8e8gUcJUPrbEXeWze0xoGVfoNMGWrTdmFolwyVdQR5QKhDQ5B4VtuGclKa3CIFg6ag6iaubV29V-49U9sKDEWrjJfJJRg2XZBJxlH2DLYL03If1I4gec_-ZoD_kwHxpYFJtzPWaXKkZ5rlQP40ciLFvfKvD7Y25BZiHmKzTjIuZX57d_N4XRTJVZKJqfxFmOU518zJt9Z4Og51cnM6JCG9o_Ey3nauoidnqygzlpvIxYYmH8ZXMRYrE5_id3-G-RmwOIbFt_ByBqd92V98BAAA__-wX_7J - -# Query with OID expression - don't distribute (#24423). -query BT -EXPLAIN (DISTSQL) SELECT 246::REGTYPE FROM abc ----- -false https://cockroachdb.github.io/distsqlplan/decode.html#eJyMjzFLBDEUhHt_xTF1xF0Ri1fZHHKNHus1IlvkkuFY2EtCXhaUI_9dblOIhWA53yQz8y4I0fPFnqmQD_QYDVKOjqoxX1F7sPOfkM5gCmkpVzwauJgJuaBMZSYEB3ucOdB65rsOBp7FTvMam_J0tvnryR4dDN6SDSqbWxgMDJ5ZNvcPjyIybJ8P7_stxmoQl_JTpcWeCOmr-f-cgZpiUP5a8ldyV0cD-hPbyRqX7LjP0a01Tb6u_1bgqaW5fRO70Kw61pvvAAAA__9YGm79 diff --git a/pkg/sql/logictest/testdata/planner_test/distsql_distinct_on b/pkg/sql/logictest/testdata/planner_test/distsql_distinct_on deleted file mode 100644 index 4cd565b67afa..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/distsql_distinct_on +++ /dev/null @@ -1,157 +0,0 @@ -# LogicTest: 5node-dist - -statement ok -CREATE TABLE xyz ( - id INT PRIMARY KEY, - x INT, - y INT, - z INT -) - -statement ok -CREATE TABLE abc ( - a STRING, - b STRING, - c STRING, - PRIMARY KEY (a, b, c) -) - -statement ok -ALTER TABLE xyz SPLIT AT VALUES (2), (4), (6), (7) - -statement ok -ALTER TABLE xyz EXPERIMENTAL_RELOCATE VALUES - (ARRAY[1], 0), - (ARRAY[2], 2), - (ARRAY[3], 4), - (ARRAY[4], 6), - (ARRAY[5], 7) - -statement ok -ALTER TABLE abc SPLIT AT VALUES - (NULL, NULL, NULL), - ('1', '1', '2'), - ('1', '2', '2'), - ('2', '3', '4'), - ('3', '4', '5') - -statement ok -ALTER TABLE abc EXPERIMENTAL_RELOCATE VALUES - (ARRAY[1], NULL, NULL, NULL), - (ARRAY[2], '1', '1', '2'), - (ARRAY[3], '1', '2', '2'), - (ARRAY[4], '2', '3', '4'), - (ARRAY[5], '3', '4', '5') - -query TTTI colnames -SELECT start_key, end_key, replicas, lease_holder from [SHOW RANGES FROM TABLE xyz] ----- -start_key end_key replicas lease_holder -NULL /2 {1} 1 -/2 /4 {2} 2 -/4 /6 {3} 3 -/6 /7 {4} 4 -/7 NULL {5} 5 - -query TTTI colnames -SELECT start_key, end_key, replicas, lease_holder from [SHOW RANGES FROM TABLE abc] ----- -start_key end_key replicas lease_holder -NULL /NULL/NULL/NULL {5} 5 -/NULL/NULL/NULL /"1"/"1"/"2" {1} 1 -/"1"/"1"/"2" /"1"/"2"/"2" {2} 2 -/"1"/"2"/"2" /"2"/"3"/"4" {3} 3 -/"2"/"3"/"4" /"3"/"4"/"5" {4} 4 -/"3"/"4"/"5" NULL {5} 5 - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON (x,y,z) x, y, z FROM xyz ----- -distinct · · (x, y, z) weak-key(x,y,z) - │ distinct on x, y, z · · - └── render · · (x, y, z) · - │ render 0 test.public.xyz.x · · - │ render 1 test.public.xyz.y · · - │ render 2 test.public.xyz.z · · - └── scan · · (id[omitted], x, y, z) id!=NULL; key(id) -· table xyz@primary · · -· spans ALL · · - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT DISTINCT ON (x,y,z) x, y, z FROM xyz] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyslMGuojAUhvfzFOasS6ClorJiMRs348SZ3YQFQ08MiVLSlkTH8O4TIMGL0dILdwn49_u_Y3PuUEqBP7ILaoj_AAUCDAiEQIADgTWkBColc9RaqvYnfWAvrhAHBIqyqk37OiWQS4UQ38EU5owQw-_s7xmPmAlUfgAEBJqsOHeYShWXTN2S6-0fEPhVZaWOV57fkg-1iVcJI0lIEg5pQ0DW5gHRJjshxLQh7kW-F9oUZW789bhFQkkHekthbymPw-tSKoEKxejstLH1oMEni4SjItR97tRh7j7zfD5z8hNVBuNo0eSZuzBzEeZeV2iO8ESVQXizSDh0Fw5dhCOvKzRHeKLKILxdJMzdhbmL8MabqTtRZNDdfdkqeUE5oq5kqfFppbw-OWhXDYoT9ntJy1rl-FPJvMP0j4cu170QqE3_lfYP-7L_1Bb8GKbWMBuF6XOY2ckT6NCa5vYwX9J7bQ1HdnK0hLyxhrd28nYJeWf_r4KJa2K_ZM_stPn2PwAA__8GTroO - -# Ensure that ordering propagates past local DISTINCT processors. -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON (x,y,z) x, y, z FROM xyz ORDER BY x ----- -distinct · · (x, y, z) weak-key(x,y,z); +x - │ distinct on x, y, z · · - │ order key x · · - └── sort · · (x, y, z) +x - │ order +x · · - └── render · · (x, y, z) · - │ render 0 test.public.xyz.x · · - │ render 1 test.public.xyz.y · · - │ render 2 test.public.xyz.z · · - └── scan · · (id[omitted], x, y, z) id!=NULL; key(id) -· table xyz@primary · · -· spans ALL · · - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT DISTINCT ON (x,y,z) x, y, z FROM xyz ORDER BY x] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy0lT9v2zAQxfd-CuPWUpCPov9p0tAlS1Mk3QoPqnQIBDiiQNJA0sDfvZBkQLUbHxnaGfXn3Xv83QP4Bq2u6Xv5TBbyX4AgQIKADAQoELCArYDO6Iqs1ab_ZRTc1S-QzwU0bbd3_eutgEobgvwNXON2BDn8LH_v6IHKmkw6BwE1ubLZDTadaZ5L81q8vP4BAY9d2dp8lqS98_3e5bNCiiIThYLtQYDeu8nEuvKJIMeDCA_yqI0jky5OMxT49eJ4-ZHx3xrrmrZyKc7PHcRwkP5UpiZDdT4r8KJpdtF08tLjnPdOwib77-wfSqZOkmH42jFg7alMUhW5eE-U4-KXsYv3jJ_w4g0XL8PxyhC8KhkAxOD1RDniXcXi9Yyf8Mob4s3C8WYheJfJACAGryfKEe86Fq9n_IQ3uyFeFY5XheBdJZFwPUGOcDexcD3jJ7jqk-6Ed0wfyHa6tXTieGnyvL8wqH6i8YKxem8q-mF0NdiMj_eDbnhRk3XjVxwf7trxUx_wXzGyYsmLJSvOTsR4Ls742EveWrHqBS9esGKP8_KaQ69Y8Zp3XrPiDS_eXBMbPR3zlYxvGXpqhlf1DD1FUx5zvmnoqRryXTvPvj18-RsAAP__agfTvw== - -# Ensure that even with more ordering columns, ordering propagates past local -# DISTINCT processors. -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON (y) x, y FROM xyz ORDER BY y, x ----- -distinct · · (x, y) weak-key(y); +y,+x - │ distinct on y · · - │ order key y · · - └── sort · · (x, y) +y,+x - │ order +y,+x · · - └── render · · (x, y) · - │ render 0 test.public.xyz.x · · - │ render 1 test.public.xyz.y · · - └── scan · · (id[omitted], x, y, z[omitted]) id!=NULL; key(id) -· table xyz@primary · · -· spans ALL · · - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT DISTINCT ON (y) x, y FROM xyz ORDER BY y, x] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyslU1vm0AQhu_9FdFcswjPsv7ixKGXXJoq6a3ygbKjCMlh0e5aShr5v1eAJWq3zK6Dj4BfnneeHZkPaIymb-UrOch_AoIACQIyEKBAwBJ2AlprKnLO2O4nQ-BBv0G-EFA37cF3t3cCKmMJ8g_wtd8T5PCj_LWnJyo12XQBAjT5st73mNbWr6V9L97ef4OA57ZsXH6XpB358eDzu0KKIoPdUYA5-JHgfPlCkONRxLd4NtaTTZfnBQp5Lwq8n0TIaxBfa-frpvIpLi4p3UBWkyXdDTWJyyZxI8UM75mag-31z_SRvdRZL4w_b4w471QmqfrMiQd6nE58NefEA4jRLN7kxGW8WRljViX9-FebDfQ4mV3PMRtAjGblTcxm8WazGLOrpB__arOBHiezmzlmA4jRbHYTsyrerIoxu04-4zXQ4uR1O8drADF6VTf_9_8P7olcaxpHZ6ypNy-6zwLpFxo-Jc4cbEXfral6zHD52Of6G5qcH57icPHQDI-6gn-HkQ1LPizZcHYWxstwxtde8WjFppd8eMmGA-TVnKHXbHjDkzdseMuHt3NqY2DHQkvGbxkG1gxn7RkGFk0F4PymYWDVkN-1y-6745c_AQAA__9DNc3z - -# Distinct processors elided becaue of strong key. -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON (a,b,c) a, b, c FROM abc ----- -scan · · (a, b, c) a!=NULL; b!=NULL; c!=NULL; key(a,b,c) -· table abc@primary · · -· spans ALL · · - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT DISTINCT ON (a,b,c) a, b, c FROM abc] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJykk01r4zAQhu_7K8x7lvH3HnzaayBkS9qeah8Ua0gNiWQkGVqC_3uxDI3jpkVpLgMj6fH7MIxPkErQhh_JoHxBAoYUDBkYcjAUqBk6rRoyRunxyQSsxBvKmKGVXW_H45qhUZpQnmBbeyCUeOK7A22JC9LR-F1BlrcHF9Pp9sj1-z--a8Dw2HFpyiDaPK_X5xJGFZIKnzWtgHpgUL09ZxrL94QyGdg3XmedXiotSJO4UKmHK-YbFaouKhYPr0enF9GJ_0hSn5F8GUE4b26aSuqvlt2ils7VpiZzNfdWy_zVcj-1hUc4b6IKhbda7q8We6iFiyUPuBRBEij7SvoX233FaEumU9KQ1_LG4_aT2NP0qxjV64YetGpczNT-d5w7EGTsdJtMzUq6Kyc4h5Mf4b8XcLyE03uSs3vg_B64uAmuhz8fAQAA__9FDr-I - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT ON (a, b) a, b FROM abc ORDER BY a, b, c ----- -distinct · · (a, b) a!=NULL; b!=NULL; key(a,b); +a,+b - │ distinct on a, b · · - │ order key a, b · · - └── nosort · · (a, b) a!=NULL; b!=NULL; +a,+b - │ order +a,+b,+c · · - └── scan · · (a, b, c) a!=NULL; b!=NULL; c!=NULL; key(a,b,c); +a,+b,+c -· table abc@primary · · -· spans ALL · · - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT DISTINCT ON (a, b) a, b FROM abc ORDER BY a, b, c] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy0lEFvmzAYhu_7Fei7xhHYJmnKicMulap26rbTwsHFnzqkFCPbkTZF-e8TeCKBLcYL2cWSgdfPq-dDPkCtJD6JdzSQfQMKBBgQ4EAgBQIrKAg0WpVojNLtJy7wIH9AlhCo6mZv28cFgVJphOwAtrI7hAy-iNcdvqCQqOP2XIlWVLsO0-jqXeifuXgtgcDnRtQmi-Knr4-Pp2UZb4FuoV_ZFoDA895mUU5JzkjOoTgSUHt76mCseEPI6JGE9_xYGVvVpY3Xw5IdpUVqiRrlb-xFJrvIPKGUO2rMWZCcLUjOF1AcfQVpMqshHzSk4dNjIdP7Y1rL882sAU5U7f3c3XCALFwP_xc97FyP2_BuTa_WM1G117O5oR4ericN0zNysTzfxFtYXa1nomqv5_6GetJwPUmAnuXoboxELSMaKfsd9ZVWJhr2Vlb_6VL8C_MFTaNqgwPipZOT9qZE-YbuhjVqr0v8pFXZYdz2uct1DyQa695St3mo3au24HmYesNsEKbjMPOTJ9Dcm0794XRO75U3vPaT13PId97wxk_ezCHf-2eVTPwm_p9szC6OH34FAAD__6vp-Bs= diff --git a/pkg/sql/logictest/testdata/planner_test/distsql_indexjoin b/pkg/sql/logictest/testdata/planner_test/distsql_indexjoin deleted file mode 100644 index 1bf6ace2ab35..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/distsql_indexjoin +++ /dev/null @@ -1,45 +0,0 @@ -# LogicTest: 5node-dist - -statement ok -CREATE TABLE t (k INT PRIMARY KEY, v INT, w INT, INDEX v(v)) - -# Split the index into 5 parts, as if numbers were in the range 1 to 100. -statement ok -ALTER INDEX t@v SPLIT AT SELECT (i * 10)::int FROM generate_series(1, 4) AS g(i) - -# Relocate the five parts to the five nodes. -statement ok -ALTER INDEX t@v EXPERIMENTAL_RELOCATE - SELECT ARRAY[i+1], (i * 10)::int FROM generate_series(0, 4) AS g(i) - -query TTTI colnames -SELECT start_key, end_key, replicas, lease_holder from [SHOW RANGES FROM INDEX t@v] ----- -start_key end_key replicas lease_holder -NULL /10 {1} 1 -/10 /20 {2} 2 -/20 /30 {3} 3 -/30 /40 {4} 4 -/40 NULL {5} 5 - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM t WHERE v > 10 AND v < 50] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyslD2PozAQQPv7FdHUg_AHJDkq2lyRnHLXrShYPIqQEoxss9rVKv99BURaiDYOKCltz_Pza_wJlVa0zU9kIXkBDggCECQgRIAQQ4ZQG12Qtdq0Iz2wUe-QMISyqhvXb7vSHQkSaCptFBlSgKDI5eWxPc_OGUKhDUHyPbrVga7D9dUggm7c5doMwbr8QJDIMw7UfKD-4eL_-euR9pQrMiEbXQ9vqQOEf3Ve2WQRch6Eop3YNS5ZpBxu6fkc_R9dVhd7NLbXpjzl5qN7w0WJqcBU3hSLkVhM7-a-bsGCUM7vvqMfdMfP7ZbTu4WvW7IgjOZ339EPupfP7Y6md0tfd8SCMJ7ffUc_6F49t5v5xXuyta4sTfo5WPv1kDpQ_09Z3ZiC_hpddJp-ueu4bkORdf3p736xqfqj9oFDmHth4YeFF2YjmF_D0gtHfnP0iDn2wku_efmIeeWF137zepY5O__6CgAA__9D6ElU - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM t WHERE v > 10 AND v < 50 ORDER BY v] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyslD1vqzAUhvf7K6KzXiP8AUkuE2vukFRpt4qB4qMIKcHINlWriv9egSMFqsYhH6Pt8_p5n-V8QaUkrvMDGkhegQEBDgQEEIiAQAwZgVqrAo1RuhtxgZX8gIQSKKu6se7alnaPkIDSEjVKICDR5uW-_zflfyFrMwKF0gjJaXqtAlWHy9F01hJQjT3-nBEwNt8hJKIlAzob0H_5-CV_2-MWc4k6pOMy76kFAs91XplkFjIWhLyb2DQ2maWMpBzONWDXNPivyupYIBoXqHV5yPVnX-NEJak4C-YjMJ-uznzqnAahuEn9QoOBevxYdTFdnfvUBQ3C6Cb1Cw0G6vPHqkfT1YVPPaJBGN-kfqHBQH3xWHXqB2_R1KoyOGmL0G4NodyhW1tGNbrAJ62KHuOOmz7XX0g01r3-c4dV5Z66gsMw84a5P8y9YToKs59h4Q1HfnJ0Dzn2hud-8vwe8sIbXvrJy6vIWfvnOwAA__9b3UvK - -# Here we care about ordering by v, but v is not otherwise used. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT w FROM t WHERE v > 10 AND v < 50 ORDER BY v] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyslD1vgzAQhvf-iujWGuEPSFIm1nRIqrRbxUDxKUJKMLJN1ariv1fgSIWqdcjHaPteP--z3BdUSuI6P6CB5BUYEOBAQACBCAjEkBGotSrQGKW7ERdYyQ9IKIGyqhvrrm1p9wgJKC1RowQCEm1e7vt_U34PWZsRKJRGSH6m1ypQdbgcTWctAdXY488ZAWPzHUIiWjKgswH9j49f8rc9bjGXqEM6LvOeWiDwXOeVSWYhY0HIu4lNY5NZykjK4b8G7JwGj6qsjgWicYFal4dcf_Y1HFX4qHxE5dO9mc-b0yAUF3mfaDDwjm_oLaZ7c5-3oEEYXeR9osHAe35D72i6t_B5RzQI44u8TzQYeC9u6E391C2aWlUGJ20O2q0elDt0q8qoRhf4pFXRY9xx0-f6C4nGutcHd1hV7qkrOAwzb5j7w9wbpqMw-x0W3nDkJ0fXkGNveO4nz68hL7zhpZ-8PIuctXffAQAA____dUlW - -# The single join reader should be on node 5, and doesn't need to output v. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT w FROM t WHERE v > 40 AND v < 50 ORDER BY v] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyUkbFOwzAQhneeovpnV4kTunjqWoYWFTaUwcSnKlLqs2wHgaq8O4qNRIPUAKPv7vu_0_kCy4b2-kwB6gUSAhs0As5zSyGwn8p5aGfeoUqBzrohTuVGoGVPUBfELvYEhT2v2RUVBAxF3fVpbBTgIX5DIeoTQdWjuAqWy8HP-rWnI2lDvihn8XjbRgg8OW2DWhX3cl1sponDENVqK3FLL_-jf-DOftnl3O58d9b-I-2QlfVNZTVT_nLKIwXHNtCfblmOjQCZE-XvCjz4lh49t0mTn4fEpYKhEHO3zo-dza1pwWtYLsLVMlwtwuUPuBnvPgMAAP__G4vUxQ== diff --git a/pkg/sql/logictest/testdata/planner_test/distsql_interleaved_join b/pkg/sql/logictest/testdata/planner_test/distsql_interleaved_join deleted file mode 100644 index 20df7ee66753..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/distsql_interleaved_join +++ /dev/null @@ -1,481 +0,0 @@ -# LogicTest: 5node-dist - -# The following tables form the interleaved hierarchy: -# name: primary key: # rows: 'a' = id mod X : -# parent1 (pid1) 40 8 -# child1 (pid1, cid1) 150 66 -# grandchild1 (pid1, cid1, gcid1) 410 201 -# child2 (pid1, cid2, cid3) 15 7 -# grandchild2 (pid1, cid2, cid3, gcid2) 51 13 -# parent2 (pid2) 5 2 -# Additional rows in child1, child2, and grandchild1 with no corresponding -# parent row are also inserted. -# -# All IDs belonging to a table (pid1 --> parent1, cid1 --> child1, cid2,cid3 -# --> child2, etc.) start from 1 up to (# rows). -# Foreign keys are modded by their ancestor's (# rows). For example, for child1 -# row with cid1=500, we take ((cid1-1) % 200 + 1) = 100 as pid1. -# One exception is cid3, which is taken as cid2 % 15. -# There's a column 'a' that's modded by a factor. -# -# This allows us to test the following edge cases (in order of tests): -# - one-to-many (parent1 - child1) -# - one-to-one and one-to-none (parent1 - child2) -# - parent-grandchild (parent1 - grandchild1) -# - multiple interleaved columns (child2 - grandchild2) -# - additional ancestor above (child2 - grandchild2) -# - no interleaved relationship (parent1 - parent2, parent2 - child1) -# - TODO(richardwu): sibling-sibling (child1 - child2) - -################# -# Create tables # -################# - -statement ok -CREATE TABLE parent1 (pid1 INT PRIMARY KEY, pa1 INT) - -statement ok -CREATE TABLE parent2 (pid2 INT PRIMARY KEY, pa2 INT) - -statement ok -CREATE TABLE child1 ( - pid1 INT, - cid1 INT, - ca1 INT, - PRIMARY KEY(pid1, cid1) -) -INTERLEAVE IN PARENT parent1 (pid1) - -statement ok -CREATE TABLE child2 ( - pid1 INT, - cid2 INT, - cid3 INT, - ca2 INT, - PRIMARY KEY(pid1, cid2, cid3) -) -INTERLEAVE IN PARENT parent1 (pid1) - -statement ok -CREATE TABLE grandchild1 ( - pid1 INT, - cid1 INT, - gcid1 INT, - gca1 INT, - PRIMARY KEY(pid1, cid1, gcid1) -) -INTERLEAVE IN PARENT child1 (pid1, cid1) - -# No foreign key since we are permitting the rows to overflow out of child2 -# for pid1 > 15. -statement ok -CREATE TABLE grandchild2 ( - pid1 INT, - cid2 INT, - cid3 INT, - gcid2 INT, - gca2 INT, - PRIMARY KEY(pid1, cid2, cid3, gcid2) -) -INTERLEAVE IN PARENT child2 (pid1, cid2, cid3) - -#################### -# Split our ranges # -#################### - -# Split at parent1 key into five parts. -statement ok -ALTER TABLE parent1 SPLIT AT SELECT i FROM generate_series(8, 32, 8) AS g(i) - -# Split at child1 keys in between parent1 parts (total 10 parts). -statement ok -ALTER TABLE child1 SPLIT AT SELECT pid1, pid1 + 40 FROM -generate_series(4, 36, 8) AS g(pid1) - -# Split at grandchild2 keys in between the 10 parts (total 20 parts). -statement ok -ALTER TABLE grandchild2 SPLIT AT SELECT pid1, pid1 + 40, pid1, pid1 FROM -generate_series(2, 38, 4) AS g(pid1) - -# Relocate the twenty parts to the five nodes. -statement ok -ALTER TABLE grandchild2 EXPERIMENTAL_RELOCATE - SELECT ARRAY[((i-1)/2)::INT%5+1], i, i+20, i, i FROM generate_series(1, 39, 2) AS g(i) - -# Verify data placement. -query TTTI colnames -SELECT start_key, end_key, replicas, lease_holder FROM [SHOW RANGES FROM TABLE parent1] ----- -start_key end_key replicas lease_holder -NULL /2/#/56/1/42/2/#/58/1/2 {1} 1 -/2/#/56/1/42/2/#/58/1/2 /4/#/55/1/44 {2} 2 -/4/#/55/1/44 /6/#/56/1/46/6/#/58/1/6 {3} 3 -/6/#/56/1/46/6/#/58/1/6 /8 {4} 4 -/8 /10/#/56/1/50/10/#/58/1/10 {5} 5 -/10/#/56/1/50/10/#/58/1/10 /12/#/55/1/52 {1} 1 -/12/#/55/1/52 /14/#/56/1/54/14/#/58/1/14 {2} 2 -/14/#/56/1/54/14/#/58/1/14 /16 {3} 3 -/16 /18/#/56/1/58/18/#/58/1/18 {4} 4 -/18/#/56/1/58/18/#/58/1/18 /20/#/55/1/60 {5} 5 -/20/#/55/1/60 /22/#/56/1/62/22/#/58/1/22 {1} 1 -/22/#/56/1/62/22/#/58/1/22 /24 {2} 2 -/24 /26/#/56/1/66/26/#/58/1/26 {3} 3 -/26/#/56/1/66/26/#/58/1/26 /28/#/55/1/68 {4} 4 -/28/#/55/1/68 /30/#/56/1/70/30/#/58/1/30 {5} 5 -/30/#/56/1/70/30/#/58/1/30 /32 {1} 1 -/32 /34/#/56/1/74/34/#/58/1/34 {2} 2 -/34/#/56/1/74/34/#/58/1/34 /36/#/55/1/76 {3} 3 -/36/#/55/1/76 /38/#/56/1/78/38/#/58/1/38 {4} 4 -/38/#/56/1/78/38/#/58/1/38 NULL {5} 5 - -query TTTI colnames -SELECT start_key, end_key, replicas, lease_holder FROM [SHOW RANGES FROM TABLE child1] ----- -start_key end_key replicas lease_holder -NULL /2/#/56/1/42/2/#/58/1/2 {1} 1 -/2/#/56/1/42/2/#/58/1/2 /4/#/55/1/44 {2} 2 -/4/#/55/1/44 /6/#/56/1/46/6/#/58/1/6 {3} 3 -/6/#/56/1/46/6/#/58/1/6 /8 {4} 4 -/8 /10/#/56/1/50/10/#/58/1/10 {5} 5 -/10/#/56/1/50/10/#/58/1/10 /12/#/55/1/52 {1} 1 -/12/#/55/1/52 /14/#/56/1/54/14/#/58/1/14 {2} 2 -/14/#/56/1/54/14/#/58/1/14 /16 {3} 3 -/16 /18/#/56/1/58/18/#/58/1/18 {4} 4 -/18/#/56/1/58/18/#/58/1/18 /20/#/55/1/60 {5} 5 -/20/#/55/1/60 /22/#/56/1/62/22/#/58/1/22 {1} 1 -/22/#/56/1/62/22/#/58/1/22 /24 {2} 2 -/24 /26/#/56/1/66/26/#/58/1/26 {3} 3 -/26/#/56/1/66/26/#/58/1/26 /28/#/55/1/68 {4} 4 -/28/#/55/1/68 /30/#/56/1/70/30/#/58/1/30 {5} 5 -/30/#/56/1/70/30/#/58/1/30 /32 {1} 1 -/32 /34/#/56/1/74/34/#/58/1/34 {2} 2 -/34/#/56/1/74/34/#/58/1/34 /36/#/55/1/76 {3} 3 -/36/#/55/1/76 /38/#/56/1/78/38/#/58/1/38 {4} 4 -/38/#/56/1/78/38/#/58/1/38 NULL {5} 5 - -query TTTI colnames -SELECT start_key, end_key, replicas, lease_holder FROM [SHOW RANGES FROM TABLE grandchild1] ----- -start_key end_key replicas lease_holder -NULL /2/#/56/1/42/2/#/58/1/2 {1} 1 -/2/#/56/1/42/2/#/58/1/2 /4/#/55/1/44 {2} 2 -/4/#/55/1/44 /6/#/56/1/46/6/#/58/1/6 {3} 3 -/6/#/56/1/46/6/#/58/1/6 /8 {4} 4 -/8 /10/#/56/1/50/10/#/58/1/10 {5} 5 -/10/#/56/1/50/10/#/58/1/10 /12/#/55/1/52 {1} 1 -/12/#/55/1/52 /14/#/56/1/54/14/#/58/1/14 {2} 2 -/14/#/56/1/54/14/#/58/1/14 /16 {3} 3 -/16 /18/#/56/1/58/18/#/58/1/18 {4} 4 -/18/#/56/1/58/18/#/58/1/18 /20/#/55/1/60 {5} 5 -/20/#/55/1/60 /22/#/56/1/62/22/#/58/1/22 {1} 1 -/22/#/56/1/62/22/#/58/1/22 /24 {2} 2 -/24 /26/#/56/1/66/26/#/58/1/26 {3} 3 -/26/#/56/1/66/26/#/58/1/26 /28/#/55/1/68 {4} 4 -/28/#/55/1/68 /30/#/56/1/70/30/#/58/1/30 {5} 5 -/30/#/56/1/70/30/#/58/1/30 /32 {1} 1 -/32 /34/#/56/1/74/34/#/58/1/34 {2} 2 -/34/#/56/1/74/34/#/58/1/34 /36/#/55/1/76 {3} 3 -/36/#/55/1/76 /38/#/56/1/78/38/#/58/1/38 {4} 4 -/38/#/56/1/78/38/#/58/1/38 NULL {5} 5 - -statement ok -SET CLUSTER SETTING sql.distsql.interleaved_joins.enabled = true; - -##################### -# Interleaved joins # -##################### - -# Select over two ranges for parent/child with split at children key. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM parent1 JOIN child1 USING(pid1) WHERE pid1 >= 3 AND pid1 <= 5] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzMkkFr6zAQhO_vVzzm9B7dEstpL4aCryklKbkWH4S1SQSOZFZyaSn570VWoU5oQ9tTb5ZmZscf2hc4b3ip9xxQPUCBUIIwR0PoxbccgpckZePCPKEqCNb1Q8zX0caOUWFwXgwLGxAMR227pDeHhtB6YVTv1qW_9P2sPDES_BDfxjaEEPWWUZUHmlSrSfUHgxcusnSsH3nN2rDceutYZsVRE-54E5Hw7F7Lc91rYRcT-dpud1Ol3dnOJCHPAaHjTfxXq4v_N5K84ycIqyFWf2tFdUn1FdXX-IxGHdGUP6JRv5SmOE-z5tB7F_hLr16ktWGz5bxjwQ_S8r34dqzJx9WYGy8Mh5jVeT4sXJbSD07D6my4OAqr03D5rXBz-PMaAAD__y7yGHk= - -# Swap parent1 and child1 tables. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM child1 JOIN parent1 USING(pid1) WHERE pid1 >= 3 AND pid1 <= 5] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzMklFL-zAUxd__n-LPeVK8sqbDl4LQ14lsslfpQ2jutkCXlJtUFNl3lzSC3dChPvnW5JxzT3_kvsJ5w0u954DqEQqEEoQ5GkIvvuUQvCQpGxfmGVVBsK4fYr6ONnaMCoPzYljYgGA4atslvTk0hNYLo_qwLv2172fliZHgh_g-tiGEqLeMqjzQpFpNqj8ZvHCRpWP9xGvWhuXOW8cyK46acM-biIRn91pe6nZnO5PA13a7mwq9FnYxKXkOCB1v4kWtri5vJZnHTxBWQ6z-14rqkuo51Tf4ikYd0ZS_olF_lKY4T7Pm0HsX-FuvXqS1YbPlvGPBD9Lyg_h2rMnH1ZgbLwyHmNV5PixcltIPTsPqbLg4CqvTcPmjcHP49xYAAP__IiwYdw== - -# Select over two ranges for parent/child with split at grandchild key. -# Also, rows with pid1 <= 30 should have 4 rows whereas pid1 > 30 should -# have 3 rows. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM parent1 JOIN child1 ON parent1.pid1 = child1.pid1 WHERE parent1.pid1 >= 29 AND parent1.pid1 <= 31 ORDER BY parent1.pid1] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzUUcFq6zAQvL-veOypJSqxnOZiKOiaUpKSa_FBWBtH4EhmtS4twf9eJB0Sl6S0vfVm7czs7IyP4LzBtT5ggOoFJAhYQi2gJ99gCJ7iOJNW5g2qQoB1_cBxXAtoPCFUR2DLHUIFK8dIHepX3KI2SI_eOqR5XGuQte2SyxPuGKKHPWh6V70mdBw5W9vuz5FmbzsTgbwHBHS44xslZ7cPFLnpEwRsBq7-KylUKdRCqHuhllCPAvzAp2MD6xahkqO4EuiUw5NBQjM9W8kZ1OOF1Gt_5_t5OWFfcy8n7vJXdRZ_o84LgbYYeu8CfquqInaNpsX8b4IfqMFn8k2yyc9N0qWBwcAZlfmxcglKB56L5ZfixURcfBaXP3Kux38fAQAA__8x_hkU - -# Parent-child where pid1 <= 15 have one joined row and pid1 > 15 have no -# joined rows (since child2 only has 15 rows up to pid1 = 15). -# Note this spans all 5 nodes, which makes sense since we want to read all -# parent rows even if child rows are non-existent (so we can support OUTER -# joins). -# TODO(richardwu): we can remove nodes reading from just one table for INNER -# joins or LEFT/RIGHT joins. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM parent1 JOIN child2 USING(pid1) WHERE pid1 >= 12 ORDER BY pid1] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzMlD1rwzAQhvf-ivJOLbkSyx8ZDAWtKSUpWYsHY10Sg2MZSS4twf-92B4Sl6YfzuLN0t3j9x6BdESpFa_SA1vErxAg-CAEIIQgREgIldEZW6tN29IDS_WO2CPkZVW7djshZNow4iNc7gpGjGXp2BScvvGGU8XmSeclm7kHgmKX5kWX-MxbhzYjP6TmQ1ap4dK1Y2zy3f68ku3zQrWz9f8BoeCtu5Nidv9o2t7uE4R17eJbKUj6JEOSEckFkoaga3ca1rp0x4hFQxeETh7aKDashmNLMUPSfGO90g-6mkeD7kvp_iBdjDpOMd3j9EcJ-dMVCkYJBdMVCkcJhdMV-uVJ2rCtdGn5T7fTa683qx33z4HVtcn4xeisi-mX647rNhRb11dFv1iWXakb8BwWP8KLAex9hf1rkoNr4PAaOPoXnDQ3nwEAAP__9wcgdA== - -# These rows are all on the same node 1 (gateway). -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM parent1 JOIN child2 USING(pid1) WHERE pid1 IN (1, 11, 21, 31) ORDER BY pid1] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyMUE1LxDAUvPsrZE6KD9ws6iEg5LoirvQqPYTmbTfQTcrLqyhL_7u0OagHwVvmIzOZnJFy4Bd_4gL7BoOWMEruuJQsC1UNu_ABuyHENE660C2hy8KwZ2jUgWGxS8oysH_nhn1gecoxsdxuQAisPg5rwzMfFEtHPHn5dKMXTmpAaGJ__Kl0xziELQg1B4SBD3rlzM31oyze9QjCflJ76Qy5Lbk7cvfkHtDOhDzp92OL-p5hzUz_H9RwGXMq_GvAX8mbuSVw6Ll-WsmTdPwquVtrKtyv91YicNGqmgp2qUpzO198BQAA___Vk4P- - -# Parent-grandchild. -query T -SELECT url FROM [EXPLAIN (DISTSQL) - SELECT * FROM parent1 JOIN grandchild2 USING(pid1) WHERE - pid1 >= 11 AND pid1 <= 13 - OR pid1 >= 19 AND pid1 <= 21 - OR pid1 >= 31 AND pid1 <= 33 -] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzslE9r3DAQxe_9FGJOu3RKLDnpH8GCCqXgUrzF9Nb6IKyJI3AkI8mlJfi7F9sk8Yb0X3pIDnuz9ObHG_xGcwXOGyr1JUWQX4ADggCEM6gR-uAbitGHSVoKC_MdZIZgXT-k6bpGaHwgkFeQbOoIJBQuUehIf6OKtKHwwVtH4SQDBENJ2252-kjnCSYPe6nDD9XrQC5N9pPA3tsuUZBss1GcfR2yLG92jOdSyqL8_HrL9tVKoh3jb26kt-U7tqYEv5a2C7fC8hsNECrbXqxbaoN2prmwnRHX6qP0tfw_QOjoPG0Uf77dhamZ-RMQ9kOSTHFUAtUpqjNUL1G9gnpE8EO6zSkm3RJIPuIvsryNcHA-GApkDjKrx3vSLv0L35_kdwrvtxYH1vxBY8SPY_QEx0g8KEtxzPIJZvmH9V5R7L2L9FcvPptWBpmWlv0S_RAa-hR8M9ssx_3MzReGYlpUvhwKN0tzg2uY_xY-PYCzu7D4H-f8n-B6fPYzAAD__4MtKf0= - -query T -SELECT url FROM [EXPLAIN (DISTSQL) - SELECT * FROM grandchild2 JOIN parent1 USING(pid1) WHERE - pid1 >= 11 AND pid1 <= 13 - OR pid1 >= 19 AND pid1 <= 21 - OR pid1 >= 31 AND pid1 <= 33 -] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzslE-L2zAQxe_9FGJOCZ2ylr1LW0FAhVJwKU4xvbU-CGvWK_BKRpJLy-LvXmyzGyek_9JDc8jN0psfb_AbzQNYp6lQ9xRAfAYOCCkg3ECF0HlXUwjOj9JcmOtvIBIEY7s-jtcVQu08gXiAaGJLICC3kXxL6iuVpDT5985Y8lcJIGiKyrST0we6jTB6mHvlv8vGK6vrO9Pq0X4U2TvTRvKCrVaSsy99kmT1hvFMCJEXn16t2bZcSLRh_PWT9KZ4y5ZUyh-l9cwtsOxJA4TSNHfLtjrlyUb-qPyXnub_Bwgt3caV5M_XGz82M30CwraPgkmOMkWZobxGeYPyJVQDguvjLqcQVUMg-IA_yXIXYW-d1-RJ72VWDUfSLtwL111lB4XHrdM9a37SGPHLGJ3hGKUnZZlesjzDLH-z3ksKnbOB_ujFJ-PKIN3QvF-C631NH72rJ5v5uJ246UJTiLPK50NuJ2lqcAnzX8LXe3ByCKf_4pz9FVwNz34EAAD__zwZKfQ= - -query TTT -EXPLAIN SELECT * FROM grandchild2 JOIN parent1 USING(pid1) WHERE - pid1 >= 11 AND pid1 <= 13 - OR pid1 >= 19 AND pid1 <= 21 - OR pid1 >= 31 AND pid1 <= 33 ----- -render · · - └── merge-join · · - │ type inner - │ equality (pid1) = (pid1) - │ mergeJoinOrder +"(pid1=pid1)" - ├── scan · · - │ table grandchild2@primary - │ spans /11/#/56/1-/13/#/56/2 /19/#/56/1-/21/#/56/2 /31/#/56/1-/33/#/56/2 - │ filter ((pid1 <= 13) OR ((pid1 >= 19) AND (pid1 <= 21))) OR (pid1 >= 31) - └── scan · · -· table parent1@primary -· spans /11-/13/# /19-/21/# /31-/33/# -· parallel · -· filter ((pid1 <= 13) OR ((pid1 >= 19) AND (pid1 <= 21))) OR (pid1 >= 31) - -# Join on multiple interleaved columns with an overarching ancestor (parent1). -# Note there are 5 nodes because the filter cid2 >= 12 AND cid2 <= 14 -# creates a giant parent span which requires reading from all rows. -query T -SELECT url FROM [EXPLAIN (DISTSQL) - SELECT * FROM child2 JOIN grandchild2 ON - child2.pid1=grandchild2.pid1 - AND child2.cid2=grandchild2.cid2 - AND child2.cid3=grandchild2.cid3 - WHERE - child2.pid1 >= 5 AND child2.pid1 <= 7 - OR child2.cid2 >= 12 AND child2.cid2 <= 14 - OR gcid2 >= 49 AND gcid2 <= 51 -] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzslU2L2zAQhu_9FWJODpmylizvhyCgQimklKSE3lofjDWbNXitIMmlZcl_L7ZZ7zqkpU0gvfhovXp4JT-CeYLaGlrlj-RBfQUOCAIQEkCQgJBChrBztiDvrWu39MDS_AAVI5T1rgntcoZQWEegniCUoSJQsKwDuYry77Sh3JD7aMua3FUMCIZCXlZd4ye6D9B2lI-5-6mLh7Iy7Qk25fbhdbB1eW3GKftQVoGcYlEUac6-NXGc0IKlSqnl6svtjL1bvWdDUizYzXMyY-sNiyItBoiLA0oMFJcD9szJgZN3B5wcuJQPHCD0tweEiu5DpPkctZijTuazhWsvM1oChHUTFNMctUCdoJaoU9TXqG9Q36K-g2yPYJvw8vt9yLcEiu_xN4pezDS1dYYcmZGKbH9E4sq-tbur9GDj8WoxquYnvQ4-vY7LvQ5xkiIxKbqcouQkRcmk6HKK5EmK5KTo_4zBI4o25He29vRXUy5uxySZLfUz1dvGFfTZ2aKr6T_XHdctGPKhT3n_say7qDvga5j_Eb4ewfEhLM5pTs6B5Tlw-k9wtn_zKwAA__9OgRn6 - -query TTT -EXPLAIN - SELECT * FROM child2 JOIN grandchild2 ON - child2.pid1=grandchild2.pid1 - AND child2.cid2=grandchild2.cid2 - AND child2.cid3=grandchild2.cid3 - WHERE - child2.pid1 >= 5 AND child2.pid1 <= 7 - OR child2.cid2 >= 12 AND child2.cid2 <= 14 - OR gcid2 >= 49 AND gcid2 <= 51 ----- -merge-join · · - │ type inner - │ equality (pid1, cid2, cid3) = (pid1, cid2, cid3) - │ mergeJoinOrder +"(pid1=pid1)",+"(cid2=cid2)",+"(cid3=cid3)" - ├── scan · · - │ table child2@primary - │ spans ALL - └── scan · · -· table grandchild2@primary -· spans ALL -· filter (((pid1 >= 5) AND (pid1 <= 7)) OR ((cid2 >= 12) AND (cid2 <= 14))) OR ((gcid2 >= 49) AND (gcid2 <= 51)) - -# Aggregation over parent and child keys. -query T -SELECT url FROM [EXPLAIN (DISTSQL) - SELECT sum(parent1.pid1), sum(child1.cid1) FROM parent1 JOIN child1 USING(pid1) WHERE - pid1 >= 10 AND pid1 <= 39 -] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzUlVGrmzAUx9_3KS7n6V4WuEZtbysM3GPHto6OPQ0fgjm1gk0kiWOj-N1HlLVa2jisL74lOefv75z_CeYEQnL8yo6oIfoJFAj4QCAAAiEQWEBCoFQyRa2lsimtYMN_Q-QRyEVZGXucEEilQohOYHJTIESwEQZVgewX7pBxVJ9kLlC9WgRHw_KiIX7GvQHLyI9M_YlLplAYm2MDT9vKRE-x3e7y7NBNTA95wc-Bf4kkttW3JCBQ4N48x_T9ywdls5olEDgnB5DUBGRlLl1owzKEiNbk_zv9mGUKM2akel32u_v-48tzTC2zWfkvd4H-XeCFUwmpOCrkPUhSu0ui3tiagl5NdNS4_RmOe6DTjrdv04zbH2VtMENrBzrtWLuaxtpglLXhDK0d6LRj7Xoaa8NR1noztHag0461i-n__zeAO9SlFBqv3oHbX_bs-4A8w_Yx0bJSKX5TMm0w7Xbb6JoDjtq0UdpuNqIN2QK7YuoU-z0xvRb7bvIAOnCqQ7c4fKTuhVO8dJOXj5DfnOKVm7x6hLx2z8obuCbuS3bNTup3fwMAAP__hy1jzg== - -############### -# Outer joins # -############### - -# The schema/values for each table are as follows: -# Table: pkey: pkey values (same): values: -# outer_p1 (pid1) {1, 2, 3, ... 20} 100 + pkey -# outer_c1 (pid1, cid1, cid2) {2, 4, 6, ... 28} 200 + pkey -# outer_gc1 (pid1, cid1, cid2, gcid1) {4, 8, 12, ... 36} 300 + pkey - -# Split between 4 nodes based on pkey value (p): -# node 1: p - 1 mod 20 ∈ [1...5) -# node 2: p - 1 mod 20 ∈ [5...10) -# node 3: p - 1 mod 20 ∈ [10...15) -# node 4: p - 1 mod 20 ∈ [15...20) - -statement ok -CREATE TABLE outer_p1 ( - pid1 INT PRIMARY KEY, - pa1 INT -) - -statement ok -CREATE TABLE outer_c1 ( - pid1 INT, - cid1 INT, - cid2 INT, - ca1 INT, - PRIMARY KEY (pid1, cid1, cid2) -) INTERLEAVE IN PARENT outer_p1 (pid1) - -statement ok -CREATE TABLE outer_gc1 ( - pid1 INT, - cid1 INT, - cid2 INT, - gcid1 INT, - gca1 INT, - PRIMARY KEY (pid1, cid1, cid2, gcid1) -) INTERLEAVE IN PARENT outer_c1 (pid1, cid1, cid2) - -statement ok -ALTER TABLE outer_p1 SPLIT AT - SELECT i FROM generate_series(0, 40, 5) AS g(i) - -statement ok -ALTER TABLE outer_p1 EXPERIMENTAL_RELOCATE - SELECT ARRAY[(((i-3)/5)%4)::INT + 1], i FROM generate_series(3, 40, 5) AS g(i) - -query TTTI colnames -SELECT start_key, end_key, replicas, lease_holder FROM [SHOW RANGES FROM TABLE outer_p1] ----- -start_key end_key replicas lease_holder -NULL /0 {5} 5 -/0 /5 {1} 1 -/5 /10 {2} 2 -/10 /15 {3} 3 -/15 /20 {4} 4 -/20 /25 {1} 1 -/25 /30 {2} 2 -/30 /35 {3} 3 -/35 /40 {4} 4 -/40 NULL {5} 5 - -### Begin OUTER queries - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM outer_p1 FULL OUTER JOIN outer_c1 USING (pid1)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzclE2L2zAQhu_9FWJOu3TK-nMPhoIuDTgYp5jkVEwx1iQ1OJKR5NIQ_N-L7EOaNP1Y5-abpdEzr585zBmkEpRXRzKQfAEfEAJACAEhAoQYSoROq5qMUdo9mYBU_IDEQ2hk11t3XSLUShMkZ7CNbQkSSKUl3VL1nQqqBOm1aiTpFxchyFZNOyZmtLfgMppjpU9c9Zb01849KprDt99LtStNrQBhe-ooYatdlrHNbvupYOtNmgNCS3v7xP33zx-16zJ-upYkBemEpat8l2VP3EcePiPjATIeIeMxMv4K5YCgensxM7Y6ECT-gH-wv0j3UmlBmsSVZTncmU-uPqjuJb55eD86uIr2Zw0-WMjgg1n24ULsw1n20ULso1n23kLs_7FwCzKdkob-a6N4biWRONC0v4zqdU2ftarHmOm4GbnxQpCxU9WfDqkcS-MP_gr7f4Vfr2DvFg4eSQ4fgaNH4PhNcDm8-xkAAP__5oReVw== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM outer_gc1 FULL OUTER JOIN outer_c1 USING (pid1, cid1, cid2)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzklU2LnEAQhu_5FVKnHabC-rlJhEBfsuAiTpCdU5Agdq0R3G7pbkOWwf8eWiEzTiYf6xw9Vlc9_crTUB5ASE5Z-Uwa4i_gAYIPCAEghIAQQYHQKVmR1lLZkQlI-A-IXYRGdL2xxwVCJRVBfADTmJYghkQYUi2V3ymnkpN6kI0gdWsjOJmyacfElJ4M2IzmuVQvTPaG1Ne6slN5U3_7vTe2prsA4fGlo9i536eps9s_fsqdh12SAUJLT-aGeVtk_hZZsN18VPa22ZGNIMFJxU5yn-3T9IZ5yO42-Kv0kb07KQNk7zfosBAdFqHDPkAxIMjeHCVoU9YEsTfgH0Qd_fRCKk6K-ExIMVxQmcm3sruNzgYvR_uzaG_RG_nreyN_kahgfaKCRaLC9YkKF4ly1yfqH_-RnHQnhab_2n6uXZ_Ea5p2rZa9quizktUYM5W7kRsPOGkzdb2pSMTYGj_wFPb-Ct_NYPcc9q9JDq6Bw2vg6FVwMbz5GQAA__8alY8h - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM outer_c1 LEFT OUTER JOIN outer_p1 USING (pid1) WHERE pid1 >= 0 AND pid1 < 40] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzUlE-Lo0AQxe_7KeSddtlaYqu7B2HBSwYMIQ6SOQ0yiF3JCMaW7naYEPzug3rIJJP5l5xys_v1q1e_gnKHWkle5Bs2CO8hQPBA8EEIkBEarQo2RuleHh_H8hmhSyjrprX9dUYolGaEO9jSVowQcW1ZV5w_ccq5ZD1TZc164oIg2eZlNaTNeWXRZ5SbXG8j1VrWD0XfQ1quH99KTS-NpUBYbhsOnfn0Zukkd8tp6sySeAFCxSv7MxK_f_3XfZXhE4SktaETCYo8inyKAor-IesIqrV7DmPzNSMUHb3Dukdsa6Ula5YHTFl3YhoL9Uc1k-Do4elo7yBanDVmcZVj9s5i9a6S1T-L1b9K1k9-FSmbRtWGv7Qdbr9eLNc87qJRrS74VqtiiBmPyeAbLiQbO6piPMT1IA0NvjaLD81_D8zusdm7JNm_xBx8y5x1P14CAAD___ca6HA= - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM outer_p1 RIGHT OUTER JOIN outer_gc1 USING (pid1) WHERE pid1 >= 1 AND pid1 <= 20] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzUlE9r20AQxe_9FOKdWjrF-ucWBIW9lFamWEW4pyCC0I4VgawVu6sQY_Tdg6SDY8f5Z5980-7bN29-A6MdGiV5mW_YILqBB4IPQgBCiIzQalWwMUoP8vQ4lg-IXELVtJ0drjNCoTQj2sFWtmZEiBvLuub8nlPOJeuFqhrWMxcEyTav6jHtL68thoxqk-utUJ1lfdsOPaRVefdcKotBm2qBsNq2HDlp_PvPykn-r36lziKJlyDUvLafhff1y0891Bk_QUg6GzkiIOGTCEnMSXwn8QNZT1Cd3cMYm5eMyOvpBeA9Z9coLVmzPADL-hMjWapvqp2FRw9PR_sH0d5Zs_aud9b-WcD-9QIHZwEH1wv8xu8jZdOqxvC7lsUdto1lydNqGtXpgv9pVYwx0zEZfeOFZGMn1ZsOcTNKY4NPzd6r5vmB2T02-5ckB5eYww-Zs_7TYwAAAP__Vjbt9A== - -######################## -# Non-interleaved joins # -######################## - -# Join on siblings uses merge joiner. -# TODO(richardwu): Update this once sibling joins are implemented. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM child1 JOIN child2 USING(pid1)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8ll9vmzwUxu_fTxGd92ZTjYzNnyZIk7jtpLVTt7uJCxq8BCnFyBBpVZXvPhG6tSXgY8-CO5Lwy_Hj87t4nqGShbjNH0UDyQ9gQIADgQAIhEAggoxAreRWNI1U3Ss9cFP8gsQnUFb1se2-zghspRKQPENbtgcBCXzPHw7iXuSFUNQHAoVo8_JwHlOr8jFXT-l2Xx6Kbua3Oq-aZOVRTv-nUUwZDXn_vKaM8lVeFatgJdu9UA1kJwLy2L5Mfh348LTa583-_aiUQXbKCDRtvhOQsBP5twSRJgFfMgGfTPD6P1IVQoli-D9X3WCjt0Yu44tQO_FZlpVQlA32eRA_2w8pu_r4SZW7ff8IBO6ObbJKGUk5SQOSRiSNSXo9SP-aLDBIdqzGTj164FvpyZqyaPDm-Ozw3Wxm7gUzM3tCC4-G3XPUfR_OZblFmtjM8mXT8Mk0CxrP5jeem--JG1r3Zh8ejf8uLe6fu6XFc1lnkeba0LpF0_DJNAtax-e3LjDfU2Bo3fhqPLqeyzWLDGtD1xbIwCczLGhYML9hofl2QkPD1h5l_p8NRf7Lh25FzJ9LMosYG0PJlonBJ2Ms6Fm4bGMcOc69aGpZNcKoD_pdIFHsRH9NjTyqrfiq5PY8pv94d-bOjaQQTdv_yvsPN1X_U3dAczh2gTcuMHM6N4v0NLO4Mm4Hxy7wxgVmTuceXNkFzYe0_5YO9PcdaGH2_s78IR26CK6HEcH1MCK4HsYER2hE8MhFcD2MCK6HEcH1MCY4QiOCxy6CX7soqocRRfUwoqgexhRFaETRtYuiehhRVA8jiuphTFGERhTduCjKnHoCQiOSIjRiKUJjmmI41hXcyoJbW3CrC459wa0wMKfGwC4qg5WtehqzVU9jtupp1FYEx2y1KUuXO7NpS7Y0ZqtVX7LGMVsvyoPW1uz03-8AAAD__6i7nUQ= - -# Join on non-interleaved tables (with key) uses merge joiner. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM parent1 JOIN parent2 ON pid1=pid2] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8lV9r2zAUxd_3Kczdy0ZlZMl_6hoGfu1g7ej2NvzgxneJIbWM7MBKyXcfjrslMYmugnDepFg_XZ1zLrlv0KgKH8oX7CD7BQIYSGAQAoMIGMRQMGi1WmDXKT0cGYH76g9kAYO6aTf98HPBYKE0QvYGfd2vETL4WT6v8QnLCjUPgEGFfVmvd2VaXb-U-jVvS41NPxT90ZZNl3k-l_wjjxMueCTHdcoFl17ZVF7oqX6FuoNiy0Bt-vfS-4rPr96q7FbHtXIBxbZg0PXlEiETW3ZGwv4epSvUWE3vuRkK709tmlPndrWmVnxDvcSvqm5Q8-T42jX-7j_l4ubzF10vV-MSGDxu-szLBcsly0OWRxPNez2hhZ4LXvqgfNVyISYnT9eOjmoL-3YQlu1wpht8Hg3rePg9mqs1xPVb43bO1pD28UjbeA5i8HnyP6tkXA9ZJXPFI68fTzpnPKF9PKFtPKcT8Xk6Vyjh9UO5mzOUyD6UyDaU1Oci-BdMHLxvhmREMFcuF-iITTrkwaR2ep48-7wrtY0IrjWGTzzkCbtWNR1aDdlgkILVEkd3OrXRC_yu1WJXZtw-7rjdzKqw68ev75v7Zvw0PNAejlzgxAVOXWBBiBZTOjikpRmWRlgc08GUDl3CMsNEWGaYCMsME2ERmgnRkUtYsYvdZpiw2wwTdpthwm5CMyE6cbH71sVuM0zYbYYJu80wYTehmRCduth952K3GSbsNsOE3WaYsJvQTP3zXzIs5YV05EQnTnTqRAtK-GUTs9h--BsAAP__Ppb2Og== - -# Join on non-interleaved column uses hash joiner. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM parent1 JOIN child1 ON pa1 = ca1] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8lr1u2zwUhvfvKozzLQlAgyL1E1tAAY1Nh6RIuxUaFIuNBTiiQNFAg8D3XshK69hWeMgS9CbZfnz48jzD-wqtrMVd9Sx6yH8AAwIcCMRAIAECKZQEOiVXou-lGn4yArf1L8gjAk3bbfXwcUlgJZWA_BV0ozcCcvhePW7Eg6hqoWgEBGqhq2azH9Op5rlSL0VXKdHqYei3rmr7fDannP5P04wymvDxeUEZ5bOqrWfxTOq1UD2UOwJyq99GHyY-vszWVb8-nlVwKHclgV5XTwJytiP_FiGdjrBaN5s6cIL4KAH_MMHhf7atVLVQoj76p3IgsZ9MXMPnql9_kU0rFGUnm9yIn_qq4NefVPO01ldFfA0E7rc6nxWMFJwUMSkSUqQniQ9pYo80E0e9k3PZUZae5p6cnRzNZvYuMEudP3BhTpPhOR0-T0Kp7RAns1M7dBqT5uzCmrOgmnP73XBb1d4tYU6zv5vKxudhU1ko1Rzi3FiqFjiNSTV-YdV4UNVi-93EtqpN72NOF6EEcwixsBQsSAaTVvGFtYqDapXYbySx1Woxpyz6s5Y0ensZ9sKiUGY55FhamhUqhkmu5MJyJRdrgRMHeRB9J9teWHW8aIgi6icxXk0vt2olviq52o8ZX-_33L5k1KLX47d8fLltx6-GA9rDmQ-89IGZ17lZaqaZw5VxNzjzgZc-MPM698mVndH8lI7e07H5vmMjzI7vLDqlEx_BzTAiuBlGBDfDmOAIjQie-ghuhhHBzTAiuBnGBEdoRPDMR_AbH0XNMKKoGUYUNcOYogiNKLrwUdQMI4qaYURRM4wpitCIoksfRZlXT0BoRFKERixFaExTDMe6gl9Z8GsLfnXBsy_4FQbm1RjYWWVwstVMY7aaacxWM43aiuCYrS5l6XxnLm3JlcZsdepLzjhm61l5MNpa7v77HQAA___JMpkW - -# Prefix join on interleaved columns uses merge joiner. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM child2 JOIN grandchild2 USING(pid1, cid2)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzEll9r2zwUh-_fTxHOe7NRBVnynyaGgW87WDu63Y1cuLGWGFLLyA6slHz34bhbGsfWkSZi31mJHx_9dB7BeYVCZuI-fRYVxD-AAQEOBHwgEACBEFYESiXXoqqkal5pgbvsF8Qegbwo93Xz84rAWioB8SvUeb0TEMP39GknHkWaCUU9IJCJOs13xzKlyp9T9ZKst_kua-p9K9Oiimdzyun_NIwoowFvnxeUUT5Li2zmz2S9FaqC1YGA3NdvlU8Fn15m27TanpdKGEk4rA4rAlWdbgTE7ED-LUTYH2Kj0iKbJAkfTHL6lFSZUCLrfuqGJPymqW_8Zs_hfBFqIz7LvBCKsk6Ld-Jn_eGN_vhJ5ZvtaQkEHvZ1PDsmIolPkoAktyRZkGTZOZNTWN8g7L7oC9G793s5lyVlYefN_trBWW1mrgwz835AljkNmuew-T244h2wCBRZ3IHRU_HBVBPcBzbqfeDmLeSGTr7r0pxGf1sZtc9NK6MrOmkR6NbGybFT8cFUEzjJR3XSN2-hb-hkf8PmdHFFEy1iLGxMHCcLH8wygX_-qP4F5o0LDP1bzCnz_vQt9N4WTeOYd0UFLZIsbRQcLQ4fjDOBhcFkk2rPzh5FVcqiEkZzqNdkE9lGtCdXyb1ai69Kro9l2uXDkTuOP5mo6vZf3i7uivavZoPmcOQCL11g5rRvFuppZnFk3A6OXOClC8yc9t05sguad2nvPe3rz9vXwuz8zLwuHbgIrocRwfUwIrgexgRHaETw0EVwPYwIrocRwfUwJjhCI4JHLoLfuiiqhxFF9TCiqB7GFEVoRNGFi6J6GFFUDyOK6mFMUYRGFF26KMqc5gSERiRFaMRShMY0xXBsVnAbFtymBbdxwXFecBsYmNPEwC5GBitb9TRmq57GbNXTqK0IjtlqMyxd9sxmWrKlMVut5iVrHLP1YnjQ2ro6_Pc7AAD__9fkwKM= - -# Subset join on interleaved columns uses hash joiner. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM child2 JOIN grandchild2 USING(pid1, cid3)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzElk9vmzAYxu_7FNG7yyY5MjZ_miBN4rju0E7dbhMHGrwEKcXIJtKqKt99Atq1IeAXzwq94YQf9uP3d3ieoJS5uMkehIb4FzAgwIGADwQCIBBCSqBSciO0lqp5pQOu8z8QewSKsjrUzc8pgY1UAuInqIt6LyCGn9n9XtyJLBeKekAgF3VW7NttKlU8ZOox2eyKfd7s96PKSh0vlpTTjzSMKKMB755XlFG-yMp84S9kvRNKQ3okIA_1886vG94_LnaZ3p1ulTCS-JAeUwK6zrYCYnYk_xciHA6xVVmZv0sSPprk9VOHUqpcKJGffCxtSOyVgev4mundN1mUQlHWm-le_K4_tWf8_EUV293LAgjcHup40a5IwkkSkCQiyYok694FvCbzHZINHPtGLmVFWdi_g8G9g5O92XQ_2DTJR8xY0qB5DpvfgwsKbxEoshB-9lR8NNUc8rPZ5OfT58UnCvhmJEsa_Ztb1D03c4suKKBFoCsbAedOxUdTzSEgn01Af_q8_IkCDk9nSVcX1M4ixspGu3my8NEsc8jmzyZbMH1KwUTZVkvKvJchhd7zopkS8y7om0WStY1vs8Xho3HmUC54l3Y5cKg7oStZajGpO3pNLJFvRXdNWh7URnxXctNu0y1vW66tLLnQdfcv7xbXZfdXc8DpcOQCr11g5nRuFpppZnFl3A6OXOC1C8yczt27sjOa92nvLe2b79s3wuz0zrw-HbgIboYRwc0wIrgZxgRHaETw0EVwM4wIboYRwc0wJjhCI4JHLoJfuShqhhFFzTCiqBnGFEVoRNGVi6JmGFHUDCOKmmFMUYRGFF27KMqcegJCI5IiNGIpQmOaYjjWFdzKgltbcKsLjn3BrTAwp8bAziqDla1mGrPVTGO2mmnUVgTHbLUpS-czs2lLtjRmq1VfssYxW8_Kg9HW9PjhbwAAAP__WEKzfg== - -# Sort node in between join and child nodes produces hash joiner. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM parent1 JOIN (SELECT * FROM child1 ORDER BY cid1) USING(pid1)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8ls1um0oUgPf3KaxzN_eqYw0z_BgjVWLZdJFUSXcVC2KmMZLDoAFLjSK_e4WJmxrMnJmM8A5sf8z5-Y4Pr1DJQtzmz6KB5AcwIMCBgA8EAiAQQkagVnIjmkaq7ic9cFP8gsQjUFb1vu0-zghspBKQvEJbtjsBCXzPH3fiXuSFUNQDAoVo83J3PKZW5XOuXtI6V6Jqu0Mf6rxqksWScvovDSPKaMD765gyyhd5VSz8hWy3QjWQHQjIfft29PuJjy-Lbd5sz89KGWSHjEDT5k8CEnYgH0shvJzCZlvuCscM3qPjNtE9SNUKRdmguCn_5FQhfzKG9-fsK6kKoURx9qSsI7GfXEjkS95sv8qy6pIZlHknfrb_pez_z6p82h6vgMDdvk0WKSMpJ2lA0nCynIFDKhfivJVLWVPuDZO-eHZ4djYzF40ZzsqEaEsadNdh93kw19xYpBOZzY1rNlMzhER6miE25wyxK89QNN8McfPGc1OP_-rwkkZ_NIj6606DaC6PLdJZGXrsmM2Ux0ikJ4_5nB7zK3u8ms9j37zxvqnHl5u9pPFc9lokERva-6EcppxF4js568_prH9lZ-P5nA3M2x2YOhsvKfNOPQ-9t5uu6cybS1uLPNaG2n40jSlzkRBP5gZzmhtc2dz1dd68L0RxL5paVo0weq_2ujxE8ST6ujRyrzbim5Kb4zH97d2RO754FaJp-2_9_uam6r_qAjSHYxeYcSc6cqG5p6fZkPbO6DPYG8LcouDcDo5d4EHBbenIhR4UfET72oIH-m4F-m4xfbtCl_nQw8h86GFsPhAamQ89jc1HpK34Sl_wlct86GFkPvQwNh8IjcyHnsbmI3aZj7WL4XoYMVwPY4YjNGK4nkY3wGiBnFWcIX8qbLRBbCRHaMRyhMY0x3DEcwTHRGejPWJjOhvtERvVERpxHaEx2TEcsR3BUd31O5SFiO42S3Tcc5stakujulvtUVsc1V2_STHdbVapLY3pbrVMrXFMd6t1Osb1-5StEd1tNuq45zYr1ZZGdbdaqrY4pjvXb9Wh7tnhn98BAAD__6l0mnQ= - -query TTT -EXPLAIN SELECT * FROM parent1 JOIN (SELECT * FROM child1 ORDER BY cid1) USING (pid1) ----- -render · · - └── hash-join · · - │ type inner - │ equality (pid1) = (pid1) - ├── scan · · - │ table parent1@primary - │ spans ALL - └── sort · · - │ order +cid1 - └── scan · · -· table child1@primary -· spans ALL - -# Multi-table staggered join uses interleaved joiner on the bottom join -# and a merge joiner. -query T -SELECT url FROM[EXPLAIN (DISTSQL) - SELECT * FROM grandchild1 - JOIN child1 USING (pid1, cid1) - JOIN parent1 USING (pid1) -ORDER BY pid1 -] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzclstu2zoQhvfnKYw5m3MQGhSpS2wBBbRN0SZF2l3hhWJNbAGOZFB00SDwuxe0nES-hCOZUA14p9snDoffAP8LFGWGt-kTVhD_BAEMJDDwgUEADEKYMFiqcopVVSrzSQ3cZL8h9hjkxXKlzeMJg2mpEOIX0LleIMRwU2hUC0x_4T2mGarPZV6g4h4wyFCn-WKz4hd81GDWyJ9S9ZzMVFpk03m-yEwp9_ls3nz79qL-FzBY4KP-LxFXLJFX_39S5vu3W2Bwt9LxIBEskSzxWRKw5BomawblSm8Lf6_34XkwT6v5bnmJgMl6wqDS6QwhFmvWvgE_0ofFdu883P3t64aWqcJCmx19X6ZFFQ-GXPJ_eRhxwQNZX4-44HKQFtnAH5R6jqpy2oL8cAvv_ylVhgqz_f9cmYVbfXWkG19RzXDrgNiT4PUUGyd4_PTCwwN835nvtrMjNd-Ww3LJxe7hfbR8sLO8OGk4xOUMB9GA5nBELYfjg9kY8sBch-Z50NegiPMMiuh_UORJpsrLMZVoQNPU67amNowc8uhN26i-NtpGfZkqz2Oq7N9U_yRT_csxlWhA09RRW1OPyznko7789M_jp9-_n8FJfgaX4yfRgKaf47Z-joZceK-Oht72xkgqvL4UDc6jaPB3U_GRcu6xWpZFha0Cr2c2hNkM6zZV5UpN8Zsqp5tl6tu7DbeJTxlWun4r65ubon5lCmwPRy7w2AUWTnWL0E6LDi2T3eDIBR67wMKp7r2WHdByn_aatG_vt2-FxW7PvH06cBHcDhOC22FCcDtMCU7QhOChi-B2mBDcDhOC22FKcIImBI9cBL92UdQOE4raYUJRO0wpStCEoiMXRe0woagdJhS1w5SiBE0oOnZRVDjlBIImJCVowlKCpjSlcCoruIUFt7TgFhcc84JbYBBOiUEcRIZOttppylY7Tdlqp0lbCZyytUtYOjyzLmmpK03Z2ikvdcYpWw_Cg9XWyfqfPwEAAP__suwChg== - -# Multi-table join with parent1 and child1 at the bottom uses interleaved -# joiner but induces a hash joiner on the higher join. -query T -SELECT url FROM [EXPLAIN (DISTSQL) - SELECT * FROM parent1 - JOIN child1 USING (pid1) - JOIN grandchild1 USING (pid1, cid1) -] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzUll9v2jwUh-_fT8F7drNpRo6dP4VIk3K5TlU7ddvVlIuUuBCJJsgx06qK7z6Z0JIA9cFYROKO4DzxOfZzpN8LlFUubrMnUUP8GxgQ4EDABwIBEAghJbCQ1UTUdSX1Kw1wnf-F2CNQlIul0n-nBCaVFBC_gCrUXEAM16USci6yP-JeZLmQ36qiFJJ6QCAXKivm6x1vxKMCvUfxlMnnZJFJUSpdxn0xnbVXJrNinuuF5jtAYC4e1ceEff70Rep31z-BwN1SxYOEkYSTJCBJCOmKQLVUm0q3BT48D2ZZPevWo0Ef0lVKoFbZVEDMVuT4pn9mD_NNvzTsfvm1kanMyvytmx-LrKzjwZBy-oGGEWU04JTT_29_3dzQcEQZ5YOszAf-oFIzIWv7bninG_5uN9tPLctK5kKKvPOxVJPYKweO5GtWzzZ3z3Yuf3ODJPG3d0gS3rlF__Uir0gy2ul-25bv0NaBmm-rYbWgLNw9gIN7B5292UlTwS57KpCm21MRWUyFYSiGNNBroV4LzjghrOcJYf1MCD_JUn7ZliJNty29srG0ZeKQRm_KRjRqKxud0VLes6W8H0v9kyz1L9tSpOm2pSMbS98Xc0hHZ3TT79lNvx83g5PcDC7bTaTptptjGzdHQ8q8Vz9DTz-0BGXeGfUMetYz6D8CH6joXtSLqqzFUQHX0z2JfCqaM6qrpZyI77KarLdpHu_W3Dov5aJWzSpvHq7LZkkXeDwcucBjF5g51c1CM80sjozbwZELPHaBmVPdO0e2R_Nd2mvTvvm8fSPMumfm7dKBi-BmGBHcDCOCm2FMcIRGBA9dBDfDiOBmGBHcDGOCIzQieOQi-JWLomYYUdQMI4qaYUxRhEYUHbkoaoYRRc0woqgZxhRFaETRsYuizCknIDQiKUIjliI0pimGY1nBLSy4pQW3uOCYF9wCA3NKDGwvMljZaqYxW800ZquZRm1FcMxWm7C0f2c2acmWxmy1ykvWOGbrXngw2pqu_vsXAAD__11MBmw= diff --git a/pkg/sql/logictest/testdata/planner_test/distsql_join b/pkg/sql/logictest/testdata/planner_test/distsql_join deleted file mode 100644 index 2897f2c3e2dc..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/distsql_join +++ /dev/null @@ -1,209 +0,0 @@ -# LogicTest: 5node-dist - -statement ok -CREATE TABLE data (a INT, b INT, c INT, d INT, PRIMARY KEY (a, b, c, d)) - -# Split into ten parts. -statement ok -ALTER TABLE data SPLIT AT SELECT i FROM generate_series(1, 9) AS g(i) - -# Relocate the ten parts to the five nodes. -statement ok -ALTER TABLE data EXPERIMENTAL_RELOCATE - SELECT ARRAY[i%5+1], i FROM generate_series(0, 9) AS g(i) - -# Verify data placement. -query TTTI colnames -SELECT start_key, end_key, replicas, lease_holder from [SHOW RANGES FROM TABLE data] ----- -start_key end_key replicas lease_holder -NULL /1 {1} 1 -/1 /2 {2} 2 -/2 /3 {3} 3 -/3 /4 {4} 4 -/4 /5 {5} 5 -/5 /6 {1} 1 -/6 /7 {2} 2 -/7 /8 {3} 3 -/8 /9 {4} 4 -/9 NULL {5} 5 - -# ensure merge joins are planned when there's orderings. -query TTTTT -EXPLAIN (VERBOSE) (SELECT * FROM (SELECT a,b FROM data) NATURAL JOIN (SELECT a,b FROM data AS data2)) ----- -render · · (a, b) a!=NULL; b!=NULL - │ render 0 a · · - │ render 1 b · · - └── merge-join · · (a, b, a[omitted], b[omitted]) a=a; b=b; a!=NULL; b!=NULL - │ type inner · · - │ equality (a, b) = (a, b) · · - │ mergeJoinOrder +"(a=a)",+"(b=b)" · · - ├── render · · (a, b) a!=NULL; b!=NULL; +a,+b - │ │ render 0 test.public.data.a · · - │ │ render 1 test.public.data.b · · - │ └── scan · · (a, b, c[omitted], d[omitted]) a!=NULL; b!=NULL; c!=NULL; d!=NULL; key(a,b,c,d); +a,+b - │ table data@primary · · - │ spans ALL · · - └── render · · (a, b) a!=NULL; b!=NULL; +a,+b - │ render 0 data2.a · · - │ render 1 data2.b · · - └── scan · · (a, b, c[omitted], d[omitted]) a!=NULL; b!=NULL; c!=NULL; d!=NULL; key(a,b,c,d); +a,+b -· table data@primary · · -· spans ALL · · - - -# ORDER BY on the mergeJoinOrder columns should not require a SORT node -query TTTTT -EXPLAIN (VERBOSE) (SELECT * FROM (SELECT a,b FROM data AS data1) JOIN (SELECT c,d FROM data AS data2 ORDER BY c,d) ON a=c AND b=d ORDER BY c,d) ----- -merge-join · · (a, b, c, d) a=c; b=d; a!=NULL; b!=NULL; +a,+b - │ type inner · · - │ equality (a, b) = (c, d) · · - │ mergeJoinOrder +"(a=c)",+"(b=d)" · · - ├── render · · (a, b) a!=NULL; b!=NULL; +a,+b - │ │ render 0 data1.a · · - │ │ render 1 data1.b · · - │ └── scan · · (a, b, c[omitted], d[omitted]) a!=NULL; b!=NULL; c!=NULL; d!=NULL; key(a,b,c,d); +a,+b - │ table data@primary · · - │ spans ALL · · - └── sort · · (c, d) c!=NULL; d!=NULL; +c,+d - │ order +c,+d · · - └── render · · (c, d) c!=NULL; d!=NULL - │ render 0 data2.c · · - │ render 1 data2.d · · - └── scan · · (a[omitted], b[omitted], c, d) a!=NULL; b!=NULL; c!=NULL; d!=NULL; key(a,b,c,d) -· table data@primary · · -· spans ALL · · - -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT * FROM (SELECT a,b FROM data AS data1) JOIN (SELECT c,d FROM data AS data2 ORDER BY c,d) ON a=c AND b=d ORDER BY c,d)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzEll9ro0wUxu_fTyHn6l06ojNq_ggLue3Ctku7d0subJxNhNSRcQJbSr_7ktgQ1HaOZwcmlzb5xcczv9PHV6hVKe-KZ9lC_gs4MBDAIAEGKTDIYM2g0Woj21bp41c64Lb8A3nMoKqbgzn-ec1go7SE_BVMZfYScvhZPO3lgyxKqaMYGJTSFNX-dJtGV8-FflmVhSmAwWNT1G0ehBEPiroMeKDMTmpgcH8webDibCVg_cZAHcz77S53eXoJdkW76__-GVkzaE2xlZDzN_ZvyTOX5AlbpYPkl0iCEulRaSN1xOPhg96wlbhxnU7yaZTLTyldSi3LT-8_-ZsfPN13qbfym6rq4yMOJr6Xv83_7_SXr7ra7i6XPUWYfdyp-zN-kPxOhaqJRP9YPouQ9SLw6RLyKRJGPIyEpwUiZJ-5ZSesEBLqvELcwwrx667QzMcKiekOiEkOiDBKPPlLyD53y07wFwl19ld48Fdc19-5D3-T6Q4kkxxIwij15C8h-8ItO8FfJNTZ38SDv8l1_V348Ded7kA6yYE0jDJP_hKyL92yE_xFQp39TT34m17X36XvV_APAj3ItlF1Kye9WcfHR5LlVnYDa9VBb-QPrTan23SX9yfu9G5WytZ0nybdxW3dfXQMOB1euMBcONEzF1rEdpoP6bhH9-B4CAvCwAUNXrjAg4FT6ZkLPRj4iE6sA0_tp5XaT4vbjytz2Q87jOyHHcb2A6GR_bDT2H7MrBOf2wc-d9kPO4zshx3G9gOhkf2w09h-LFz2Y-liuB1GDLfDmOEIjRhup9EGGBVIb-Ic-afCRw1CkRyhEcsRGtMcwxHPERwTnY96hGI6H_UIRXWERlxHaEx2DEdsR3BUd3uH8gzRnVKi4zOntCiVRnUn9SgVR3W3NymmO6VKqTSmO6lMyTimO6lOx7i9T_kS0Z3SqOMzp1QqlUZ1J5UqFcd0F_ZWHeq-fvvvbwAAAP__kEaZyA== - -# ORDER BY on the columns equal to the mergeJoinOrder columns should not -# require a terminal SORT node. -query TTTTT -EXPLAIN (VERBOSE) (SELECT * FROM (SELECT a,b FROM data AS data1) JOIN (SELECT c,d FROM data AS data2 ORDER BY c,d) ON a=c AND b=d ORDER BY a,b) ----- -merge-join · · (a, b, c, d) a=c; b=d; a!=NULL; b!=NULL; +a,+b - │ type inner · · - │ equality (a, b) = (c, d) · · - │ mergeJoinOrder +"(a=c)",+"(b=d)" · · - ├── render · · (a, b) a!=NULL; b!=NULL; +a,+b - │ │ render 0 data1.a · · - │ │ render 1 data1.b · · - │ └── scan · · (a, b, c[omitted], d[omitted]) a!=NULL; b!=NULL; c!=NULL; d!=NULL; key(a,b,c,d); +a,+b - │ table data@primary · · - │ spans ALL · · - └── sort · · (c, d) c!=NULL; d!=NULL; +c,+d - │ order +c,+d · · - └── render · · (c, d) c!=NULL; d!=NULL - │ render 0 data2.c · · - │ render 1 data2.d · · - └── scan · · (a[omitted], b[omitted], c, d) a!=NULL; b!=NULL; c!=NULL; d!=NULL; key(a,b,c,d) -· table data@primary · · -· spans ALL · · - -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT * FROM (SELECT a,b FROM data AS data1) JOIN (SELECT c,d FROM data AS data2 ORDER BY c,d) ON a=c AND b=d ORDER BY a,b)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzEll9ro0wUxu_fTyHn6l06ojNq_ggLue3Ctku7d0subJxNhNSRcQJbSr_7ktgQ1HaOZwcmlzb5xcczv9PHV6hVKe-KZ9lC_gs4MBDAIAEGKTDIYM2g0Woj21bp41c64Lb8A3nMoKqbgzn-ec1go7SE_BVMZfYScvhZPO3lgyxKqaMYGJTSFNX-dJtGV8-FflmVhSmAwWNT1G0ehBEPiroMeKDMTmpgcH8webDibCVg_cZAHcz77S53eXoJdkW76__-GVkzaE2xlZDzN_ZvyTOX5AlbpYPkl0iCEulRaSN1xOPhg96wlbhxnU7yaZTLTyldSi3LT-8_-ZsfPN13qbfym6rq4yMOJr6Xv83_7_SXr7ra7i6XPUWYfdyp-zN-kPxOhaqJRP9YPouQ9SLw6RLyKRJGPIyEpwUiZJ-5ZSesEBLqvELcwwrx667QzMcKiekOiEkOiDBKPPlLyD53y07wFwl19ld48Fdc19-5D3-T6Q4kkxxIwij15C8h-8ItO8FfJNTZ38SDv8l1_V348Ded7kA6yYE0jDJP_hKyL92yE_xFQp39TT34m17X36XvV_APAj3ItlF1Kye9WcfHR5LlVnYDa9VBb-QPrTan23SX9yfu9G5WytZ0nybdxW3dfXQMOB1euMBcONEzF1rEdpoP6bhH9-B4CAvCwAUNXrjAg4FT6ZkLPRj4iE6sA0_tp5XaT4vbjytz2Q87jOyHHcb2A6GR_bDT2H7MrBOf2wc-d9kPO4zshx3G9gOhkf2w09h-LFz2Y-liuB1GDLfDmOEIjRhup9EGGBVIb-Ic-afCRw1CkRyhEcsRGtMcwxHPERwTnY96hGI6H_UIRXWERlxHaEx2DEdsR3BUd3uH8gzRnVKi4zOntCiVRnUn9SgVR3W3NymmO6VKqTSmO6lMyTimO6lOx7i9T_kS0Z3SqOMzp1QqlUZ1J5UqFcd0F_ZWHeq-fvvvbwAAAP__kEaZyA== - -# ORDER BY on a different ordering should require a terminal SORT NODE. -query TTTTT -EXPLAIN (VERBOSE) (SELECT * FROM (SELECT a,b FROM data AS data1) JOIN (SELECT c,d FROM data AS data2 ORDER BY c,d) ON a=c AND b=d ORDER BY b,a) ----- -sort · · (a, b, c, d) a=c; b=d; a!=NULL; b!=NULL; +b,+a - │ order +b,+a · · - └── merge-join · · (a, b, c, d) a=c; b=d; a!=NULL; b!=NULL - │ type inner · · - │ equality (a, b) = (c, d) · · - │ mergeJoinOrder +"(a=c)",+"(b=d)" · · - ├── render · · (a, b) a!=NULL; b!=NULL; +a,+b - │ │ render 0 data1.a · · - │ │ render 1 data1.b · · - │ └── scan · · (a, b, c[omitted], d[omitted]) a!=NULL; b!=NULL; c!=NULL; d!=NULL; key(a,b,c,d); +a,+b - │ table data@primary · · - │ spans ALL · · - └── sort · · (c, d) c!=NULL; d!=NULL; +c,+d - │ order +c,+d · · - └── render · · (c, d) c!=NULL; d!=NULL - │ render 0 data2.c · · - │ render 1 data2.d · · - └── scan · · (a[omitted], b[omitted], c, d) a!=NULL; b!=NULL; c!=NULL; d!=NULL; key(a,b,c,d) -· table data@primary · · -· spans ALL · · - -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT * FROM (SELECT a,b FROM data AS data1) JOIN (SELECT c,d FROM data AS data2 ORDER BY c,d) ON a=c AND b=d ORDER BY b,a)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzEl0Fv2k4Qxe__T4Hm9K-yyN6xTcBSJa6p1KRKeqs4OHgLSMSL1kZqFOW7V-BQZBN2dhlpORJ4nue38_OL36DSpbovXlQN-S-QIABBQAICUhCQwUzAxui5qmttdj9pBXflH8hjAatqs212f54JmGujIH-DZtWsFeTws3heq0dVlMpEMQgoVVOs1vsxG7N6KczrtCyaAgQ8bYqqzgfDSA6KqhzIgW6WyoCAh22TD6ZSTBFm7wL0tvkYd5zy_DpYFvWye_2DZCagboqFgly-i8ucZxzniZimPedHS-hj6UmbRplIxv0bvRFTvOGmk5y1cryUNqUyqjw73_mXn9zdd2UW6pteVbtb7CW-Vr-b_z_UX76a1WJ5_NhZEWGPO70gbuzHjTdiKvtxH2dkF-f478KfmLnXQ72JsJvLOQujjgXpvujSZdEjOYwwEKQe3kc87x6YEqYOmMoAmMrrYjoKgalb3NiP2wtTdN8zdNozHEZJIEY8vN_yvHswQpg6MIIBGMHrMnIbghG3uLEftxcjifueJU57lgyjNBAjHt7HPO8ejBCmDowkARhJrsvIOAQjbnFjP24vRlL3PUud9iwdRlkgRjy8T3jePRghTB0YSQMwkl6XkUkIRtzixn7cF78SfTLjUdUbXdXK6U0n3sWmyoVqD6XWWzNXP4ye78e0Hx_2uv3_kaWqm_bbpP1wV7Vf7Qy6iyccsUxZatZsJGbLvjruqDviuC9Gj8DRTzzhiHuB-6pZs5GYnVgDT-2Bp1ZxZj_qzH7UI_voEQcuu5hYcLuYgotQs2ZTcN1aEx_bAx9z4LKLiQW3iym4CDVrNgXXxBq4jO2Jy5NHqQ9e8uRR6kMIoSbWlFBTjFBy3nSygk4eqN1TS4hTO3mi-oBCqIltJdQUKpScN52CRdrbRGZE7vY-oWhh9QmhpvaV1yiUnDedpMVeKpJoFcmqFUJN7SuvWCg5bzpJi71bkOgWZHULsrqFUBP7SqgpWig5bzpFC9q7BYluQVa3EGrqNYPXLZScN52iBe3dgkS3oF-3zN7_-xsAAP__yeWgrw== - -# Merge joins should be planned for (FULL|LEFT|RIGHT) OUTER joins - -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT * FROM (SELECT a,b FROM data AS data1) FULL OUTER JOIN (SELECT c,d FROM data AS data2 ORDER BY c,d) ON a=c and b=d ORDER BY a,b)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzEl09r20AQxe_9FGJOLVkj70hybEHBlxYS0rjkz6n4oFhb2-BoxUqGhpDvXmzHGNnxzm4GpKNiPc3TzPz2Ra9Q6FzdZs-qgvQPSBCAICACATEISGAqoDR6pqpKm80tO8FV_g_SvoBlUa7rzZ-nAmbaKEhfoV7WKwUpPGRPK3WnslyZsA8CclVny9W2TGmWz5l5GedZnYGA-zIrqjTohTLIijyQga4XyoCAybpOg7EUY4TpmwC9rt_LHao8vQSLrFo0n7-XTAVUdTZXkMo38TnnCcd5JMbxkfODJfSxdK9NrUwo-8cveiHGeMHtTnTWyuFR2uTKqPxsfec7P3i7X8rM1bVeFptXPOr4w0up0uDn481NMHl8-HEXXE-ubkHASv2tv74_9dt3s5wvDpeN1RH2McSfGAM6jeFQI-H39wMzt7qnyxCb_TpnYdCwIN0BkC4AhLIXYkvwengf8Lx74EuY2uMrW8BXdovvoEt83caATmM4hy-67x867R_2wqgldjy8X_K8e7BDmNqzgy2wg92yc9klO25jQKcxnGMnct-_yGn_ol4Yt8SOh_chz7sHO4SpPTtRC-xE3bIz7JIdtzGg0xjOsRO771_stH9xL0xaYsfD-4jn3YMdwtSenbgFduJu2Rl1yY7bGNBpDC6fXB_UuFNVqYtKOX1J9TftVPlc7YZV6bWZqd9Gz7ZldpeTrW77_2iuqnr3a7S7uCp2P20MuotHHLGMWWpWbSRqy2N1v6FuiPvHYvRoOPqJRxzxUcN91azaSNSOrA2P7Q2PreLEPurEPuqBvfSAA5ddTCy4XUzBRahZtSm4Lq0dH9obPuTAZRcTC24XU3ARalZtCq6RteGyb--4PDlKffCSJ0epDyGEmlhTQk0xQsl51ckIOjlQm1OLiKmdnKg-oBBqYlsJNYUKJedVp2CR9jSRCdF3e55QtLDyhFBT-8pLFErOq07SYg8VSaSKZMUKoab2lRcslJxXnaTFni1IZAuysgVZ2UKoiX0l1BQtlJxXnaIF7dmCRLYgK1sINfWZwcsWSs6rTtGC9mxBIlvQL1umb1_-BwAA__8Ry8HF - -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT * FROM (SELECT a,b FROM data AS data1) LEFT OUTER JOIN (SELECT c,d FROM data AS data2 ORDER BY c,d) ON a=c and b=d ORDER BY a,b)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzEl0Fv2k4Qxe__T2HN6V9lkdmxTcBSJS6plKgNVUJPFQcHbwGJeK21kRpF-e4VEIQMYWc3I9lHBz_P88z89sWvUOhc3WfPqoL0N0gQgCAgAgExCEhgJqA0eq6qSpvtLXvBbf4X0r6AVVFu6u2fZwLm2ihIX6Fe1WsFKUyzp7V6UFmuTNgHAbmqs9V6V6Y0q-fMvIzzrM5AwGOZFVUa9EIZZEUeyEDXS2VAwGRTp8FYijHC7E2A3tTv5Y5Vnl6CZVYtm88_SGYCqjpbKEjlm_ic84TjPBLj-MT50RL6WHrUplYmlP3TF70SY7zidie6aOX4KG1yZVR-sb7znR-83Q9lFupOr4rtK550fPpSqjT4fvNtGkx-TW8egrvJ7T0IWKs_9f_vT_3y1awWy-NlY3WEfQzxJ8aATmM41kj4_f3AzL3u6TLEZr8uWRg0LEh3AKQLAKHshdgSvB7eBzzvHvgSpg74yhbwld3iO-gSX7cxoNMYLuGL7vuHTvuHvTBqiR0P79c87x7sEKYO7GAL7GC37Fx3yY7bGNBpDJfYidz3L3Lav6gXxi2x4-F9yPPuwQ5h6sBO1AI7UbfsDLtkx20M6DSGS-zE7vsXO-1f3AuTltjx8D7iefdghzB1YCdugZ24W3ZGXbLjNgZ0GoPLJ9cHNR5UVeqiUk5fUv1tO1W-UPthVXpj5uqn0fNdmf3lZKfb_T-aq6re_xrtL26L_U9bg-7iEUcsY5aaVRuJ2vJU3W-oG-L-qRg9Go5-4hFHfNJwXzWrNhK1I2vDY3vDY6s4sY86sY96YC894MBlFxMLbhdTcBFqVm0Krmtrx4f2hg85cNnFxILbxRRchJpVm4JrZG247Ns7Ls-OUh-85NlR6kMIoSbWlFBTjFByXnUygs4O1ObUImJqZyeqDyiEmthWQk2hQsl51SlYpD1NZEL03Z4nFC2sPCHU1L7yEoWS86qTtNhDRRKpIlmxQqipfeUFCyXnVSdpsWcLEtmCrGxBVrYQamJfCTVFCyXnVadoQXu2IJEtyMoWQk19ZvCyhZLzqlO0oD1bkMgW9MuW2dt__wIAAP__W3PBnQ== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT * FROM (SELECT a,b FROM data AS data1) RIGHT OUTER JOIN (SELECT c,d FROM data AS data2 ORDER BY c,d) ON a=c and b=d ORDER BY a,b)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzEl0Fv2kAQhe_9FdacWmWR2bEhYKkSl6olUkNF6Kni4OAtIBGvtTZSoyj_vQKCkCHs7GYk--jg53memW9f_AK5ztR9-qRKSP6ABAEIAiIQEIOAHswFFEYvVFlqs7vlIBhn_yDpCljnxbba_XkuYKGNguQFqnW1UZDALH3cqKlKM2XCLgjIVJWuN_syhVk_peZ5lKVVCgIeijQvk6ATyiDNs0AGulopAwIm2yoJRlKMEOavAvS2eit3qvL4HKzSclV__lEyF1BW6VJBIl_Fx5z3OM4jMYrPnJ8soY-lB20qZULZPX_RGzHCG253oqtWTo_SJlNGZVfrO9_5ztv9VGap7vQ6373iWcdnz4VKgun4-49ZMPk9-zYN7ibjexCwUX-rz2-P_fLVrJer02Vtd4R9DvEH5oBOczjV6PEb_I6Ze93RRYj1hl2z0K9ZkO4ESBcCQtkJsSF6Pbz3ed49-CVMHfmVDfAr2-W33yq_bnNApzlc4xfdFxCdFhA7YdQQPB7eb3nePeAhTB3hwQbgwXbhuW0VHrc5oNMcrsETuS9g5LSAUSeMG4LHw_uA590DHsLUEZ6oAXiiduEZtAqP2xzQaQ7X4IndFzB2WsC4E_YagsfD-5Dn3QMewtQRnrgBeOJ24Rm2Co_bHNBpDi6fXe_UmKqy0HmpnL6murt-qmypDtMq9dYs1C-jF_syh8vJXrf_lzRTZXX4NTpcjPPDTzuD7uIhRyxjlppVG4na8lzdralr4u65GD0ajn7iIUd81nBfNas2ErUja8Nje8Njq7hnH3XPPuq-vXSfA5ddTCy4XUzBRahZtSm4bq0dH9gbPuDAZRcTC24XU3ARalZtCq6hteGya--4vDhKffCSF0epDyGEmlhTQk0xQsl51ckIujhQ61OLiKldnKg-oBBqYlsJNYUKJedVp2CR9jSRPaLv9jyhaGHlCaGm9pWXKJScV52kxR4qkkgVyYoVQk3tKy9YKDmvOkmLPVuQyBZkZQuysoVQE_tKqClaKDmvOkUL2rMFiWxBVrYQauozg5ctlJxXnaIF7dmCRLagX7bMXz_9DwAA__-3_cM8 - - -# Nested merge joins should be planned on the same ordering -query TTTTT -EXPLAIN (VERBOSE) (SELECT a,b from data AS data3 NATURAL JOIN ((SELECT a,b FROM data AS data1) JOIN (SELECT c,d FROM data AS data2 ORDER BY c,d) ON a=c AND b=d)) ----- -render · · (a, b) a!=NULL; b!=NULL - │ render 0 data3.a · · - │ render 1 data3.b · · - └── merge-join · · (a, b, c[omitted], d[omitted], a[omitted], b[omitted], c[omitted], d[omitted]) a=c=a=c; b=d=b=d; a!=NULL; b!=NULL - │ type inner · · - │ equality (a, b, c, d) = (a, b, c, d) · · - │ mergeJoinOrder +"(a=a)",+"(b=b)",+"(c=c)",+"(d=d)" · · - ├── scan · · (a, b, c, d) a!=NULL; b!=NULL; c!=NULL; d!=NULL; key(a,b,c,d); +a,+b,+c,+d - │ table data@primary · · - │ spans ALL · · - └── merge-join · · (a, b, c, d) a=c; b=d; a!=NULL; b!=NULL; +a,+b - │ type inner · · - │ equality (a, b) = (c, d) · · - │ mergeJoinOrder +"(a=c)",+"(b=d)" · · - ├── render · · (a, b) a!=NULL; b!=NULL; +a,+b - │ │ render 0 data1.a · · - │ │ render 1 data1.b · · - │ └── scan · · (a, b, c[omitted], d[omitted]) a!=NULL; b!=NULL; c!=NULL; d!=NULL; key(a,b,c,d); +a,+b - │ table data@primary · · - │ spans ALL · · - └── sort · · (c, d) c!=NULL; d!=NULL; +c,+d - │ order +c,+d · · - └── render · · (c, d) c!=NULL; d!=NULL - │ render 0 data2.c · · - │ render 1 data2.d · · - └── scan · · (a[omitted], b[omitted], c, d) a!=NULL; b!=NULL; c!=NULL; d!=NULL; key(a,b,c,d) -· table data@primary · · -· spans ALL · · - -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT * FROM (SELECT a,b from data AS data3 NATURAL JOIN ((SELECT a,b FROM data AS data1) JOIN (SELECT c,d FROM data AS data2 ORDER BY c,d) ON a=c AND b=d)))] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzMmF9vokoYxu_PpzBzdU46BmYA_yUn4bYnOe2m3buNF1Rm1cSCAUy2afzuG7WuBez78A5BvbT6Yx7enfnxLO8iSWPzEL2aXEx-CCWk0EIKT0jhCykCMZVinaUzk-dptvvJAbiPf4mJK8UyWW-K3Z-nUszSzIjJuyiWxcqIifgevazMk4likzmukCI2RbRc7ZdZZ8vXKHsL46iIhBTP6yjJJ72-o3pREvdULy0WJhPTrRTppvhY4XThl7feIsoX5UuGSoZahp4MfTHdTqXIi2huxERtpV3kwCayFI-bYtLbh7HIX0qubZMrq2kfo39M8HP0UyaPk-k5zYpdnKB6p3cy1Hdtx-N_GeV0qTSLTWbiL9dv_Mszd_e_yebmv3SZmMzRlYmvzM_i7w_6n3-z5Xxx-ljaI_LcuC13etByIDL07mToMwbziUADCr4e0PEqlUH9-TN1qE53P2hw95vk3N2cDf-Q9tO147mVX55fe1haWzFOapOD6qi-o7sWIyP0wC50d2rkDNxy4hZyBKmOchxcQI7qunJUNydH_kA6lePgsnLUzc-LbnRcdN_xuhYUI_TQLnR3gmJkV5YTtxAUSHUU1PACgtLXFZS-OUHxB9KpoIaXFZTX_Lx4jY6L13f8rgXFCD2yC92doBjZleXELQQFUh0FNbqAoLzrCsq7OUHxB9KpoEaXFZTf_Lz4jY6L33eCrgXFCD22C92doBjZleXELQQFUh0FNb6AoPzrCsq_OUHxB9KpoMbXe_91JtqTyddpkptGb7fc3c2ZeG4Oo8zTTTYz37J0tl_m8PFxz-3_Yx2bvDh8Gxw-3CeHr3YBm8NKt6JHbWjtt6E9l6YVSYOlaVipVvSwDa29VvSYpnWVdksjL8FuFfYYE9c8uDJxLj1sQ1cmzqXHNO0zzjYTrpxtLj1qQ2vwz03TlbNdowNymw7oPT6g97iiN_mwjYtpGLkY0MDFNI1cTNPIxaM2LqZh5GJAAxfTNHIxoIGLx-Q-VS69TxX99ATHE9BIxwgHPgY4EjLCgZEV_QgFSgY0cjLCgZQBjqwMcKRlRdcH4GVFP0iBWgGN3IpwIFeAI7sCHFZd-mmKFgc9AJVdgKO2C3oEqrsAB45VdJNQAyDZWpdgSZamoWQBjiRL41CyAEeS5fQoLg0ly2pSXBxKltWl6nitVbAkW2sVLMnSNJQswJFkaRxKlsaRZDWnUHFpJFmEA8kCHEkW4eilQq1VlHas1rRkda1VcCQLaCRZhAPJAhxJFuFAsprTqLg0kizCgWQBjiQLcCRZXasVHMnqWqvgSBbQSLIIB5IFOJIswKFkOYWKS0PJsgoVF4eSZRWqOl5rFWXJjoBkOa9o6seF9Y6GjSPJst7SsHEkWU6j4tJQsqxGxcWhZFmNqv7ivFYrSMlOt3_9DgAA__8D4IyZ - - -# Test that the distSQL MergeJoiner follows SQL NULL semantics for ON predicate equivilance. -# The use of sorts here force - -statement ok -CREATE TABLE distsql_mj_test (k INT, v INT) - -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT l.k, r.k FROM (SELECT * FROM distsql_mj_test ORDER BY k) l INNER JOIN (SELECT * FROM distsql_mj_test ORDER BY k) r ON l.k = r.k)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy0ks1q6zAQhff3KcKsbomCLcfOwlDwNoUmJemuhOBaU9fFkdyRDC0h715sLRKbWvmB7qTRfGfOEbMHqQQu0h1qiF-AA4MINgwqUhlqragp26a5-ILYZ1DIqjZNecMgU4QQ78EUpkSIYaEmqvIiYCDQpEXZth0YqNocIW3SHCGeHdiJMHcLP6evJa4wFUie35GHiopdSt-JKLTRn-V297E1qA0wWFep1PFoAgyWtYlHCYchM_waM2tFBsnjXR8JHw_KB7dmDf4g6_SGrNPLs4aD8kfVWioSSCj6m3K-5RePj0g5PqhCInlh12iJb-Z_wsd391Tk7_Z4_CKWBIMxok6MM3u_Ql0pqfGixfebDChytH-iVU0ZPpHK2jH2umy5tiBQG_s6s5e5tE-NwVOYO-HADQdOOOrAvA9PnXDonhxeMTnow5ET9nuTN4d_PwEAAP__4zqgpw== diff --git a/pkg/sql/logictest/testdata/planner_test/distsql_misc b/pkg/sql/logictest/testdata/planner_test/distsql_misc deleted file mode 100644 index b023bce1db2a..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/distsql_misc +++ /dev/null @@ -1,98 +0,0 @@ -# LogicTest: 5node-dist - -subtest scrub - -# Verify the index check execution plan uses a merge join. - -statement ok -CREATE TABLE test (k INT PRIMARY KEY, v INT, data INT, INDEX secondary (v) STORING (data)) - -query T -SELECT url FROM [EXPLAIN (DISTSQL) - SELECT leftside.v, leftside.k, leftside.data, rightside.v, rightside.k, rightside.data - FROM - (SELECT v,k,data FROM test@{FORCE_INDEX=[1]} ORDER BY v,k,data) AS leftside - FULL OUTER JOIN - (SELECT v,k,data FROM test@{FORCE_INDEX=[2]} ORDER BY v,k,data) AS rightside - ON leftside.v = rightside.v AND leftside.k = rightside.k AND leftside.data = rightside.data - WHERE (leftside.k IS NULL) OR - (rightside.k IS NULL) -] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJykkU-L2zAQxe_9FGJOWTIlke30ICjo0oUsaVzy51R8cK1p1uBIZiRDlyXfvTiG3TjEbtMeZ6Q3v_dmXsE6Q-v8SB7Ud5CQIdTsCvLecdvqPizNL1BzhNLWTWjbGULhmEC9QihDRaBgl_-oaEO5IZ7NAcFQyMvqPLbm8pjziw7kAyBs69x6JT4CQtoEJXSEWqKOITshuCa8M3zIDwRKnvDvfWwdB-KZ7FvQcoo6mqKOp4OY6B7MZdyoz_JUOGv-J3D8D4Hj4cAIxzwUz6Iiq0Q0SE0Gqe-wxjo2xGR6tKxV_unLDetfiQ_05EpLPEv6_ncvNSnxuF-tRLrffdmIp3S5BoSKfobJRbiHz1wenvstQHgsq0CsxERHYrkV6_1q9SDSjZjoxVv9dg6J7UVi1AnqBepPgxta3HOXDfnaWU_Xm7o5ed6uh8yBunV713BB39gVZ0xXpmfduWHIh-5VdsXSdk-twUuxHBUnPbG8Fkej4nicHN9Bjq7Fyah4cUXOTh9-BwAA___c34Yw - -# Verify the foreign key check execution plan uses a merge join. - -statement ok -CREATE TABLE parent ( - id INT PRIMARY KEY, - id2 INT, - UNIQUE INDEX (id, id2) -) - -statement ok -CREATE TABLE child ( - child_id INT PRIMARY KEY, - id INT, - id2 INT, - FOREIGN KEY (id, id2) REFERENCES parent (id, id2) -) - -query T -SELECT url FROM [EXPLAIN (DISTSQL) - SELECT p.child_id, p.id, p.id2 - FROM - (SELECT child_id, id, id2 FROM child@{NO_INDEX_JOIN} ORDER BY id, id2) AS p - FULL OUTER JOIN - (SELECT id, id2 FROM parent@{FORCE_INDEX=[2]} ORDER BY id, id2) AS c - ON p.id = c.id AND p.id2 = c.id2 - WHERE (p.id IS NOT NULL OR p.id2 IS NOT NULL) AND - c.id IS NULL AND c.id2 IS NULL -] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyckkFr3DAQhe_9FWJOXlYla7m9CAoqtIENW7s43lMxRrVmHRFXMpIMCcH_vViGJg5J281Rn-bpvZnRAxirMJe_0AP_ASnUFAZnW_TeuhktBXt1B3xHQZthDDOuKbTWIfAHCDr0CBwq-bPHEqVCd7EDCgqD1H18tr3RvWrkGGyjjcK75nTbaNU4PDWDdGiCiBVA4XqQxnPyHuqJgh3Do50PskPg6UTfFildR1p85xRaseYW78VC_icDezXDo_VorFPoUK1s61n5r5IXGvmGrsMrqw26C7ZupLofkJPL4-FAimP1tSRXxT4HCj2eQiLYlopsu_nkdHcTEpFuqWDbDVC41H1Ax0mSJIKR_TXJi4rkx8NhQ4qSJCJbsQ35nH8hifgQ6VPy8Q8BCsUYOBEpFYyK7NXxZeessEQ_WOPx-RhffHk3zw5Vh8suvB1di9-dbaPNciyiLgKFPiy3bDnsTbyKf-ypOD1DzJ6L2V_F2Uq8m-rp3e8AAAD__-VhJtM= - -subtest stats - -statement ok -CREATE TABLE data (a INT, b INT, c FLOAT, d DECIMAL, PRIMARY KEY (a, b, c, d)) - -# Split into ten parts. -statement ok -ALTER TABLE data SPLIT AT SELECT i FROM generate_series(1, 9) AS g(i) - -# Relocate the ten parts to the five nodes. -statement ok -ALTER TABLE data EXPERIMENTAL_RELOCATE - SELECT ARRAY[i%5+1], i FROM generate_series(0, 9) AS g(i) - -# Verify data placement. -query TTTI colnames -SELECT start_key, end_key, replicas, lease_holder FROM [SHOW RANGES FROM TABLE data] ----- -start_key end_key replicas lease_holder -NULL /1 {1} 1 -/1 /2 {2} 2 -/2 /3 {3} 3 -/3 /4 {4} 4 -/4 /5 {5} 5 -/5 /6 {1} 1 -/6 /7 {2} 2 -/7 /8 {3} 3 -/8 /9 {4} 4 -/9 NULL {5} 5 - -query T -SELECT url FROM [EXPLAIN (DISTSQL) CREATE STATISTICS s1 ON a FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy0lMGOmzAQhu99CjRnI2NDslmftse9dKtNbxUHF48oEsHINlLbFe9eAUJboo2x5PSInT_fr2-seYNOK_wiL2hBfAcGBDgQyIFAAQQOUBLoja7QWm2mnyyBZ_ULREag6frBTcclgUobBPEGrnEtgoBv8keLrygVGpoBAYVONu2M6U1zkeb3k5JOAoFzLzsrkpSyRHYqYYl2P9EAgZfBieSJQTkS0IN7Z1knawTBRhLe5ywvfYuGHrZdluNz8wdFMtU8O-mH8pvQd9bQaaPQoNqwyvFmrc91bbCWThvKssiC-aYgC58SC5kSZSnlUXPaabTO6XjXOfFwDTxIA09pHqVhp9Gq4eGuGvJwDXmQhjylRZSGnUarhtNdNRThGoogDUVKD1EadhqtGh7_2_L6APqKttedxasl9vE_Z9NyQ1XjsgmtHkyFX42uZszy-TLn5gOF1i23bPl47parqeC_YeYN802YXYe5n7yDzr3pwh8uYnofvOGjn3yMIT94wyc_-RRDfvTPKtt5Jv5Hds0ux09_AwAA___WSOum - - -statement ok -INSERT INTO data SELECT a, b, c::FLOAT, 1 -FROM generate_series(1,10) AS a, generate_series(1,10) AS b, generate_series(1,10) AS c; - -query T -SELECT url FROM [EXPLAIN ANALYZE (DISTSQL) CREATE STATISTICS s1 ON a FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzElDFv2zAQhff-CuJmKhIpObY5pd2CAk0Rdys0MOZBFSCLAkmhTQP_94JShdRGTNGojYyiePfefY-4F2i1wi9yhxbEd2BAgQOFHCgUQGEBJYXO6C1aq42_Mhbcq18gMgp12_XOH5cUttogiBdwtWsQBHyTTw0-olRo0gwoKHSybgaZztQ7aZ7vlHQSKGw62VpBkpQR2SrCiHY_0ACFh94JcudNGf3TEoNSCcIy38062TTE1TsUJLNA4enZ4XQlv1mTz_UnKPcUdO9ePVonKwTB9jR-jo3cdQ2adHE4w3i8qX97A34IJ0ezp0T5SdFXrb7VRqFBdaBV7k_a-lhVBivptElZ9p8G8wODLD5dFpNuypKUx-TL5_Nd3qzOyHdmkinf24vmy-Px8Sh8PEnzd8E3M8mEb3lRfHk8vjwKX56kxbvgm5lkwre6KL4iHl8Rha9I0kUMvnweH-Nn0JsZZKK3vtpufkP0EW2nW4tHO_rtzpnf3agqHBe91b3Z4lejt4PM-Pkw1A0HCq0b_7Lx474df3mD_xazYDE_KGbHxTysPCOdB6uLcHFxju-B4gD07wuy2DofaXncdhFsexv2dHsdT8tg21XY0-o6ntbh5LOZRxd-svGuyv2HPwEAAP__DypgEw== diff --git a/pkg/sql/logictest/testdata/planner_test/distsql_numtables b/pkg/sql/logictest/testdata/planner_test/distsql_numtables deleted file mode 100644 index bb9c736a4543..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/distsql_numtables +++ /dev/null @@ -1,171 +0,0 @@ -# LogicTest: 5node-dist - -# First, we set up two data tables: -# - NumToSquare maps integers from 1 to 100 to their squares -# - NumToStr maps integers from 1 to 100*100 to strings; this table is -# split and distributed to all nodes. -statement ok -CREATE TABLE NumToSquare (x INT PRIMARY KEY, xsquared INT) - -statement ok -INSERT INTO NumToSquare SELECT i, i*i FROM generate_series(1, 100) AS g(i) - -statement ok -CREATE TABLE NumToStr (y INT PRIMARY KEY, str STRING) - -# Split into five parts. -statement ok -ALTER TABLE NumToStr SPLIT AT SELECT (i * 100 * 100 / 5)::int FROM generate_series(1, 4) AS g(i) - -# Relocate the five parts to the five nodes. -statement ok -ALTER TABLE NumToStr EXPERIMENTAL_RELOCATE - SELECT ARRAY[i+1], (i * 100 * 100 / 5)::int FROM generate_series(0, 4) AS g(i) - -# Verify data placement. -query TTTI colnames -SELECT start_key, end_key, replicas, lease_holder FROM [SHOW RANGES FROM TABLE NumToSquare] ----- -start_key end_key replicas lease_holder -NULL NULL {1} 1 - -query TTTI colnames -SELECT start_key, end_key, replicas, lease_holder FROM [SHOW RANGES FROM TABLE NumToStr] ----- -start_key end_key replicas lease_holder -NULL /2000 {1} 1 -/2000 /4000 {2} 2 -/4000 /6000 {3} 3 -/6000 /8000 {4} 4 -/8000 NULL {5} 5 - -# -# -- Basic tests -- -# - -# Query with a restricted span. - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT 5, 2+y, * FROM NumToStr WHERE y <= 10 ORDER BY str] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyUkEFLxDAQhe_-ivI87kiboiA59drLKt29SQ-xGZZCm5RJCsrS_y5tBF1hRQ-BzHt5Xx5zhvOW92bkAP0ChZYwie84BC-rlB7U9g26IPRumuMqt4TOC0OfEfs4MDSO5nXgho1lyQsQLEfTDxt2kn408l65eYw-RAHhMBkXdHaXqyK_BaFhZ1l09qC1rvfHR8rKz9uuUpRtp0S7EPwcv0qEaE4MrRb6e9GDl8iSq8uO1f3uKr78D77hMHkX-AJ_jVwsLYHtidOug5-l42fx3fZNGp-23CZYDjG5Kg21S9Za8HtY_Rouf4Tb5eYjAAD__3EYqEY= - -# Query which requires a full table scan. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT 5, 2 + y, * FROM NumToStr WHERE y % 1000 = 0 ORDER BY str] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzElM-K2zAQxu99CjFQaFkFS7Li9QoKORVySUt2byUHNxoWQ2IZSYGWJe9eLLtsExJZJAUfDNafb76Z34h5g8ZoXFV7dKB-AAcKAijkQEEChTlsKLTWbNE5Y7srvWCpf4FiFOqmPfhue0NhayyCegNf-x2Cgpfq5w7XWGm0GQMKGn1V74JNa-t9ZX8vmsPeG-ctUHhuq8YpMssEY93tr_XOo1Xk04KTj4QzxpRSy9VL-Zl8IX__gcIaG93dmw9blIjh72HBKQmfgM2Rgjn492Sdr14RFD_S9IKejfVos_lpLQv5cDW8uBr-PaqxGi3qS0Ev5LAyM9Nm_JTnNfv8xJ6nt4untit0a5bJ6Xo2UtXQs-LWnol0aCIZmgzQiumgjVQ1QHu8FVqeDi1PhlYEaOV00EaqGqCVt0KT6dBkMrQO12wiXiMFDbye_sc0vRB-ja41jcOkQcm6UYv6FfvR7MzBbvG7Ndtg0y-_BV3Y0Oh8f8r7xbLpj7oE_xXzqFiciPm5WMSdR6zzqFrGxfKevOdRcRF3Lu5xfoyKy7hzeY_zU7xXbOSZxB_Zuffm-OFPAAAA__-KbAkx - -# Query with a restricted span + filter. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT str FROM NumToStr WHERE y < 10 AND str LIKE '%e%' ORDER BY y] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyMkDFLxEAQhXt_RXhyXLNyiZ1bXaMSlDvJXScp1uxwBJLdMDMB5dj_LskWYiFYvvdm3nzMFSF6OriRBPYdFVqDiWNHIpEXKw_U_hO2NOjDNOtitwZdZIK9QnsdCBZn9zFQQ84T70oYeFLXD2vtxP3o-Gsf5lGjKMPgNLkgtrjbPexuYfDUD0psi_198Vq_PBbbDW221trTuakPzzA4zrqkaJNBnPUHQ9RdCLZK5v-oDckUg9Avyr-ay9QakL9QfofEmTt649itZ7I8rnur4Uk0p1UWdchRatPNdwAAAP__t3t2hg== - -# Query which requires a full table scan. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT str FROM NumToStr WHERE y % 1000 = 0 AND str LIKE '%i%' ORDER BY y] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzMlM-K2zAQh-99CjEQNktlLMlOWAQFF_oH0-It2dyKD641BINjGUmGluB3L5YPqUtSVHLI3ixpPn7zDYxP0GmFRXVEC_I7cKAggEICFFKgsIGSQm90jdZqM5XMQK5-gmQUmq4f3HRdUqi1QZAncI1rESTsqx8t7rBSaGIGFBS6qml9TG-aY2V-Zd1wdNo6AxRe-qqzkkSxYGyq_tS0Do0k63XGyYpwxpiUMi_2T4_kHTl_vy8-kHUmyNf8y0fysGpWD1LKl_0uLz4_AoXnwUmSCZpxKEcKenDnhq2rDgiSj_SK1NlFG4UG1dIiE2-hHC-YFzrSfbxZVF9LF4t0Hj5SHjpSP9EoTu87VxFuJoLNUm-2va9ZEm6WBJttvdnTfc3ScLM02Gxyil7Jgl-Q2qHtdWcxaHnZtP2oDjj_LaweTI3fjK59zHx89py_UGjd_MrnQ975J9_gnzD_J7xdwOxvWNySnNwCp7fAm_-Cy_HN7wAAAP__bVwL3A== - -# -# -- Join tests -- -# - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT x, str FROM NumToSquare JOIN NumToStr ON y = xsquared] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8lU2L2zAQhu_9FWFOu6AQS7bzYSj42O1ht2x7Kz5o42liSCxXkqHLkv9ebBeydlJJXiU5-uPRzDwvaN6gFDk-8j0qSH4CBQIMCIRAIAICMWQEKinWqJSQzS8d8JD_gSQgUJRVrZvXGYG1kAjJG-hC7xAS-MFfdviMPEc5C4BAjpoXu7ZMJYs9l69pWe-1UL9rLhEIfK94qZLJFLIDAVHrf0cfT3x5nWy52vbPShlkh4yA0nyDkNAD-ViL1NSilu_6m7EgCEY2SXtNsv82eTynLoXMUWLeOylrSNsvZyb9wtX2qyhKlLN5v7Ud_tJ3Kbv_LIvNVt-l9B4IPNU6maSUpNFgzuMMoccMZxp8FFNRzSgdTnu2dtSrTd1DZq4htxlPZ9Flk6a3TXpxjaSZu-3Q2XbU2p5f1ja7re3lNWyH7rYjZ9vz1vbysrbD29peXcN25G47drbdeB6700yio9uKpsG198WZ-s-oKlEqdNoGQTMB5hvsjChRyzV-k2Ldluken1quvYFzVLr7yrqHh7L71DToDsc-8MIHXvnAlJppOsIYGwfHPvDCB175wANjJzQb0sF7OjTrDo0w7fsOhnTkE5YZtoRlhi1hmWFLWGbYFlbsE9bcR7cZtug2wxbdZtii2wzbdC98dC99dJthi24zbNFthi26zbBN98pHNx2zLE_v0DHbcixtu_zH7MuxtM05PdkeRunZ4dPfAAAA___jgMjJ - -# Merge join. -query TTTTT -EXPLAIN (VERBOSE) SELECT x, str FROM NumToSquare JOIN NumToStr ON x = y WHERE x % 2 = 0 ----- -render · · (x, str) x!=NULL; key(x) - │ render 0 test.public.numtosquare.x · · - │ render 1 test.public.numtostr.str · · - └── merge-join · · (x, xsquared[omitted], y[omitted], str) x=y; x!=NULL; key(x) - │ type inner · · - │ equality (x) = (y) · · - │ mergeJoinOrder +"(x=y)" · · - ├── scan · · (x, xsquared[omitted]) x!=NULL; key(x); +x - │ table numtosquare@primary · · - │ spans ALL · · - │ filter (x % 2) = 0 · · - └── scan · · (y, str) y!=NULL; key(y); +y -· table numtostr@primary · · -· spans ALL · · -· filter (y % 2) = 0 · · - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT x, str FROM NumToSquare JOIN NumToStr ON x = y WHERE x % 2 = 0] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzElV1r2zAUhu_3K8yBQUsVYtnOl6Dgq0EGS0fXu-ELNz5LDInlSTKslPz3YbsjjZNJ8rQkd_7QY-m8z8HnFQqe4SLdogT2HSgQCIBACAQiIDCChEAp-BKl5KJe0gLz7Bcwn0BelJWqHycEllwgsFdQudogMHhKnzf4iGmGYugDgQxVmm-abUqRb1PxEhfVVnH5s0oFAoFvZVpI5g2AwKd8o1Aw7yam3kcvYIzNF0_TW-_e89-ugcBDpZgXU0h2BHil3k6yP8Dzi7dO5fpw62Z9QkCqdIXA6I78W0VUV5ES78oZBr7v29XkUknw10r236kKLjIUmB18KanJP0tOLYCY3rV7dRP5gmKFn3leoBiOD5kN_lA3Mb27vRf5at1e7qWROOxUu68kdKjkxBkXfMDLIaXdmk_uHR3sTe37IbDth6YdBsPoCk1BL98Uk_M0RWAvJrQWEzVixlcQE1xezPQ8YkJ7MZG1mHEjZnoFMeHlxczOIyayFzOyFlMrsRzX_89JdHkn1D__bDtxhEeUJS8kWk0uvy4CsxW2uUheiSV-FXzZbNPePjRcMwgylKp9G7Q386J9VR_QHh65wBMXeOYCU6qnaY_Egn7wyAWeuMAzF7iT2BEddGn_PR3q4w61MD3M2-_SkYssPWyQpYcNsvSwQZYeNskaucgau8Sthw1x62FD3HrYELceNsU9cYl76hK3HjbErYcNcethQ9x62BT3zCVu2mdYHv9D-0zLvrTp599nXvalTZnTo-mhDT3ZffgdAAD__0e8BAs= - -# -# -- Aggregation tests -- -# - -# Sum the numbers in the NumToStr table. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum(y) FROM NumToStr] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyslD9vszAQxvf3U0Q3vZUcgYEQwpSOGdpUSTtVDC4-IaQEI9tIrSK-ewUMgSgxTujoP4-f53dn3QkKwfGVHVFB_AkUCHhAwAcCARBYQEKglCJFpYRsrnSCDf-G2CWQF2Wlm-2EQCokQnwCnesDQgzv7OuAO2QcpeMCAY6a5YfWppT5kcmfdVEdtVBaAoF9yQoVz-aO57rN7W2l49maQlITEJU-2yjNMoSY1sQ-ynOWScyYFtJZDJPsP17-r-nTTRvvps359aoQkqNEPng6qc1BqHtfEn-QhNrXntrWvi393AkeacBInh53OKUBnj22Z40dtNjhI9gjeXrYyynYvj22b40dttjRI9gjeXrY0RTswB47sMZugOd3E49E6RGv_mrAXLHZoSpFofBi0Fx_2W0GEPIMu2mlRCVTfJMibW265bbVtRscle5OabfYFN1RE7AvpkaxNxDTS7Fndh6x9o3qwCwOpuReGMWh2Tmc4rw0iiOzczTFeWXulTvyTcyf7NI7qf_9BgAA__9lhMex - -# Count the rows in the NumToStr table. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT count(*) FROM NumToStr] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyslM-Lm0AUx-_9K5Z32sKEOGrcrKctPeVQLUmWHoosU-chQjIjMyO0LP7vRT2sSjIOukd_fP18P77hvYOQHBN2RQ3xb6BAwAcCARAIgcAOMgKVkjlqLVX7Sh848L8QewRKUdWmvZ0RyKVCiN_BlOaCEMOZ_bngERlHtfWAAEfDykuHqVR5Zerfi6ivRmqjgMCpYkLHD5ut73nt22lt4odECoSsISBr8wHShhUIMW2Ie5lvRaGwYEaq7W7c5Xv6mpzfjumv0-PXuyz_LusDUQupOCrko-9njb0Nnfya0-uPt0Nyfnyh99sEozbUfQzUdQzdFDbbcNksZhoN7KPVs_Dd7X1n-7Czj5bZzzQa2D-ttg_c7QNn-6iz3y-zn2k0sN-vtg_d7UNn-9Z7s0B8psxA_PlTF9AN1hF1JYXGySK6_WWvXVDIC-y3mZa1yvGnknmH6S_TLtfd4KhN_5T2FwfRP2oLDsPUGvZHYToN-3byDDqwpkN7OFzTe2cNR3ZytIb8ZA3v7eT9GvKzfVbezDGxH7IpO2u-_A8AAP__tnPXlw== - -# Count how many numbers contain the digit 5. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT count(*) FROM NumToStr WHERE str LIKE '%five%'] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy0lF9r2zAUxd_3KcyF0g4UYtmOm-opY2zDbHNGkrKHYYoX3RlDIhlJHhsl333YfqgTGlng-VF_js7hd8R9BiE5pvkRNbAfQIFAAARCIBABgQVkBCol96i1VM2VTpDwP8B8AqWoatNsZwT2UiGwZzClOSAw2OU_D7jBnKOa-0CAo8nLQ2tTqfKYq78rUR-N1EYBgW2VC8282Tzw_eb2x_JgUDFvFXhfks8fvNubX-VvvLlljG13myT9BATWtWFeKgVCdiIga_MSRpu8QGD0RNwDvysKhUVupJovzvO-Xz-mu6fN-vv27u1Vr-Cq14tFLaTiqJCfvZ-d7GnoBb7t49enJN3drej1NOFZGupeFXWtqm1qNo-m62sgdY9QPLqvwJ1Q4EwoagnF0xEaSN0jdD-aUOhOKHQmFLeEltMRGkjdI7QcTShyJxQ5E2rYzCaCMxC4B-fhvw7EV7w2qCspNF4Mxtdf9puBibzAbrpqWas9flNy39p0y3Wrazc4atOd0m6RiO6oCdgXU6s4OBPTS3Fgdx6wDq3qyC6OxuReWMWx3Tke43xvFS_tzssxzg_2rvyBb2L_ZJfe2enNvwAAAP__VPQIrA== - -# -# -- Limit tests -- -# - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT y FROM NumToStr LIMIT 5] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyMjzFLBDEQhXt_xfLqEXcLm1TXHognp51sETfDEdhNwswElCP_XW5TiIVg-b6XvPfmipQDP_uNFe4dE2ZCkbywapYb6g-O4RNuJMRUqt3wTFiyMNwVFm1lOLz5j5XP7APLwwhCYPNx3WOLxM3L1yHVzbKagPBafFI33INwquaGwwTCU9yiDY-YGyFX--lS8xeGmxr9f8-ZteSk_GvKX8ljmwkcLtxv1lxl4RfJy17T5Wn_t4PAat2dujimbrW53X0HAAD__2zZcAY= - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT y FROM NumToStr ORDER BY y LIMIT 5] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyMjzFLBDEQhXt_xfLqEXcLm1TXHognp51sETfDEdhNwswElCP_XW5TiIVg-b6XvPfmipQDP_uNFe4dE2ZCkbywapYb6g-O4RNuJMRUqt3wTFiyMNwVFm1lOLz5j5XP7APLwwhCYPNx3WOLxM3L1yHVzbKagPBafFI33INwquaGwwTCU9yiDY-YGyFX--lS8xeGmxr9f8-ZteSk_GvKX8ljmwkcLtxv1lxl4RfJy17T5Wn_t4PAat2dujimbrW53X0HAAD__2zZcAY= - -# Test that the correct node is chosen in a reverse scan with multiple spans. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT y FROM NumToStr WHERE y < 1000 OR y > 9000 ORDER BY y DESC LIMIT 5] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyMkDFrwzAQhff-CnFdFWwHMlhT1kBJStqteFCtIxXYOqE7Q0vwfy-yhiaFphnvvfue3ukMgRzu7YgM5g0a0LCBTkNM1CMzpSyXpZ37BFNr8CFOkuVOQ08JwZxBvAwIBva0oljlFIdi_bCszRpokh-IxZ4QzHrWF8HN7eBX-z7gEa3DVNVX8RCTH2362oZpFGJJoOEl2sBGraq2batHZYNTjSL5wGweJjFqmzs--dGL2sBfDZurhv-cfkSOFBjvur2eOw3oTli-l2lKPT4n6pdnynhYuEVwyFLcdRl2oVi54CXc3ITrX3A3P3wHAAD__9mfpyM= - -query TTTTT -EXPLAIN (VERBOSE) SELECT x FROM (SELECT x, 2*x AS y, x+1 AS z FROM NumToSquare) ----- -render · · (x) x!=NULL; key(x) - │ render 0 x · · - └── render · · (x, y[omitted], z[omitted]) x!=NULL; key(x) - │ render 0 test.public.numtosquare.x · · - │ render 1 NULL · · - │ render 2 NULL · · - └── scan · · (x, xsquared[omitted]) x!=NULL; key(x) -· table numtosquare@primary · · -· spans ALL · · - -# Verifies that unused renders don't cause us to do rendering instead of a -# simple projection. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT x FROM (SELECT x, 2*x, x+1 FROM NumToSquare)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyMj7FOAzEQRHu-IpraiLvWVdo0BAU65MKcV9FJd16zu5ZAkf8d3blAFEgp5409M3tD5kTPcSWFf8eI4FCEJ1Jl2VB_cEpf8IPDnEu1DQeHiYXgb7DZFoLHW_xY6EIxkTwNcEhkcV722CLzGuX7mOtqrJ81CsHhtcSs_vAIh3M1fziOCM2Bq_2WqMUrwY_N3T_kQlo4K_3Z8F_y0IIDpSv1Y5WrTPQiPO01XZ73fztIpNbdsYtT7lYL7eEnAAD__wNFbno= - -# Regression test for #20481. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT count(*) FROM (SELECT 1 AS one FROM NumToSquare WHERE x > 10 ORDER BY xsquared LIMIT 10)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyUkUFL80AQhu_fryhz-sSVZNPbniqeCtJIW_EgQdZkCAvNTpydBaXkv0uyiFZosMd5Z595XtgjeGpwYzsMYJ5BQ6WgZ6oxBOIxSg_WzTuYXIHzfZQxrhTUxAjmCOLkgGBgb18PuEXbIGc5KGhQrDtMZ3t2neWPlY-dUHiLlhEU7Hrrg1lkWt-AgjKKWawKqAYFFOXbE8S2CEYP6u9ddsSCnOnTGit9_SXakB8r3LvOyULnZ63FJdbbtmVsrRBnxan5rnzc7F-25dPu_9VZ1_IS1xZDTz7giefc5XyoFGDTYvrRQJFrfGCqJ00ay4mbggaDpK1Ow9qn1VjwJ6xn4WIeLmbh5S-4Gv59BgAA__9Dyt_2 diff --git a/pkg/sql/logictest/testdata/planner_test/distsql_sort b/pkg/sql/logictest/testdata/planner_test/distsql_sort deleted file mode 100644 index 96a73b49a4ce..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/distsql_sort +++ /dev/null @@ -1,47 +0,0 @@ -# LogicTest: 5node-dist - -statement ok -CREATE TABLE data (a INT, b INT, c INT, d INT, PRIMARY KEY (a, b, c, d)) - -# Split into ten parts. -statement ok -ALTER TABLE data SPLIT AT SELECT i FROM generate_series(1, 9) AS g(i) - -# Relocate the ten parts to the five nodes. -statement ok -ALTER TABLE data EXPERIMENTAL_RELOCATE - SELECT ARRAY[i%5+1], i FROM generate_series(0, 9) AS g(i) - -# Verify data placement. -query TTTI colnames -SELECT start_key, end_key, replicas, lease_holder from [SHOW RANGES FROM TABLE data] ----- -start_key end_key replicas lease_holder -NULL /1 {1} 1 -/1 /2 {2} 2 -/2 /3 {3} 3 -/3 /4 {4} 4 -/4 /5 {5} 5 -/5 /6 {1} 1 -/6 /7 {2} 2 -/7 /8 {3} 3 -/8 /9 {4} 4 -/9 NULL {5} 5 - -# Ensure sort-all strategy is used -query BT -EXPLAIN(DISTSQL) SELECT * FROM data ORDER BY d ----- -true https://cockroachdb.github.io/distsqlplan/decode.html#eJyslM2u2jAUhPd9iuhs68ix4_CTFVs2tILuqizc-IhGgjiyjdQK8e5X-ZG4QeBY4S5tM2fmGxxfodYKd_KMFvLfwIAABwIpEBBAIIOCQGN0idZq0_6kF2zVP8gTAlXdXFy7XRAotUHIr-Aqd0LI4Zf8c8I9SoWGJkBAoZPVqbNpTHWW5v9GSSeBwKGRtc2jmLJI1ipikXZ_0UBxI6Av7u5gnTwi5OxGwlMctHFoaDYOsBHfX47nL8ffp2qj0KB6NvRJhp2OdUPZuIRX9unInoV3zEI6piymfEbLEzmGlhdzW-bhmDwIk8c0nYE5kWPAXM7FTMMx0yDMNKZiBuZEjgFzNRdThGOKIEwR02wG5kSOAXP9FU_Dk_F7tI2uLQZ99Un7bqA6Yv_OWH0xJf40uuxs-uWPTtdtKLSuP2X9Ylv3R23Az2LmFfORmD2Kud95wjr1qoVfLN7JnXnFC7_z4h3npVe88juv3nFe-_-rZOKa-C_Zo3dx-_YRAAD__1C6r8U= - -# Ensure top-k strategy is used -query BT -EXPLAIN(DISTSQL) SELECT * FROM data ORDER BY d limit 10 ----- -true https://cockroachdb.github.io/distsqlplan/decode.html#eJyslM2K2zAUhfd9CnO3lZEly5mMV7MdKNOSdFe8UK1LakgsIynQEvzuxT-QOk1k4XhpKUff-W6ELlBrhR_yhBbyH8CAAAcCKRAQQCCDgkBjdInWatP9ZAi8q9-QJwSqujm7brkgUGqDkF_AVe6IkMN3-fOIO5QKDU2AgEInq2OPaUx1kubPm5JOAoF9I2ubRzFlkaxVxCLtfqGBoiWgz-5KsE4eEHLWkvAWe20cGppNC7yJz0DgS3WqXMSShyT-kHQFaKPQoPr__KK9U-dDx7qh7GYes0XSSREWPngWMnjKYsoXjH6mxzj6zQqj5-HGPMiYxzRdYDzTYzR-WcE4DTdOg4zTmIoFxjM9RuPtCsYi3FgEGYuYZguMZ3qMxq8rPyh3SDu0ja4tTkiPTk661wbVAYfXyeqzKfGb0WWPGT6_9rl-QaF1wy4bPt7rYasr-G-YecN8Ema3Ye4nz6BTb1r4w-KZ3pk3vPGTN8-QX7zhrZ-8fYb86v-vkplr4r9kt-yi_fQ3AAD__822wTk= - -# Ensure chunk strategy is used -query BT -EXPLAIN(DISTSQL) SELECT * FROM data ORDER BY a, c ----- -true https://cockroachdb.github.io/distsqlplan/decode.html#eJy0lE2L2zAQhu_9FWauKyNLsrNZn3Ldy7bs9lZ8UK1hY3AsIynQEvzfiz8gdUhk4WSPlvLyvM9EzAkarfBNHtBC_gsYEOBAQACBFAhkUBBojS7RWm36n4yBV_UH8oRA1bRH1x8XBEptEPITuMrVCDn8lL9rfEep0NAECCh0sqoHTGuqgzR_d0o6CQQ-WtnYPIopi2SjIhZpt0cDRUdAH92ZYJ38RMhZR8JbfGjj0NBsXmDHnshOPAGBg3TlPqqxySN2k8hvEs8gbRQaVNc5RXel2puOdUvZfDa3KohZBRY-ehYyespiylcMf6HHNPzNA4fPw815kDmPqVhhvtBjMn9-oLkINxdB5iKm6QrzhR6T-faB5mm4eRpknsY0W2G-0GMyf_miVXOF-I621Y3FoA2S9DsI1SeOe8vqoynxh9HlgBk_vw-54UChdeMtGz9em_GqL_h_mHnDfBZml2HuJy-ghTed-sPpPb0zb3jjJ2_uIT97w1s_eXsP-cX_XyULz8T_yC7ZRfftXwAAAP__hofKcg== diff --git a/pkg/sql/logictest/testdata/planner_test/distsql_srfs b/pkg/sql/logictest/testdata/planner_test/distsql_srfs deleted file mode 100644 index 1f44a407f87d..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/distsql_srfs +++ /dev/null @@ -1,46 +0,0 @@ -# LogicTest: 5node-dist - -statement ok -CREATE TABLE data (a INT PRIMARY KEY) - -# Split into ten parts. -statement ok -ALTER TABLE data SPLIT AT SELECT i FROM generate_series(1, 9) AS g(i) - -# Relocate the ten parts to the five nodes. -statement ok -ALTER TABLE data TESTING_RELOCATE - SELECT ARRAY[i%5+1], i FROM generate_series(0, 9) AS g(i) - -statement ok -INSERT INTO data SELECT generate_series(0, 9) - -# Correlated SRF -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT a, generate_series(a, a + 1) FROM data ORDER BY 1, 2] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJykk8GK2zAQhu99CjGnlsgoku1t0cnXXLbLZm_FFNUasi6OZEYKtCx-9xL7kLqNgzY-zow-_R8M8wbOW3w0Rwygv4EEDgo45MChAA4l1Bx68g2G4On8ZAJ29hfoLYfW9ad4btccGk8I-g1iGzsEDS_mR4fPaCyS2AIHi9G03RjTU3s09LuyJhrgsO-NC5plQjLjLJPMx1ckqAcO_hQvCSGaA4KWA1-wuIR7skho57GV3EA9XFF9Iv8Tm7jHKMo5ckCHZCJ-D0gtho-V5KySbMOk1nr3-PLl06KmWtS8YrD3FJHEw3_CvFIb4HA0sXllHTrN5GJiPkuU6euRKesRMhPqjgWpdA-V5KEykd_hkad75EkeeSaKOzyKdI8iyaPIRLnycK54PGPovQs4U1j6eXu-KrQHnK4w-BM1-ES-GWOm8uvIjQ2LIU5TORU7N45Gwb9heRNWM3j7L6xuwp9vw_ka7WINXK6BH94F18OHPwEAAP__NOT0hQ== - -# Order by primary key -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT a, generate_series(a, a + 1) FROM data ORDER BY 1] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJykk79qwzAQh_c-hbmpJTKy_KcUTV6zpCHJVkxRrSN1SSRzUqAl-N1L7CF1SYoaj3fnz7-P43QEYzUu1B4dyBcQwCAFBhkwyIFBARWDlmyNzlk6fTIAc_0JMmHQmPbgT-2KQW0JQR7BN36HIGGj3na4QqWReAIMNHrV7PqYlpq9oq9SK6-AwbpVxsko5iJSRkcisv4dCaqOgT34c4LzaosgRceuWJzDLWkk1OPYUsyg6i6oLsl-YO3X6HkxRrZokJTHV4fUoLsvBYtKEc0iIaWcLzZPD1c105GmCF-WCFkWFzFPb1hXGu6RBnmkMc9u8MjCPbIgjyzm-Q0eebhHHuSRx7yYeMYXPFboWmscjhSu_Tk53TjqLQ5vwtkD1bgkW_cxQ_ncc31Do_PDVAzF3PSjXvAnLP6EH0dw8htOpyRnU-B8Clz8C666u-8AAAD__5K7vE0= - -# Order by SRF -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT a, generate_series(a, a + 1) FROM data ORDER BY 2] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJykk02L2zAQhu_9FWZOLSsjS7a3RSdfc9kum70VU1RrSF0SyYxkaAn-7yX2IXWwgxof9fHM-8DwnsE6gy_6hB7UNxDAQAKDHBgUwKCEmkFHrkHvHV2-TMDO_AaVMWht14fLdc2gcYSgzhDacERQ8K5_HPENtUHiGTAwGHR7HGM6ak-a_lRGBw0M9p22XiUpF4m2JhGJCz-RoB4YuD5cE3zQBwQlBrZicQ3vrSODhGYWXA8Lnq_kfmET9hh4Odc8oEXSAb97pBb9x0qwpBLJUyKUUruX9y-fVh3lquOCwd5RQOLP8_RKPq2Oz2fjRfwiRMwiuEi5fGAVMt5DRnnIlOcPeOTxHnmUR57y4gGPIt6jiPIoUl5urMiCxxv6zlmPN1VZnpxdKoTmgFPfvOupwVdyzRgzHb-O3Hhh0IfpVUyHnR2fRsF_YXEXljM4u4XlXfjzfTjfol1sgcst8PN_wfXw4W8AAAD__yGn71k= - -# Filter on ProjectSet node -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT a, b FROM (SELECT a, generate_series(1, 3) AS b FROM data) WHERE a < 4 AND b = 3] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJykk1Gr0zAUx9_9FOE8TUhJk7QiAWGCCHuZl3v3pkVic5iVLilJCsrod5e1ytaxSVzfmpz-8v_lkHME6wxu9QEDqM_AgYIAChIoFEChhIpC512NITh_-mUCNuYnqJxCY7s-nrYrCrXzCOoIsYktgoKd_tbiM2qDnuVAwWDUTTvGdL45aP9rbXTUQOGl0zYokjFOtDWEExe_o4dqoOD6eE4IUe8RFB_oHYtzeG-dN-jRzIKr4Ybnk3c_sI4vGFk519yjRa8jfg3oGwwrrpTabHdvKZF_vl4DhY9NG9Erslpz8qXPc1mT4m-ZvN9-IKu1IO8ukHv3ErN78fTu8pTuMp4x8UB_RbqHSPIQGZMPeMh0D5nkITNWPOBRpHsUSR5FxsqF7_6GxzOGztmAV-__9sn5aS7Q7HEaouB6X-OTd_UYMy0_jdy4YTDEqcqnxcaOpVHwEub_hN_M4PwaFkuS5RK4WAKX_wVXw6vfAQAA___YT8lc - -# Multiple SRFs with different lengths -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT a, generate_series(1, 2), generate_series(1, 4) FROM data WHERE a < 2 ORDER BY 1, 2, 3] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyckkFvozAQhe_7K9DsZVdxBIYcVj5xzSUbJblVqHLxU0pFbDR2pFYR_70KVE1pA0p7w-P55r3h-UTWGaz0AZ7UHUkSlFIhqGFXwnvH53LftDTPpBJBlW2O4VwuBJWOQepEoQo1SNFOP9TYQBtwnJAgg6CruhvdcHXQ_JIbHTQJ2jbaehXNY0lFK8gdw2WqD3oPUrIVI8oXQccGDDOUyuWMivaKvTW7J5RhixCnQ2QPC9YB9x5cwf-RSqnlavdPROnb118SE12L966xbdLRba4Y3ToO4Dj7spfI05nIsxkJOuhQPkY1rIrG_2E2UJW3pydvSS-W81jGv3-Q4BX1DXzjrMdAeGxyco4XZo_-OXh35BJrdmUn0x__d1xXMPChv5X9YWm7q87gR1hOwukATj7D6SS8mIazb9ku2l-vAQAA__9Q1TXj diff --git a/pkg/sql/logictest/testdata/planner_test/distsql_subquery b/pkg/sql/logictest/testdata/planner_test/distsql_subquery deleted file mode 100644 index 382c3853d2f4..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/distsql_subquery +++ /dev/null @@ -1,37 +0,0 @@ -# LogicTest: 5node-dist - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT 1 WHERE EXISTS (SELECT 1)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyMj0FLxDAUhO_-ijCnFQKmN3lHpUJBVtkWESSHkjzWYk1KXgLC0v8ubQ7iQfA48yUz8y4I0fNx_GQBvaGB1VhSdCwS02bVB53_AhmNKSwlb7bVcDEx6II85ZlBeBnnwnJjoOE5j9O8Jxp1pw5GufcSPuQaGg_TnDmRal-7fujVoW8f2_tBNRs7cfAba4ioOw63sKtGLPmnVPJ4ZpBZ9f-HnViWGIR_Dfs72WqwP3M9XmJJjp9TdHtNlU_7v93wLLnSpoouVLTa9eo7AAD__3yZb9Q= - -statement ok -CREATE TABLE abc (a INT PRIMARY KEY, b INT, c INT) - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT EXISTS (SELECT * FROM abc WHERE a = 1)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyMj0FLxDAUhO_-ijKnXQmYXgNelIgFdaVdVJAcYvJYizUpeQkIS_-7bHMQD4LH-SaZmXdEiJ4e7Ccx1CtaGIE5RUfMMZ1QfdD5LygpMIa55BM2Ai4mgjoij3kiKDzZqRBfSAh4ynac1kTZXDUb2bj3Ej54C4GegqekGv3SDfthM-g7fb0_v-l39_bNPd_qXtvLdguzCMSSf-o42wNByUX8f1JPPMfA9GvS38lGgPyB6tkcS3L0mKJba6rcrf9W4IlzddsqulCtxSxn3wEAAP__zL5u_w== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM abc WHERE a = (SELECT max(a) FROM abc WHERE EXISTS(SELECT * FROM abc WHERE c=a+3))] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyMUE1LxDAQvfsrwjttNeIWbwFhQbpYUFfagoL0ME2GpdA2JUlhZel_lzagKAge38e8mTdnDNbwM_Xsod6RopYYndXsvXULFQ25OUFtJdphnMJC1xLaOoY6I7ShYyhU1HRcMBl2N1tIGA7Udmvs6Nqe3MeOGg2JcqTBK3ENiX3bBXZK7FJxJzZl9pjdV6Kn04YSsS8OT4IaLV4fsiIT2VteVuWX6fK3rpcEElfiNkkS1LOEncL3tT7QkaHSWf6_UcF-tIPnH2X-St7OtQSbI8eveTs5zS_O6nVNhId1biUM-xDVNIJ8iNJczxefAQAA__-3GX_l - -query T -SELECT url FROM [EXPLAIN ANALYZE (DISTSQL) SELECT EXISTS (SELECT max(a) FROM abc)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyMj0FLAzEUhO_-imVOLQRMr7m1ngriSiteJIclGerimix5LyCU_e_SzUE8CB7nm2Rm3hUpRz4NnxS4N-zgDeaSA0VyuaH24Bi_4KzBmOaqN-wNQi6Eu0JHnQiH12GqlHsLg0gdxmlNtN2h29guvNf0IVsYnJgii-se9ueXjZbK_fnQ949b-MUgV_0pEB0uhLOL-f-IE2XOSfhrxN_J3oDxwnao5FoCn0sOa02T_fpvBZGizd01cUzNWvxy9x0AAP__guVrPA== - -query T -SELECT url FROM [EXPLAIN ANALYZE (DISTSQL) SELECT * FROM abc WHERE a = (SELECT max(a) FROM abc WHERE EXISTS(SELECT * FROM abc WHERE c=a+3))] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyMUE1LxDAQvfsrwjspRGxvEhB2FYSFZZVtPUkPaTMsgbQpmSm6LP3v0gYUD4LH9zFv5s0FQ3R0sD0xzDtKNBpjih0xx7RQ2bBznzCFhh_GSRa60ehiIpgLxEsgGNS2DXQk6yjdFdBwJNaHNXZMvrfpvLFtB41qtAMbdQuNZx-EklGbUj2op21VXx_e9nu1rdTuUN_fQCPFD1aJrDNqCWWxISjxPRlVMDTas9C3QT2imTXiJD9nstgTwZSz_n-VI_EYB6ZfLf5KLuZGg9yJ8rs4Tqmj1xS7dU2GL-vcSjhiyWqZwW7I0tzMV18BAAD__2BwgFE= - - -# Ensure subquery outside of the explain doesn't mess anything up - -query TB -SELECT url, exists (SELECT 1) FROM [EXPLAIN ANALYZE (DISTSQL) SELECT * FROM abc WHERE a = (SELECT max(a) FROM abc)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyMUE1LxDAQvfsrwjspRGxvEhB2FYSFZZVtPUkPaTMsgbQpmSm6LP3v0gYUD4LH9zFv5s0FQ3R0sD0xzDtKNBpjih0xx7RQ2bBznzCFhh_GSRa60ehiIpgLxEsgGNS2DXQk6yjdFdBwJNaHNXZMvrfpvLFtB41qtAMbdQuNZx-EklGbUj2op21VXx_e9nu1rdTuUN_fQCPFD1aJrDNqCWWxISjxPRlVMDTas9C3QT2imTXiJD9nstgTwZSz_n-VI_EYB6ZfLf5KLuZGg9yJ8rs4Tqmj1xS7dU2GL-vcSjhiyWqZwW7I0tzMV18BAAD__2BwgFE= true diff --git a/pkg/sql/logictest/testdata/planner_test/distsql_tighten_spans b/pkg/sql/logictest/testdata/planner_test/distsql_tighten_spans deleted file mode 100644 index ea0027994e18..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/distsql_tighten_spans +++ /dev/null @@ -1,328 +0,0 @@ -# LogicTest: 5node-dist - -# This test verifies that we correctly tighten spans during index selection as -# well as after partitioning spans in distsql. - -################ -# Schema setup # -################ - -statement ok -CREATE TABLE p1 ( - a INT, - b INT, - PRIMARY KEY (a, b), - INDEX b (b) -) - -statement ok -CREATE TABLE c1 ( - a INT, - b INT, - PRIMARY KEY (a,b) -) INTERLEAVE IN PARENT p1 (a, b) - -statement ok -CREATE TABLE p2 ( - i INT PRIMARY KEY, - d INT -) - -statement ok -CREATE INDEX p2_id ON p2 (i, d) INTERLEAVE IN PARENT p2 (i) - -statement ok -CREATE TABLE bytes_t (a BYTES PRIMARY KEY) - -statement ok -CREATE TABLE decimal_t (a DECIMAL PRIMARY KEY) - -############################ -# Split ranges for distsql # -############################ - -# Perform some splits to exercise distsql partitioning as well. - -# Create split points at X = 2. -# Also split at the beginning of each index (0 for ASC, 100 for DESC) to -# prevent interfering with previous indexes/tables. - -# p1 table (interleaved index) -statement ok -ALTER TABLE p1 SPLIT AT VALUES(2) - -# Create a split at /2/# -statement ok -ALTER TABLE c1 SPLIT AT VALUES(2,1) - -# Split index -statement ok -ALTER INDEX b SPLIT AT VALUES(0) - -statement ok -ALTER INDEX b SPLIT AT VALUES(2) - -# p2 table (interleaved index) -statement ok -ALTER TABLE p2 SPLIT AT VALUES(0) - -statement ok -ALTER TABLE p2 SPLIT AT VALUES(2) - -# Create a split at /2/# -statement ok -ALTER INDEX p2_id SPLIT AT VALUES(2) - -##################### -# Distribute ranges # -##################### - -# Distribute our ranges across the first 3 (for primary index) and last 2 -# (for seconary indexes) nodes. - -statement ok -ALTER TABLE p1 EXPERIMENTAL_RELOCATE SELECT ARRAY[i], i FROM generate_series(1,3) AS g(i) - -statement ok -ALTER INDEX b EXPERIMENTAL_RELOCATE SELECT ARRAY[i+3], i FROM generate_series(1,2) AS g(i) - -# Interleaved index table -statement ok -ALTER TABLE p2 EXPERIMENTAL_RELOCATE SELECT ARRAY[i], i FROM generate_series(1,3) as g(i) - -############################# -# Verify range distribution # -############################# - -# p1 table (interleaved table) - -query TTTI colnames -SELECT start_key, end_key, replicas, lease_holder from [SHOW RANGES FROM TABLE p1] ----- -start_key end_key replicas lease_holder -NULL /2 {1} 1 -/2 /2/1/#/54/1 {2} 2 -/2/1/#/54/1 NULL {3} 3 - -# Indexes - -query TTTI colnames -SELECT start_key, end_key, replicas, lease_holder from [SHOW RANGES FROM INDEX b] ----- -start_key end_key replicas lease_holder -NULL /0 {3} 3 -/0 /2 {4} 4 -/2 NULL {5} 5 - -# p2 table (interleaved index) - -query TTTI colnames -SELECT start_key, end_key, replicas, lease_holder from [SHOW RANGES FROM TABLE p2] ----- -start_key end_key replicas lease_holder -NULL /0 {1} 1 -/0 /2 {1} 1 -/2 /2/#/55/2 {2} 2 -/2/#/55/2 NULL {3} 3 - -############### -# Query tests # -############### - -# p1 table - -# Secondary index should not be tightened. -query TTT -EXPLAIN SELECT * FROM p1 WHERE b <= 3 ----- -scan · · -· table p1@b -· spans -/4 - -# Partial predicate on primary key should not be tightened. -query TTT -EXPLAIN SELECT * FROM p1 WHERE a <= 3 ----- -scan · · -· table p1@primary -· spans -/4 - -# Tighten end key if span contains full primary key. -query TTT -EXPLAIN SELECT * FROM p1 WHERE a <= 3 AND b <= 3 ----- -scan · · -· table p1@primary -· spans -/3/3/# -· filter b <= 3 - -query TTT -EXPLAIN SELECT * FROM p1 WHERE a <= 3 AND b < 4 ----- -scan · · -· table p1@primary -· spans -/3/3/# -· filter b < 4 - -# Mixed bounds. -query TTT -EXPLAIN SELECT * FROM p1 WHERE a >= 2 AND b <= 3 ----- -scan · · -· table p1@primary -· spans /2- -· filter b <= 3 - -# Edge cases. - -query TTT -EXPLAIN SELECT * FROM p1 WHERE a <= 0 AND b <= 0 ----- -scan · · -· table p1@primary -· spans -/0/0/# -· filter b <= 0 - -query TTT -EXPLAIN SELECT * FROM p1 WHERE a <= -1 AND b <= -1 ----- -scan · · -· table p1@primary -· spans -/-1/-1/# -· filter b <= -1 - -query TTT -EXPLAIN SELECT * FROM p1 WHERE a = 1 AND b <= -9223372036854775808 ----- -scan · · -· table p1@primary -· spans /1-/1/-9223372036854775808/# - -query TTT -EXPLAIN SELECT * FROM p1 WHERE a = 1 AND b <= 9223372036854775807 ----- -scan · · -· table p1@primary -· spans /1-/1/9223372036854775807/# - -# Table c1 (interleaved table) - -# Partial primary key does not tighten. - -query TTT -EXPLAIN SELECT * FROM c1 WHERE a <= 3 ----- -scan · · -· table c1@primary -· spans -/4 - -# Tighten span on fully primary key. -query TTT -EXPLAIN SELECT * FROM c1 WHERE a <= 3 AND b <= 3 ----- -scan · · -· table c1@primary -· spans -/3/3/#/54/1/# -· filter b <= 3 - -# Table p2 with interleaved index. - -# From the primary index. - -# Lower bound (i >= 2) -query TTT -EXPLAIN SELECT * FROM p2 WHERE i >= 2 ----- -scan · · -· table p2@primary -· spans /2- - -# Upper bound (i <= 5) - -query TTT -EXPLAIN SELECT * FROM p2 WHERE i <= 5 ----- -scan · · -· table p2@primary -· spans -/5/# - -# From the interleaved index: no tightening at all. - -# Lower bound (i >= 1 AND d >= 2) - -# Note 53/2 refers to the 2nd index (after primary index) of table p2. -query TTT -EXPLAIN SELECT * FROM p2@p2_id WHERE i >= 1 AND d >= 2 ----- -scan · · -· table p2@p2_id -· spans /1/#/55/2/2- -· filter d >= 2 - -# Upper bound (i <= 6 AND d <= 5) - -query TTT -EXPLAIN SELECT * FROM p2@p2_id WHERE i <= 6 AND d <= 5 ----- -scan · · -· table p2@p2_id -· spans -/6/#/55/2/6 -· filter d <= 5 - -# IS NULL - -query TTT -EXPLAIN SELECT * FROM p2@p2_id WHERE i >= 1 AND d IS NULL ----- -scan · · -· table p2@p2_id -· spans /1/#/55/2/NULL- -· filter d IS NULL - -# IS NOT NULL - -query TTT -EXPLAIN SELECT * FROM p2@p2_id WHERE i >= 1 AND d IS NOT NULL ----- -scan · · -· table p2@p2_id -· spans /1/#/55/2/!NULL- -· filter d IS NOT NULL - -# String table - -query TTT colnames -EXPLAIN SELECT * FROM bytes_t WHERE a = 'a' ----- -tree field description -scan · · -· table bytes_t@primary -· spans /"a"-/"a"/# - -# No tightening. - -query TTT colnames -EXPLAIN SELECT * FROM bytes_t WHERE a < 'aa' ----- -tree field description -scan · · -· table bytes_t@primary -· spans -/"aa" - -query TTT colnames -EXPLAIN SELECT * FROM decimal_t WHERE a = 1.00 ----- -tree field description -scan · · -· table decimal_t@primary -· spans /1-/1/# - -# No tightening. - -query TTT colnames -EXPLAIN SELECT * FROM decimal_t WHERE a < 2 ----- -tree field description -scan · · -· table decimal_t@primary -· spans -/2 diff --git a/pkg/sql/logictest/testdata/planner_test/distsql_union b/pkg/sql/logictest/testdata/planner_test/distsql_union deleted file mode 100644 index b7a02727584d..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/distsql_union +++ /dev/null @@ -1,285 +0,0 @@ -# LogicTest: 5node-dist - -statement ok -CREATE TABLE xyz ( - x INT, - y INT, - z TEXT -) - -statement ok -ALTER TABLE xyz SPLIT AT VALUES (2), (3), (4), (5) - -statement ok -ALTER TABLE xyz EXPERIMENTAL_RELOCATE VALUES - (ARRAY[1], 1), - (ARRAY[2], 2), - (ARRAY[3], 3), - (ARRAY[4], 4), - (ARRAY[5], 5) - -query TTTI colnames -SELECT start_key, end_key, replicas, lease_holder from [SHOW RANGES FROM TABLE xyz] ----- -start_key end_key replicas lease_holder -NULL /2 {1} 1 -/2 /3 {2} 2 -/3 /4 {3} 3 -/4 /5 {4} 4 -/5 NULL {5} 5 - -subtest Union - -# Simple UNION ALL and UNION. (The ORDER BY applies to the UNION, not the last select.) -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT x FROM xyz UNION ALL SELECT x FROM xyz ORDER BY x] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy0lk9vozAQxe_7Kaq5rhEZY_KHU669tKt2b6sc2DCqIqUY2Y7UbpXvvgKE2kTN2CbkCPS9-fnNU50PqHVFD-UrWSj-AIIACQIyEKBAQA4bAY3RW7JWm_ZPesF99QbFTMCubg6ufb0RsNWGoPgAt3N7ggJ-l3_39ERlRSadgYCKXLnbd2Mas3stzfv67f0fCHhuytoWd0naTn48uOJujbA5CtAH92lvXflCUOBRjEPIJ0OQMQjP2jgyKZ4lsMafF_2zMf75FP6fttpUZKj6zvQbiAed6CaVp2e8NF6djMfwDWLABlOZpFl0jSIg5hNCyBiIYdE4dtGB_vOx_jI8RBkSYpakKnqTERCLCSFkDMSQtLxR0oP_Yqx_Fh5iFhKiSrr_vnGbjIBYTgghYyCGpLMbJT34L8f6q_AQVUiIeRK9xwiE1WQIMgZhSFndKOXBf3WjnwBPZBtdWwq6fWft_U3VC_X3vdUHs6VfRm-7Mf3jY6frXlRkXf9V9g_3df-pBfwqRlac8WLJitWJGM_F2TVixZ8Zee6cVS948ZwVL3nx4ppDL68Rr1gxehJDvmToaxlfMw86XtUz5IuGuQedrxrOPXK-az52vmw-Nd82XHnQ-b7JmUfON87DLvnCnas3xx__AwAA__-BxeXG - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT x FROM xyz UNION SELECT x FROM xyz ORDER BY x] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyslkFvozAQhe_7K6q5riMyNiQNpx720st21e5tlQMbRhVSipFtpHar_PcVIKUlasY2cATnzZsv7wn5HWpd0s_ihSzkfwBBgAQBCgSkICCDvYDG6ANZq033k0FwX75CvhZQ1U3rutd7AQdtCPJ3cJU7EuTwu_h7pEcqSjLJGgSU5Irq2Ns0pnopzNvd69s_EPDUFLXNb1ZJ5_zQuvzmDmF_EqBb9zHeuuKZIMeTCF_hR2VdVR9cko39mfkyZv5nRFyOUU1ixHDI9KrBx9y21qYkQ-Vo6v7ErSDXwStkMYxP2jgyicTL8d-vzt-M5mNEjgExJnKVqOiyepY4_4ubiWWNgVySUk2ixHDMcV1lOKYMoVSrJI3O0rPEmXI7McsISFySUk2ixHDMcZYqHFOFUKar_lMfl6VniTPl7cQsIyBxSUo1iRLDMcdZpuGYaQhltopO0rPCmXE3MckIRFyOUU1ixHDI69eBLwweyTa6tnRxLfh68rq7LlD5TMPdwurWHOiX0YfeZnh86HX9i5KsG05xeLivh6Nuwc9iZMXpSIyXYsmKFe-s5jinrDjjnTNWLCWv3rDqLS_ezoG-ZcU73nk3xxk9HfOVbFbLkK8ZenqGs4qGfNPQUzXku-Yz57uGnrLhrLYhXzf09A1nFU7yhZOewsm4wu1P3_4HAAD__6taIWc= - -# UNION with no overlap. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT x FROM xyz WHERE x < 3 UNION SELECT x FROM xyz WHERE x >= 3 ORDER BY x] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyslk1r4zAQhu_7K8JcV8Eeyc6HYKGHZSGXdml7283Baw_FkFpBkqHdkv9eHENah0aSrRxj95139PiB6g0aVdFt8UwG5B9AYMCBgQAGGTDIYctgr1VJxijd_Ukf2FQvIFMGdbNvbfd4y6BUmkC-ga3tjkDCY_FvR_dUVKSTFBhUZIt6d6zZ6_q50K83L6__gcHDvmiMnM2TrvlXvbOk5ewGZ3_bNBXlTEgpN7ePK2Bw19ruDWwPDFRrP7qNLZ4IJB5Y-H4_a2PrprRJPlzOMZ-Pmf_5_DgdAP0YQ0BMIoDhCLKLBR9z20bpijRVg6nbg2sFngavkI8544PSlnTC8Xz894vzF4P5OOIrB3zkhM8TcV3PPRueEC8mej6GQAyCGNNDGWA4hKHpPBwCD2Eg5kl2XQ08G54QLCdqMIIAxiCI0SCUAYZDGGogwiGIEAbZ_Pjv54oaeDY8IVhN1GAEAYxBEKNBKAMMhzDUIAuHkIUwyOfXlcCz3wnAeqIEI86P0wHEKBBKAMMRXL76fFFwT2avGkNnV6CvJ6fd1YiqJ-rvUUa1uqTfWpXHmv7n3TF3fFCRsf1b7H9smv5Vt-DnMDrD2SCM52HuDAt3s4hpzpzh3N2cO8Ocu9MLZ3rpDi9jDr1yhtfu5nVMM3oc80kWZRm6NUOPZxglGrpNQ49q6HbNV-52DT2yYZRt6NYNPb5hlHDcLRz3CMfHCbc9fHsPAAD__4-gb1o= - -# UNION with partial overlap. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT x FROM xyz WHERE x <= 4 UNION SELECT x FROM xyz WHERE x > 1 ORDER BY x] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyslk1r4zAQhu_7K8JcV8Ee2c6HYKGHZSGXdml7283Baw_FkFpGkqHdkv9ebENah0aSrRxt5513_PiB6A1qWdJt_kwaxB9AYMCBQQIMUmCQwZ5Bo2RBWkvV_WQI7MoXEDGDqm5a093eMyikIhBvYCpzIBDwmP870D3lJakoBgYlmbw69DWNqp5z9Xrz8vofGDw0ea3FYhl1zb-qgyElFje4-NvGcVL8WKRCiN3t4wYY3LWmewT7IwPZmo9ybfInAoFH5r_gz0qbqi5MlI23s8znU-Z_BoDzCdAC_QEkswCgP4H0YsHH3LaWqiRF5Wjq_mhbgcfeK2RT3vFBKkMq4ng-_vvF-avRfJzwkT2-ccSXUXJlzx0rnhivZno-BUEIgwDTfRGgP4Ox6dyfAfdBkCyj9MoaOFY8MVjP1GACAgxhEKCBLwL0ZzDWIPFnkPggSJf9v881NXCseGKwmanBBAQYwiBAA18E6M9grEHqzyD1QZAtryyBY8ETge1MCSYAwPkEAhTwBYD-BC4ffb4ouCfdyFrT2RHo68lxdzSi8omGc5SWrSrot5JFXzNc3vW5_kZJ2gxPcbjY1cOjbsHPYbSG01EYz8PcGk7szUlIc2oNZ_bmzBrm3J5eWdNre3gd8tIba3hrb96GNKPDMZdkQZahXTN0eIZBoqHdNHSohnbXXOV219AhGwbZhnbd0OEbBgnH7cJxh3B8mnD747f3AAAA___-6W9V - -# UNION ALL with swapped column orders. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT x, y FROM xyz UNION ALL SELECT y, x from xyz] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJyklE2PqjAUhvf3V5izLoEW8IMVWzd64727CQuGnhgSpaQtiY7hv0-AhaPRSQ9d0vbJ--RtOTdolMRdeUYD2QdwYCCAQQwMEmCQQsGg1apCY5QejkzAVl4gixjUTdvZYblgUCmNkN3A1vaEkMH_8vOEBywl6jACBhJtWZ_GmFbX51Jf88v1Cxj8a8vGZIsgHJL3nc0WOWe5gKJnoDp7TzC2PCJkvGfzLFKihWA5f2sh3lrcw7tGaYka5UNw0b_w3KlAtSGPnk6-zo4fsrl7A9yhgVAEYTznJggeS7IH4S6Eu4dw8YiDMJnTB8FjRfYg9BG7e8QuHkkw_knkPggea7IHoY_E3SNx8UiDOW0QLDZEi5lz64XFAU2rGoNOUyka5hrKI05D0KhOV_hXq2qMmT73IzcuSDR22hXTx7YZt8aafsLcBxa_wpw_0NEzHftEJz5w6gMvfeCVD7z2gTder4T2xor-z3cAAAD__18c6HE= - -# UNION ALL and UNION with different ORDER BY types. -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT x FROM xyz ORDER BY y) UNION ALL (SELECT x FROM xyz ORDER BY z) ORDER BY x] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy0lk9vm0AQxe_9FNFcswhmAJtw8jWXpEp6qzhQs4osJSxasJQ08nev-CMldsPMsqVH_gzv_WbeLvsOtan0XfmiW8h_AoICAgUxKEhAQQqFgsaavW5bY_tXxoLb6hXySMGhbo5df7tQsDdWQ_4O3aF71pDDj_LXs37QZaVtGIGCSnfl4XmQaezhpbRvu9e336DgsSnrNr8Kwl75_tjlVztUO4LipMAcuw-FtiufNOR4Uu4uHo3ttA3TcwM7unbTolmtDwljK2119bdCcfrC0J0JTBPiRUcmK7M-4iXMnzuPuLz18ayNxKP1uPHsffqfek-4rPcbD2iiC0t4Pfv9rc_34zW-L_UR-T4mZ6_PyWdn8rggug7JDSkIY59tQ_Axtdk3uuTNTD7QrgvWDRq3qyxYcqd2go6DMPGZtOBjgvZlJl9mjH2gXSftBo3ZKpOO3amdoJNg-F8vnrTgY4L2ZSZfZkx8oF0n7QaNN6tMOnGndoJOA585Cy4mZF9i8iXGdDmy65TdkCla_aj1hdiDbhtTt9rp7x_15wddPenxvNGao93r79bsB5nx8n6oG25Uuu3Gpzhe3Nbjo97g52Jki-msGC-LiS3e8MoxW5zwxQlbnPK2U7Z4yytv2OKMV97-S3HGjyrlfd_wKYmEmPAhE3KCfMqQBHE-Z8K0kQ8aCklDPmoSOZ81FNYI8mmTyPm4YSaIC4ETxPnAkRA44gMnkJOwrQmBIz5w0q7IB46EwNGyva04ffsTAAD__ysR8gw= - -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT x FROM xyz ORDER BY y) UNION (SELECT x FROM xyz ORDER BY z) ORDER BY x] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJysl09v4jwQxu_vp6jmWqMw44Q_OXF4L71sV-3eVhyyxKoi0QQ5QWq34ruvIEgpbpmxHY5Anzzjn3-20g-om9L8KF5NC_lvQFBAoECDghQUZLBWsLPNxrRtY49_0gceyjfIpwqqerfvjl-vFWwaayD_gK7qtgZy-FX82ZonU5TGJlNQUJquqLanmp2tXgv7vnp7_wsKnndF3eZ3k-TY_Ljv8rsVqhXB-qCg2XdDQ9sVLwZyPCj_KZ4b2xmbZJcDrOjer4tCuv6v2q6qN12CznpXOLRdrdIhVZ_hYhZOV18dI42gS-56ffFmUXjJ3U0fvLOrVUPDvm5saawpL56_PnDD6K97fW2EeQRaje7j768-f3HxfAwwyEOghCaJjjmgwhzndc5uckCFruGAfqEafEBD8M5i-PoeUT--5K447oj6AiZ3P8OPKPkDJh--epKkMf4Kc5z5zm_ir9A1-Euj_Q3Ai_MYvr7--vEld8Vx_voCJnc_w_3V_oC1D990cnqLCfZXmOPMd3ETf4WuwV892t8AvLiI4evrrx9fclcc568vYHL3M9zf1B9w6sM3m8TYK0xxpru8ib1C12BvOtreALi4DKfr664fXXLXG-euL15yd3Pc6_03VU-m3TV1a5zX_O-fPD2-_pvyxfT_K7TN3m7MT9tsTjX9x8dT7vRFadqu_xX7Dw91_9NxwM9hZMPEh4kNzy7C6IY1G0755pQNZ3w4GzP2jA3P-eY5G9YC7gWbXvLhJW_JVNCEl0xghrxlKKwbec9QC3HeNGl2XjUUXENeNpwJcV43aXbeN1wI5bxwKBiHvHLC7MQbR8K9RsLFJt1so6424o0j4XIjXjkSlKNR9xvxxpFwwxGvHAnKEa-cNDtvnBYuOc0rpwXlNK-cO_v68N-_AAAA__90nGMW - -# UNION ALL with conflicting numbers of ORDER BY columns. -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT x FROM xyz ORDER BY y) UNION ALL (SELECT x FROM xyz ORDER BY y, z) ORDER BY x] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy0ljFvo0AQhfv7FdG0XoRnFmyHijZNckquO7ngzCqy5HjRgqXkIv_3kwEpsQkzy8ZX2mZ475v3WPMOe1ua--LF1JD9BgQFBAo0KEhAQQprBZWzG1PX1p0u6QbuylfI5gq2--rQnL5eK9hYZyB7h2bb7Axk8Kv4szOPpiiNi-egoDRNsd21MpXbvhTuLX99-wsKnqpiX2c3UXxSfjg02U2OKidYHxXYQ_OhUDfFs4EMj8rfxZN1jXFxem4gp5mfFo1qfUhYVxpnyqHC-viFoXsb2SrGi430VkZ96CnMnzePGLB6letRJ0nA9nExWI7K9cxbM_1GCq0QkwThtCQWAfxEF7ZwNnr_Zcj99TXuL-0S-T0mZ5ePya_O5HFCkT16HFMU65BDRPDRr3nY4pBDZAozBUH7P75-3Li85uNL_vxe-DqKk5DMBR89-xA9JPMJzKiDoP0z9-PG1TUz1_78XvhJ1P6jT85c8NGzD9FDMp_AjEkQtH_mftx4e83ME39-L_w0CklccNGTD8FDEp9AjGkAsn_eftQ0_1-vZV9oPpq6svvaeL0lzE_vGaZ8Nt17SW0PbmN-OrtpZbqPD-1c-0Vp6qb7FbsPd_vup5PBz8PIDtPZMF4OEzu84JU1O5zwwwk7nPK2U3Z4ySsv2OEVr7z8zvCKjyrlfd_yLZkLNeFLJvQE-ZYhCeJ8z4S0kS8aCk1DvmoSOd81FJ4R5NsmkfN1w5UgLhROEOcLR0LhiC-cQE7CsSYUjvjCSaciXzgSCkfTzrb18ce_AAAA___ZWPz5 - -# Only one distinct processor should be used in the single node UNION case. -query T -SELECT url FROM [EXPLAIN (DISTSQL) VALUES (1), (2) UNION VALUES (2), (3)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJykkTFLBDEQhXt_xTF1YJO9LpWFzTUqtrJFSIYjEDNLZiLCsf9dNinOE09Wr8zM--a9R06QKeCje0MG-woGJgVzIY_MVNZRFxzCB1itIOa5yjqeFHgqCPYEEiUhWEjkXdq9u1SRd3rQoCCguJiaflFAVc40izsiWLOofzqYwWxyGK86nA_XTCVgwfDt4g8ZHiJLzF6G8UIL9wauJdj_peML8kyZcVM3vSbEcMReh6kWj8-FfLPpz6fGtUFAlr4d--OQ26p9wlfY3AKPv8L7C1gv03L3GQAA___qN9W_ - -subtest Intersect - -# Basic INTERSECT ALL and INTERSECT case -- should return every row. -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT y FROM xyz) INTERSECT ALL (SELECT y FROM xyz) ORDER BY y] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8ll9v2jwUxu_fT4HO1TvNKLGT8CfSJKap0ipV7VS4m3KREq8gURI5QSqr-O4TUNYlIX5i0vpuDH72k3N-pycvtE4TeRs_yZzCn8SJkSBGHjHyiVFAEaNMpXOZ56na_-QIXCfPFLqMlutsU-z_O2I0T5Wk8IWKZbGSFNIsfljJexknUjkuMUpkES9Xh2sytXyK1XbyvP1NjKZZvM7DXt_Z33y3KcLeRFC0Y5Ruitfj30592PYWcb4onzfhFO0iRnkRP0oK-Y5dFjOwGlM0xnw7Z7NOVSKVTEonRXsS_eTMs36P88VUFneZwysdmW0zGfaub2dX99Orb7Pe15sbYrSSv4r_J_zTF7V8XBz-9ffReeXR3x7LM6n-NFWFVA4PqpX63Hi-36Js5yryeuiZELdpP80c4VZrfPb6oHQ9by8XbyGXI_qO9yFTYBB0YDmoaAxqYQ64pTkA9T_NweDSORDt-yva9NfrO_6HiGgQdGg5qGgMakFEYUlEUP-TiMNLRfTa99dr01-_f1jL7y-iQdCR5aCiMagFET1LIoL6n0QcXSqi376_fpv-Bv0P0dAg5thqTNEY04KEviUJQfVPEo7f4_X0zPn3Ms_SdS5bvXm6-5rJ5FEee5CnGzWXP1Q6P1xz_Hh34A6vG4nMi-O34vjhen38ah-wPTzsAnPeiQ460WM9zQ1qJszgYRe4UjNTOuhEj_W0qNLuv7RXgt0q7GlhX98tXwsLrr866DIfehjMhx5G8wFoMB-ABvMx6DIfehjMhx5G8wFoMB-ABvMx1Fo60ks66jIf4y6G62FguB5GhgMaGA5otAFM1mb9L6nJ3jSl4RIw2pzGONCc17ZISVUu9KJz_RoBpvPaHjFRHdDAdUAj2REObEc40r22Q41019NIdz0NdQc40h3gSPfaIi3rPgC613aKke61nWKku55GuutpqDvAke4AR7rX9qmR7noa6a6noe4AR7oDHOle26rld21Xr7uo7Rat7tHuvz8BAAD__yMtXoc= - -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT y FROM xyz) INTERSECT (SELECT y FROM xyz) ORDER BY y] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8mF-P4jYUxd_7KZCfWjUo2Nf8i1SJql2pI61mqoG3iocscQcklkRJkJau5rtXwAJDTO6Jk8Ab_459cnzPTwnfxSaOzHP41WQi-EdI4QklPEHCE1p4oi_mnkjSeGGyLE73PzkKnqJvIuh5YrVJtvn-47knFnFqRPBd5Kt8bUQgZuGXtXk1YWRSvyc8EZk8XK0P2yTp6muY7ibfdv8JT0yTcJMFna6_3_llmwediRLzd0_E2_yyfJaHb0YE8t2rbuHPVZavNovc71_vP5GF9S-SL7vOMsyWN35_8aBcPHyMQbaXA9XKQbYbhC41cVlnu4nTyKQmulrpsEqpTdUDNi8W-veygJK6WBg0sODVcvlXmC2nJn9JfCokNdslJug8Pc8-vU4__THr_P75s_DE2vyb_zyRv_yWrt6Wh1fnCSu_rKHLhE3jNDepT1Zqv5auP6oQ261Efix6w8Rz3I0TX_eKGd_cfny1vXQocYUO-6rrkzPNgInzbA7uSDOXINpMgmolIduNQpeaaAgTWZNnLVpASZXxzM1CY57JB_EMTNiJZ1ZqVXmmqvdIVakRdX3tDBRg4jwcwzsCxSEI2WYSVCsJ2W4UutREwzarmkBp0QJKqgwobhYaA0U9CChgwk5AsVKrChSq3iOqUiPdPTwVuQEFmDgPx-iOQHEIQraZBNVKQrYbhS410bDNVBMoLVpASZUBxc1CY6DQg4ACJuwEFCu1qkDR1Xukq9So33XGCbBwHo3xHXHiEINsLweqlYNsNwhdaqJhk3VNmLRoASVVBhM3C41hoh8EEzBhJ5hYqdX5--bG-q8mS-JNZir9M9PbZ2aiN3M8gyzepgvzdxovDtsc374cdIcPIpPlx2_l8c3T5vjV3uBHsSyK5UexvhJLN7GkJmolG6nHTdQ05NWKTZz4xIndus_vzIslOC9erVQTNfUaqUe8WrOJD3hx30GsiuIBKx7yZz1kxeCaR6xYg2KPeSr0ABYsqDhxgVdDMPBySAYgR2jg5YgN0kLLdfAKBG-xxQUPQI34AOQIEECOCIHkoC7SIsx18Cg6HjEFuYUJyUNGDsCx85hBl85zRo7A5hZpnMrOq2HZeTksO5CjsvNyWHaesgpQVvGoARML1KjsQI7KDuSo7EgOJl7xlFVg6BR_B1eQW2VXPGqUBsfOowZdOk8aBUijLNK4lB2oUdmBHJUdyUHZgRze9fOUVYCyikcNKjugLDo3gElUdoBJVHYgRxPPU5bA1BD_gFyQW2UnHjUEbuiIRw24dOJJQ4A0ZJHGpexAjcoO5KjsSA7KDuSo7MRTlgBliUcNesoHlEXnBjCJnvMBJtGDPpCjiecpS-jY-afmgtwuO48aDW7oNI-a4qXP33_6PwAA___UW-5o - -# INTERSECT ALL and INTERSECT with MergeJoiner. -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT y FROM xyz ORDER BY y) INTERSECT ALL (SELECT y FROM xyz ORDER BY y)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzEl81u4koQhff3KVCt7lWMTLUbkli6EqNRFpEyySiwG7FwcA9BIthqGylMxLuPwGgIP-7jpo1nF34-V_WpOn3CB82TWD1Gbyqj8AcxeSTIo4A8kuRRl0YepToZqyxL9PorBXAfv1PY8Wg6Txf5-u2RR-NEKwo_KJ_mM0UhDaOXmXpWUay03yGPYpVH09mmTKqnb5Fe9t-Xv8ijQRrNs7DV9teVnxZ52OoLGq08Shb57vFZHk0UhbzyqrcwSHSutN_dr97nq4PH74iXZes1yl4PARqtdi0ImxY-q8D1yRCcIQPXrIMs7WH3nETHSqv4ZOFK3zpxnG9KT9RA5U-pLw4UHS5TFbbuH4d3z4O7r8PWl4cH8mimfub_9vnqv__1dPJa_PlHYy7VuOt2vhOdPybtJPXF_hzKyvf2yrPFmlXYMl-0_cDabqCJ7Z71Lmk3Gx3qFCI4QwiuWQlZ2kNzhuPGDCeqT1pUGXTQ9qX1xoMmtoO-vuTGW-jAdQoRnCEE16yELO2huY0XjW18UH3SQZVBy_bmXx-7jQdNbAd9c8mNt9CB6xQiOEMIrlkJWdpDcxsfNLbxsvqkZZVBd9vW-w5a2I759pL7bqEC1ydDcIYMXLMOsrSH5rZd_pWfECeaelZZmswzVenXQWd9LBVPVCFWliz0WH3XyXhTpnj5tOE2b8Qqy4tPuXhxPy8-Wjf4GeZDmD_Dcg9mO5g7TnTXhRZOtQWoLYyKB2bFAwvFhR18oLgt3XWhhVNtAWpLo-JgXF0jLHrmefWM9LUZvnaxlxlG9gI00MxMI3sBGtS-MSp-a1b81sVeZhjZC9Bgxc00shegQW02Zwi6io9u0_0EEiCCjq5Tqwwy0zCEAI6ObsZhDAEcVT-6VPeFl0D4o1vVxiuARmZBONpYM47sgnBU3RwpaGzmSGGQKewUKoCGfnGLFYBDv7gFC5uThUG0sFO2ABr6xS1dAA794pYvwilfhDlfBMgX4ZQvgEZ-QTg6ulu-IBxVN-eLAPkinPIF0MgvCEcb65YvCEfV7fJltPrndwAAAP__Uglmew== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT y FROM xyz ORDER BY y) INTERSECT (SELECT y FROM xyz ORDER BY y)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzE2E9v4kYYBvB7PwWaU6s1MvPOmD-WKlG1e4i0Taokt4oDC9MEKYuRbaRNo3z3Cozq4LHfZ8bY7G03yeN5_djz08Cb2CZrc7v8ZjIR_y2kCASJQCgRCC0CEYlFIHZpsjJZlqSHPykCN-vvIh4FYrPd7fPDjxeBWCWpEfGbyDf5ixGxeFx-fTH3Zrk2aTgSgVibfLl5OS6zSzfflunr_PvrvyIQD7vlNosHw_Cw8t0-jwdzEov3QCT7vLx8li-fjIjle-A-wkOS5iYNo_PV5_JT4-XJ5_J_bLJ8s13loRxVVzjcSbo2qVnHg7msLFde4evr4HmZPVvpxXs5kvIZ6WPpMuqsdd2idbJKaa49alU7WQ-2w9rHjSOV10mKteruk5tb-b0u5UyTHmfy67Kcaeow035bN9XikER_UjPznyZ9Mg8mv9uFutLk4-vOxIOb28fP9w-ff38c_PbliwjEi_kn_3kuP_3ya7p5ei7--f9L33xns87bvk2GyS7UUbWGeulGZ-tLj43vsO9DGobK21swxGnnj9t6Cy5feiuv5q1P7eMOe9cteierFldxXYsn69H2Jq7sVDe_F6ZJ3G5n8uuySdz6mfoTV15NXHLfeuSy89Qw1N7igSFOO2_SVjxw-VI8upp4HrXLSYe96xa9k1WLq3iuxZP1aHsTjzrVxe-FaRKv25n8umwSr36m_sSjq4mn3Leectl5enj87OsnHhjitPOmbcUDly_FU1cTz6N2Oe2wd92id7JqcRXPtXiyHm1v4qlOdfF7YZrE63Ymvy6bxKufqT_x1NXE0-5bT7vsvGjo7R0Y4bTvZm29A5cvvdNX886jdDnrrHXdonWySnHVzrV2sh5sb9rpTmXxe12atOt2Jr8um7Srn6k_7fQP-Q6xZqh7k-2SbWacvh4cHW7LrJ9MUVOW7NOV-StNVsdliv_eHXPHH6xNlhe_lcV_brbFrw4DfgxLNkx8mKph-TE8PgtLv7C8KE3RJWmlL0lrxacV27jmG9dsOOLDETv3hB-bD8uL0gQeNp9W4GHzaQ0e9phtfMqHJx5hqoanbHjGrzzj37IxUAGYglDhVZGAFXmRKyCNYAFxJAuII1pAHNkieVwk0EXyvEjgi7wIGJBGwoA4IgbEkTEgjpCRvDISMCN5ZySARl4kjeSpoRE4Q_DUEKCGLGq8ziB8Gh5C-Dg8hfBxeAzh48gKsqg5L16B4nlqCFBDFjU-VoA0sgLEkRUgjqwAcWQFWdScF4_unaemEresIJ4aYAXx0tAMvDQ8NQpQoyxqfKwAaWQFiCMrQBxZAeLwMwt_oFPgQKd4ahSgRlnU-FgB0sgKEEdWgDiyAsSRFYo_0Ck0PE9NJW5ZoXhqgBWKl0ZNwUvDU6MANcqixssKPg2t4OPQCj4OreDjyArNH-g0ONBpnhoNqNH8Byiw2UEaWQHiyAoQR1aAOLJCgy-m0Oo8NZW4ZYXmqalasXj_6b8AAAD__0XRRLc= - -# INTERSECT ALL and INTERSECT with no overlap. -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT x FROM xyz WHERE x < 2) INTERSECT ALL (SELECT x FROM xyz WHERE x >= 2) ORDER BY x] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8ll9v2jwUxu_fTxGdq3eaUWIn4U-kSp2mTkOq6FS427hIiVeQKImcIJVV_e5TQlEXAn7ipOSuNPnZHJ_fw_ELbeJITsInmVLwkzgxEsTIJUYeMfJpzihR8UKmaazyV_bAOHqmwGG02iTbLP_3nNEiVpKCF8pW2VpSQLPwYS3vZRhJZTvEKJJZuFoX2yRq9RSq3fXz7g8xmibhJg2snp3v_G21zqQKrGtu_do6jruwRBAE48lsSIzutln-hOavjOJt9rb3-5YPO2sZpsvyZsX7c0ZpFj5KCvgra1aD37gGefXRRYizRbyvs93EKpJKRqWV5jmJXjlxEt_DdDmV2V1i86NmznaJDKzxZHZzP735OrO-3N4So7X8nf1_zT9dqdXjsvjrbOnvZbkmvZnGKpPK5v7xSX0-u75X49hOncjboie-xCTuxYktnOMzPrm9X9qe11eP11DPFj3b7T5ABlX0W1Rx6QjxbiPEO4oQ6M4hQv2mERL1uy_qdN_t2V73DhtUMWhRxaUdFt06LDpyGHTn4PCgqcNu_e67dbrv9YqrQscOG1QxbFHFpR12u3XY7chh0J2Dw8OmDnv1u-_V6b7f695ggxpGjWu4tL9et_56HfkLenPwd_QRV_ET69_LNIk3qax1y3byM5PRo9z3II23aiF_qHhRbLP_eFdwxf0okmm2fyr2H8ab_aP8C9aHB21gzlvRfit6pKe5wZkJM3jQBj46M1Pab0WP9LQ4pp1_abcEO8ewq4U9fbc8LSy4fmu_TT70MMiHHkb5ADTIB6BBPvpt8qGHQT70MMoHoEE-AA3yMdBaOtRLOmyTj1Ebw_UwMFwPI8MBDQwHNJoAJmOz-ktqMjdNaTgEjCanMQ4055UpUlKVC73oXD9GgOm8MkdMVAc0cB3QSHaEA9sRjnSvzFAj3fU00l1PQ90BjnQHONK9MkjLuveB7pWZYqR7ZaYY6a6nke56GuoOcKQ7wJHulXlqpLueRrrraag7wJHuAEe6V6Zq-a7t6HUXldmi1X3--t_fAAAA___lQaxm - -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT x FROM xyz WHERE x < 2) INTERSECT (SELECT x FROM xyz WHERE x >= 2) ORDER BY x] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8mF1v4kYYhe_7K9BctaqRPR98xNJKqdqtGmmVVAl3bS68eJpYYrFlG2lplP9eAQWCB79nxmO4SzBn5vjMex7ZvLFlnur75JuuWPwX4yxgggVMsoApFrARew5YUeZzXVV5ufnKTnCXfmdxFLBsWazqzcfPAZvnpWbxG6uzeqFZzGbJ14V-1EmqyzBiAUt1nWSL7TZFmX1LyvXt9_W_LGBPRbKs4sEw3Oz8e7aodRkPbvng71UUyflAxHF8dz-bsoA9rOrNFfb8HrB8VR_3rurkRbOYvwf2_n7LqjpbzutwdGrOWP8o-boevCbV65nvHz0IFw8fM-LdQ9KfXFKSnVLi_cakWk0c11kt8zLVpU5PVtqu0mpTRMDm0cLoUhZQUkcLYw8LQSeXfyTV65OuH4pQNpKarQsdD-7uZ58fnz7_Ohv88uULC9hC_1P_eMt_-lRmL6_bvywmbOIyYU95WesylEZqP7euP7WI7Vwi_y96xsR9PsyLUEXNjM9uf3OyPXeouEXDQzEMZb8gBA4Pgzu-IAhdUvKJyQeFtjnxfoNSrSY8OcQ7orBHCyipNhS6WfBGIb8SCsGE7VFopGaLQmHfMmFTMjkMVb8sAg4PkzO5IIscUuI-MfmwyDYn3m9QqtWEJwhERxb1aAEl1cYiNwveLBJXYhGYsD2LjNRsWSTtWyZtSqaG2ze1HlkEHB4mZ3pBFjmkxH1i8mGRbU6836BUqwlPEMiOLOrRAkqqjUVuFrxZJK_EIjBhexYZqdmySNm3TNmUbDTsl0TA32Fubi5IIoeMePeQfDhkmxLvNybVasITAqojh3q0gJJq45CbBW8OqStxCEzYnkNGal1-qjqz_qOuinxZaatfoaJNZjp90bszqPJVOdd_lvl8u83u34etbvtBqqt6d5Xv_rlb7i5tDH4U86aYfxSrEzF3E3PpoxbcS33jo5YTWi3IxCWduCS3HtE702IOzotWC-GjlpGXekqrFZn4mBaPHMSiKR6T4gl91hNSDO55SooVKPYNTYUIYMGAihMXaDUEAy2HZAByhAZajtjADbScBi9A8AZbXPAA1IgPQI4AAeSIEEgO6sINwpwGj6KjEdOQG5jgNGT4GBw7jRl06zRn-BRsbpDGqey0GpadlsOyAzkqOy2HZacpKwBlBY0aMLFAjcoO5KjsQI7KjuRg4gVNWQGGTtBPcA25UXZBo0YocOw0atCt06QRgDTCII1L2YEalR3IUdmRHJQdyOFTP01ZASgraNSgsgPKonMDmERlB5hEZQdyNPE0ZSWYGkm_IDfkRtkljRoJHugkjRpw65ImjQSkkQZpXMoO1KjsQI7KjuSg7ECOyi5pykpAWUmjBr3lA8qicwOYRO_5AJPoRR_I0cTTlJXo2Om35obcLDuNGgUe6BSNmuatP7__8F8AAAD__zB7PFY= - -# INTERSECT ALL and INTERSECT with some overlap. -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT y FROM xyz WHERE x < 3) INTERSECT ALL (SELECT y FROM xyz WHERE x >= 1) ORDER BY y] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8lk1v2kAQhu_9FdacWnWRvWubD0uRqKpURYpIFbi1Pjh4G5AIttZGCo347xUQmtom-3px8C0EHg-z87zMPtMqieU4epQZBT-JEyNBjFxi5BEjn0JGqUpmMssStfvIARjFTxQ4jBardJ3v_h0ymiVKUvBM-SJfSgpoGt0v5Z2MYqlshxjFMo8Wy32ZVC0eI7UZPm3-EKNJGq2ywOrYu8rfFstcqsAacuvX2nHcmeUGQTAaT_vE6HadB9ZQULhllKzzl9qvJe831jzK5sViQ07hNmSU5dGDpIBv2Xk9-Gf3IK8s_r5NiDebeH3OepWoWCoZF54U7kj0kRMn8T3K5hOZ36Y2Lw1zukllYI3G0-u7yfXXqfXl5oYYLeXv_OOQf7pSi4f5_q9_rfNS669tuSazmSQql8rmfvmkPr_5fK_GsZ06kZeHnvgS46STpLZwymd8srxfKM_rq8drqGeLju22HyCDLroNurh0hHi7EeItRQhM5xih7rkREvWnL-pM3-3YXvsOG3TRa9DFpR0W7TosWnIYTOfocO9ch93603frTN_r7K8KLTts0EW_QReXdtht12G3JYfBdI4O98912Ks_fa_O9P1O-wYb9DA4u4dL--u166_Xkr9gNkd_B-9xFT_x_DuZpckqk7Vu2c7uzGT8IA8zyJK1mskfKpntyxxe3u65_f0olll-eFccXoxWh7d2X7A-3GsCc96I9hvRAz3NDc5MmMG9JnDpzExpvxE90NOiTDv_024Bdsqwq4U9_bQ8LSy4vrTfJB96GORDD6N8ABrkA9AgH90m-dDDIB96GOUD0CAfgAb56Gkt7esl7TfJx6CJ4XoYGK6HkeGABoYDGm0Ak7VZ_SU12ZumNFwCRpvTGAea88oWKajKhV50rl8jwHRe2SMmqgMauA5oJDvCge0IR7pXdqiR7noa6a6noe4AR7oDHOleWaRF3btA98pOMdK9slOMdNfTSHc9DXUHONId4Ej3yj410l1PI931NNQd4Eh3gCPdK1u1eNd29LqLym7R6h5uP_wNAAD__8vMrHA= - -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT y FROM xyz WHERE x < 3) INTERSECT (SELECT y FROM xyz WHERE x >= 1) ORDER BY y] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8mFtr40Ycxd_7KcQ8tVRGmosvESy4tFsaWJKS-K3Ng9aaJgKvJSQZNg357sV2Y8ca639mNHLefDszR2f-54fkF7YuMn2TftM1S_5inIVMsJBJFjLFQjZmDyErq2Kp67qotj_ZC66z7yyJQ5avy02z_fghZMui0ix5YU3erDRL2CL9utJ3Os10FcUsZJlu0ny126as8m9p9Tz__vwvC9l9ma7rJBhF251_z1eNrpJgzoO_N3Esl4FMkuT6ZjFjIbvdNEkwF-zhNWTFpjnuXTfpo2YJfw3t_f2W102-XjbR-NTcnLfWP0q-PgdPaf105vdHD8LFw_uMeP-Q9KeA26cke6XEh41JdZo4rrNZF1WmK52drLRbpdOmiIHNo4XxpSygpI4WJh4Wwl4u_0jrp3vd3JaRbCW1eC51ElzfLD7f3X_-dRH88uULC9lK_9P8OOc_faryx6fdq8OEdV_W1GXC7ouq0VUkjdR-7lx_ZhHbuUT-X_SMiZtiVJSRitsZn93-6mR77lBxi4ZHYhTJYUEIHB4Gd3JBELqk5BOTDwptc-LDBqU6TXhyiPdE4YAWUFJdKHSz4I1C_kEoBBP2hkIjNVsUCvuWCZuSyVGkhmURcHiYnOkFWeSQEveJyYdFtjnxYYNSnSY8QSB6smhACyipLha5WfBmkfggFoEJe2ORkZoti6R9y6RNydRo96Q2IIuAw8PkzC7IIoeUuE9MPiyyzYkPG5TqNOEJAtmTRQNaQEl1scjNgjeL5AexCEzYG4uM1GxZpOxbpmxKNh4NSyLg7zA3VxckkUNGvH9IPhyyTYkPG5PqNOEJAdWTQwNaQEl1ccjNgjeH1AdxCEzYG4eM1Pr8VXVm_Ttdl8W61lb_QsXbzHT2qPdnUBebaqn_rIrlbpv929udbvdBputm_y3fv7le77_aGnwv5m0xfy9WJ2LuJubSRy24l_rKRy2ntFqQiUs6cUluPaZ3psUcnBetFsJHLWMv9YxWKzLxCS0eO4hFWzwhxVP6rKekGFzzjBQrUOwrmgoxwIIBFScu0GoIBloOyQDkCA20HLGBG2g5DV6A4A22uOABqBEfgBwBAsgRIZAc1IUbhDkNHkVHI6YlNzDBacjwCTh2GjPo0mnO8BnY3CCNU9lpNSw7LYdlB3JUdloOy05TVgDKCho1YGKBGpUdyFHZgRyVHcnBxAuasgIMnaDv4Fpyo-yCRo1Q4Nhp1KBLp0kjAGmEQRqXsgM1KjuQo7IjOSg7kMO7fpqyAlBW0KhBZQeURecGMInKDjCJyg7kaOJpykowNZJ-QG7JjbJLGjUS3NBJGjXg0iVNGglIIw3SuJQdqFHZgRyVHclB2YEclV3SlJWAspJGDXrKB5RF5wYwiZ7zASbRgz6Qo4mnKSvRsdNPzS25WXYaNQrc0CkaNe1Lf3j94b8AAAD__35sPGA= - -# INTERSECT ALL and INTERSECT with swapped column orders. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT x, y FROM xyz INTERSECT ALL SELECT y, x from xyz] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzEll-L2kwUxu_fTyHn6i1MiDNJ3DVQsJSFLixa1LuSi6yZquBmwkyEtYvfvSTpYv3TOZkeTS9j8pt5Zs4PfN4gV5kcpy_SQPwNODAQwCAABiEwiCBhUGi1kMYoXX3SAI_ZK8R9Buu82JbVzwmDhdIS4jco1-VGQgzz9HkjpzLNpPb7wCCTZbre1NsUev2S6t3odfcDGMyKNDdxz_OrnSfbMu6NOBsJSPYM1Lb8tcNh4eddb5Wa1fGS70jCwJTpUkLM9-zvwkaOYQUbcWpY8cewh6W2udKZ1DI7WiypSOyTCyf-kprVTJaTwucn05nvChn3Hsfzh-ns4fO89-npCRhs5Pfy_zr4h496vVy9P9hmdjhfQDjfhfBj5anC59HpTVzcOzzam7cXgbcQwReeH9zQW4e4A-e41zeXd2su79pc0X4cos04As8Pb2iPQ9w757jXt0d0a4_o2p6g_TiCNuMIvfrP6lb2OMS9d457fXuCbu0JurYnbD-OsM04Iu-G7jiEHTqGvb45YbfmhP-yb12INpWmULmRrdpUvzqczJayuSyjtnohv2q1qLdpHic1V7eBTJqyeSuah8e8eVUFbA8PKPCQAnNSbh7Zae5wZcINHlDgIQXmpNwnV3ZGi1O6_zsd2O87sML8-M76p3RIEdwOI4LbYURwO4wJjtCI4BFFcDuMCG6HEcHtMCY4QiOCDyiC31EUtcOIonYYUdQOY4oiNKLoPUVRO4woaocRRe0wpihCI4oOKYpyUk9AaERShEYsRWhMUwzHugKtLNDaAq0uEPsCrTBwUmPgZ5XByVY7jdlqpzFb7TRqK4JjtrqUpfOZubQlVxqz1akvOeOYrWflwWprsv_vZwAAAP__3WZveA== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT x, y FROM xyz INTERSECT SELECT y, x from xyz] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzEmF9r4kwYxe_fTyFz9S5E4jOT-Cew4LJb2EJpl9a7xYvUzFbBmpBEqFv63ReV1ZqY58wkpntp7S9zcvKckxlfxSqO9G34rDMR_BQkHCGFI5RwhCcc4YupI5I0nuksi9Ptv-yB6-hFBD1HLFbJOt_-eeqIWZxqEbyKfJEvtQjEJHxc6nsdRjp1e8IRkc7DxXK3TJIunsN0M37Z_BaOeEjCVRZ0uu525bt1HnTG5IylmL45Il7nxxWyPHzSIqA3x1zFt0WWL1az3PVPJZxb4kg9bjrzMJufR45KpI2S936QrSHSGVOlIaqWIdSGI16llOOl1qs4jXSqo5OL7a5SKVb2sNijCr8tFQaWHVX0G6hwagn9HmbzB53fJa4q-DXZJDroXN9Oru4frr5OOl9uboQjlvpX_v_uJj59ThdP878fzHI4uKzLt3E3TlzlF504u_bwZG2ySJ5B8FzZdVWdLgI6DnPUb72LbByxt8SijUwtoTY88SqlNOwBqt9GF1RhYFlVG9mpaNxG9NFtJM3nX5qMv-q6Xp1GADoOz3LQeiNYOEL2llg0gqkl1IYnXqWUhlmU9RvhgioMLKtqBDsVjRtBfnQjKPP5Vybj73V3RwrrRgA6Ds9y2HojWDhC9pZYNIKpJdSGJ16llIZZVPUb4YIqDCyragQ7FY0bQX10I3jm8--ZjL_frdMHQMXhSY5a7wMLP8jWEIs2MDWE2nDEq5TSMIde_Ta4oAoDy6rawE5F4zbw_uXvF2ek3essiVeZNvp1ore9OR096b1ZWbxOZ_pHGs92y-w_3u243R8ineX7b2n_4Xq1_2or8D1MRZjew94JTHYwyUb0qAkt-01opXhaso4r3nHFLu3zK_MwAd08LXuN6EETWoFJ81jHwcP2LWBZhPssDG56wA9Kn5-UIUuPeHjUJNg8jIINaBBsnkbB5mkUbAJdisqUrxWQbUCjcAMcpRvhYNIBjvJNfKUSwkvtwuGljBNfL-jW-X4hkHIqNYzVK5in4TsY4OglzOPwLczjMK18vdIQGF_qV6u08jRMK4_DtAIcjSyPw7SWWvbEeElg-8S3bAEvpVWWqsYmrZJvGgl2b5LfxwDjAI3SinCQVoCjtAIcbpr5kpU-ML7UsjZpBTRKK8BRWhGORpbHUVolv4WVQ4DzLVvAy2nld7Ho1vmmUT1w1io1jU1aAY3SinCQVoCjtAIcpVXxJaskML7UslanXJ6Gx1weh-dcgKODLo-jtCp-K6uQdXzLFvBSWhW_ly3e-vTtvz8BAAD__zpQDTI= - -# INTERSECT ALL and INTERSECT with different ORDER BY types. -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT x FROM xyz ORDER BY y) INTERSECT ALL (SELECT x FROM xyz ORDER BY z) ORDER BY x] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8mF1r4kAUhu_3V8hc7dJInJOoNbDgshS2UNqlerd4kZrZKlgTkgh1i_998QPUpDnvnIi5qx-vc_I4zzuxH2oZR-YxfDOZCv4orRxFylGecpSvHNVVE0claTw1WRan27fsA_fRuwo6jpovk1W-fXriqGmcGhV8qHyeL4wK1Dh8WZhnE0YmdTvKUZHJw_lit0ySzt_CdD18X_9Tjhol4TILWm13u_LTKg9aQ-0MSU02jopX-XGFLA9fjQr0xrGfYhSnuUnd7vkAQ7rh1jrGX9atWZjNCmmtJpvjPCSZ55SKroHFq8Ti1cCir8nFrxzo-DlxGpnUROUpJtuwxbs-ubZfYTYbmfwpcakAeLxOTNC6fxzfPY_ufo5bPx4elKMW5m_-dai_fU_nr7PdX0cGlbS7NWhTkba-qfz8Xm14ugLLY9yOE9c7R1K1fP9seS3Y0xZb2qW269VxHcxxwNxrzHUJl1pgbG23A6OvScavHKgx23VDttvRpiJta9vJfluRza7y2q5fRzcwx-E6-43pJuCia4Gx1c0OjL4mGb9yoMZ0o4Z0s6NNRdrWunn228qz2VV-e3e7KdYNzHG4ztvGdBNw0bXA2OpmB0Zfk4xfOVBjunkN6WZHm4q0rXXz7beVb7Oruu06soEpDlc5aEw2ARVdA4utanZY9DW5-JUDNaaa35BqdrSpSLvWz8ZPPv_ZZEm8zIzVL8LOlpmJXs3-m8jiVTo1v9N4ultm__Bpl9s9EZks37-q9w_ul_uXtgOehnUxrE_D_llYy8JaX5TuX5Im76L0gE8TS9zjiXsC4iQLF4hL0_1L0gXi0vSAT_ss8S5PvMuGe_x33eO_a6BXn03f8uHbS9zkw8hNkAZu8mnkJkgDNwd8G3ZAHZbKVGInSCM9URz4CeJIUBQHhupSpZ6DJwCe71QgqS61y_niPli8VC-iU5BPw2MQxNE5yMfhQQjiwDbNd6vuAfCldhXpxqehbiCOdOPjUDcQR7rxJ4sGR4sulaxIN75kCZQsSUq2fPMlKllxHOgG4kg3FEc3nnzJEihZKpWsRDeQRrqhONANxJFuKA50I_6AIXDAEH__CnQjvmQJlCxJSra8uKhkxXGkm6hkxXGkG1-yBEqWJDfw5S0nuoMXx5Fuont4cRzpxh8wHjhgPP5fIkXdJpsv_wMAAP__epmK2g== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT x FROM xyz ORDER BY y) INTERSECT (SELECT x FROM xyz ORDER BY z) ORDER BY x] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy82F1r40YUBuD7_gozVy0rY8-Zkb-g4NIuNLAkJcld8YXXniaGrGUkGTZd8t8Xf4BiTXzeMxrZd7GdV3N0zsyD7B9qnS3d7fybK9TkX6VVokglyqhEWZWoVM0StcmzhSuKLN_9yyFws_yuJv1Erdabbbl7e5aoRZY7NfmhylX54tREPc6_vrh7N1-6vNdXiVq6cr562S-zyVff5vnr9Pvr_ypRD5v5uph0ur3dynfbctKZ6mRKavaWqGxbVisU5fzJqYl-S-RVPGR56fJeelrAlD7J1qKQtf5aFeVqvSh7una_U12tVluqSn997TzPi2cvOXuryjEh5bwfgE7DJ2DOdsU2mADVeyIdQdpoBFSfeFsjGJwtp7rOdp3lS5e75cmV9lc5W7Dx98y5jgwvVYLfs3MljCJKSBpV-fe8eH5w5d2mZ2udenzduEnn5vbx8_3D5z8fO398-aIS9eL-K3-d6t9-z1dPz_u_zm6A6rbGDTa29br26TxdfUHfPmrJ8aofVHGbdbNNL-3Xm_zx-qd26gBABH70qNszTQwHdRwbPWjFcLBWZbi-iuEhIxg0mYFUcdkMqN6VZopLh0D1mV9Gcd0eof6ukSneYgl-z2SKh5UQrbi-kuKyjW29rokVJ_kRJskJNt2ebaIoqON4o8NWFAVrVYrSVRQNGIEeNpmBVFHZDKjelWaKSodA9ZlfRlFqjzB_18gUbbEEv2cyRcNKiFaUrqSobGNbr2tiRY38CBvJCbbd_Zf-YEVBHccbHbWiKFirUtRcRdGAEehRkxlIFZXNgOpdaaaodAhUn_llFDXtEebvGpmiLZbg90ymaFgJ0YqaKykq29jW65pYUSs_wlZygtNuE0NBFcfbHLdiKFirMtRexdCAAehx-ASkgsomQPWeNBNUOgKqT_wygtr2-PL3jEzQFkvweyYTNKyEaEHtlQSVbWzrda3Rb7IfLHDvik22Lpzo59b-rmlu-eQOQyiybb5w_-TZYr_M4eXdPrd_Y-mK8vCpPry4WR8-2hX4PqzZMPFhqof1-_DgJKzDwnoYk6aotIlKW5A2bMct33HLhlM-nLJ1g7L5sB7FpCkqbaLSFqQHbMdBeBgQpnp4xIbH_KzHPAp9vm7Nm5IiVHhVNGBFewfsNG5A3DthISyBNHIJxBFMII5kAnFEk-Z50cAX7Z200_gAxL2jFuITSCOgQBwJBeKIKBBHRmneGT0GcV6aWtxzSvPWUB88RIDnF0AVgScY9AjDW0PAGoqyBqThM1CcNSAOn4LirCHeGgLWEG8NAWsoyhqQRtaAOLIGxJE1II6sId4aAtYQbw0Ba4i3xgBrTJw1hrfGAGsMb40B1pgoa0AaWQPiyBoQR9aAOPzKxVtjgDWGt8YAa0yUNSCNrAFxZA2II2tAHFljeGsMsMbw1hhgjeGtscAaG2eN5a2xwBrLW2OBNTbKGpBG1oA4sgbEkTUgjqyxvDUWWGN5ayywxkZZA9LIGhBH1oA4sgbEkTWWt8YCayxvjQXWWN6aFFiTBloze_vlZwAAAP__klEy0w== - -# INTERSECT ALL and INTERSECT with different numbers of ORDER BY columns. -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT x FROM xyz ORDER BY y) INTERSECT ALL (SELECT x FROM xyz ORDER BY y, z) ORDER BY x] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzEmF9r4kwYxe_fTyFz9S6NxHkmag0suCyFLZR2qd4tXqRmtgrWhCRC3eJ3X4yCNbPOmSdivKt_Tmbyy_zOjP0QyyTWj9GbzkX4S0jhCRKeUMITgfBEV0w8kWbJVOd5km2_sgvcx-8i7HhivkxXxfbtiSemSaZF-CGKebHQIhTj6GWhn3UU68zvCE_Euojmi3KYNJu_Rdl6-L7-IzwxSqNlHrba_nbkp1URtobSG5KYbDyRrIrDCHkRvWoRyo3nPotRkhU687vHExjSjW2sQ_xl3ZpF-aySlmKyOcyHOPP5TEXWweIN1UkyqgYZaaLxhuoGjMkjFJyc1-E6SRbrTMfmc5psw-hb5ZTLIau3-SPKZyNdPKU-VXCP16kOW_eP47vn0d33cevbw4PwxEL_Lv4fyi9fs_nrrPzrgOIk-G4N8FQFL29OXr9XG6A8geUxaSepr46RnBq-fzS8ZKxwhwXuU9tXdcwH89hj7jVmPodLPTDu7ruxkSacC7svr-W-bMh9N_BUBe_sPrkvMnJZY6rtB3XkA_PY32e_MfkYXGQ9MO7yubGRJpwLy0fXko8aks8NPFXBO8un3BeZclljQbs8mLLlA_PY3-dtY_IxuMh6YNzlc2MjTTgXlk9dSz7VkHxu4KkK3lm-wH2RBS5rrNuuox6Yxf4uB42px6Ai62BxF8-NjDTRXFi84FriBQ2J5waequBr_dz8x_WfdZ4my1w7_ZLsbJnp-FXvnkaerLKp_pkl03KY3cunMle-Eeu82H0qdy_ul7uPthP8HJbVsPwcDo7CkheW8qx0_5w0qbPSA3uarMSVnbhiECdeuEKcm-6fk64Q56YH9nRgJd61E-9awz37s-7ZnzXQq29N39rDt-e4aQ8jN0EauGlPIzdBGrg5sLdhB9ShUaYcO0Ea6YniwE8QR4KiODBUGpV6DJ4AeHunAkml0S7HgwdgcKNeWLugPQ23QRBH-6A9DjdCEAe2SXu3yh4Ab7QrSzd7GuoG4kg3exzqBuJIN_vOIsHWIo2SZelmL1kCJUuckjUPX6ySZceBbiCOdENxdPC0lyyBkiWjZDm6gTTSDcWBbiCOdENxoBvZNxgCGwzZz69AN7KXLIGSJU7JmoOzSpYdR7qxSpYdR7rZS5ZAyRLnAG8uOdYJnh1HurHO8Ow40s2-wSiwwSj7v0Squk02__0NAAD__0WKmO8= - -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT x FROM xyz ORDER BY y) INTERSECT (SELECT x FROM xyz ORDER BY y, z) ORDER BY x] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy82F1r40YXB_D751OYuXpKZOQ5M_IbFFzahQaWpCS5K77Q2tPEkLWMJMOmS7578Qso1sTnf6SRfbe29685Omfmh6Kfap0t3V363RVq-rfSKlKkImVUpKyKVKLmkdrk2cIVRZbv_sshcLv8oaaDSK3Wm225-3oeqUWWOzX9qcpV-erUVD2l317dg0uXLo8HKlJLV6ar1_0ym3z1Pc3fZj_e_lWRetyk62La68e7le-35bQ309GM1Pw9Utm2rFYoyvTZqal-j-RVPGZ56fI4OS1gRjeytajJWn-sinK1XpSxrt3vTFer1Zaq0t_eei9p8eIl5-9VOaZJOR8HoJMWE4hm5mxjbIshUL0tdBPNzI14zaTVMKg--66GMTxbTnWd7TrLly53y5Mr7a9ytmDj755zHRldqgS_Z-dKGAeUELWq8s-0eHl05f0mtrVOPb1t3LR3e_f05eHxy-9Pvd--flWRenX_lP-f6V9-zVfPL_t_nd0A1W1NWuxv63Xt5jxiA0HfPmvJ8aqfVHGX9bNNnAzqTf58_VNFdQNKBJLE1I9NG81BHcdGDzvRHKxVaa6vonmTEQxbzUDuuWwMVG9MkOfScVB9-pfxXHeHqb9_ZJ53WILfM5nnzUoI9lxfyXPZ_rZe18Sek_wwk-Qsm35s23gK6jje6KgTT8Falad0FU8bjECPWs1A7qlsDFRvTJCn0nFQffqX8ZS6w8zfPzJPOyzB75nM02YlBHtKV_JUtr-t1zWxp0Z-mI3kLNv-_pVAY09BHccbHXfiKVir8tRcxdMGI9DjVjOQeyobA9UbE-SpdBxUn_5lPDXdYebvH5mnHZbg90zmabMSgj01V_JUtr-t1zWxp1Z-mK3kLCf9NpqCKo63OelEU7BWpam9iqYNBqAnLSYgt1Q2BKq3JchS6TCoPvvLWGq7g8zfPTJLOyzB75nM0mYlBFtqr2SpbH9br2ut3t1-ssCDKzbZunCi17KDXdPc8tkdhlBk23zh_sqzxX6Zw8f7fW7_xdIV5eFXffhwuz78tCvwY1izYeLDVA_rj-HhSVg3C-tRSJqC0iYobUHasB23fMctG074cMLWDcrmw3ockqagtAlKW5Aesh0H4VGDMNXDYzY84Wc94VEY8HVr3pQEocKrogEr2jtgp3ED4t4Ja8ISSCOXQBzBBOJIJhBHNGmeFw180d5JO40PQdw7ak18AmkEFIgjoUAcEQXiyCjNO6MnIM5LU4t7TmneGhqAhwjw_AKoIvAEgx5heGsIWENB1oA0fAYKswbE4VNQmDXEW0PAGuKtIWANBVkD0sgaEEfWgDiyBsSRNcRbQ8Aa4q0hYA3x1hhgjQmzxvDWGGCN4a0xwBoTZA1II2tAHFkD4sgaEId_cvHWGGCN4a0xwBoTZA1II2tAHFkD4sgaEEfWGN4aA6wxvDUGWGN4ayywxoZZY3lrLLDG8tZYYI0NsgakkTUgjqwBcWQNiCNrLG-NBdZY3hoLrLFB1oA0sgbEkTUgjqwBcWSN5a2xwBrLW2OBNZa3JgHWJA2tmb__778AAAD__1XvPPY= - -# INTERSECT ALL and INTERSECT with compatible ORDER BY columns that are not in the final result. -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT y FROM xyz ORDER BY z) INTERSECT ALL (SELECT y FROM xyz ORDER BY z)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzEl19r6kgYxu_3U8h7tcuOxHdmYtvAgstS2EJpl-rd4kVq5lTBmpBEqKf43Q_-4Vj_zZPJaM5d1fz6PnneefLoJ83SxDzF76ag6H9iEiRJkCJBmgSFNBSU5enIFEWary7ZAA_JB0UdQZNZNi9Xbw8FjdLcUPRJ5aScGopoEL9OzYuJE5MHHRKUmDKeTNdjsnzyHueL3sfiOwnqZ_GsiFrtYDX5eV5GrZ4UPUXDpaB0Xu4mFGX8Zijipaiuop_mpcmDcF9AT_75cxaLnjyYtcNfF61xXIwPaKbhcqdHuuj56gpf1BZVwxa-pi_6rKDd_0nzxOQmOVYxXMEVrjpxb__GxbhvyucskAcGDxaZiVoPT4P7l_79P4PW34-PJGhqvpW_9_iPv_LJ23j9186Ds26HFW5uPjsl_KTmp7SdZoEMD648Pbu7N5sdDlyF8xbIdqDqBBHo2J64bmNBdPHlwsaoGsbwNZ3RZwU1FkVuKIqy-tplla2rdqDrxAHo2G79prE4OPjCFzZG1TCGr-mMPiuosTjIhuKgqq9dVdm6bq-_SznHAejYbv22sTg4-MIXNkbVMIav6Yw-K6ixOKiG4qCrr11X2XrYrhMGoGK787vGwuDgCl_UFlXDFr6mL_qsoMaioH_Bb5YTil5MkaWzwlT6RdJZ3ZNJ3szGqSKd5yPzX56O1mM2L5_X3PqNxBTl5lPevHiYbT5aCfwK8yHMX2G9B7MbzB0vOvShpddsCWZLq-PK7rhycFy6wQeOu9KhDy29ZkswW1sdB-sKrbDs2vfVtdI3dvjGJ152GMUL0MAzO43iBWgw-9bq-J3d8TufeNlhFC9AgyNup1G8AA1ms71D0KP46Gm630ASVNDR49Spg-w0LCGAo1u347CGAI6mHz1U943XwPijp6pLVgCNwoJwdGLtOIoLwtF0e6WgtdkrhUGnsFepABrmxa9WAA7z4lcsbG8WBtXCXt0CaJgXv3YBOMyLX79Ir36R9n6RoF-kV78AGuUF4ejW_foF4Wi6vV8k6Bfp1S-ARnlBODqxfv2CcDTdrV-Gy99-BAAA__-6Roeo - -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT y FROM xyz ORDER BY z) INTERSECT ALL (SELECT y FROM xyz ORDER BY z)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzEl19r6kgYxu_3U8h7tcuOxHdmYtvAgstS2EJpl-rd4kVq5lTBmpBEqKf43Q_-4Vj_zZPJaM5d1fz6PnneefLoJ83SxDzF76ag6H9iEiRJkCJBmgSFNBSU5enIFEWary7ZAA_JB0UdQZNZNi9Xbw8FjdLcUPRJ5aScGopoEL9OzYuJE5MHHRKUmDKeTNdjsnzyHueL3sfiOwnqZ_GsiFrtYDX5eV5GrZ4UPUXDpaB0Xu4mFGX8Zijipaiuop_mpcmDcF9AT_75cxaLnjyYtcNfF61xXIwPaKbhcqdHuuj56gpf1BZVwxa-pi_6rKDd_0nzxOQmOVYxXMEVrjpxb__GxbhvyucskAcGDxaZiVoPT4P7l_79P4PW34-PJGhqvpW_9_iPv_LJ23j9186Ds26HFW5uPjsl_KTmp7SdZoEMD648Pbu7N5sdDlyF8xbIdqDqBBHo2J64bmNBdPHlwsaoGsbwNZ3RZwU1FkVuKIqy-tplla2rdqDrxAHo2G79prE4OPjCFzZG1TCGr-mMPiuosTjIhuKgqq9dVdm6bq-_SznHAejYbv22sTg4-MIXNkbVMIav6Yw-K6ixOKiG4qCrr11X2XrYrhMGoGK787vGwuDgCl_UFlXDFr6mL_qsoMaioH_Bb5YTil5MkaWzwlT6RdJZ3ZNJ3szGqSKd5yPzX56O1mM2L5_X3PqNxBTl5lPevHiYbT5aCfwK8yHMX2G9B7MbzB0vOvShpddsCWZLq-PK7rhycFy6wQeOu9KhDy29ZkswW1sdB-sKrbDs2vfVtdI3dvjGJ152GMUL0MAzO43iBWgw-9bq-J3d8TufeNlhFC9AgyNup1G8AA1ms71D0KP46Gm630ASVNDR49Spg-w0LCGAo1u347CGAI6mHz1U943XwPijp6pLVgCNwoJwdGLtOIoLwtF0e6WgtdkrhUGnsFepABrmxa9WAA7z4lcsbG8WBtXCXt0CaJgXv3YBOMyLX79Ir36R9n6RoF-kV78AGuUF4ejW_foF4Wi6vV8k6Bfp1S-ARnlBODqxfv2CcDTdrV-Gy99-BAAA__-6Roeo - -# INTERSECT ALL and INTERSECT with a projection on the result. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT x FROM ((SELECT x, y FROM xyz) INTERSECT ALL (SELECT x, y FROM xyz))] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzEllGL2kwUhu-_XyHn6itMiDNJ3DVQsJSFCosW9a7kImumKriZMBNh7eJ_L0m6WKOZk-lgcpk1T-adcx7Y9x1SkfBZ_MoVhD-AAgEGBDwg4AOBACICmRRrrpSQxSsVME3eIBwS2KXZIS_-HBFYC8khfId8l-85hLCKX_Z8weOES3cIBBKex7t9eUwmd6-xPE7ejr-AwDKLUxUOHLc4eX7Iw8GEkgmD6ERAHPI_J5w__HIcbGO1vfzkBxIRUHm84RDSE_m3sEEPYVlj2POnDqmQCZc8ufhYVJDYKzdu_C1W2yXP55lLa9tZHTMeDqaz1dNi-fR1Nfjy_AwE9vxn_n8Z_NNnudtsPx7OY6jN4Hw5z-JyN5LPhCMylwb1Mdw82784m7a3gLawwGWO691RWoO4o17issa4HWhLO9WWtd8Fa7MLz3H9O6pjEPehl7isMW4H6rBO1fHa78JrswvfKf9H3Usdg7iPvcRljXE7UMfrVB2__S78NrsInDuKYxB23ENY1hi2A2383jrWjVwLrjKRKt6qQQ2Lm_Fkw6tJKXGQa_5dinV5TPU4L7myASRc5dWvrHqYptVPRcD28MgGHtvA1Co3DfQ0NRgZM4NHNvDYBqZWuWsju6JZnR7-TXv6eXtamF7ObFinfRvB9TAiuB5GBNfDmOAIjQge2AiuhxHB9TAiuB7GBEdoRPCRjeAPNorqYURRPYwoqocxRREaUfTRRlE9jCiqhxFF9TCmKEIjio5tFKVWPQGhEUkRGrEUoTFNMRzrCnZlwa4t2NUFy75gVxioVWOgV5XByFY9jdmqpzFb9TRqK4JjtpqUpeudmbQlUxqz1agvGeOYrVflQWtrdPrvdwAAAP__prFsYg== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT x FROM ((SELECT x, y FROM xyz) INTERSECT (SELECT x, y FROM xyz))] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzEmE9r40gUxO_7KUyfdkFGft2S_wgWsuwEJhCSIfFt8EGxemKDYwlJhnhCvvtgm7FjyXqlVkuZo-P81NWlV6WW38Q6jvRd-KIzEXwXJBwhhSOUcIQnHOGLmSOSNJ7rLIvT3b8cgJvoVQQDRyzXySbf_XnmiHmcahG8iXyZr7QIxDR8WukHHUY6dQfCEZHOw-Vqv0ySLl_CdHv1uv0pHPGYhOss6PXd3cr3mzzoXZFzJcXs3RHxJj-tkOXhsxYBvTv1VXxZZvlyPc9d_1zCpSVO1NO2twizxWXkpESaKPnoB7VqiGpkCHXhiFcp5XSpzTpOI53q6Oxi-6tUipUDLPakwu9KRQ3LTiqGFiqcRkK_htniUef3iasKfk23iQ56N3fT64fH6_-nvf9ub4UjVvpH_vd-E__8my6fF78_nMaucnOjdi2-i_tx4iq_aMPFtcdna5NB7GqkzpV9VzUpIqDjOETDzovIxJGWLVGNLKEuPPEqpViWADWvohZV1LCsqorMVFhXEX1qFcn6wy_rzL7qu16TOgA6jjdy1HkdGDhCLVuiGllCXXjiVUqxDKJsXgctqqhhWVUdmKmwrgP5qXWg6g-_qjP7Xn__JmFcB0DH8UaOO68DA0eoZUtUI0uoC0-8SimWQVTN66BFFTUsq6oDMxXWdaA-tQ68-sPv1Zl9v9-kDICK422cdF4GBn5Qq4aoRoZQF454lVIsQ-g1r4IWVdSwrKoKzFRYV4H3x36zuKDrQWdJvM50rV8kBrud6ehZH5zK4k0619_SeL5f5vDxfs_t_xDpLD98S4cPN-vDVzuBH2EqwvQR9s5gMoNJWtETG1oObWileFqyjiveccUu7fMr8zAB3TwtB1b0yIZWYNI81nFws30DWBbhIQuDTY_4QRnykzJm6QkPT2yCzcMo2IAGweZpFGyeRsEm0KWoTPlaAdkGNAo3wFG6EQ4mHeAo38RXKiG81C4cXso48fWCts73C4GUU6lhjB7BPA2fwQBHD2Eeh09hHodp5euVxsD4Ur8apZWnYVp5HKYV4GhkeRymtdSyZ8ZLAscnvmULeCmtslQ1JmmVfNNIcHqT_DkGGAdolFaEg7QCHKUV4PDQzJes9IHxpZY1SSugUVoBjtKKcDSyPI7SKvkjrBwDnG_ZAl5OK3-KRVvnm0YNwLtWqWlM0gpolFaEg7QCHKUV4Citii9ZJYHxpZY1esvlafiay-PwPRfg6EWXx1FaFX-UVcg6vmULeCmtij_LFrc-e__rVwAAAP__sgcKHA== - -subtest Except - -# Basic EXCEPT ALL and EXCEPT case. -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT y FROM xyz) EXCEPT ALL (SELECT x AS y FROM xyz) ORDER BY y] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8lk1r20AQhu_9FWZOLV0j7Uryh6DgUgINhCQkORSKDoq1jQ2OJVYyxA3-78V2TCrLmVdr2brVtZ_d0czzZvRK8zTR1_Gzzin8TZIEKRLkkSCfBAUUCcpMOtZ5npr1T7bAZfJCoStoOs8Wxfq_I0Hj1GgKX6mYFjNNIT3EjzN9p-NEG8clQYku4ulsc01mps-xWY5eln9J0H0Wz_Ow03XWN98sirAzUhStBKWL4u3491Mfl51JnE_K540kRatIUF7ET5pCuRLHlRlYlikblak-LPP9nMU8NYk2OimdFK1J9JMDz_ozzif3urjJHLk3kYdlpsPOxa8fF7cPne9XVyRopv8Un0fyyzczfZps_vXhc78_k2fT-vvUFNo4Mthv09cPz_dr9OxQO94OPVDEddpNM0e5-w0-eH1Qul7WN0vWMMtRXcc7SwQsCu1ZF3rKEMh2QyDbCAFo_i4EvWNDoOoPV9UZrtd1_LNYaFFo37rQU1qo2rVQtWEhaP7Owv6xFnr1h-vVGa7f3Wzj01toUejAutBTWui1a6HXhoWg-TsLB8da6Ncfrl9nuEH3LA5alDm0LPOUBvrtGui3YSBo_c7A4SleSQ-cf6fzLJ3nutbbprtumE6e9HYAebowY31r0vHmmu3Hmw23ectIdF5sv1XbD5fz7VfrAuvD_SawlI3ooBE95Glp0TNlB_ebwHs9s6WDRvSQp9U-7f5PeyXY3Yc9Fvb5afksrCR_ddAkHzwM8sHDKB-ABvkANMhHr0k-eBjkg4dRPgAN8gFokI8-a-mAl3TQJB_DJobzMDCch5HhgAaGAxptAJu1Wf1LarM3bWm4BKw2pzUONJeVLVJSVSpedMmvEWC6rOwRG9UBDVwHNJId4cB2hCPdKzvUSneeRrrzNNQd4Eh3gCPdK4u0rHsP6F7ZKVa6V3aKle48jXTnaag7wJHuAEe6V_aple48jXTnaag7wJHuAEe6V7Zq-V3b5XVXld3C6h6tPv0LAAD__56IWfo= - -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT y FROM xyz) EXCEPT (SELECT x AS y FROM xyz) ORDER BY y] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8mN9r4kocxd_vXyHzdC83EueHvwIXvOwWtlDa0vZhYfEhNbNVsCYkEeqW_u-LumrNmO-ZSaJv_jozJ2e-50PiO1vEkb4NX3XGgh-MM48J5jHJPKaYx7ps7LEkjSc6y-J0_ZOt4Dp6Y0HHY7NFsszXH489NolTzYJ3ls_yuWYBewqf5_pBh5FO_Q7zWKTzcDbfbJOks9cwXY3eVr-Yxx6TcJEFrba_3vlumQetkWDjD4_Fy_ywfJaHL5oF_MOzt_B1luWzxST3u8f7j3hh_YPkedWahtn0xO8PHoSLh88xcNccij4PHmSlHHizQahSE4d1los4jXSqo6OVNquU2hQdYPNgoXsuCyipg4VeDQteJZffwmz6qPO7xJeFpJ5WiQ5aV9-_XN0_tf6_uWEem-uf-d8j_s9_6exlunllMV59l_F6jNNcp740Ivu3dP2BRWan4viz6AkTt3E7TnzVKQZ8cvvh0fbcocEWBfZF25fOKAMm9oPZOyPKXIJwT8IWZrZJ8GajUKUmapKEV4RZgxZQUmUwc7NQG2b8EjAD47WDmRGZLcyEfYmETYdk21fONAEm9pPRPyNNHILg7knY0sQ2Cd5sFKrURM0qi4o0adACSqqMJm4WatNEXIImYLx2NDEis6WJtC-RtOmQam8ehtxoAkzsJ2NwRpo4BMHdk7CliW0SvNkoVKmJmlWWFWnSoAWUVBlN3CzUpom8BE3AeO1oYkRmSxNlXyJl06Fu25klwMJ-LoZnZIlDDNw1B1uS2ObAmw1ClZqoWWNVkSQNWkBJlZHEzUJtkqhLkASM144kRmRV_rI5sf6DzpJ4kWmrf2M668B09KK3B5DFy3Si79N4stlm-_Zuo9t8EOks337Lt2-uF9uv1gY_i3lRzD-L1ZGYu4m5rKMWvJZ6WEct-7RakIlLOnFJbt2ld6bFHJwXrRaijlp2aqkHtFqRifdocddBLIriHinu02fdJ8XgmgekWIFiD2kqdAAWDKg4cYFWQzDQckgGIEdooOWIDdxAy3HwAgRvsMUFD0CN-ADkCBBAjgiB5KAu3CDMcfAoOhoxBbmBCU5DhvfAsdOYQZdOc4YPwOYGaZzKTqth2Wk5LDuQo7LTclh2mrICUFbQqAETC9So7ECOyg7kqOxIDiZe0JQVYOgEfQdXkBtlFzRqhALHTqMGXTpNGgFIIwzSuJQdqFHZgRyVHclB2YEc3vXTlBWAsoJGDSo7oCw6N4BJVHaASVR2IEcTT1NWgqmR9ANyQW6UXdKokeCGTtKoAZcuadJIQBppkMal7ECNyg7kqOxIDsoO5KjskqasBJSVNGrQUz6gLDo3gEn0nA8wiR70gRxNPE1ZiY6dfmouyM2y06hR4IZO0agpXvr446_fAQAA__8-NOnb - -# EXCEPT ALL and EXCEPT with MergeJoiner. -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT y FROM xyz ORDER BY y) EXCEPT ALL (SELECT y FROM xyz ORDER BY y)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8l01r20wUhffvrzB39ZbIyHc0chJBwaVkEUiTkGRRKF4o1tQxOJYYyRA3-L8XW6b-nqPxyNrFH4_unXPvmRN_0iRN1H38rnKKfhGTR4I8CsgjSR6F1Pco0-lA5XmqF18pgdvkg6KOR6NJNi0Wb_c9GqRaUfRJxagYK4roJX4dqycVJ0r7HfIoUUU8Gi_LZHr0HutZ72P2hzx6zuJJHrXa_qLyw7SIWj1B_blH6bRYPz4v4qGiiOde9RaeU10o7Yfb1Xt8sfP4NfE6a73F-dsuQP35ugVh08KmClyfDMEJMnDNOsijPayfk-pEaZUcLFzpWweO80PpoXpWxUPmix1FX2aZilo3P7_fPL60vt3dkUdj9bv4v8cXX77q0fCt_POfwHxU4LDC4aaTQ40f7Pk-baeZL8Kdbx6u3d2qzRYLVmG_fNH2A2ujgSZWG9Y9p9FsdKhTiOAEIbhmJeTRHpqzGjdjNVF9zKLKlIO2L63XHTSxmvLlOdfdQgeuU4jgBCG4ZiXk0R6aW3fRzLoH1cccVJmybC__3bFbd9DEaspX51x3Cx24TiGCE4TgmpWQR3tobt2DZtZdVh-zrDLlsG297KCF1Yyvz7nsFipwfTIEJ8jANesgj_bQ3KrL5n8zHOjoSeVZOslVpV8EncWZVDJUpVJ5OtUD9ajTwbJM-fJhyS3fSFRelJ9y-eJ2Un60aHAT5l2YN2G5BbMdzB0nOnShhVNtAWoLo-KBWfHAQnFhB-8obkuHLrRwqi1AbWlUHIwrNMKia55X10hfmuFLF3uZYWQvQAPNzDSyF6BB7Suj4tdmxa9d7GWGkb0ADVbcTCN7ARrUZnOGoKt47zbdTiABImjvOrXKIDMNQwjg6OhmHMYQwFH1vUt1W3gJhN-7VW28AmhkFoSjjTXjyC4IR9XNkYLGZo4UBpnCTqECaOgXt1gBOPSLW7CwOVkYRAs7ZQugoV_c0gXg0C9u-SKc8kWY80WAfBFO-QJo5BeEo6O75QvCUXVzvgiQL8IpXwCN_IJwtLFu-YJwVN0uX_rz__4GAAD__1I0YfY= - -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT y FROM xyz ORDER BY y) EXCEPT (SELECT y FROM xyz ORDER BY y)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy82Etv20YUBeB9f4UwqxahQM2doR4ECqhoswiQxkHsRYFCC0Wa2gIcUSApIG7g_17ogdLikPfM8LVLbB_O5SHnw0g_xD7Zmk_rbyYT8d9CikCQCIQSgdAiEJFYBeKQJhuTZUl6-pNL4MP2u4gngdjtD8f89ONVIDZJakT8Q-S7_NmIWDysvz6bL2a9NWk4EYHYmny9ez4vc0h339bpy_L7y78iEPeH9T6LR-PwtPLdMY9HSxKr10Akx7y4fJavH42I5WvgPsJ9kuYmDaPb1ZfyXe3lyefyf-yyfLff5KGclFc43Um6NanZxqOlLC1XXOHry-hpnT1Z6dVrMZLyGelt6TLqrHXdoHWySqmvPWpUO1kPtsPap7UjFddJLmtV3Sc3t_J7XYqZZj3O5NdlMdPcYabjvmqq1SmJ_qRi5j9N-mjuTX53CHWpyYeXg4lH7__6_f3nh9FvHz-KQDybf_Kfl_LdL7-mu8enyz__f-Prb2vR4rYqZv6UjJNDqKNyAdXGTW4Wlx5b3mHHhzQOlbe0YIjrnp82lRZcvpBWDiatT-3TDnvXDXonqxZXa12LJ-vR9mat7NQ1vxemztpuZ_Lrss7a6pn6s1YOYy257zty2XZqHGpv7sAQ1203a8oduHzBHQ3GnUftctZh77pB72TV4sqda_FkPdreuKNOafF7Yeq463Ymvy7ruKueqT_uaBjulPu-Uy7bTo_Pn3f9uANDXLfdvCl34PIFd2ow7jxql_MOe9cNeierFlfuXIsn69H2xp3qlBa_F6aOu25n8uuyjrvqmfrjTg3DnXbfd9pl20Vjb-zACNdNt2iKHbh8gZ0eDDuP0uWis9Z1g9bJKsWVOtfayXqwvVGnO2XF73Wpo67bmfy6rKOueqb-qNPDf2lYMdEXkx2SfWacvhKcnO7JbB_NpaMsOaYb8zlNNudlLv-9O-fOP9iaLL_8Vl7-82F_-dVpwLdhyYaJD1M5LN-Gpzdh6ReWrdIUtUkr3SatFZ9WbOOab1yz4YgPR-zcM35sPixbpQk8bD6twMPm0xo87Cnb-JwPzzzCVA7P2fCCX3nBv2VToAIwBaHCqyIBK7KVKyCNYAFxJAuII1pAHNkieVwk0EXyvEjgi2wFDEgjYUAcEQPiyBgQR8hIXhkJmJG8MxJAI1tJI3lqaALOEDw1BKghixqvMwifhocQPg5PIXwcHkP4OLKCLGpui1egeJ4aAtSQRY2PFSCNrABxZAWIIytAHFlBFjW3xaN756kpxS0riKcGWEG8NLQALw1PjQLUKIsaHytAGlkB4sgKEEdWgDj8zMIf6BQ40CmeGgWoURY1PlaANLICxJEVII6sAHFkheIPdAoNz1NTiltWKJ4aYIXipVFz8NLw1ChAjbKo8bKCT0Mr-Di0go9DK_g4skLzBzoNDnSap0YDajT_AQpsdpBGVoA4sgLEkRUgjqzQ4IsptDpPTSluWaF5aspWrF5_-i8AAP__CvRAMg== - -# EXCEPT ALL and EXCEPT with no overlap. -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT x FROM xyz WHERE x < 2) EXCEPT ALL (SELECT x FROM xyz WHERE x >= 2) ORDER BY x] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8ll9r2zwUxu_fT2HO1TumYEu288dQ6BgdK5S2tLkYbLlwY60JpLGRHWhW-t2HnYbOcaLHihvdNbV_Uo7O78nRCy3TRF7HTzKn6CdxYiSIkU-MAmIU0oRRptKpzPNUla9sgMvkmSKP0XyZrYry3xNG01RJil6omBcLSRGN44eFvJNxIpXrEaNEFvF8UW2TqflTrNbnz-s_xOg-i5d55PTccudv80UhVeScc-fXyvP8qSOiKLq8Hg-J0c2qKJ_Q5JVRuire9n7f8mHtzOJ8Vt-sen_CKC_iR0kRf2XH1RAeXYM8--gixMEi3tdZLVOVSCWT2kqTkkSv7DmJ73E-u5fFTebynWaO15mMnIsfXy9ux86XqytitJC_i__P-aczNX-cVX8drPu9Jt-kMfepKqRyebh7TJ8Prh-0OLN9x_G26J4vcZ320swV3u4B790-rG3P23vHW3jnip7r20-PQRX9DlWcOj_cbn64jfyA1mzz0z82P6J960Wb1vs9N7AvsEEVgw5VnFpgYVdgYUNg0JqtwINjBfbbt95v0_qgV90QLAtsUMWwQxWnFti3K7BvQ2DQmq3Aw2MFDtq3PmjT-rBnX1-DGkZH13BqeQO78gY25AWN2co7-ojr957172SepctctrpZe-WByeRRbhqQpys1lbcqnVbbbD7eVFx1LUpkXmyeis2Hy-XmUfkF28ODLjDnneiwEz3S09zgzIQZPOgC75yZKR12okd6WuzS3r-0X4O9XdjXwoG-W4EWFly_ddglH3oY5EMPo3wAGuQD0CAf_S750MMgH3oY5QPQIB-ABvkYaC0d6iUddsnHqIvhehgYroeR4YAGhgMaTQCTsdn8JTWZm6Y0HAJGk9MYB5rzxhSpqcqFXnSuHyPAdN6YIyaqAxq4DmgkO8KB7QhHujdmqJHuehrprqeh7gBHugMc6d4YpHXd-0D3xkwx0r0xU4x019NIdz0NdQc40h3gSPfGPDXSXU8j3fU01B3gSHeAI90bU7V-1_b0uovGbNHqPnn9728AAAD___m9p94= - -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT x FROM xyz WHERE x < 2) EXCEPT (SELECT x FROM xyz WHERE x >= 2) ORDER BY x] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8mF1r40YYhe_7K8xctVRGmg9_RLCQ0m5pYEmWTS4KbS601jQWeC0hybBuyH8vtms71ljvmdHIvkssn5mjM-95kPzKlnmq75NvumLxX4yzgAkWMMkCpljARuw5YEWZz3RV5eXmKzvBXfqdxVHAsmWxqjcfPwdslpeaxa-szuqFZjF7Sr4u9BedpLoMIxawVNdJtthuU5TZt6Rc335f_8sC9lgkyyoeDMPNzr9ni1qX8eCWD_5eRZGcDUQcx3f3T1MWsIdVvbnCnt8Clq_q495VnbxoFvO3wN7fb1lVZ8tZHY5OzRnrHyVf14N5Us3PfP_oQbh4eJ8R7x6S_uCSkuyUEu83JtVq4rjOapmXqS51erLSdpVWmyICNo8WRpeygJI6Whh7WAg6ufwjqeaPun4oQtlI6mld6Hjw8c9fP35-Gvzy6RML2EL_U_94y3_6UGYv8-1fFuM1cRmvx7ysdRlKI7KfW9efWmR2Lo7_Fz1j4j4f5kWoombAZ7e_OdmeO_Tbot6hGIayXwoCh4epHV-Qgi4p-cTkw0HbnHi_QalWE54Q4h052KMFlFQbB90seHOQX4ODYLz2HDQis-WgsK-YsGmYHIaqXxABh4exmVwQRA4pcZ-YfEBkmxPvNyjVasKTAqIjiHq0gJJqA5GbBW8QiWuACIzXHkRGZLYgkvYVkzYNU8PtC1qPIAIOD2MzvSCIHFLiPjH5gMg2J95vUKrVhCcFZEcQ9WgBJdUGIjcL3iCS1wARGK89iIzIbEGk7CumbBo2GvaLIeDvMDQ3F8SQQ0a8e0g-ELJNifcbk2o14UkA1RFCPVpASbVByM2CN4TUNSAExmsPISOyLj9PnVn_i66KfFlpq1-eok1gOn3RuwOo8lU505_LfLbdZvfvw1a3_SDVVb27ynf_3C13lzYG34t5U8zfi9WJmLuJufRRC-6lvvFRywmtFmTikk5ckluP6J1pMQfnRauF8FHLyEs9pdWKTHxMi0cOYtEUj0nxhD7rCSkG9zwlxQoU-4amQgSwYEDFiQu0GoKBlkMyADlCAy1HbOAGWk6DFyB4gy0ueABqxAcgR4AAckQIJAd14QZhToNH0dGIacgNTHAaMnwMjp3GDLp1mjN8CjY3SONUdloNy07LYdmBHJWdlsOy05QVgLKCRg2YWKBGZQdyVHYgR2VHcjDxgqasAEMn6Ce4htwou6BRIxQ4dho16NZp0ghAGmGQxqXsQI3KDuSo7EgOyg7k8KmfpqwAlBU0alDZAWXRuQFMorIDTKKyAzmaeJqyEkyNpF-QG3Kj7JJGjQQPdJJGDbh1SZNGAtJIgzQuZQdqVHYgR2VHclB2IEdllzRlJaCspFGD3vIBZdG5AUyi93yASfSiD-Ro4mnKSnTs9FtzQ26WnUaNAg90ikZN89af3374LwAA__9lNDfO - -# EXCEPT ALL and EXCEPT with some overlap. -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT y FROM xyz WHERE x >= 1) EXCEPT ALL (SELECT y FROM xyz WHERE x < 3) ORDER BY y] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzElk1v2kAQhu_9FdacWnWRvWubD0uRqKpUjRQlUcKhUuuDg7cBiWBrbaTQiP9eAaGpbbKvFwdzC4HHw-w8L7PPNE9ieRU9yoyCn8SJkSBGLjHyiJFPIaNUJWOZZYlaf2QLXMRPFDiMpvN0ka__HTIaJ0pS8Ez5NJ9JCmgU3c_krYxiqWyHGMUyj6azTZlUTR8jtRw-Lf8Qo7s0mmeB1bHXlb9NZ7lUgTXk1q-F47jyzOJBEFxcjfrE6HqRB9ZQULhilCzyl-KvNe-X1iTKJsVqQ07hKmSU5dGDpICv2GFN-Ac3Mbbc9-1BvNnD63MW80TFUsm48KRwTaKP7DmI71E2uZP5dWrz0jBHy1QG1vmPr-c3I-vL5SUxmsnf-cch_3Smpg-TzV__-ualvl97ck3mcpeoXCqb--Vj-vzm870aZ7bvOF4euudLXCWdJLWFUz7gveX9QnleXzteQztbdGz3BOkxaKPboI0j54e3mx_eRn7AZHb56R6aH1F_8qLO5N2O7Z1AYIM2eg3aOLLAol2BRRsCg8nsBO4dKrBbf_Juncl7nc0FoW2BDdroN2jjyAK77QrstiEwmMxO4P6hAnv1J-_VmbzfOYG-Bk0MDm7iyPJ67crrtSEvmMtO3sF7XL_3PP9WZmkyz2Stm7WzPjAZP8jtALJkocbyRiXjTZnty-sNt7kWxTLLt--K7YuL-fat9ResD_eawJw3ov1G9EBPc4MzE2ZwrwlcOjNT2m9ED_S0KNPO_7RbgJ0y7GphTz8tTwsLri_tN8mHHgb50MMoH4AG-QA0yEe3ST70MMiHHkb5ADTIB6BBPnpaS_t6SftN8jFoYrgeBobrYWQ4oIHhgEYbwGRtVn9JTfamKQ2XgNHmNMaB5ryyRQqqcqEXnevXCDCdV_aIieqABq4DGsmOcGA7wpHulR1qpLueRrrraag7wJHuAEe6VxZpUfcu0L2yU4x0r-wUI931NNJdT0PdAY50BzjSvbJPjXTX00h3PQ11BzjSHeBI98pWLd61Hb3uorJbtLqHqw9_AwAA__-YNKfo - -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT y FROM xyz WHERE x >= 1) EXCEPT (SELECT y FROM xyz WHERE x < 3) ORDER BY y] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8mFtr40Ycxd_7KcQ8tVRGmosvESy4tFsaWJJlk4dCmwetNU0EXktIMmwa8t2L7caONdb_zGhkv_l2Zo7O_M8PyS9sVWT6Jv2ma5b8xTgLmWAhkyxkioVszB5CVlbFQtd1UW1-shNcZ99ZEocsX5XrZvPxQ8gWRaVZ8sKavFlqlrD79OtSf9FppqsoZiHLdJPmy-02ZZV_S6vn-ffnf1nI7sp0VSfBKNrs_Hu-bHSVBHMe_L2OY6k_BDxJkuub-xkL2e26SYK5YA-vISvWzWHzukkfNUv4a2hv8Le8bvLVoonGx-7mvLX-QfL1OXhK66cTvz94EC4e3ofE-6e0CKR9SLJXSHzYlFSnicM661VRZbrS2dFK21U6bYoY2DxYGJ_LAkrqYGHiYSHs5fKPtH66081tGclWUvfPpU6Cj3_--vHzffDLp08sZEv9T_PjnP_0ocofn7av9uPVfU1Tl_G6K6pGV5E0Ivu5c_2ZRWan4vh_0RMmbopRUUYqbgd8cvuro-25Q70t2h2JUSQHpiCwuB_byRkp6BKTT04eHLSNiQ-bk-o04Qkh3pODA1pASXVx0M2CNwf5JTgIxuuNg0ZkthwU9g0TNgWTo0gNDCJgcT830zOCyCEm7pOTB4hsY-LD5qQ6TXhSQPQE0YAWUFJdIHKz4A0icQkQgfF6A5ERmS2IpH3DpE3B1Gj7fDYkiIDF_dzMzggih5i4T04eILKNiQ-bk-o04UkB2RNEA1pASXWByM2CN4jkJUAExusNREZktiBS9g1TNgUbjwbGEDC4n5qrM2LIISTePyUPCNmGxIdNSXWa8CSA6gmhAS2gpLog5GbBG0LqEhAC4_UGISOyPn9PnVj_i67LYlVrq3-e4k1gOnvUuwOoi3W10J-rYrHdZvf2dqvbfpDputl9y3dvrle7rzYG34t5W8zfi9WRmLuJufRRC-6lvvJRyymtFmTikk5ckluP6Z1pMQfnRauF8FHL2Es9o9WKTHxCi8cOYtEWT0jxlD7rKSkG1zwjxQoU-4qmQgywYEDFiQu0GoKBlkMyADlCAy1HbOAGWo6DFyB4gy0ueABqxAcgR4AAckQIJAd14QZhjoNH0dGIackNTHAaMnwCjp3GDLp0mjN8BjY3SONUdloNy07LYdmBHJWdlsOy05QVgLKCRg2YWKBGZQdyVHYgR2VHcjDxgqasAEMn6Du4ltwou6BRIxQ4dho16NJp0ghAGmGQxqXsQI3KDuSo7EgOyg7k8K6fpqwAlBU0alDZAWXRuQFMorIDTKKyAzmaeJqyEkyNpB-QW3Kj7JJGjQQ3dJJGDbh0SZNGAtJIgzQuZQdqVHYgR2VHclB2IEdllzRlJaCspFGDnvIBZdG5AUyi53yASfSgD-Ro4mnKSnTs9FNzS26WnUaNAjd0ikZN-9IfXn_4LwAA__9DIDfY - -# EXCEPT ALL and EXCEPT with swapped column orders. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT x, y FROM xyz EXCEPT ALL SELECT y, x from xyz] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzEllFr2zwUhu-_XxHO1TeQcSTbaWMYZIzCCqUpbS4GwxdurCWB1DKSA81K_vuwvZLFyXSsncS7dOxHeqXzQN43yFUm79MXaSD-BhwYCGAQAIMQGESQMCi0mktjlK4-aYDb7BXiIYNVXmzK6ueEwVxpCfEblKtyLSGGWfq8lo8yzaT2h8Agk2W6WtfbFHr1kurt5HX7Axg8FWlu4oHnVztPN2U8mHA2EZDsGKhN-WuH_cLP28EyNcvDJd-RhIEp04WEmO_Y34WNHMMKNuHUsOKPYfdLbXKlM6lldrBYUpHYJydO_CU1yydZTguft6Yz2xYyHtx8_XzzMBt8ursDBmv5vfy_Tv3ho14tlu8PtoHtDxcQDnci-b3yVOHzqH0NJ_cOD_bm3S3gHSzwhecHF5TWIe7IOe75teX9ast71VZ0n4XoMovA88MLquMQ98o57vnVEf2qI3pVJ-g-i6DLLEKv_o-6lDoOca-d455fnaBfdYJe1Qm7zyLsMovIu6A4DmHHjmHPr03YrzbhP-tYJ3I9SlOo3MhODWpYnUxmC9nclFEbPZcPWs3rbZrHac3VDSCTpmzeiubhNm9eVQG7wyMKPKbAnJSbR3aaO1yZcINHFHhMgTkpd-vKjmjRpoe_04H9vgMrzA_vbNimQ4rgdhgR3A4jgtthTHCERgSPKILbYURwO4wIbocxwREaEXxEEfyKoqgdRhS1w4iidhhTFKERRa8pitphRFE7jChqhzFFERpRdExRlJN6AkIjkiI0YilCY5piONYVaGWB1hZodYHYF2iFgZMaAz-qDE622mnMVjuN2WqnUVsRHLPVpSwdz8ylLbnSmK1OfckZx2w9Kg9WW5Pdfz8DAAD__7IPavA= - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT x, y FROM xyz EXCEPT SELECT y, x from xyz] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzEmF9r4kwYxe_fTyFz9S5E4jOT-Cew4LJb2EJpS9uLhcWL1MxWwZqQRKhb-t0XldWamOfMJKZ7ae0vc3LynJMZX8UyjvR1-KwzEfwUJBwhhSOUcIQnHOGLiSOSNJ7qLIvTzb_sgMvoRQQ9R8yXySrf_HniiGmcahG8inyeL7QIxEP4uNB3Oox06vaEIyKdh_PFdpkknT-H6Xr8sv4tHHGfhMss6HTdzco3qzzojMkZSzF5c0S8yg8rZHn4pEVAb465im_zLJ8vp7nrH0s4tcSBelx3ZmE2O40clEgbJe_9IFtDpDOmSkNULUOoDUe8SimHS62WcRrpVEdHF9tepVKs7GGxBxV-WyoMLDuo6DdQ4dQS-j3MZvc6v0lcVfDrYZ3ooHPx4-vF7UPny9WVcMRC_8r_397Bp8_p_Gn294NZCAfntfg67saJq_yiDSfXHh6tTRaxM0idK7uuqlNEQMd-iPqtF5GNI_aWWFSRqSXUhidepZSGJUD1q-iMKgwsq6oiOxWNq4g-tIqk-fBLk9lXXderUwdAx_5BDlqvAwtHyN4SizowtYTa8MSrlNIwiLJ-HZxRhYFlVXVgp6JxHcgPrQNlPvzKZPa97vYkYV0HQMf-QQ5brwMLR8jeEos6MLWE2vDEq5TSMIiqfh2cUYWBZVV1YKeicR2oD60Dz3z4PZPZ97t1ygCo2D_GUetlYOEH2RpiUQWmhlAbjniVUhqG0KtfBWdUYWBZVRXYqWhcBd4_-83ihK47nSXxMtNGv0j0Nnemoye9cyqLV-lU36bxdLvM7uPNltv-IdJZvvuWdh8ul7uvNgLfw1SE6T3sHcFkB5NsRI-a0LLfhFaKpyXruOIdV-zSPr8yDxPQzdOy14geNKEVmDSPdRw8bN8ClkW4z8Lgpgf8oPT5SRmy9IiHR02CzcMo2IAGweZpFGyeRsEm0KWoTPlaAdkGNAo3wFG6EQ4mHeAo38RXKiG81C4cXso48fWCbp3vFwIpp1LDWL2CeRq-gwGOXsI8Dt_CPA7TytcrDYHxpX61SitPw7TyOEwrwNHI8jhMa6llj4yXBLZPfMsW8FJaZalqbNIq-aaRYPcm-X0MMA7QKK0IB2kFOEorwOGmmS9Z6QPjSy1rk1ZAo7QCHKUV4WhkeRylVfJbWDkEON-yBbycVn4Xi26dbxrVA2etUtPYpBXQKK0IB2kFOEorwFFaFV-ySgLjSy1rdcrlaXjM5XF4zgU4OujyOEqr4reyClnHt2wBL6VV8XvZ4q1P3v77EwAA__8vwwiq - -# EXCEPT ALL and EXCEPT with different ORDER BY types. -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT x FROM xyz ORDER BY y) EXCEPT ALL (SELECT y AS x FROM xyz ORDER BY z) ORDER BY x] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8mF1r8lgUhe_nV8i5muGNxL0TtQYGHIYXplDa0vZiYPAiNWeqYE1IItQp_vfBD7AmzV5nK-aufizPzuN51on9NMs0sffxuy1M9I8h4xk2ngmMZ0Ljmb6ZeCbL06ktijTfvmUfuE0-TNTzzHyZrcrt0xPPTNPcmujTlPNyYU1kXuLXhX2ycWJzv2c8k9gyni92y2T5_D3O1-OP9X_GM89ZvCyiTtffrvywKqPOmLwxm8nGM-mqPK5QlPGbNRFtPPcpntO8tLnfPx1gzD-ktY7x13VnFhezSprMZHOchzXzfKVCWizsjYNGLMEZWOiaXMLGgY6fk-aJzW1Sn2KyDTu865tr-ysuZs-2fMh8rgB-WWc26vz8-8-fjy-dP-7ujGcW9t_y1zH99ns-f5vt_joCaETdPwM1V1HTj8bPH5xNjhqY3KfdNPODUx5Nyw9PlifFhnbYzz53_eAc0cEcB8yD1kTXcNGDUajuBoauSSZsHKg11akN1d1QcxW1s-rsvqfYZUsFXT88xzUwx-E6h625puBCejAK19zA0DXJhI0DteYat-GaG2quonZ2LXDfU4HLlgq7u7tMtWtgjsN13rTmmoIL6cEoXHMDQ9ckEzYO1JprQRuuuaHmKmpn10L3PRW6bKl-9xzTwBSHqxy1ZpqCCmmxKDxzw0LX5BI2DtSaZ2Ebnrmh5irqs34qfvP5T7bI0mVhnX4F9rbAbPJm919Dka7yqX3M0-lumf3Dh11u90Rii3L_Ku0f3C73L20H_Bqmapi-hsOTMOnCRBelh5ekObgoPZLTLBIPZOKBgjjrwhXi2vTwknSFuDY9ktOhSLwvE--L4YH8XQ_k7xroNRTTN3L45hI35TByE6SBm3IauQnSwM2R3IY9UIe1MtXYCdJITxQHfoI4EhTFgaFUq9RT8AzAy50KJKVau5wuHoLFa_WiOgXlNDwGQRydg3IcHoQgDmwjuVtpAMDX2lWlm5yGuoE40k2OQ91AHOkmnywEjhaqlaxKN7lkGZQsa0q2fvOlKll1HOgG4kg3FEc3nnLJMihZrpWsRjeQRrqhONANxJFuKA50Y_mAYXDAsHz_CnRjuWQZlCxrSra-uKpk1XGkm6pk1XGkm1yyDEqWNTfw9S2nuoNXx5Fuqnt4dRzpJh8wAThgAvlfIlXdJptf_g8AAP__S8iGVw== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT x FROM xyz ORDER BY y) EXCEPT (SELECT y AS x FROM xyz ORDER BY z) ORDER BY x] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy82F1r40YUBuD7_oowVy0rY8-ZI39BwaVd6MKyWTa5KBRfaO1pYshaRpJh0yX_ffEHKNbE553RyL6L7byao3NmHmT_UOt8aT9l32yppv8qrRJFKlFGJYpVolI1T9SmyBe2LPNi9y-HwIfldzUdJGq13myr3dvzRC3ywqrpD1Wtqierpuo--_pkv9hsaYv-QCVqaats9bRfZlOsvmXF8-z78_8qUXebbF1Ob3r93cq322p6M9PJjNT8JVH5tqpXKKvswaqpfkn8q7jLi8oW_fS0gBm981uLQtb6a1VWq_Wi6uvG_c50vVpjqTr99fnmMSsfneT8pS7HhJTzegA6DZwAJTNztivcYgLU7InvCNJWI6DmxLsawfBsOfV1tuu8WNrCLk-utL_K2YKNu2fOdWR0qRLcnp0rYRxRQtKqyr-z8vHOVrebPjc6df-8sdOb9__8-f7z_c0fHz-qRD3Z_6pfZ_q334vVw-P-r7PTr-9p0mJXs9Oyd-fdGng07a1-HK_6RhWf8l6-6aeDZoffXv8UTh2ghwcefer1TRvAQR3HRg87ARysVQOurwJ4yAiGwTMIINxvBtTsSjvCfYdAzZlfhnDdnZ_urvEjvMMS3J75ER5WQjTh-hqE--1qdlrmTTj5n1_yOb6m1-c2hII6jjc66oRQsFZNKF2F0IAR6FHwDAII9ZsBNbvSjlDfIVBz5pchlLrzy901foR2WILbMz9Cw0qIJpSuQajfrmanZd6EGv_za3yOL_f23_WDCQV1HG903AmhYK2aUHMVQgNGoMfBMwgg1G8G1OxKO0J9h0DNmV-GUNOdX-6u8SO0wxLcnvkRGlZCNKHmGoT67Wp2WuZNKPufX_Y5vmmvDaCgiuNtTjoBFKxVA8pXATRgAHoSOIEAPv0mQM2etOPTdwTUnPhl-OTu7HL3jB-fHZbg9syPz7ASovnka_Dpt6vZaVmr32HfWOCLLTf5urReP7EOdh2zywd7mECZb4uF_Vzki_0yh5e3-9z-jaUtq8On-vDiw_rw0a7A12EthkkOUzOsX4eHJ2EdFtajmDRFpU1UmkHaiB1nueMshlM5nIp1g7LlsB7HpCkqbaLSDNJDseMgPAoIUzM8FsMTedYTGYWBXLeWTUkRKrIqGrCinQN2Gjcg7pywEJZAGrkE4ggmEEcygTiiScu8aOCLdk7aaXwI4s5RC_EJpBFQII6EAnFEFIgjo7TsjJ6AuCxNI-44pWVraAAeIsDzC6CKwBMMeoSRrSFgDUVZA9LwGSjOGhCHT0Fx1pBsDQFrSLaGgDUUZQ1II2tAHFkD4sgaEEfWkGwNAWtItoaANSRbY4A1Js4aI1tjgDVGtsYAa0yUNSCNrAFxZA2II2tAHH7lkq0xwBojW2OANSbKGpBG1oA4sgbEkTUgjqwxsjUGWGNkawywxsjWMLCG46xh2RoG1rBsDQNrOMoakEbWgDiyBsSRNSCOrGHZGgbWsGwNA2s4yhqQRtaAOLIGxJE1II6sYdkaBtawbA0Da1i2JgXWpIHWzF9--RkAAP__fc8uUA== - -# EXCEPT ALL and EXCEPT with different numbers of ORDER BY columns. -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT x FROM xyz ORDER BY y) EXCEPT ALL (SELECT x FROM xyz ORDER BY y, z) ORDER BY x] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzEmF-L4kgUxd_3U0g97dKReG9FbQMLLsvADgzTw3Q_LCw-ZExtKzgmJBHGbfzui1GwTY116kaMb-2fk6r8Ur9TZb-pdZaaz8l3U6r4H0UqUKwCpVWgIhWooZoFKi-yuSnLrNh_5RD4mP5Q8SBQy3W-qfZvzwI1zwqj4jdVLauVUbF6Sb6tzFeTpKYIBypQqamS5aoeJi-W35NiO_2x_U8F6jlP1mXc64f7kZ82VdybUjBlNdsFKttUpxHKKnk1KqZd4D-L56yoTBEOzycw5QfXWKf4t21vkZSLRprUbHeaD0vm854KtcESTPVFMroFGbLRBFP9AMaUEYouzut0naxITWFS-znN9mH0rXrK9ZDN2_wrKRfPpnrKQ27gftnmJu59-PvPD19een98-qQCtTL_Vr9O6bffi-Xrov7rxOEi9WEL6tykTg8Xrz9qTY8uMPmc9bM81Oc8Lg0_PhueBMvbY3WH3A91G-3BPI6YR51pL-HSDoy_-H5syIZzY_HpXuJTF-L7UecmdW_x2X-Fsc8C0_0wamMemMfxPsedmSfgQu3A-Jvnx4ZsODc2j-9lHndhnh91blL3Nk_7rzDts8Cifn0eFZsH5nG8z8fOzBNwoXZg_M3zY0M2nBubp-9lnu7CPD_q3KTubV7kv8IinwU27LfxDszieJeTzrwTUKE2WPyt8yNDNpobWxfdy7qoC-v8qHOTequfmD-5_ldT5tm6NF6_Hgd7YCZ9NYdHUWabYm6-FNm8Hubw8qnO1W-kpqwOn9Lhxcf14aP9BN-HqRmm9-HoLEyyMNFV6fE1adZXpSfuNDuJazdxLSDOsnCDuDQ9vibdIC5NT9zpyEl86CY-dIZH7mc9cj9roNfYmX50hx-vcdMdRm6CNHDTnUZugjRwc-JuwwGoQ6tMJXaCNNITxYGfII4ERXFgKFmVeg6eAXh3pwJJyWqX88EjMLhVL6Jd0J2G2yCIo33QHYcbIYgD28jdrTQC4K12FenmTkPdQBzp5o5D3UAc6ebeWQhsLWSVrEg3d8kyKFmWlKx9-BKVrDgOdANxpBuKo4Onu2QZlCxbJSvRDaSRbigOdANxpBuKA93YvcEw2GDYfX4FurG7ZBmULEtK1h5cVLLiONJNVLLiONLNXbIMSpYlB3h7yYlO8OI40k10hhfHkW7uDUaDDUa7_yXS1G22--X_AAAA__-UMpRn - -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT x FROM xyz ORDER BY y) EXCEPT (SELECT x FROM xyz ORDER BY y, z) ORDER BY x] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy82F1r40YUBuD7_gozVy2RkefMyF9QcGkXurBslk0uCsUXWnuaGLKWkWTYNOS_L_4AxZr4vEca2Xdre1_N0TkzD4pe1Dpbus_pd1eo6b9Kq0iRipRRkbIqUomaR2qTZwtXFFm--y-HwMflDzUdRGq13mzL3dfzSC2y3KnpiypX5ZNTU3WffntyX126dHk8UJFaujJdPe2X2eSr72n-PPvx_L-K1N0mXRfTXj_erXy7Lae9mY5mpOavkcq2ZbVCUaYPTk31aySv4i7LS5fHyWkBM7qRrUVN1vprVZSr9aKMde1-Z7parbZUlf723HtMi0cvOX-tyjFNynk7AJ20mEA0M2cbY1sMgeptoZtoZm7EayathkH12Xc1jOHZcqrrbNdZvnS5W55caX-VswUbf_ec68joUiX4PTtXwjighKhVlX-nxeOdK283sa116v5546a9D__8-eHLfe-PT59UpJ7cf-WvM_3b7_nq4XH_r7PTr-5p0mJzW69lN-cFGwia9l4_jld9p4rPWT_bxMmg3uH31z8lVDdwRMBITP3YtKEc1HFs9LATysFaFeX6KpQ3GcGw1QzkmMvGQPXGBGEuHQfVp38ZzHV3kvr7R4Z5hyX4PZNh3qyEYMz1NTCXbW7rtUyMOclPMkkOsunHtg2moI7jjY46wRSsVWFKV8G0wQj0qNUM5JjKxkD1xgRhKh0H1ad_GUypO8n8_SPDtMMS_J7JMG1WQjCmdA1MZZvbei0TY2rkJ9lIDrLt798ENMYU1HG80XEnmIK1KkzNVTBtMAI9bjUDOaayMVC9MUGYSsdB9elfBlPTnWT-_pFh2mEJfs9kmDYrIRhTcw1MZZvbei0TY2rlJ9lKDnLSb0MpqOJ4m5NOKAVrVZTaq1DaYAB60mICckhlQ6B6W4IglQ6D6rO_DKS2O8X83SODtMMS_J7JIG1WQjCk9hqQyja39VrW6n3tOwt8dcUmWxdO9Cp2sOuYWz64wwSKbJsv3Jc8W-yXOXy83ef2XyxdUR5-1YcPH9eHn3YFvg1rNkx8mOph_TY8PAnrZmE9CklTUNoEpS1IG7bjlu-4ZcMJH07YukHZfFiPQ9IUlDZBaQvSQ7bjIDxqEKZ6eMyGJ_ysJzwKA75uzZuSIFR4VTRgRXsH7DRuQNw7YU1YAmnkEogjmEAcyQTiiCbN86KBL9o7aafxIYh7R62JTyCNgAJxJBSII6JAHBmleWf0BMR5aWpxzynNW0MD8BABnl8AVQSeYNAjDG8NAWsoyBqQhs9AYdaAOHwKCrOGeGsIWEO8NQSsoSBrQBpZA-LIGhBH1oA4soZ4awhYQ7w1BKwh3hoDrDFh1hjeGgOsMbw1BlhjgqwBaWQNiCNrQBxZA-LwTy7eGgOsMbw1BlhjgqwBaWQNiCNrQBxZA-LIGsNbY4A1hrfGAGsMb40F1tgwayxvjQXWWN4aC6yxQdaANLIGxJE1II6sAXFkjeWtscAay1tjgTU2yBqQRtaAOLIGxJE1II6ssbw1FlhjeWsssMby1iTAmqShNfPXX34GAAD__9RrOG4= - -# EXCEPT ALL and EXCEPT with compatible ORDER BY columns that are not in the final result. -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT y FROM xyz ORDER BY z) EXCEPT ALL (SELECT y FROM xyz ORDER BY z)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8l19r4kwYxe_fTyHP1fvyjsRnZmLbwILLUthCaUvbi4XFi9TMVsGakESoW_zui39Y6785mYzmrmp-fU7OMydHP2iSJuYufjMFRT-JSZAkQYoEaRIUUl9QlqcDUxRpvrhkBdwk7xR1BI0m2bRcvN0XNEhzQ9EHlaNybCii5_hlbB5NnJg86JCgxJTxaLwck-Wjtzif9d5nv0nQUxZPiqjVDhaT76dl1OpJ0VPUnwtKp-VmQlHGr4YinovqKp7SvDR5EG4L6Mn__85i0ZM7szb4y6w1jIvhDs3Un2_0SBc9n13hk9qiatjC5_RFHxW0-T9pnpjcJPsq-gu4wlUH7u17XAyfTHmfBXLH4OdZZqLW9Y9v1w_Pra-3tyRobH6V__b4vy_56HW4_GtjwFGrwwp3Np0cUn1Q8F3aTrNAhjtXHp7d3ZrNDqetwmELZDtQdVIIdKyPW7exFLr4cmJjVA1j-JzO6KOCGsshN5FDWX3nssrKVTvQdbIAdKxXftFYFhx84RMbo2oYw-d0Rh8V1FgWZBNZUNV3rqqsXLeXX6GcswB0rFd-2VgWHHzhExujahjD53RGHxXUWBZUE1nQ1Xeuq6w8bNdJAlCxXvhVY0lwcIVPaouqYQuf0xd9VFBjOdBN_045IOfRFFk6KUylXyGdxQ2Z5NWsbCrSaT4wD3k6WI5Zvbxfcss3ElOUq0959eJmsvpoIfAzzLswf4b1FsxuMHe86NCHll6zJZgtrY4ru-PKwXHpBu847kqHPrT0mi3BbG11HKwrtMKya99X10pf2OELn3jZYRQvQAPP7DSKF6DB7Eur41d2x6984mWHUbwADY64nUbxAjSYzfYOQY_ivafpdgNJUEF7j1OnDrLTsIQAjm7djsMaAjiavvdQ3TZeA-P3nqouWQE0CgvC0Ym14yguCEfT7ZWC1mavFAadwl6lAmiYF79aATjMi1-xsL1ZGFQLe3ULoGFe_NoF4DAvfv0ivfpF2vtFgn6RXv0CaJQXhKNb9-sXhKPp9n6RoF-kV78AGuUF4ejE-vULwtF0t37pz__5EwAA__9cCIMg - -query T -SELECT url FROM [EXPLAIN (DISTSQL) (SELECT y FROM xyz ORDER BY z) EXCEPT (SELECT y FROM xyz ORDER BY z)] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy82N-KGzcUBvD7PoXRVUvHjHWk8T8ouLSBBkI2ZPeiUHwxsdVdw8ZjZsaQbdh3L7aXzFpan0-akecua-ezzpwj_ZD9XWyLtfmYfzWVmP8jpEgEiUQokQgtEpGJZSJ2ZbEyVVWUh_9yCrxffxPzUSI2292-Pry8TMSqKI2Yfxf1pn40Yi7u8i-P5rPJ16ZMRyIRa1Pnm8fjMrty8zUvnxbfnv4Tibjd5dtqPhimh5Vv9vV8sKBkocTyORHFvm5WqOr83oi5fE78q7gtytqUaXZewIJ-_bGWTBZ0cS0KWevPTVVvtqs6ldbzLmSzmrVUk_7yNHjIqwcnuXxuylEh5bwegMxiTkC3mADZPfEdQdZqBGRPPNYIxhfLaT5nvy3KtSnN-uyTjp9ysWDl7plLHZlcqwS3Z5dKmHYoIWlV5V959XBr6ptdqq1O3T3tzHzw7u8_3n26G_z-4YNIxKP5t_55IX_5rdzcPxz_dXH6zTPN4rb1YzEsdqnO7Kd_27TR2eIy4GR7HOyUhqlqgyuo4-Voj6PgCtZqcJW94BoygnHcGegWMyC7K-149R0C2TO_Dq8ynm3urvHjNWIJbs_8eA0roTOvsg9eyf94kc_pUsNUtxEO1PFyuiZRhANrNcJRL8IFjEBO4s5At5gB2V1pJ5zvEMie-XWEo3i8uLvGT7iIJbg98xMurITOwlEfwin_46V8TpceHr_FBgsH6ng5XdMowoG1GuFUL8IFjEBO485At5gB2V1pJ5zvEMie-XWEU_F4cXeNn3ARS3B75idcWAmdhVN9CKf9j5f2OV3ZsI1voIqXszWL4htYq_FN9-JbwADkLOYEdIsJkN2Tdrr5joDsiV9HNx2PFnfP-OkWsQS3Z366hZXQWTfd9w-Ab5Tz2VS7YlsZr5_3RocHMut7c2pQVezLlflUFqvjMqc_b4654wtrU9Wnd-Xpj_fb01uHAl-HJRsmPkx2WL4Oj8_CMiwsO6Up65JWuktaKz6t2I5rvuOaDWd8OGPrnvBl82HZKU1g2HxagWHzaQ2GPWY7PuXDk4Aw2eEpG57xK8_4XTYGKgBTECq8KhKwIju5AtIIFhBHsoA4ogXEkS2Sx0UCXSTPiwS-yE7AgDQSBsQRMSCOjAFxhIzklZGAGck7IwE0spM0kqeGRuAOwVNDgBpyqAm6g_BpeAnh4_AWwsfhNYSPIyvIoea88Qo0nqeGADXkUBNiBUgjK0AcWQHiyAoQR1aQQ81549Gz89RYcccK4qkBVhAvDc3ApuGpUYAa5VATYgVIIytAHFkB4sgKEIffWfgLnQIXOsVTowA1yqEmxAqQRlaAOLICxJEVII6sUPyFTqHieWqsuGOF4qkBViheGjUFm4anRgFqlENNkBV8GlrBx6EVfBxawceRFZq_0GlwodM8NRpQo_kvUOCwgzSyAsSRFSCOrABxZIUGP0yh1XlqrLhjheapsa1YPv_0fwAAAP__DLUp7g== - -# EXCEPT ALL and EXCEPT with a projection on the result. -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT x FROM ((SELECT x, y FROM xyz) EXCEPT ALL (SELECT x, y FROM xyz))] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzEltFq4kAUhu_3KeRc7cKEOJPE1sCCy1LYQqml9WJhyUVqzqpgkzAToW7x3ZckW1yjzsl0MLmM-mX-OecD_zdIswTv4xdUEP4CDgwEMPCAgQ8MAogY5DKbo1KZLH9SA7fJK4RDBqs03xTlxxGDeSYRwjcoVsUaIYRZ_LzGR4wTlO4QGCRYxKt1dUwuVy-x3E5et3-AwVMepyocOG558nRThIMJZxMB0Y5Btin-nbB_8fN2sIzV8vCV70jEQBXxAiHkO_axsEEPYcXZsPtXbdJMJigxOXhZVJLUT07c-Eeslk9YTHOXN7Yz2-YYDm5-fr95mA2-3d0BgzX-Lj5Xqb98lavF8v1hP4PGAPY38yxudiL2feZkucuD5gxOnu0fnM3bK8BbKOAKx_UuaKxB3FEvccXZuB04y7tzVrRfhGizCM9x_Qt6YxD3qpe44mzcDrwR3XnjtV-E12YRvlP9NV3KG4O4173EFWfjduCN1503fvtF-G0WETgXtMYg7LiHsOJs2A6c8fvpVSdCPaLKs1Rhq9Y0LK-FyQLrMalsI-f4ILN5dUz9OK246l8_QVXU34r64TatvyoDtodHNvDYBuZWuXmgp7nByIQZPLKBxzYwt8rdGNkRLZr08H_a08_b08L8cGbDJu3bCK6HCcH1MCG4HqYEJ2hC8MBGcD1MCK6HCcH1MCU4QROCj2wEv7JRVA8TiuphQlE9TClK0ISi1zaK6mFCUT1MKKqHKUUJmlB0bKMot-oJBE1IStCEpQRNaUrhVFewKwt2bcGuLlj2BbvCwK0aAz-qDEa26mnKVj1N2aqnSVsJnLLVpCwd78ykLZnSlK1GfckYp2w9Kg9aW6Pdp78BAAD__7amZ9o= - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT x FROM ((SELECT x, y FROM xyz) EXCEPT (SELECT x, y FROM xyz))] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzEmE9r40gUxO_7KUyfdkFGft2S_wgWsuwEJhCSkOQwMPigWD2xwbGEJEM8Id99sM3YsWS9UqulzNFxfurq0qtSy29iFUf6JnzRmQi-CxKOkMIRSjjCE47wxdQRSRrPdJbF6fZf9sBV9CqCgSMWq2Sdb_88dcQsTrUI3kS-yJdaBOIxfFrqex1GOnUHwhGRzsPFcrdMki5ewnRz8br5KRzxkISrLOj13e3Kt-s86F2QcyHF9N0R8To_rpDl4bMWAb079VV8WWT5YjXLXf9UwrkljtTTpjcPs_l55KhEmij56Ae1aohqZAh14YhXKeV4qfUqTiOd6ujkYrurVIqVAyz2qMLvSkUNy44qhhYqnEZCv4bZ_EHnt4mrCn49bhId9C6__X9599j77_paOGKpf-R_73bwz7_p4nn--8Nx5ip3NmrX35u4Hyeu8osenF17fLI2GWSuRuRc2XdVkxYCOg4TNOy8hUwcadkS1cgS6sITr1KKZQNQ8x5qUUUNy6p6yEyFdQ_R5_WQrD_5ss7gq77rNekCoONwF0edd4GBI9SyJaqRJdSFJ16lFMsUyuZd0KKKGpZVdYGZCusukJ_XBar-5Ks6g-_1dy8Qxl0AdBzu4rjzLjBwhFq2RDWyhLrwxKuUYplC1bwLWlRRw7KqLjBTYd0F6vO6wKs_-V6dwff7TZoAqDjcw0nnTWDgB7VqiGpkCHXhiFcpxTKBXvMeaFFFDcuqesBMhXUPeH_md4ozou51lsSrTNf6FWKw3ZaOnvXepixepzN9l8az3TL7j7c7bveHSGf5_lvaf7ha7b_aCvwIUxGmj7B3ApMZTNKKntjQcmhDK8XTknVc8Y4rdmmfX5mHCejmaTmwokc2tAKT5rGOg5vtG8CyCA9ZGGx6xA_KkJ-UMUtPeHhiE2weRsEGNAg2T6Ng8zQKNoEuRWXK1wrINqBRuAGO0o1wMOkAR_kmvlIJ4aV24fBSxomvF7R1vl8IpJxKDWP0COZp-AwGOHoI8zh8CvM4TCtfrzQGxpf61SitPA3TyuMwrQBHI8vjMK2llj0xXhI4PvEtW8BLaZWlqjFJq-SbRoLTm-TPMcA4QKO0IhykFeAorQCHh2a-ZKUPjC-1rElaAY3SCnCUVoSjkeVxlFbJH2HlGOB8yxbwclr5UyzaOt80agDetUpNY5JWQKO0IhykFeAorQBHaVV8ySoJjC-1rNFbLk_D11weh--5AEcvujyO0qr4o6xC1vEtW8BLaVX8Wba49en7X78CAAD__-LGBZQ= diff --git a/pkg/sql/logictest/testdata/planner_test/distsql_window b/pkg/sql/logictest/testdata/planner_test/distsql_window deleted file mode 100644 index c9c671169a4a..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/distsql_window +++ /dev/null @@ -1,64 +0,0 @@ -# LogicTest: 5node-dist - -statement ok -CREATE TABLE data (a INT, b INT, c FLOAT, d DECIMAL, PRIMARY KEY (a, b, c, d)) - -# Split into ten parts. -statement ok -ALTER TABLE data SPLIT AT SELECT i FROM generate_series(1, 9) AS g(i) - -# Relocate the ten parts to the five nodes. -statement ok -ALTER TABLE data EXPERIMENTAL_RELOCATE - SELECT ARRAY[i%5+1], i FROM generate_series(0, 9) AS g(i) - -# Verify data placement. -query TTTI colnames -SELECT start_key, end_key, replicas, lease_holder FROM [SHOW RANGES FROM TABLE data] ----- -start_key end_key replicas lease_holder -NULL /1 {1} 1 -/1 /2 {2} 2 -/2 /3 {3} 3 -/3 /4 {4} 4 -/4 /5 {5} 5 -/5 /6 {1} 1 -/6 /7 {2} 2 -/7 /8 {3} 3 -/8 /9 {4} 4 -/9 NULL {5} 5 - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum(a) OVER () FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJys00Fr2zAUB_D7PoX5nzaQkSXbO_iUaw5bRrKxw_BBsx6pIZGMJNOW4O9eYkNTh6SouEfp-e_34_F0grGafqojeVT_IMAgwZCDoQBDiZqhc7Yh7607fzIF1voJVcbQmq4P5-uaobGOUJ0Q2nAgVPit_h9oS0qT4xkYNAXVHsY2nWuPyj2vtAoKDLtOGV8lKReJMjoRiQ0P5MCw6UOVrATqgcH24dLLB7UnVGJgdzwXRm-s0-RIzwj1cEP8tzXaPpLj5Zy7-_Pj60p8ewXJuyA5A4n4AYmYAXGRcrloRDJeJKNEMuX5IlEeL8qjRHnKi0WiIl5URImKlJefttg3RFvynTWerhb89p-z8-KT3tP0SrztXUO_nG3GNtNxM-bGC00-TFUxHdZmLI3At2Hxbvj7LJxdh-WSzvmScLEkXH4oXA9fXgIAAP__Zs7B5Q== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum(a) OVER (PARTITION BY b ORDER BY c) FROM data] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzElUFr2zAUx-_7FOKdWiZjS3bS1CevbIcclpQ0Y5SRgxo9mkBqGdlhKyXffcQpy5J1egIZ92hbPz39f3-wXqA0GifqCWvIf4AADhI4pMAhAw4DWHCorFliXRu7X3IAxvoX5AmHdVltm_3rBYelsQj5CzTrZoOQw1w9bHCGSqONE-CgsVHrTTumsusnZZ8LrRoFHO4qVdY5i2LBVKmZYKZZoQUO022Ts0LyIuWFgMWOg9k2rxOPgx6e2UrVq9MR7foFh7pRjwi52PH_nPy4z7Y0VqNFfbJTu8t5tu_rUpufaOPB6dTbT7P5eD6eTtjNfc6Kvc67b18vivSSXUxnn7_M2M09K-THyz_hsrNYxyPLbo88MZGpYpGcrXx7dnoyW_gXLXyKjkUUy56qFp1VPeyraumvW3rpllGc9qRbdqb7qi_dqb_u1Et3GsVZT7rTznSP-tKd-evOvHRnUTzoSXfWme7r97g33jjQDOvKlDV63QrJPhLqRzzkr83WLvHWmmU75vA4bbn2v6uxbg5fXx_G5eHT_oD-cBYCD0PgUQgsEjctzunkb1q6YemExanv5JxOQ8pyw0RZbpgoyw0TZRGZibKykLIGIbrdMKHbDRO63TChm8hM6B6G6L4K0e2GCd1umNDthgndRGZC9yhE93WIbjdM6HbDhG43TOgmMlN__n8uDqfvxe7D7wAAAP__TYAUnQ== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum(a) OVER (PARTITION BY b ORDER BY c) FROM data ORDER BY d] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8ls9um0wUxfffU6C7SpRBMH9IbFZ8UbvwonZku6qiigUxo9iSw6ABq40iv3tlHMcFk7lUg1gScuacOb-ri98gU6mcJi-ygPAnUCDAgAAHAgIIBBATyLVayaJQ-vAvR8Ek_Q2hT2CT5bvy8OeYwEppCeEblJtyKyGEZfK0lXOZpFJ7PhBIZZlstpVNrjcviX6N0qRMgMAiT7IidFyPOkmWOtRR5VpqIDDblaETCRIxEnESUYj3BNSufDc9ez29OuukWNddIgbxPiZQlMmzhJDuySfhz-fsMqVTqWVaO6k6pXm9H5ssVb-k9oK668P_8-VkOZlNnfvH0IkObS6-f7uKxLVzNZt_-Tp37h-diN9cf9wvuLzZOTX7NHVLpoXSpdQe9ZtF3HyYUVLV0m7GO1TUVlDl0NrSVLkq92jQ6LPdXtTsaffxol3Gy6Oux4YbMNrbgN0OOGBI6acBo70MGOtOmHUizFyPD0eY9Ub4bkDCSOknwqwXwrw7Yd6JMHc9MRxh3hvh0YCEkdJPhHkvhEV3wqITYeF6wXCERW-ExwMSRko_ERa9_wxoMZvLIldZITt94f1DhTJ9lse-C7XTK_mg1aqyOT7OKl31KUplUR7fvj9MsuOrQ8Du4sBGPLIRU6vcVJjVtKn2_1azmthviplRzM3O3Cimt2ZrYYPaLEZQm8UIaiS2VW4MdWAsHOn71gb1nQ0ssxiBZRYjsJDYVrkxWCNj32MzrLENLGq1RRE1ggtRI7yw5HbR0U1qXqUU2aXUapnSi236T9DMagyaWY1BQ5LbRUehXazUOrQAgWbeqU1o8f6_PwEAAP__R9QuFw== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum(a) OVER (PARTITION BY b ORDER BY c), avg(a) OVER (PARTITION BY b) FROM data ORDER BY d] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzEls9um0wUxfffU6C7SpRBeP7gJKxI9FWVF40jx20VVSyIGcWWHAYNWG0U-d0rII4LtudSDbWXhJw5Z87v6po3SFUi7-IXmUPwAygQYECAAwEBBHyICGRazWSeK13-Sy0YJb8gGBBYpNmqKP8cEZgpLSF4g2JRLCUEMI2flnIi40RqbwAEElnEi2Vlk-nFS6xfwyQuYiDwkMVpHjiuR504TRzqqGIuNRAYr4rACQUJGQk5CSlEawJqVbybbr2eXp15nM-bLiGDaB0RyIv4WUJA1-RA-O05q1TpRGqZNE6qTmlf7_siTdRPqT2_6Xp_M5mOpqPxnXP7GDhh2ebD1y9noTh3zsaT_z9NnNtHJ-QX50Dg5tvn8sXHTX0SDnevub0CO3iFPQEflC6k9mir-5BffPjRutmDfrxDZfsKq0z2tnanXJV51G_1u99eNOxp93GjXcbNo67HjjdwtLeBG55q4BACm4GjfQ0c606cdSLOXI8fjzjrjfjlqYgjBDbEWV_EeXfivBNx7nrieMR5b8SvTkUcIbAhzvsiLroTF52IC9fzj0dc9Eb8-lTEEQIb4uJffEbs8ZvIPFNpLjt9IQzKSmXyLOv-c7XSM3mv1ayyqR_Hla769UpkXtRv3x9Gaf2qDNhd7NuIr2zE1Co3FWY1basHf6pZQzxoi5lRzM3O3CimQ7O1sEFtFiOozWIENRLbKjeG2jcWjvQ9tEF9aQPLLEZgmcUILCS2VW4M1pWx72szrGsbWNRqiyJqBBeiRnhhye2io5vUvEopskup1TKlO9v0r6CZ1Rg0sxqDhiS3i45C21mpTWg-As28U9vQovV_vwMAAP__nlo-wQ== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum(a) OVER w1 AS sum_a, avg(b) OVER w2 FROM data WINDOW w1 AS (PARTITION BY b ORDER BY c), w2 AS (PARTITION BY a, d) ORDER BY sum_a ] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzMlk1v4joUhvf3V0Rn1apGiZ2Ej6zS6l5dsZhS0c6MqhGLlFgtUhsjJ2imqvjvI6AME0L9hjogljR9fHzs5-j1G2UqldfJi8wp-kGcGAli5BOjgBiFNGI01Wos81zpxb-sgH76iyKP0SSbzorFn0eMxkpLit6omBTPkiK6Sx6e5VAmqdSuR4xSWSST52WZqZ68JPo1TpMiIUa30yTLI6flcifJUoc7qniSmhgNZkXkxILFPos5iwMazRmpWfFedFPr4dV5SvKncpWY02g-YpQXyaOkiM_ZB5vfrDPLlE6llmlppeUq2-19n2Sp-im1G5ar3lwO7_p3_cG1c3UfOfHiRG-_fjmL_XPnbDD897-hc3XvxOLifM9m_FX_m37EgfrhnrGh5T4YXX77_yzm538uKWRxe6ujzVb9D7e6YyO3SheLbYTbt3nx4fpBjaPYdRDvi-7YxLVqqakrvK1z210-LJXn9ceC1xkLl7dccbzB4I2J1D6JwWiuH84PPBjAnPVgtD87GKK-maKWmaLl-sczUzR2k52TMLO5frg4sJnAnLWZnc-a6dc3069lpt9yg-OZ6Td2k92TMLO5frh_YDOBOWszu581M6hvZlDLzKDlhsczM2jsJnsnYWZz_fDgwGYCc9Zm9pp45u5YfyjzqcpyWesF6y2OSqaPcnWuuZrpsbzRarwss_o5WHLLV0oq82L19f1HP1t9WmywPty2gblnRQdWdNdMcyMtbOCODczBdQE6tKJ7Zlps097ftF-CvW3YN8LgrgMjLLi5dGgzH2YYzAeoDOYD0ODMAA3mo20zH2YYzIcZRvMBaDAfgAbz0TFa2jVL2rWZj56N4WYYGA4qA8MBbdc1SgBzgKAIMNMoA0B4oRAAOEoBgAPNeSVFSqpyYRadm2ME3Dmv5Mg-qgMauI5qA9kRbtk50r2SoXvpbqaR7mYa6g5wpDvAke6VIC3r3ga6VzJlL90rmbKX7mYa6Q5qI90Bbtk50r2Sp3vpbqaR7mYa6g5wpDvAke6VVC2_tT2z7qKSLUbdR_N_fgcAAP__1Npgpw== - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum(a) OVER w1 AS sum_a, avg(b) OVER w2, rank() OVER w1 AS rnk, row_number() OVER w3 AS rnumber, max(a) OVER w3, min(b) OVER w2 FROM data WINDOW w1 AS (PARTITION BY b ORDER BY c), w2 AS (PARTITION BY a, d), w3 AS (PARTITION BY a, c ORDER BY b, d) ORDER BY rnk, rnumber ] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJzMmFFv2kgUhd_3V1j3KVUH2TO2CfhpiLZaoRVQOel2qxVauXjUIKU2so12q4r_XmGKKITMMboO8lvA-XzmzvU5c813yvLUTJOvpqToH5IkSJEgnwQFJCikuaBVkS9MWebF9l92wDj9nyJP0DJbravt13NBi7wwFH2nalk9GYroIfn8ZGKTpKZwPRKUmipZPtUyq2L5NSm-6TSpEhJ0v0qyMnJ6rnSSLHWkk1ePpiBBs3UVOVoJ7QsthQ5ovhGUr6ufogetz9-cx6R8PFbRkuabuaCySr4YiuRGvLD4w33WWV6kpjDp0Z3qu5yW93GZpfl_pnDDY9X3o_hh_DCeTZ27T5Gjtzt6_2Fyo_03zs0s_v1d7Nx9crR6-4YExaPpnzfPvr-sSH-3L4c61SvVKT1rofU6BI3--uNGy21xk_G0_uvictRROf5rlWPvW70OQfHs47_TD5O7d_Fxn-RboYO6h5PR36fNPVzcPcCh0LdC94UeCi09oQcne3IoNnix2DOl3OdFZQpXeadbWMu_qBE22NBz2_nLjc8sZpr38pWrwpMOnF9C_2gJsnmOyCY54sqeq66XJLK1R7Lf6SRpr04pO5AkLZZj71sXkgRYbJ8kkpMkqrmNVSMbq57rX8_GqrXn4bbTNm6vTqk6YOMWy7H3rQs2Bhbb21hxbOw3t7HfyMZ-zw2uZ2O_tedh0Gkbt1en9Dtg4xbLsfetCzYGFtvb2OfYOGhu46CRjYOeG17PxkFrz8Ow0zZur04ZdMDGLZZj71sXbAwstrdx0Nbr-RmN2JSrPCtNo7dub7vhJv1idt0p83WxMO-LfFHL7D7Oaq5-YUhNWe2u_vwwznaXtgtsDt9yYKlYNEtbAW1ppznwgANLn0WztBXQVlaaBQ85sAxYNEtbAW3_lPZ-pY9h7xQOrHBoVw6tsOrbpfucTLHDwNdAGVgT0CxtlCm3nEyxw8DXdhhlCqBZ2ihTBpxMscPA13YYZQqgWdooU4ZWZ0vP7mz57OC8JFUkOIBYNHAn0kanNsB56nDgAOcIi0bHPjgB0cwBcJ46Sgj57Ai9JCIADXwKaBQSCOepo5iQ9vFBhiAn7AMEygnWAAFo5FTeCIFwnjrMCdYUAWjkVN4cgXCeOswJ1igBaORU3jCBcJ46zAn7PKHAPKFY84RizROABk5F2sBrCOepo5xQrHkC0MCpgEY5gXCeOvwVgzVPABr9lsCbJxDOU0c5oezzhALzhLpsnphvfvsRAAD__9QiFyc= - -query T -SELECT url FROM [EXPLAIN (DISTSQL) SELECT min(d) OVER w1, sum(a) OVER w2, avg(b) OVER w3 FROM data WINDOW w1 AS (PARTITION BY b ORDER BY c), w2 AS (ORDER BY c), w3 AS (PARTITION BY a, d) ORDER BY a, b ] ----- -https://cockroachdb.github.io/distsqlplan/decode.html#eJy8lUFv2jAUx-_7FNE7UdUoseNQmpNbbZo4FCpgm6opBxdbBYnGyDHaqorvPgWqMdLiFxSyY5r-3vv7x1_OK-RG6aF81gWkP4ECAQYEYiDAgUACGYGVNTNdFMaW_7IDBuo3pBGBRb5au_LPGYGZsRrSV3ALt9SQwlQ-LvVYS6VtGAEBpZ1cLLdrVnbxLO2LUNJJIDBZybxIg25IA5mrgAbGzbWFbEPArN3bhv3gx5dgLov54UjBINtkBAonnzSkdEOOJN3PWefGKm21Opi0nVI9y49FrswvbcPkcOv9zXg6mA5Gw-D2IQ1Eqe5uMOwIfhF0RuPPX8bB7UMg4suLymH2QVlLQWlF-eTbXUfQ2rHio7G8S6lXDyWiLNXN968dwS6AwGjt0kAkRPSIuCLle3Y0ET8l0cRYV-ZhlZLwSyKSy7-by4VExEd3Jgc7af2-0zp9D2k3ZC01np6tSL12G8_qS2W1pLJuGLcklZ1N6lW7UuP6UuNaUuNuyFuSGp9Nar9dqby-VF5LKu-GSUtS-dmkXv-_D94HMca6WJm80JXAH0-OyoNo9aR3py7M2s70vTWz7Zrd42jLbe9HpQu3e_v2MMh3r8qA9eFeE7jfBKZRI5r5aVqlo39pBGZeOD6Aoyoce2Huh7kXpsjqpElP_DDSEz-M9ASJjfQEoZGfutekJ1dNfPthxLcfRnwjsRHfCI0o6zfxfd3Etx9GfPthxDcSG_GN0Ng9-O4aPUU4fXeNnmIcoRHlCI04x5Ij0jEc8-b_glTpbPPpTwAAAP__B8J1jw== diff --git a/pkg/sql/logictest/testdata/planner_test/explain b/pkg/sql/logictest/testdata/planner_test/explain deleted file mode 100644 index 28510db24cfa..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/explain +++ /dev/null @@ -1,745 +0,0 @@ -# LogicTest: local - -statement ok -SET CLUSTER SETTING sql.stats.automatic_collection.enabled = false - -query TTT colnames -EXPLAIN (PLAN) SELECT 1 FROM system.jobs WHERE FALSE ----- -tree field description -render · · - └── norows · · - -query TTT colnames -EXPLAIN (PLAN) SELECT 1 FROM system.jobs WHERE NULL ----- -tree field description -render · · - └── norows · · - -query TTT colnames -EXPLAIN (PLAN) SELECT 1 FROM system.jobs WHERE TRUE ----- -tree field description -render · · - └── scan · · -· table jobs@primary -· spans ALL - -query TTTTT colnames -EXPLAIN (PLAN, VERBOSE) SELECT 1 a ----- -tree field description columns ordering -render · · (a) a=CONST - │ render 0 1 · · - └── emptyrow · · () · - -query TTTTT colnames -EXPLAIN (VERBOSE,PLAN) SELECT 1 a ----- -tree field description columns ordering -render · · (a) a=CONST - │ render 0 1 · · - └── emptyrow · · () · - -statement ok -SET tracing = on,kv,results; SELECT 1; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -output row: [1] - -query TTTTT colnames -EXPLAIN (TYPES) SELECT 1 a ----- -tree field description columns ordering -render · · (a int) a=CONST - │ render 0 (1)[int] · · - └── emptyrow · · () · - -statement error cannot set EXPLAIN mode more than once -EXPLAIN (PLAN,PLAN) SELECT 1 a - -statement error cannot set EXPLAIN mode more than once -EXPLAIN (PLAN,DISTSQL) SELECT 1 a - -statement error unsupported EXPLAIN option -EXPLAIN (PLAN,UNKNOWN) SELECT 1 a - -statement error could not determine data type of placeholder \$1 -EXPLAIN (TYPES) SELECT $1 - -query TTTTT colnames -EXPLAIN (TYPES) SELECT $1::INT ----- -tree field description columns ordering -render · · (int8 int) int8=CONST - │ render 0 (($1)[string]::INT8)[int] · · - └── emptyrow · · () · - - -# Ensure that all relevant statement types can be explained -query TTT -EXPLAIN CREATE DATABASE foo ----- -create database · · - -query TTT -EXPLAIN CREATE TABLE foo (x INT) ----- -create table · · - -statement ok -CREATE TABLE foo (x INT) - -query TTT -EXPLAIN CREATE INDEX a ON foo(x) ----- -create index · · - -statement ok -CREATE DATABASE foo - -query TTT -EXPLAIN DROP DATABASE foo ----- -drop database · · - -# explain SHOW JOBS - beware to test this before the CREATE INDEX -# below, otherwise the result becomes non-deterministic. -# Migrations with backfill will affect the number of rows. -query TTT -EXPLAIN SHOW JOBS ----- -sort · · - │ order -"coalesce",-started - └── render · · - └── filter · · - │ filter ((job_type IS NULL) OR (job_type != 'AUTO CREATE STATS')) AND ((finished IS NULL) OR (finished > (now() - '12:00:00'))) - └── values · · -· size 16 columns, 0 rows - -statement ok -CREATE INDEX a ON foo(x) - -query TTT -EXPLAIN DROP INDEX foo@a ----- -drop index · · - -query TTT -EXPLAIN ALTER TABLE foo ADD COLUMN y INT ----- -alter table · · - -query TTT -SELECT tree, field, description FROM [EXPLAIN (VERBOSE) ALTER TABLE foo SPLIT AT VALUES (42)] ----- -split · · - └── values · · -· size 1 column, 1 row -· row 0, expr 0 42 - -query TTT -SELECT * FROM [EXPLAIN DROP TABLE foo] WHERE field != 'size' ----- -drop table · · - -query TTT -SELECT * FROM [EXPLAIN SHOW DATABASES] WHERE field != 'size' ----- -distinct · · - │ order key database_name - └── sort · · - │ order +database_name - └── render · · - └── values · · - -query TTT -SELECT * FROM [EXPLAIN SHOW TABLES] WHERE field != 'size' ----- -sort · · - │ order +table_name - └── render · · - └── filter · · - │ filter table_schema = 'public' - └── values · · - -query TTT -SELECT * FROM [EXPLAIN SHOW TABLES WITH COMMENT] WHERE field != 'size' ----- -render · · - └── hash-join · · - │ type left outer - │ equality (oid) = (objoid) - ├── hash-join · · - │ │ type inner - │ │ equality (relnamespace) = (oid) - │ ├── filter · · - │ │ │ filter relkind IN ('r', 'v') - │ │ └── values · · - │ └── filter · · - │ │ filter nspname = 'public' - │ └── values · · - └── filter · · - │ filter objsubid = 0 - └── values · · - -query TTT -SELECT * FROM [EXPLAIN SHOW DATABASE] WHERE field != 'size' ----- -render · · - └── filter · · - │ filter variable = 'database' - └── values · · - -query TTT -SELECT * FROM [EXPLAIN SHOW TIME ZONE] WHERE field != 'size' ----- -render · · - └── filter · · - │ filter variable = 'timezone' - └── values · · - -query TTT -SELECT * FROM [EXPLAIN SHOW DEFAULT_TRANSACTION_ISOLATION] WHERE field != 'size' ----- -render · · - └── filter · · - │ filter variable = 'default_transaction_isolation' - └── values · · - -query TTT -SELECT * FROM [EXPLAIN SHOW TRANSACTION ISOLATION LEVEL] WHERE field != 'size' ----- -render · · - └── filter · · - │ filter variable = 'transaction_isolation' - └── values · · - -query TTT -SELECT * FROM [EXPLAIN SHOW TRANSACTION PRIORITY] WHERE field != 'size' ----- -render · · - └── filter · · - │ filter variable = 'transaction_priority' - └── values · · - -query TTT -SELECT * FROM [EXPLAIN SHOW COLUMNS FROM foo] WHERE field != 'size' ----- -sort · · - │ order +ordinal_position - └── render · · - └── group · · - │ aggregate 0 column_name - │ aggregate 1 crdb_sql_type - │ aggregate 2 is_nullable - │ aggregate 3 column_default - │ aggregate 4 generation_expression - │ aggregate 5 ordinal_position - │ aggregate 6 is_hidden - │ aggregate 7 array_agg(index_name) - │ group by column_name, crdb_sql_type, is_nullable, column_default, generation_expression, ordinal_position, is_hidden - └── render · · - └── hash-join · · - │ type left outer - │ equality (column_name) = (column_name) - ├── render · · - │ └── filter · · - │ │ filter ((table_catalog = 'test') AND (table_schema = 'public')) AND (table_name = 'foo') - │ └── values · · - └── render · · - └── filter · · - │ filter ((table_catalog = 'test') AND (table_schema = 'public')) AND (table_name = 'foo') - └── values · · - -query TTT -SELECT * FROM [EXPLAIN SHOW GRANTS ON foo] WHERE field != 'size' ----- -sort · · - │ order +database_name,+schema_name,+table_name,+grantee,+privilege_type - └── render · · - └── filter · · - │ filter (table_catalog, table_schema, table_name) IN (('test', 'public', 'foo'),) - └── values · · - -query TTT -SELECT * FROM [EXPLAIN SHOW INDEX FROM foo] WHERE field != 'size' ----- -render · · - └── filter · · - │ filter ((table_catalog = 'test') AND (table_schema = 'public')) AND (table_name = 'foo') - └── values · · - -query TTT -SELECT * FROM [EXPLAIN SHOW CONSTRAINTS FROM foo] WHERE field != 'size' ----- -sort · · - │ order +table_name,+constraint_name - └── render · · - └── hash-join · · - │ type inner - │ equality (relnamespace, oid) = (oid, conrelid) - ├── filter · · - │ │ filter relname = 'foo' - │ └── values · · - └── hash-join · · - │ type cross - ├── filter · · - │ │ filter nspname = 'public' - │ └── values · · - └── values · · - -query TTT -EXPLAIN SHOW USERS ----- -render · · - └── scan · · -· table users@primary -· spans ALL -· filter "isRole" = false - -# EXPLAIN selecting from a sequence. -statement ok -CREATE SEQUENCE select_test - -query TTTTT colnames -EXPLAIN (VERBOSE) SELECT * FROM select_test ----- -tree field description columns ordering -sequence select · · (last_value, log_cnt, is_called) · - -statement ok -CREATE TABLE t ( - k INT PRIMARY KEY, - v INT -) - -query TTT -SELECT * FROM [EXPLAIN INSERT INTO t VALUES (1, 2)] WHERE field != 'size' ----- -count · · - └── insert · · - │ into t(k, v) - │ strategy inserter - └── values · · - -query I -SELECT max(level) FROM [EXPLAIN (VERBOSE) INSERT INTO t VALUES (1, 2)] ----- -2 - -statement ok -INSERT INTO t VALUES (1, 2) - -query TTT -EXPLAIN SELECT * FROM t ----- -scan · · -· table t@primary -· spans ALL - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM t ----- -scan · · (k, v) k!=NULL; key(k) -· table t@primary · · -· spans ALL · · - -query TTT -EXPLAIN SELECT * FROM t WHERE k = 1 OR k = 3 ----- -scan · · -· table t@primary -· spans /1-/1/# /3-/3/# -· parallel · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM t WHERE k % 2 = 0 ----- -scan · · (k, v) k!=NULL; key(k) -· table t@primary · · -· spans ALL · · -· filter (k % 2) = 0 · · - -query TTT -EXPLAIN VALUES (1, 2, 3), (4, 5, 6) ----- -values · · -· size 3 columns, 2 rows - -query TTT -EXPLAIN VALUES (1) ----- -values · · -· size 1 column, 1 row - -query TTT -SELECT tree, field, description FROM [EXPLAIN (VERBOSE) SELECT * FROM t WITH ORDINALITY LIMIT 1 OFFSET 1] ----- -limit · · - │ count 1 - │ offset 1 - └── ordinality · · - └── scan · · -· table t@primary -· spans ALL -· limit 2 - -query TTT -EXPLAIN SELECT DISTINCT v FROM t ----- -distinct · · - └── render · · - └── scan · · -· table t@primary -· spans ALL - -query TTT -SELECT tree, field, description FROM [EXPLAIN (VERBOSE) SELECT DISTINCT v FROM t LIMIT 1 OFFSET 1] ----- -limit · · - │ count 1 - │ offset 1 - └── distinct · · - └── render · · - │ render 0 test.public.t.v - └── scan · · -· table t@primary -· spans ALL - -statement ok -CREATE TABLE tc (a INT, b INT, INDEX c(a)) - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM tc WHERE a = 10 ORDER BY b ----- -sort · · (a, b) a=CONST; +b - │ order +b · · - └── render · · (a, b) a=CONST - │ render 0 test.public.tc.a · · - │ render 1 test.public.tc.b · · - └── index-join · · (a, b, rowid[hidden,omitted]) a=CONST; rowid!=NULL; key(rowid) - │ table tc@primary · · - └── scan · · (a[omitted], b[omitted], rowid[hidden]) a=CONST; rowid!=NULL; key(rowid) -· table tc@c · · -· spans /10-/11 · · - -query TTTTT colnames -EXPLAIN (TYPES) INSERT INTO t VALUES (1, 2) ----- -tree field description columns ordering -count · · () · - └── insert · · () · - │ into t(k, v) · · - │ strategy inserter · · - └── values · · (column1 int, column2 int) · -· size 2 columns, 1 row · · -· row 0, expr 0 (1)[int] · · -· row 0, expr 1 (2)[int] · · - -query TTTTT -EXPLAIN (TYPES) SELECT 42 a ----- -render · · (a int) a=CONST - │ render 0 (42)[int] · · - └── emptyrow · · () · - -query TTTTT -EXPLAIN (TYPES) SELECT * FROM t ----- -scan · · (k int, v int) k!=NULL; key(k) -· table t@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (TYPES,SYMVARS) SELECT k FROM t ----- -render · · (k int) k!=NULL; key(k) - │ render 0 (@1)[int] · · - └── scan · · (k int, v[omitted] int) k!=NULL; key(k) -· table t@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (TYPES,VERBOSE) SELECT k FROM t ----- -render · · (k int) k!=NULL; key(k) - │ render 0 (test.public.t.k)[int] · · - └── scan · · (k int, v[omitted] int) k!=NULL; key(k) -· table t@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (TYPES,NOEXPAND) SELECT * FROM t WHERE v > 123 ----- -render · · (k int, v int) · - │ render 0 (k)[int] · · - │ render 1 (v)[int] · · - └── scan · · (k int, v int) · -· table t@primary · · -· filter ((v)[int] > (123)[int])[bool] · · - -query TTTTT -EXPLAIN (TYPES) SELECT * FROM t WHERE v > 123 ----- -scan · · (k int, v int) k!=NULL; v!=NULL; key(k) -· table t@primary · · -· spans ALL · · -· filter ((v)[int] > (123)[int])[bool] · · - -query TTTTT -EXPLAIN (TYPES) VALUES (1, 2, 3), (4, 5, 6) ----- -values · · (column1 int, column2 int, column3 int) · -· size 3 columns, 2 rows · · -· row 0, expr 0 (1)[int] · · -· row 0, expr 1 (2)[int] · · -· row 0, expr 2 (3)[int] · · -· row 1, expr 0 (4)[int] · · -· row 1, expr 1 (5)[int] · · -· row 1, expr 2 (6)[int] · · - -query TTTTT -EXPLAIN (TYPES,NOEXPAND) SELECT 2*count(k) as z, v FROM t WHERE v>123 GROUP BY v HAVING v<2 AND count(k)>1 ----- -render · · (z int, v int) · - │ render 0 ((2)[int] * (agg1)[int])[int] · · - │ render 1 (agg0)[int] · · - └── filter · · (agg0 int, agg1 int) · - │ filter ((agg1)[int] > (1)[int])[bool] · · - └── group · · (agg0 int, agg1 int) · - │ aggregate 0 v · · - │ aggregate 1 count(k) · · - │ group by v · · - └── render · · (v int, k int) · - │ render 0 (v)[int] · · - │ render 1 (k)[int] · · - └── scan · · (k int, v int) · -· table t@primary · · -· filter ((((v)[int] > (123)[int])[bool]) AND (((v)[int] < (2)[int])[bool]))[bool] · · - - -query TTTTT -EXPLAIN (TYPES) SELECT 2*count(k) as z, v FROM t WHERE v>123 GROUP BY v HAVING v<2 AND count(k)>1 ----- -render · · (z int, v int) v!=NULL; key(v) - │ render 0 ((2)[int] * (agg1)[int])[int] · · - │ render 1 (agg0)[int] · · - └── filter · · (agg0 int, agg1 int) agg0!=NULL; agg1!=NULL; key(agg0) - │ filter ((agg1)[int] > (1)[int])[bool] · · - └── group · · (agg0 int, agg1 int) agg0!=NULL; key(agg0) - │ aggregate 0 v · · - │ aggregate 1 count(k) · · - │ group by v · · - └── render · · (v int, k int) v!=NULL; k!=NULL; key(k) - │ render 0 (v)[int] · · - │ render 1 (k)[int] · · - └── scan · · (k int, v int) k!=NULL; v!=NULL; key(k) -· table t@primary · · -· spans ALL · · -· filter ((((v)[int] > (123)[int])[bool]) AND (((v)[int] < (2)[int])[bool]))[bool] · · - -query TTTTT -EXPLAIN (TYPES,NOEXPAND) DELETE FROM t WHERE v > 1 ----- -count · · () · - └── delete · · () · - │ from t · · - │ strategy deleter · · - └── render · · (k int) · - │ render 0 (k)[int] · · - └── scan · · (k int, v int) · -· table t@primary · · -· filter ((v)[int] > (1)[int])[bool] · · - -query TTTTT -EXPLAIN (TYPES) DELETE FROM t WHERE v > 1 ----- -count · · () · - └── delete · · () · - │ from t · · - │ strategy deleter · · - └── render · · (k int) k!=NULL; key(k) - │ render 0 (k)[int] · · - └── scan · · (k int, v int) k!=NULL; v!=NULL; key(k) -· table t@primary · · -· spans ALL · · -· filter ((v)[int] > (1)[int])[bool] · · - -query TTTTT -EXPLAIN (TYPES) UPDATE t SET v = k + 1 WHERE v > 123 ----- -count · · () · - └── update · · () · - │ table t · · - │ set v · · - │ strategy updater · · - └── render · · (k int, v int, "?column?" int) k!=NULL; v!=NULL; key(k) - │ render 0 (k)[int] · · - │ render 1 (v)[int] · · - │ render 2 ((k)[int] + (1)[int])[int] · · - └── scan · · (k int, v int) k!=NULL; v!=NULL; key(k) -· table t@primary · · -· spans ALL · · -· filter ((v)[int] > (123)[int])[bool] · · - -query TTTTT -EXPLAIN (TYPES,NOEXPAND) UPDATE t SET v = k + 1 WHERE v > 123 ----- -count · · () · - └── update · · () · - │ table t · · - │ set v · · - │ strategy updater · · - └── render · · (k int, v int, "?column?" int) · - │ render 0 (k)[int] · · - │ render 1 (v)[int] · · - │ render 2 ((k)[int] + (1)[int])[int] · · - └── scan · · (k int, v int) · -· table t@primary · · -· filter ((v)[int] > (123)[int])[bool] · · - -query TTTTT -EXPLAIN (TYPES) VALUES (1) UNION VALUES (2) ----- -union · · (column1 int) · - ├── values · · (column1 int) · - │ size 1 column, 1 row · · - │ row 0, expr 0 (2)[int] · · - └── values · · (column1 int) · -· size 1 column, 1 row · · -· row 0, expr 0 (1)[int] · · - -query TTTTT -EXPLAIN (TYPES) SELECT DISTINCT k FROM t ----- -render · · (k int) k!=NULL; key(k) - │ render 0 (k)[int] · · - └── scan · · (k int, v[omitted] int) k!=NULL; key(k) -· table t@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (TYPES,NOEXPAND) SELECT DISTINCT k FROM t ----- -distinct · · (k int) weak-key(k) - └── render · · (k int) · - │ render 0 (k)[int] · · - └── scan · · (k int, v[omitted] int) · -· table t@primary · · - -query TTTTT -EXPLAIN (TYPES) SELECT v FROM t ORDER BY v ----- -sort · · (v int) +v - │ order +v · · - └── render · · (v int) · - │ render 0 (v)[int] · · - └── scan · · (k[omitted] int, v int) k!=NULL; key(k) -· table t@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (TYPES,NOEXPAND) SELECT v FROM t ORDER BY v ----- -nosort · · (v int) · - │ order +v · · - └── render · · (v int) · - │ render 0 (v)[int] · · - └── scan · · (k[omitted] int, v int) · -· table t@primary · · - -query TTTTT -EXPLAIN (TYPES) SELECT v FROM t LIMIT 1 ----- -limit · · (v int) · - │ count (1)[int] · · - └── render · · (v int) · - │ render 0 (v)[int] · · - └── scan · · (k[omitted] int, v int) k!=NULL; key(k) -· table t@primary · · -· spans ALL · · -· limit 1 · · - -query TTTTT -EXPLAIN (TYPES,NOEXPAND) SELECT v FROM t LIMIT 1 ----- -limit · · (v int) · - │ count (1)[int] · · - └── render · · (v int) · - │ render 0 (v)[int] · · - └── scan · · (k[omitted] int, v int) · -· table t@primary · · - -statement ok -CREATE TABLE tt (x INT, y INT, INDEX a(x), INDEX b(y)) - -query TTTTT -EXPLAIN (TYPES) SELECT * FROM tt WHERE x < 10 AND y > 10 ----- -render · · (x int, y int) x!=NULL; y!=NULL - │ render 0 (x)[int] · · - │ render 1 (y)[int] · · - └── index-join · · (x int, y int, rowid[hidden,omitted] int) x!=NULL; y!=NULL; rowid!=NULL; key(x,rowid) - │ table tt@primary · · - │ filter ((y)[int] > (10)[int])[bool] · · - └── scan · · (x[omitted] int, y[omitted] int, rowid[hidden] int) x!=NULL; y!=NULL; rowid!=NULL; key(x,rowid) -· table tt@a · · -· spans /!NULL-/10 · · - -query TTTTT -EXPLAIN (TYPES,NOEXPAND) SELECT * FROM tt WHERE x < 10 AND y > 10 ----- -render · · (x int, y int) · - │ render 0 (x)[int] · · - │ render 1 (y)[int] · · - └── scan · · (x int, y int, rowid[hidden,omitted] int) · -· table tt@primary · · -· filter ((((x)[int] < (10)[int])[bool]) AND (((y)[int] > (10)[int])[bool]))[bool] · · - -query TTTTT -EXPLAIN (TYPES) SELECT $1 + 2 AS a ----- -render · · (a int) a=CONST - │ render 0 (($1)[int] + (2)[int])[int] · · - └── emptyrow · · () · - -query TTTTT -EXPLAIN (TYPES,NONORMALIZE) SELECT abs(2-3) AS a ----- -render · · (a int) a=CONST - │ render 0 (abs((-1)[int]))[int] · · - └── emptyrow · · () · - -query TTTTT -EXPLAIN (TYPES) SELECT abs(2-3) AS a ----- -render · · (a int) a=CONST - │ render 0 (1)[int] · · - └── emptyrow · · () · - -# Check array subscripts (#13811) -query TTTTT -EXPLAIN (TYPES) SELECT x[1] FROM (SELECT ARRAY[1,2,3] AS x) ----- -render · · (x int) · - │ render 0 ((x)[int[]][(1)[int]])[int] · · - └── render · · (x int[]) x=CONST - │ render 0 (ARRAY[(1)[int],(2)[int],(3)[int]])[int[]] · · - └── emptyrow · · () · - -statement error EXPLAIN \(OPT\) only supported with the cost-based optimizer -EXPLAIN (OPT) SELECT 1 - -# Make sure that casts of null values to collated strings roundtrip correctly. -query TTTTT -EXPLAIN (VERBOSE) SELECT NULL COLLATE en ----- -render · · ("?column?") "?column?"=CONST - │ render 0 CAST(NULL AS STRING) COLLATE en · · - └── emptyrow · · () · diff --git a/pkg/sql/logictest/testdata/planner_test/insert b/pkg/sql/logictest/testdata/planner_test/insert deleted file mode 100644 index f2b12a667fb9..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/insert +++ /dev/null @@ -1,402 +0,0 @@ -# LogicTest: local - -statement ok -CREATE TABLE kv ( - k VARCHAR PRIMARY KEY, - v VARCHAR, - UNIQUE INDEX a (v), - FAMILY (k), - FAMILY (v) -) - -statement ok -INSERT INTO kv VALUES ('A'); -INSERT INTO kv (k) VALUES ('nil1'); -INSERT INTO kv (k) VALUES ('nil2'); -INSERT INTO kv VALUES ('nil3', NULL); -INSERT INTO kv VALUES ('nil4', NULL); -INSERT INTO kv (k,v) VALUES ('a', 'b'), ('c', 'd'); - -query T -SELECT v || 'hello' FROM [INSERT INTO kv VALUES ('e', 'f'), ('g', '') RETURNING v] ----- -fhello -hello - -statement ok -SET tracing = on,kv,results; SELECT * FROM kv; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /kv/primary/'A' -> NULL -fetched: /kv/primary/'a' -> NULL -fetched: /kv/primary/'a'/v -> 'b' -fetched: /kv/primary/'c' -> NULL -fetched: /kv/primary/'c'/v -> 'd' -fetched: /kv/primary/'e' -> NULL -fetched: /kv/primary/'e'/v -> 'f' -fetched: /kv/primary/'g' -> NULL -fetched: /kv/primary/'g'/v -> '' -fetched: /kv/primary/'nil1' -> NULL -fetched: /kv/primary/'nil2' -> NULL -fetched: /kv/primary/'nil3' -> NULL -fetched: /kv/primary/'nil4' -> NULL -output row: ['A' NULL] -output row: ['a' 'b'] -output row: ['c' 'd'] -output row: ['e' 'f'] -output row: ['g' ''] -output row: ['nil1' NULL] -output row: ['nil2' NULL] -output row: ['nil3' NULL] -output row: ['nil4' NULL] - -statement ok -SET tracing = on,kv,results; SELECT * FROM kv@a; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /kv/a/NULL -> /'A' -fetched: /kv/a/NULL -> /'nil1' -fetched: /kv/a/NULL -> /'nil2' -fetched: /kv/a/NULL -> /'nil3' -fetched: /kv/a/NULL -> /'nil4' -fetched: /kv/a/'' -> /'g' -fetched: /kv/a/'b' -> /'a' -fetched: /kv/a/'d' -> /'c' -fetched: /kv/a/'f' -> /'e' -output row: ['A' NULL] -output row: ['nil1' NULL] -output row: ['nil2' NULL] -output row: ['nil3' NULL] -output row: ['nil4' NULL] -output row: ['g' ''] -output row: ['a' 'b'] -output row: ['c' 'd'] -output row: ['e' 'f'] - -statement error pgcode 23505 duplicate key value \(v\)=\('f'\) violates unique constraint "a" -INSERT INTO kv VALUES ('h', 'f') - -statement ok -SET tracing = on,kv,results; SELECT * FROM kv; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /kv/primary/'A' -> NULL -fetched: /kv/primary/'a' -> NULL -fetched: /kv/primary/'a'/v -> 'b' -fetched: /kv/primary/'c' -> NULL -fetched: /kv/primary/'c'/v -> 'd' -fetched: /kv/primary/'e' -> NULL -fetched: /kv/primary/'e'/v -> 'f' -fetched: /kv/primary/'g' -> NULL -fetched: /kv/primary/'g'/v -> '' -fetched: /kv/primary/'nil1' -> NULL -fetched: /kv/primary/'nil2' -> NULL -fetched: /kv/primary/'nil3' -> NULL -fetched: /kv/primary/'nil4' -> NULL -output row: ['A' NULL] -output row: ['a' 'b'] -output row: ['c' 'd'] -output row: ['e' 'f'] -output row: ['g' ''] -output row: ['nil1' NULL] -output row: ['nil2' NULL] -output row: ['nil3' NULL] -output row: ['nil4' NULL] - -statement ok -SET tracing = on,kv,results; SELECT * FROM kv@a; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /kv/a/NULL -> /'A' -fetched: /kv/a/NULL -> /'nil1' -fetched: /kv/a/NULL -> /'nil2' -fetched: /kv/a/NULL -> /'nil3' -fetched: /kv/a/NULL -> /'nil4' -fetched: /kv/a/'' -> /'g' -fetched: /kv/a/'b' -> /'a' -fetched: /kv/a/'d' -> /'c' -fetched: /kv/a/'f' -> /'e' -output row: ['A' NULL] -output row: ['nil1' NULL] -output row: ['nil2' NULL] -output row: ['nil3' NULL] -output row: ['nil4' NULL] -output row: ['g' ''] -output row: ['a' 'b'] -output row: ['c' 'd'] -output row: ['e' 'f'] - -statement ok -INSERT INTO kv VALUES ('f', 'g') - -statement ok -SET tracing = on,kv,results; SELECT * FROM kv; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /kv/primary/'A' -> NULL -fetched: /kv/primary/'a' -> NULL -fetched: /kv/primary/'a'/v -> 'b' -fetched: /kv/primary/'c' -> NULL -fetched: /kv/primary/'c'/v -> 'd' -fetched: /kv/primary/'e' -> NULL -fetched: /kv/primary/'e'/v -> 'f' -fetched: /kv/primary/'f' -> NULL -fetched: /kv/primary/'f'/v -> 'g' -fetched: /kv/primary/'g' -> NULL -fetched: /kv/primary/'g'/v -> '' -fetched: /kv/primary/'nil1' -> NULL -fetched: /kv/primary/'nil2' -> NULL -fetched: /kv/primary/'nil3' -> NULL -fetched: /kv/primary/'nil4' -> NULL -output row: ['A' NULL] -output row: ['a' 'b'] -output row: ['c' 'd'] -output row: ['e' 'f'] -output row: ['f' 'g'] -output row: ['g' ''] -output row: ['nil1' NULL] -output row: ['nil2' NULL] -output row: ['nil3' NULL] -output row: ['nil4' NULL] - -statement ok -SET tracing = on,kv,results; SELECT * FROM kv@a; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /kv/a/NULL -> /'A' -fetched: /kv/a/NULL -> /'nil1' -fetched: /kv/a/NULL -> /'nil2' -fetched: /kv/a/NULL -> /'nil3' -fetched: /kv/a/NULL -> /'nil4' -fetched: /kv/a/'' -> /'g' -fetched: /kv/a/'b' -> /'a' -fetched: /kv/a/'d' -> /'c' -fetched: /kv/a/'f' -> /'e' -fetched: /kv/a/'g' -> /'f' -output row: ['A' NULL] -output row: ['nil1' NULL] -output row: ['nil2' NULL] -output row: ['nil3' NULL] -output row: ['nil4' NULL] -output row: ['g' ''] -output row: ['a' 'b'] -output row: ['c' 'd'] -output row: ['e' 'f'] -output row: ['f' 'g'] - -statement error duplicate key value \(v\)=\('g'\) violates unique constraint "a" -INSERT INTO kv VALUES ('h', 'g') - -statement ok -SET tracing = on,kv,results; SELECT * FROM kv; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /kv/primary/'A' -> NULL -fetched: /kv/primary/'a' -> NULL -fetched: /kv/primary/'a'/v -> 'b' -fetched: /kv/primary/'c' -> NULL -fetched: /kv/primary/'c'/v -> 'd' -fetched: /kv/primary/'e' -> NULL -fetched: /kv/primary/'e'/v -> 'f' -fetched: /kv/primary/'f' -> NULL -fetched: /kv/primary/'f'/v -> 'g' -fetched: /kv/primary/'g' -> NULL -fetched: /kv/primary/'g'/v -> '' -fetched: /kv/primary/'nil1' -> NULL -fetched: /kv/primary/'nil2' -> NULL -fetched: /kv/primary/'nil3' -> NULL -fetched: /kv/primary/'nil4' -> NULL -output row: ['A' NULL] -output row: ['a' 'b'] -output row: ['c' 'd'] -output row: ['e' 'f'] -output row: ['f' 'g'] -output row: ['g' ''] -output row: ['nil1' NULL] -output row: ['nil2' NULL] -output row: ['nil3' NULL] -output row: ['nil4' NULL] - -statement ok -SET tracing = on,kv,results; SELECT * FROM kv@a; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /kv/a/NULL -> /'A' -fetched: /kv/a/NULL -> /'nil1' -fetched: /kv/a/NULL -> /'nil2' -fetched: /kv/a/NULL -> /'nil3' -fetched: /kv/a/NULL -> /'nil4' -fetched: /kv/a/'' -> /'g' -fetched: /kv/a/'b' -> /'a' -fetched: /kv/a/'d' -> /'c' -fetched: /kv/a/'f' -> /'e' -fetched: /kv/a/'g' -> /'f' -output row: ['A' NULL] -output row: ['nil1' NULL] -output row: ['nil2' NULL] -output row: ['nil3' NULL] -output row: ['nil4' NULL] -output row: ['g' ''] -output row: ['a' 'b'] -output row: ['c' 'd'] -output row: ['e' 'f'] -output row: ['f' 'g'] - -statement ok -CREATE TABLE kv5 ( - k CHAR PRIMARY KEY, - v CHAR, - UNIQUE INDEX a (v, k) -) - -statement ok -INSERT INTO kv5 VALUES ('a', NULL) - -statement ok -SET tracing = on,kv,results; SELECT * FROM kv5@a; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /kv5/a/NULL/'a' -> NULL -output row: ['a' NULL] - -statement ok -CREATE TABLE insert_t (x INT, v INT) - -statement ok -CREATE TABLE select_t (x INT, v INT) - -# Check that INSERT supports ORDER BY (MySQL extension) -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) INSERT INTO insert_t TABLE select_t ORDER BY v DESC -] ----- -count · · - └── insert · · - │ into insert_t(x, v, rowid) - │ strategy inserter - │ default 0 NULL - │ default 1 NULL - │ default 2 unique_rowid() - └── sort · · - │ order -v - └── render · · - │ render 0 test.public.select_t.x - │ render 1 test.public.select_t.v - └── scan · · -· table select_t@primary -· spans ALL - -# Check that INSERT supports LIMIT (MySQL extension) -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) INSERT INTO insert_t SELECT * FROM select_t LIMIT 1 -] ----- -count · · - └── insert · · - │ into insert_t(x, v, rowid) - │ strategy inserter - │ default 0 NULL - │ default 1 NULL - │ default 2 unique_rowid() - └── limit · · - │ count 1 - └── render · · - │ render 0 test.public.select_t.x - │ render 1 test.public.select_t.v - └── scan · · -· table select_t@primary -· spans ALL -· limit 1 - -# Check the grouping of LIMIT and ORDER BY -query TTT -EXPLAIN (PLAN) INSERT INTO insert_t VALUES (1,1), (2,2) LIMIT 1 ----- -count · · - └── insert · · - │ into insert_t(x, v, rowid) - │ strategy inserter - └── limit · · - │ count 1 - └── values · · -· size 2 columns, 2 rows - -query TTT -EXPLAIN (PLAN) INSERT INTO insert_t VALUES (1,1), (2,2) ORDER BY 2 LIMIT 1 ----- -count · · - └── insert · · - │ into insert_t(x, v, rowid) - │ strategy inserter - └── limit · · - │ count 1 - └── sort · · - │ order +column2 - └── values · · -· size 2 columns, 2 rows - -query TTT -EXPLAIN (PLAN) INSERT INTO insert_t (VALUES (1,1), (2,2) ORDER BY 2) LIMIT 1 ----- -count · · - └── insert · · - │ into insert_t(x, v, rowid) - │ strategy inserter - └── limit · · - │ count 1 - └── sort · · - │ order +column2 - └── values · · -· size 2 columns, 2 rows - -query TTT -EXPLAIN (PLAN) INSERT INTO insert_t (VALUES (1,1), (2,2) ORDER BY 2 LIMIT 1) ----- -count · · - └── insert · · - │ into insert_t(x, v, rowid) - │ strategy inserter - └── limit · · - │ count 1 - └── sort · · - │ order +column2 - └── values · · -· size 2 columns, 2 rows diff --git a/pkg/sql/logictest/testdata/planner_test/insert_plans b/pkg/sql/logictest/testdata/planner_test/insert_plans deleted file mode 100644 index 3a0ca51f8c11..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/insert_plans +++ /dev/null @@ -1,90 +0,0 @@ -# LogicTest: local - -statement ok -CREATE TABLE kv ( - k INT PRIMARY KEY, - v INT -) - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) INSERT INTO kv TABLE kv -] ----- -count · · - └── insert · · - │ into kv(k, v) - │ strategy inserter - └── scan · · -· table kv@primary -· spans ALL - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) INSERT INTO kv TABLE kv ON CONFLICT DO NOTHING -] ----- -count · · - └── upsert · · - │ into kv(k, v) - │ strategy strict upserter - └── scan · · -· table kv@primary -· spans ALL - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) INSERT INTO kv TABLE kv ON CONFLICT(k) DO NOTHING -] ----- -count · · - └── upsert · · - │ into kv(k, v) - │ strategy upserter - └── scan · · -· table kv@primary -· spans ALL - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) INSERT INTO kv TABLE kv ON CONFLICT(k) DO UPDATE SET v = excluded.v + 1 -] ----- -count · · - └── upsert · · - │ into kv(k, v) - │ strategy upserter - │ eval 0 excluded.v + 1 - └── scan · · -· table kv@primary -· spans ALL - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) UPSERT INTO kv TABLE kv -] ----- -count · · - └── upsert · · - │ into kv(k, v) - │ strategy fast upserter - └── scan · · -· table kv@primary -· spans ALL - -statement ok -CREATE UNIQUE INDEX ON kv(v) - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) UPSERT INTO kv TABLE kv -] ----- -count · · - └── upsert · · - │ into kv(k, v) - │ strategy upserter - │ eval 0 excluded.v - └── scan · · -· table kv@primary -· spans ALL diff --git a/pkg/sql/logictest/testdata/planner_test/interleaved b/pkg/sql/logictest/testdata/planner_test/interleaved deleted file mode 100644 index f98099d5cf67..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/interleaved +++ /dev/null @@ -1,433 +0,0 @@ -# LogicTest: local - -# ------------------------------------------------------------------------------ -# Test index selection for deeply interleaved tables. -# These tests are in their own file because table IDs appear in EXPLAIN output. -# ------------------------------------------------------------------------------ -statement ok -CREATE TABLE level1 ( - k1 INT, - PRIMARY KEY (k1) -) - -statement ok -CREATE TABLE level2 ( - k1 INT, - PRIMARY KEY (k1), - CONSTRAINT fk1 FOREIGN KEY (k1) REFERENCES level1 -) INTERLEAVE IN PARENT level1 (k1) - -statement ok -CREATE TABLE level3 ( - k1 INT, - k2 INT, - k3 INT, - PRIMARY KEY (k1, k2, k3), - CONSTRAINT fk2 FOREIGN KEY (k1) REFERENCES level2 -) INTERLEAVE IN PARENT level2 (k1) - -statement ok -CREATE TABLE level4 ( - k1 INT, - k2 INT, - k3 INT, - PRIMARY KEY (k1, k2, k3), - CONSTRAINT fk3 FOREIGN KEY (k1, k2, k3) REFERENCES level3 -) INTERLEAVE IN PARENT level3 (k1, k2, k3) - -query TTT -EXPLAIN SELECT * FROM level4 ----- -scan · · -· table level4@primary -· spans ALL - -# The span below ends at the end of the first index of table 53, and is not -# constraining the value of k2 or k3. This is confusing on first glance because -# the second interleave in the hierarchy doesn't contain any new primary key -# columns on top of the first interleave. -query TTT -EXPLAIN SELECT * FROM level4 WHERE k1 > 1 AND k1 < 3 ----- -scan · · -· table level4@primary -· spans /2/#/54/1/#/55/1-/2/#/54/1/#/55/2 - -query TTT -EXPLAIN SELECT * FROM level4 WHERE k1 = 2 AND k2 > 10 AND k2 < 30 ----- -scan · · -· table level4@primary -· spans /2/#/54/1/#/55/1/11-/2/#/54/1/#/55/1/30 - -query TTT -EXPLAIN SELECT * FROM level4 WHERE k1 = 2 AND k2 = 20 AND k3 > 100 AND k3 < 300 ----- -scan · · -· table level4@primary -· spans /2/#/54/1/#/55/1/20/101/#/56/1-/2/#/54/1/#/55/1/20/299/#/56/1/# -· parallel · - -query TTT -EXPLAIN SELECT * FROM level4 WHERE k1 = 2 AND k2 = 20 AND k3 = 200 ----- -scan · · -· table level4@primary -· spans /2/#/54/1/#/55/1/20/200/#/56/1-/2/#/54/1/#/55/1/20/200/#/56/1/# - -# ------------------------------------------------------------------------------ -# Trace of interleaved fetches from interesting interleaved hierarchy. -# ------------------------------------------------------------------------------ -# Grandparent table -statement ok -CREATE TABLE p2 (i INT PRIMARY KEY, s STRING) - -# Two tables interleaved at the same level -statement ok -CREATE TABLE p1_0 ( - i INT, - s1 STRING, - s2 STRING, - d DECIMAL, - PRIMARY KEY (i, s1), - FAMILY (i, s1, s2), - FAMILY (d) -) INTERLEAVE IN PARENT p2 (i) - -statement ok -CREATE TABLE p1_1 ( - i INT PRIMARY KEY, - s1 STRING, - s2 STRING, - d DECIMAL -) INTERLEAVE IN PARENT p2 (i) - -# Two level deep interleave -statement ok -CREATE TABLE p0 ( - i INT, - s1 STRING, - s2 STRING, - d DECIMAL, - PRIMARY KEY (i, s1, s2) -) INTERLEAVE IN PARENT p1_0 (i, s1) - -statement ok -INSERT INTO p2 VALUES (2, '2'), (3, '3'), (5, '5'), (7, '7') - -statement ok -INSERT INTO p1_0 VALUES (2, '2', '2.01', 2), (3, '3', '3.01', 3), (5, '5', NULL, NULL) - -statement ok -INSERT INTO p1_1 VALUES (2, '2', '2.11', 2), (3, '3', '3.11', 3) - -statement ok -INSERT INTO p0 VALUES (2, '2', '2.0', 2), (3, '3', '3.0', 3), (5, '5', '5.0', 5) - -statement ok -SET tracing = on,kv,results; SELECT * FROM p1_0; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /p1_0/primary/2/'2'/s2 -> /'2.01' -fetched: /p1_0/primary/2/'2'/d -> 2 -fetched: /p1_0/primary/3/'3'/s2 -> /'3.01' -fetched: /p1_0/primary/3/'3'/d -> 3 -fetched: /p1_0/primary/5/'5' -> NULL -output row: [2 '2' '2.01' 2] -output row: [3 '3' '3.01' 3] -output row: [5 '5' NULL NULL] - -# ------------------------------------------------------------------------------ -# Test interleaved delete fast path. -# ------------------------------------------------------------------------------ -subtest InterleavedDeleteFastPath - -statement ok -CREATE TABLE a ( - a_id INT PRIMARY KEY -); - -statement ok -CREATE TABLE b( - b_id INT, - a_id INT, - FOREIGN KEY (a_id) REFERENCES a(a_id) ON UPDATE CASCADE ON DELETE CASCADE, - PRIMARY KEY(a_id, b_id) -) INTERLEAVE IN PARENT a(a_id) - -statement ok -CREATE TABLE c( - c_id INT, - a_id INT, - b_id INT, - FOREIGN KEY (a_id, b_id) REFERENCES b(a_id, b_id) ON UPDATE CASCADE ON DELETE CASCADE, - PRIMARY KEY(a_id, b_id, c_id) -) INTERLEAVE IN PARENT b(a_id, b_id) - -statement ok -INSERT INTO a SELECT generate_series(1,10); -INSERT INTO b(a_id, b_id) SELECT generate_series(1,10), 1 - -statement ok -DELETE FROM a WHERE a_id <= 2 - -query I -SELECT count(*) from a ----- -8 - -query I -SELECT count(*) from b ----- -8 - -query I colnames -SELECT * from a order by a_id ----- -a_id -3 -4 -5 -6 -7 -8 -9 -10 - -query II colnames -SELECT * from b order by a_id, b_id ----- -b_id a_id -1 3 -1 4 -1 5 -1 6 -1 7 -1 8 -1 9 -1 10 - -statement ok -INSERT INTO b(a_id, b_id) select a.a_id, 2 from a; -INSERT INTO c(a_id, b_id, c_id) select a.a_id, b.b_id, 1 from a, b where a.a_id = b.a_id - -query III colnames -SELECT * from c order by a_id, b_id, c_id ----- -c_id a_id b_id -1 3 1 -1 3 2 -1 4 1 -1 4 2 -1 5 1 -1 5 2 -1 6 1 -1 6 2 -1 7 1 -1 7 2 -1 8 1 -1 8 2 -1 9 1 -1 9 2 -1 10 1 -1 10 2 - -statement ok -SET TRACING = on,kv,results; DELETE FROM a where a_id <= 7 and a_id >= 5; SET tracing = off - -# Only look at traces from SQL land. -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] -WHERE operation='flow' OR operation='exec stmt' ----- -DelRange /Table/61/1/5 - /Table/61/1/7/NULL -fast path completed -rows affected: 3 - -query II colnames -select * from b order by a_id, b_id ----- -b_id a_id -1 3 -2 3 -1 4 -2 4 -1 8 -2 8 -1 9 -2 9 -1 10 -2 10 - -query III colnames -select * from c order by a_id, b_id, c_id ----- -c_id a_id b_id -1 3 1 -1 3 2 -1 4 1 -1 4 2 -1 8 1 -1 8 2 -1 9 1 -1 9 2 -1 10 1 -1 10 2 - -statement ok -SET TRACING = on,kv,results; DELETE FROM a; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] -WHERE operation='flow' OR operation='exec stmt' ----- -DelRange /Table/61/1 - /Table/61/3 -fast path completed -rows affected: 5 - -query II colnames -select * from b order by a_id, b_id ----- -b_id a_id - -query III colnames -select * from c order by a_id, b_id, c_id ----- -c_id a_id b_id - -statement ok -INSERT INTO a SELECT generate_series(1,10); -INSERT INTO b(a_id, b_id) SELECT generate_series(1,10), 1 - -statement ok -SET TRACING = on,kv,results; - -query I -delete from a returning * ----- -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 - -statement ok -SET TRACING=off; - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] -WHERE operation IN ('flow', 'consuming rows') OR operation='exec stmt' ----- -Del /Table/61/1/1/0 -cascading delete into table: 62 using index: 1 -CascadeScan /Table/61/1/1/#/62/{1-2} -CascadeScan /Table/61/1/1/#/62/1/1{-/#} -Del /Table/61/1/1/#/62/1/1/0 -cascading delete into table: 63 using index: 1 -CascadeScan /Table/61/1/1/#/62/1/1/#/63/{1-2} -FKScan /Table/61/1/1/#/62/1/1/#/63/{1-2} -FKScan /Table/61/1/1/#/62/{1-2} -Del /Table/61/1/2/0 -cascading delete into table: 62 using index: 1 -CascadeScan /Table/61/1/2/#/62/{1-2} -CascadeScan /Table/61/1/2/#/62/1/1{-/#} -Del /Table/61/1/2/#/62/1/1/0 -cascading delete into table: 63 using index: 1 -CascadeScan /Table/61/1/2/#/62/1/1/#/63/{1-2} -FKScan /Table/61/1/2/#/62/1/1/#/63/{1-2} -FKScan /Table/61/1/2/#/62/{1-2} -Del /Table/61/1/3/0 -cascading delete into table: 62 using index: 1 -CascadeScan /Table/61/1/3/#/62/{1-2} -CascadeScan /Table/61/1/3/#/62/1/1{-/#} -Del /Table/61/1/3/#/62/1/1/0 -cascading delete into table: 63 using index: 1 -CascadeScan /Table/61/1/3/#/62/1/1/#/63/{1-2} -FKScan /Table/61/1/3/#/62/1/1/#/63/{1-2} -FKScan /Table/61/1/3/#/62/{1-2} -Del /Table/61/1/4/0 -cascading delete into table: 62 using index: 1 -CascadeScan /Table/61/1/4/#/62/{1-2} -CascadeScan /Table/61/1/4/#/62/1/1{-/#} -Del /Table/61/1/4/#/62/1/1/0 -cascading delete into table: 63 using index: 1 -CascadeScan /Table/61/1/4/#/62/1/1/#/63/{1-2} -FKScan /Table/61/1/4/#/62/1/1/#/63/{1-2} -FKScan /Table/61/1/4/#/62/{1-2} -Del /Table/61/1/5/0 -cascading delete into table: 62 using index: 1 -CascadeScan /Table/61/1/5/#/62/{1-2} -CascadeScan /Table/61/1/5/#/62/1/1{-/#} -Del /Table/61/1/5/#/62/1/1/0 -cascading delete into table: 63 using index: 1 -CascadeScan /Table/61/1/5/#/62/1/1/#/63/{1-2} -FKScan /Table/61/1/5/#/62/1/1/#/63/{1-2} -FKScan /Table/61/1/5/#/62/{1-2} -Del /Table/61/1/6/0 -cascading delete into table: 62 using index: 1 -CascadeScan /Table/61/1/6/#/62/{1-2} -CascadeScan /Table/61/1/6/#/62/1/1{-/#} -Del /Table/61/1/6/#/62/1/1/0 -cascading delete into table: 63 using index: 1 -CascadeScan /Table/61/1/6/#/62/1/1/#/63/{1-2} -FKScan /Table/61/1/6/#/62/1/1/#/63/{1-2} -FKScan /Table/61/1/6/#/62/{1-2} -Del /Table/61/1/7/0 -cascading delete into table: 62 using index: 1 -CascadeScan /Table/61/1/7/#/62/{1-2} -CascadeScan /Table/61/1/7/#/62/1/1{-/#} -Del /Table/61/1/7/#/62/1/1/0 -cascading delete into table: 63 using index: 1 -CascadeScan /Table/61/1/7/#/62/1/1/#/63/{1-2} -FKScan /Table/61/1/7/#/62/1/1/#/63/{1-2} -FKScan /Table/61/1/7/#/62/{1-2} -Del /Table/61/1/8/0 -cascading delete into table: 62 using index: 1 -CascadeScan /Table/61/1/8/#/62/{1-2} -CascadeScan /Table/61/1/8/#/62/1/1{-/#} -Del /Table/61/1/8/#/62/1/1/0 -cascading delete into table: 63 using index: 1 -CascadeScan /Table/61/1/8/#/62/1/1/#/63/{1-2} -FKScan /Table/61/1/8/#/62/1/1/#/63/{1-2} -FKScan /Table/61/1/8/#/62/{1-2} -Del /Table/61/1/9/0 -cascading delete into table: 62 using index: 1 -CascadeScan /Table/61/1/9/#/62/{1-2} -CascadeScan /Table/61/1/9/#/62/1/1{-/#} -Del /Table/61/1/9/#/62/1/1/0 -cascading delete into table: 63 using index: 1 -CascadeScan /Table/61/1/9/#/62/1/1/#/63/{1-2} -FKScan /Table/61/1/9/#/62/1/1/#/63/{1-2} -FKScan /Table/61/1/9/#/62/{1-2} -Del /Table/61/1/10/0 -cascading delete into table: 62 using index: 1 -CascadeScan /Table/61/1/10/#/62/{1-2} -CascadeScan /Table/61/1/10/#/62/1/1{-/#} -Del /Table/61/1/10/#/62/1/1/0 -cascading delete into table: 63 using index: 1 -CascadeScan /Table/61/1/10/#/62/1/1/#/63/{1-2} -FKScan /Table/61/1/10/#/62/1/1/#/63/{1-2} -FKScan /Table/61/1/10/#/62/{1-2} -output row: [1] -output row: [2] -output row: [3] -output row: [4] -output row: [5] -output row: [6] -output row: [7] -output row: [8] -output row: [9] -output row: [10] -rows affected: 10 - -statement ok -DROP TABLE c; DROP TABLE b; DROP TABLE a diff --git a/pkg/sql/logictest/testdata/planner_test/inverted_index b/pkg/sql/logictest/testdata/planner_test/inverted_index deleted file mode 100644 index 6559430e4819..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/inverted_index +++ /dev/null @@ -1,189 +0,0 @@ -# LogicTest: local - -statement ok -CREATE TABLE d ( - a INT PRIMARY KEY, - b JSONB -) - -statement ok -CREATE INVERTED INDEX foo_inv ON d(b) - -query TTTTT -EXPLAIN (VERBOSE) SELECT * from d where b @>'{"a": "b"}' ----- -index-join · · (a, b) b=CONST; a!=NULL; key(a) - │ table d@primary · · - └── scan · · (a, b[omitted]) b=CONST; a!=NULL; key(a) -· table d@foo_inv · · -· spans /"a"/"b"-/"a"/"b"/PrefixEnd · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * from d where b @>'{"a": {"b": [1]}}' ----- -index-join · · (a, b) b=CONST; a!=NULL; key(a) - │ table d@primary · · - └── scan · · (a, b[omitted]) b=CONST; a!=NULL; key(a) -· table d@foo_inv · · -· spans /"a"/"b"/Arr/1-/"a"/"b"/Arr/1/PrefixEnd · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * from d where b @> '{"a": {"b": [[2]]}}'; ----- -index-join · · (a, b) b=CONST; a!=NULL; key(a) - │ table d@primary · · - └── scan · · (a, b[omitted]) b=CONST; a!=NULL; key(a) -· table d@foo_inv · · -· spans /"a"/"b"/Arr/Arr/2-/"a"/"b"/Arr/Arr/2/PrefixEnd · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * from d where b @> '{"a": {"b":true}}'; ----- -index-join · · (a, b) b=CONST; a!=NULL; key(a) - │ table d@primary · · - └── scan · · (a, b[omitted]) b=CONST; a!=NULL; key(a) -· table d@foo_inv · · -· spans /"a"/"b"/True-/"a"/"b"/False · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * from d where b @>'[1]' ----- -index-join · · (a, b) b=CONST; a!=NULL; key(a) - │ table d@primary · · - └── scan · · (a, b[omitted]) b=CONST; a!=NULL; key(a) -· table d@foo_inv · · -· spans /Arr/1-/Arr/1/PrefixEnd · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * from d where b @>'[{"a": {"b": [1]}}]' ----- -index-join · · (a, b) b=CONST; a!=NULL; key(a) - │ table d@primary · · - └── scan · · (a, b[omitted]) b=CONST; a!=NULL; key(a) -· table d@foo_inv · · -· spans /Arr/"a"/"b"/Arr/1-/Arr/"a"/"b"/Arr/1/PrefixEnd · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * from d where b @> '[]'; ----- -scan · · (a, b) a!=NULL; b!=NULL; key(a) -· table d@primary · · -· spans ALL · · -· filter b @> '[]' · · - - -query TTTTT -EXPLAIN (VERBOSE) SELECT * from d where b @> '{}'; ----- -scan · · (a, b) a!=NULL; b!=NULL; key(a) -· table d@primary · · -· spans ALL · · -· filter b @> '{}' · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * from d where b->'a' = '"b"' ----- -index-join · · (a, b) b=CONST; a!=NULL; key(a) - │ table d@primary · · - └── scan · · (a, b[omitted]) b=CONST; a!=NULL; key(a) -· table d@foo_inv · · -· spans /"a"/"b"-/"a"/"b"/PrefixEnd · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * from d where b->'a'->'c' = '"b"' ----- -index-join · · (a, b) b=CONST; a!=NULL; key(a) - │ table d@primary · · - └── scan · · (a, b[omitted]) b=CONST; a!=NULL; key(a) -· table d@foo_inv · · -· spans /"a"/"c"/"b"-/"a"/"c"/"b"/PrefixEnd · · - -# Regression test for #29399. Do not panic when NULL::STRING is on the right -# hand side of ->. -query TTTTT -EXPLAIN (VERBOSE) SELECT * from d where b->(NULL::STRING) = '"b"' ----- -norows · · (a, b) · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * from d where '"b"' = b->'a' ----- -index-join · · (a, b) b=CONST; a!=NULL; key(a) - │ table d@primary · · - └── scan · · (a, b[omitted]) b=CONST; a!=NULL; key(a) -· table d@foo_inv · · -· spans /"a"/"b"-/"a"/"b"/PrefixEnd · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * from d where b IS NULL ----- -scan · · (a, b) a!=NULL; key(a) -· table d@primary · · -· spans ALL · · -· filter b IS NULL · · - -query TTT -EXPLAIN SELECT * from d where b @> '{"a": []}' ORDER BY a; ----- -scan · · -· table d@primary -· spans ALL -· filter b @> '{"a": []}' - -query TTT -EXPLAIN SELECT * from d where b @> '{"a": {}}' ORDER BY a; ----- -scan · · -· table d@primary -· spans ALL -· filter b @> '{"a": {}}' - -## Multi-path contains queries - -query TTTTT -EXPLAIN (VERBOSE) SELECT * from d where b @> '{"a": {"b": "c"}, "f": "g"}' ----- -index-join · · (a, b) b=CONST; a!=NULL; key(a) - │ table d@primary · · - │ filter b @> '{"a": {"b": "c"}, "f": "g"}' · · - └── scan · · (a, b[omitted]) b=CONST; a!=NULL; key(a) -· table d@foo_inv · · -· spans /"a"/"b"/"c"-/"a"/"b"/"c"/PrefixEnd · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * from d where b @> '{"a": {"b": "c", "d": "e"}, "f": "g"}' ----- -index-join · · (a, b) b=CONST; a!=NULL; key(a) - │ table d@primary · · - │ filter b @> '{"a": {"b": "c", "d": "e"}, "f": "g"}' · · - └── scan · · (a, b[omitted]) b=CONST; a!=NULL; key(a) -· table d@foo_inv · · -· spans /"a"/"b"/"c"-/"a"/"b"/"c"/PrefixEnd · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * from d where b @> '[{"a": {"b": [[2]]}}, "d"]' ----- -index-join · · (a, b) b=CONST; a!=NULL; key(a) - │ table d@primary · · - │ filter b @> '[{"a": {"b": [[2]]}}, "d"]' · · - └── scan · · (a, b[omitted]) b=CONST; a!=NULL; key(a) -· table d@foo_inv · · -· spans /Arr/"a"/"b"/Arr/Arr/2-/Arr/"a"/"b"/Arr/Arr/2/PrefixEnd · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * from d where b @> '{"a": {}, "b": 2}' ----- -index-join · · (a, b) b=CONST; a!=NULL; key(a) - │ table d@primary · · - │ filter b @> '{"a": {}, "b": 2}' · · - └── scan · · (a, b[omitted]) b=CONST; a!=NULL; key(a) -· table d@foo_inv · · -· spans /"b"/2-/"b"/2/PrefixEnd · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * from d where b @> '{"a": {}, "b": {}}' ----- -scan · · (a, b) a!=NULL; b!=NULL; key(a) -· table d@primary · · -· spans ALL · · -· filter b @> '{"a": {}, "b": {}}' · · diff --git a/pkg/sql/logictest/testdata/planner_test/join b/pkg/sql/logictest/testdata/planner_test/join deleted file mode 100644 index d568b16f4ccd..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/join +++ /dev/null @@ -1,1464 +0,0 @@ -# LogicTest: local - -statement ok -CREATE TABLE onecolumn (x INT); INSERT INTO onecolumn(x) VALUES (44), (NULL), (42) - -statement ok -CREATE TABLE twocolumn (x INT, y INT); INSERT INTO twocolumn(x, y) VALUES (44,51), (NULL,52), (42,53), (45,45) - -## Simple test cases for inner, left, right, and outer joins - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT * FROM onecolumn JOIN twocolumn USING(x) -] ----- -render · · - │ render 0 test.public.onecolumn.x - │ render 1 test.public.twocolumn.y - └── hash-join · · - │ type inner - │ equality (x) = (x) - ├── scan · · - │ table onecolumn@primary - │ spans ALL - └── scan · · -· table twocolumn@primary -· spans ALL - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT * FROM twocolumn AS a JOIN twocolumn AS b ON a.x = b.y -] ----- -render · · - │ render 0 a.x - │ render 1 a.y - │ render 2 b.x - │ render 3 b.y - └── hash-join · · - │ type inner - │ equality (x) = (y) - ├── scan · · - │ table twocolumn@primary - │ spans ALL - └── scan · · -· table twocolumn@primary -· spans ALL - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT * FROM twocolumn AS a JOIN twocolumn AS b ON a.x = 44 -] ----- -render · · - │ render 0 a.x - │ render 1 a.y - │ render 2 b.x - │ render 3 b.y - └── hash-join · · - │ type cross - ├── scan · · - │ table twocolumn@primary - │ spans ALL - │ filter x = 44 - └── scan · · -· table twocolumn@primary -· spans ALL - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT * FROM onecolumn AS a JOIN twocolumn AS b ON ((a.x)) = ((b.y)) -] ----- -render · · - │ render 0 a.x - │ render 1 b.x - │ render 2 b.y - └── hash-join · · - │ type inner - │ equality (x) = (y) - ├── scan · · - │ table onecolumn@primary - │ spans ALL - └── scan · · -· table twocolumn@primary -· spans ALL - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT * FROM onecolumn JOIN twocolumn ON onecolumn.x = twocolumn.y -] ----- -render · · - │ render 0 test.public.onecolumn.x - │ render 1 test.public.twocolumn.x - │ render 2 test.public.twocolumn.y - └── hash-join · · - │ type inner - │ equality (x) = (y) - ├── scan · · - │ table onecolumn@primary - │ spans ALL - └── scan · · -· table twocolumn@primary -· spans ALL - - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT * FROM (onecolumn CROSS JOIN twocolumn JOIN onecolumn AS a(b) ON a.b=twocolumn.x JOIN twocolumn AS c(d,e) ON a.b=c.d AND c.d=onecolumn.x) LIMIT 1 -] ----- -limit · · - │ count 1 - └── render · · - │ render 0 test.public.onecolumn.x - │ render 1 test.public.twocolumn.x - │ render 2 test.public.twocolumn.y - │ render 3 a.b - │ render 4 c.d - │ render 5 c.e - └── hash-join · · - │ type inner - │ equality (b, x) = (d, d) - ├── hash-join · · - │ │ type inner - │ │ equality (x) = (b) - │ ├── hash-join · · - │ │ │ type cross - │ │ ├── scan · · - │ │ │ table onecolumn@primary - │ │ │ spans ALL - │ │ └── scan · · - │ │ table twocolumn@primary - │ │ spans ALL - │ └── scan · · - │ table onecolumn@primary - │ spans ALL - └── scan · · -· table twocolumn@primary -· spans ALL - -# The following queries verify that only the necessary columns are scanned. -query TTTTT -EXPLAIN (VERBOSE) SELECT a.x, b.y FROM twocolumn AS a, twocolumn AS b ----- -render · · (x, y) · - │ render 0 a.x · · - │ render 1 b.y · · - └── hash-join · · (x, y[omitted], rowid[hidden,omitted], x[omitted], y, rowid[hidden,omitted]) · - │ type cross · · - ├── scan · · (x, y[omitted], rowid[hidden,omitted]) rowid!=NULL; key(rowid) - │ table twocolumn@primary · · - │ spans ALL · · - └── scan · · (x[omitted], y, rowid[hidden,omitted]) rowid!=NULL; key(rowid) -· table twocolumn@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT b.y FROM (twocolumn AS a JOIN twocolumn AS b USING(x)) ----- -render · · (y) · - │ render 0 b.y · · - └── hash-join · · (x[omitted], y[omitted], rowid[hidden,omitted], x[omitted], y, rowid[hidden,omitted]) · - │ type inner · · - │ equality (x) = (x) · · - ├── scan · · (x, y[omitted], rowid[hidden,omitted]) rowid!=NULL; key(rowid) - │ table twocolumn@primary · · - │ spans ALL · · - └── scan · · (x, y, rowid[hidden,omitted]) rowid!=NULL; key(rowid) -· table twocolumn@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT b.y FROM (twocolumn AS a JOIN twocolumn AS b ON a.x = b.x) ----- -render · · (y) · - │ render 0 b.y · · - └── hash-join · · (x[omitted], y[omitted], rowid[hidden,omitted], x[omitted], y, rowid[hidden,omitted]) · - │ type inner · · - │ equality (x) = (x) · · - ├── scan · · (x, y[omitted], rowid[hidden,omitted]) rowid!=NULL; key(rowid) - │ table twocolumn@primary · · - │ spans ALL · · - └── scan · · (x, y, rowid[hidden,omitted]) rowid!=NULL; key(rowid) -· table twocolumn@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT a.x FROM (twocolumn AS a JOIN twocolumn AS b ON a.x < b.y) ----- -render · · (x) · - │ render 0 a.x · · - └── hash-join · · (x, y[omitted], rowid[hidden,omitted], x[omitted], y[omitted], rowid[hidden,omitted]) · - │ type inner · · - │ pred a.x < b.y · · - ├── scan · · (x, y[omitted], rowid[hidden,omitted]) rowid!=NULL; key(rowid) - │ table twocolumn@primary · · - │ spans ALL · · - └── scan · · (x[omitted], y, rowid[hidden,omitted]) rowid!=NULL; key(rowid) -· table twocolumn@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM (SELECT x, 2 two FROM onecolumn) NATURAL FULL JOIN (SELECT x, y+1 plus1 FROM twocolumn) ----- -render · · (x, two, plus1) · - │ render 0 x · · - │ render 1 two · · - │ render 2 plus1 · · - └── render · · (x, x[hidden,omitted], two, x[hidden,omitted], plus1) · - │ render 0 IFNULL(x, x) · · - │ render 1 NULL · · - │ render 2 two · · - │ render 3 NULL · · - │ render 4 plus1 · · - └── hash-join · · (x, two, x, plus1) · - │ type full outer · · - │ equality (x) = (x) · · - ├── render · · (x, two) two=CONST - │ │ render 0 test.public.onecolumn.x · · - │ │ render 1 2 · · - │ └── scan · · (x, rowid[hidden,omitted]) rowid!=NULL; key(rowid) - │ table onecolumn@primary · · - │ spans ALL · · - └── render · · (x, plus1) · - │ render 0 test.public.twocolumn.x · · - │ render 1 test.public.twocolumn.y + 1 · · - └── scan · · (x, y, rowid[hidden,omitted]) rowid!=NULL; key(rowid) -· table twocolumn@primary · · -· spans ALL · · - -# Ensure that the ordering information for the result of joins is sane. (#12037) -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM (SELECT * FROM (VALUES (9, 1), (8, 2)) AS a (u, k) ORDER BY k) - INNER JOIN (VALUES (1, 1), (2, 2)) AS b (k, w) USING (k) ORDER BY u ----- -sort · · (k, u, w) +u - │ order +u · · - └── render · · (k, u, w) · - │ render 0 k · · - │ render 1 u · · - │ render 2 b.w · · - └── render · · (k, u, k[hidden,omitted], w) · - │ render 0 k · · - │ render 1 u · · - │ render 2 NULL · · - │ render 3 b.w · · - └── hash-join · · (u, k, k[omitted], w) · - │ type inner · · - │ equality (k) = (k) · · - ├── sort · · (u, k) +k - │ │ order +k · · - │ └── values · · (u, k) · - │ size 2 columns, 2 rows · · - │ row 0, expr 0 9 · · - │ row 0, expr 1 1 · · - │ row 1, expr 0 8 · · - │ row 1, expr 1 2 · · - └── values · · (column1, column2) · -· size 2 columns, 2 rows · · -· row 0, expr 0 1 · · -· row 0, expr 1 1 · · -· row 1, expr 0 2 · · -· row 1, expr 1 2 · · - -# Ensure that large cross-joins are optimized somehow (#10633) -statement ok -CREATE TABLE customers(id INT PRIMARY KEY NOT NULL); CREATE TABLE orders(id INT, cust INT REFERENCES customers(id)) - -query ITTT -SELECT level, node_type, field, description FROM [EXPLAIN (VERBOSE) SELECT - NULL::text AS pktable_cat, - pkn.nspname AS pktable_schem, - pkc.relname AS pktable_name, - pka.attname AS pkcolumn_name, - NULL::text AS fktable_cat, - fkn.nspname AS fktable_schem, - fkc.relname AS fktable_name, - fka.attname AS fkcolumn_name, - pos.n AS key_seq, - CASE con.confupdtype - WHEN 'c' THEN 0 - WHEN 'n' THEN 2 - WHEN 'd' THEN 4 - WHEN 'r' THEN 1 - WHEN 'a' THEN 3 - ELSE NULL - END AS update_rule, - CASE con.confdeltype - WHEN 'c' THEN 0 - WHEN 'n' THEN 2 - WHEN 'd' THEN 4 - WHEN 'r' THEN 1 - WHEN 'a' THEN 3 - ELSE NULL - END AS delete_rule, - con.conname AS fk_name, - pkic.relname AS pk_name, - CASE - WHEN con.condeferrable - AND con.condeferred THEN 5 - WHEN con.condeferrable THEN 6 - ELSE 7 - END AS deferrability - FROM pg_catalog.pg_namespace pkn, - pg_catalog.pg_class pkc, - pg_catalog.pg_attribute pka, - pg_catalog.pg_namespace fkn, - pg_catalog.pg_class fkc, - pg_catalog.pg_attribute fka, - pg_catalog.pg_constraint con, - pg_catalog.generate_series(1, 32) pos(n), - pg_catalog.pg_depend dep, - pg_catalog.pg_class pkic - WHERE pkn.oid = pkc.relnamespace - AND pkc.oid = pka.attrelid - AND pka.attnum = con.confkey[pos.n] - AND con.confrelid = pkc.oid - AND fkn.oid = fkc.relnamespace - AND fkc.oid = fka.attrelid - AND fka.attnum = con.conkey[pos.n] - AND con.conrelid = fkc.oid - AND con.contype = 'f' - AND con.oid = dep.objid - AND pkic.oid = dep.refobjid - AND pkic.relkind = 'i' - AND fkn.nspname = 'public' - AND fkc.relname = 'orders' - ORDER BY pkn.nspname, - pkc.relname, - con.conname, - pos.n - ] WHERE node_type <> 'values' AND field <> 'size' ----- -0 sort · · -0 · order +pktable_schem,+pktable_name,+fk_name,+key_seq -1 render · · -1 · render 0 CAST(NULL AS STRING) -1 · render 1 pkn.nspname -1 · render 2 pkc.relname -1 · render 3 pka.attname -1 · render 4 CAST(NULL AS STRING) -1 · render 5 fkn.nspname -1 · render 6 fkc.relname -1 · render 7 fka.attname -1 · render 8 pos.n -1 · render 9 CASE con.confupdtype WHEN 'c' THEN 0 WHEN 'n' THEN 2 WHEN 'd' THEN 4 WHEN 'r' THEN 1 WHEN 'a' THEN 3 ELSE NULL END -1 · render 10 CASE con.confdeltype WHEN 'c' THEN 0 WHEN 'n' THEN 2 WHEN 'd' THEN 4 WHEN 'r' THEN 1 WHEN 'a' THEN 3 ELSE NULL END -1 · render 11 con.conname -1 · render 12 pkic.relname -1 · render 13 CASE WHEN con.condeferrable AND con.condeferred THEN 5 WHEN con.condeferrable THEN 6 ELSE 7 END -2 hash-join · · -2 · type inner -2 · equality (oid) = (relnamespace) -3 hash-join · · -3 · type inner -3 · equality (oid, oid) = (attrelid, confrelid) -4 hash-join · · -4 · type inner -4 · pred pka.attnum = con.confkey[pos.n] -5 hash-join · · -5 · type inner -5 · equality (oid) = (relnamespace) -6 filter · · -6 · filter fkn.nspname = 'public' -6 hash-join · · -6 · type inner -6 · equality (oid, oid) = (attrelid, conrelid) -7 filter · · -7 · filter fkc.relname = 'orders' -7 hash-join · · -7 · type inner -7 · pred fka.attnum = con.conkey[pos.n] -8 hash-join · · -8 · type inner -8 · equality (oid) = (objid) -9 filter · · -9 · filter con.contype = 'f' -9 hash-join · · -9 · type cross -10 project set · · -10 · render 0 generate_series(1, 32) -11 emptyrow · · -10 hash-join · · -10 · type inner -10 · equality (refobjid) = (oid) -11 filter · · -11 · filter pkic.relkind = 'i' - - -# Tests for filter propagation through joins. - -statement ok -CREATE TABLE square (n INT PRIMARY KEY, sq INT) - -statement ok -CREATE TABLE pairs (a INT, b INT) - -# The filter expression becomes an equality constraint. -query TTT -EXPLAIN SELECT * FROM pairs, square WHERE pairs.b = square.n ----- -render · · - └── hash-join · · - │ type inner - │ equality (b) = (n) - ├── scan · · - │ table pairs@primary - │ spans ALL - └── scan · · -· table square@primary -· spans ALL - -# The filter expression becomes an ON predicate. -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM pairs, square WHERE pairs.a + pairs.b = square.sq ----- -render · · (a, b, n, sq) · - │ render 0 test.public.pairs.a · · - │ render 1 test.public.pairs.b · · - │ render 2 test.public.square.n · · - │ render 3 test.public.square.sq · · - └── hash-join · · (a, b, rowid[hidden,omitted], n, sq) · - │ type inner · · - │ pred (test.public.pairs.a + test.public.pairs.b) = test.public.square.sq · · - ├── scan · · (a, b, rowid[hidden,omitted]) rowid!=NULL; key(rowid) - │ table pairs@primary · · - │ spans ALL · · - └── scan · · (n, sq) n!=NULL; key(n) -· table square@primary · · -· spans ALL · · - -# Query similar to the one above, but the filter refers to a rendered -# expression and can't "break through". See the comment for propagateFilters -# in fitler_opt.go for all the details. -query TTTTT -EXPLAIN (VERBOSE) SELECT a, b, n, sq FROM (SELECT a, b, a * b / 2 AS div, n, sq FROM pairs, square) WHERE div = sq ----- -render · · (a, b, n, sq) sq!=NULL - │ render 0 a · · - │ render 1 b · · - │ render 2 n · · - │ render 3 sq · · - └── filter · · (a, b, div, n, sq) div=sq; div!=NULL; sq!=NULL - │ filter div = sq · · - └── render · · (a, b, div, n, sq) · - │ render 0 test.public.pairs.a · · - │ render 1 test.public.pairs.b · · - │ render 2 (test.public.pairs.a * test.public.pairs.b) / 2 · · - │ render 3 test.public.square.n · · - │ render 4 test.public.square.sq · · - └── hash-join · · (a, b, rowid[hidden,omitted], n, sq) · - │ type cross · · - ├── scan · · (a, b, rowid[hidden,omitted]) rowid!=NULL; key(rowid) - │ table pairs@primary · · - │ spans ALL · · - └── scan · · (n, sq) n!=NULL; key(n) -· table square@primary · · -· spans ALL · · - -# The filter expression must stay on top of the outer join. -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM pairs FULL OUTER JOIN square ON pairs.a + pairs.b = square.sq ----- -render · · (a, b, n, sq) · - │ render 0 test.public.pairs.a · · - │ render 1 test.public.pairs.b · · - │ render 2 test.public.square.n · · - │ render 3 test.public.square.sq · · - └── hash-join · · (a, b, rowid[hidden,omitted], n, sq) · - │ type full outer · · - │ pred (test.public.pairs.a + test.public.pairs.b) = test.public.square.sq · · - ├── scan · · (a, b, rowid[hidden,omitted]) rowid!=NULL; key(rowid) - │ table pairs@primary · · - │ spans ALL · · - └── scan · · (n, sq) n!=NULL; key(n) -· table square@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM pairs FULL OUTER JOIN square ON pairs.a + pairs.b = square.sq WHERE pairs.b%2 <> square.sq%2 ----- -render · · (a, b, n, sq) b!=NULL; sq!=NULL - │ render 0 test.public.pairs.a · · - │ render 1 test.public.pairs.b · · - │ render 2 test.public.square.n · · - │ render 3 test.public.square.sq · · - └── filter · · (a, b, rowid[hidden,omitted], n, sq) b!=NULL; sq!=NULL - │ filter (test.public.pairs.b % 2) != (test.public.square.sq % 2) · · - └── hash-join · · (a, b, rowid[hidden,omitted], n, sq) · - │ type full outer · · - │ pred (test.public.pairs.a + test.public.pairs.b) = test.public.square.sq · · - ├── scan · · (a, b, rowid[hidden,omitted]) rowid!=NULL; key(rowid) - │ table pairs@primary · · - │ spans ALL · · - └── scan · · (n, sq) n!=NULL; key(n) -· table square@primary · · -· spans ALL · · - -# Filter propagation through outer joins. - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) -SELECT * - FROM (SELECT * FROM pairs LEFT JOIN square ON b = sq AND a > 1 AND n < 6) - WHERE b > 1 AND (n IS NULL OR n > 1) AND (n IS NULL OR a < sq) -] ----- -render · · - │ render 0 test.public.pairs.a - │ render 1 test.public.pairs.b - │ render 2 test.public.square.n - │ render 3 test.public.square.sq - └── filter · · - │ filter ((test.public.square.n IS NULL) OR (test.public.square.n > 1)) AND ((test.public.square.n IS NULL) OR (test.public.pairs.a < test.public.square.sq)) - └── hash-join · · - │ type left outer - │ equality (b) = (sq) - │ pred test.public.pairs.a > 1 - ├── scan · · - │ table pairs@primary - │ spans ALL - │ filter b > 1 - └── scan · · -· table square@primary -· spans -/5/# -· filter sq > 1 - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) -SELECT * - FROM (SELECT * FROM pairs RIGHT JOIN square ON b = sq AND a > 1 AND n < 6) - WHERE (a IS NULL OR a > 2) AND n > 1 AND (a IS NULL OR a < sq) -] ----- -render · · - │ render 0 test.public.pairs.a - │ render 1 test.public.pairs.b - │ render 2 test.public.square.n - │ render 3 test.public.square.sq - └── filter · · - │ filter ((test.public.pairs.a IS NULL) OR (test.public.pairs.a > 2)) AND ((test.public.pairs.a IS NULL) OR (test.public.pairs.a < test.public.square.sq)) - └── hash-join · · - │ type right outer - │ equality (b) = (sq) - │ pred test.public.square.n < 6 - ├── scan · · - │ table pairs@primary - │ spans ALL - │ filter a > 1 - └── scan · · -· table square@primary -· spans /2- - -# The simpler plan for an inner join, to compare. -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) -SELECT * - FROM (SELECT * FROM pairs JOIN square ON b = sq AND a > 1 AND n < 6) - WHERE (a IS NULL OR a > 2) AND n > 1 AND (a IS NULL OR a < sq) -] ----- -render · · - │ render 0 test.public.pairs.a - │ render 1 test.public.pairs.b - │ render 2 test.public.square.n - │ render 3 test.public.square.sq - └── hash-join · · - │ type inner - │ equality (b) = (sq) - ├── scan · · - │ table pairs@primary - │ spans ALL - │ filter ((a > 1) AND ((a IS NULL) OR (a > 2))) AND ((a IS NULL) OR (a < b)) - └── scan · · -· table square@primary -· spans /2-/5/# -· parallel · - - -statement ok -CREATE TABLE t1 (col1 INT, x INT, col2 INT, y INT) - -statement ok -CREATE TABLE t2 (col3 INT, y INT, x INT, col4 INT) - -query TTTTT -EXPLAIN (VERBOSE) SELECT x FROM t1 NATURAL JOIN (SELECT * FROM t2) ----- -render · · (x) · - │ render 0 test.public.t1.x · · - └── render · · (x, y[omitted], col1[omitted], col2[omitted], rowid[hidden,omitted], col3[omitted], y[hidden,omitted], x[hidden,omitted], col4[omitted]) · - │ render 0 test.public.t1.x · · - │ render 1 NULL · · - │ render 2 NULL · · - │ render 3 NULL · · - │ render 4 NULL · · - │ render 5 NULL · · - │ render 6 NULL · · - │ render 7 NULL · · - │ render 8 NULL · · - └── hash-join · · (col1[omitted], x, col2[omitted], y[omitted], rowid[hidden,omitted], col3[omitted], y[omitted], x[omitted], col4[omitted]) · - │ type inner · · - │ equality (x, y) = (x, y) · · - ├── scan · · (col1[omitted], x, col2[omitted], y, rowid[hidden,omitted]) rowid!=NULL; key(rowid) - │ table t1@primary · · - │ spans ALL · · - └── render · · (col3[omitted], y, x, col4[omitted]) · - │ render 0 NULL · · - │ render 1 test.public.t2.y · · - │ render 2 test.public.t2.x · · - │ render 3 NULL · · - └── scan · · (col3[omitted], y, x, col4[omitted], rowid[hidden,omitted]) rowid!=NULL; key(rowid) -· table t2@primary · · -· spans ALL · · - -# Tests for merge join ordering information. -statement ok -CREATE TABLE pkBA (a INT, b INT, c INT, d INT, PRIMARY KEY(b,a)) - -statement ok -CREATE TABLE pkBC (a INT, b INT, c INT, d INT, PRIMARY KEY(b,c)) - -statement ok -CREATE TABLE pkBAC (a INT, b INT, c INT, d INT, PRIMARY KEY(b,a,c)) - -statement ok -CREATE TABLE pkBAD (a INT, b INT, c INT, d INT, PRIMARY KEY(b,a,d)) - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM pkBA AS l JOIN pkBC AS r ON l.a = r.a AND l.b = r.b AND l.c = r.c ----- -merge-join · · (a, b, c, d, a, b, c, d) a=a; b=b; c=c; a!=NULL; b!=NULL; c!=NULL; key(a,b); key(b,c) - │ type inner · · - │ equality (a, b, c) = (a, b, c) · · - │ mergeJoinOrder +"(b=b)" · · - ├── scan · · (a, b, c, d) a!=NULL; b!=NULL; key(a,b); +b - │ table pkba@primary · · - │ spans ALL · · - └── scan · · (a, b, c, d) b!=NULL; c!=NULL; key(b,c); +b -· table pkbc@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM pkBA NATURAL JOIN pkBAD ----- -render · · (a, b, c, d) a!=NULL; b!=NULL; c!=NULL; d!=NULL; key(a,b) - │ render 0 test.public.pkba.a · · - │ render 1 test.public.pkba.b · · - │ render 2 test.public.pkba.c · · - │ render 3 test.public.pkba.d · · - └── merge-join · · (a, b, c, d, a[omitted], b[omitted], c[omitted], d[omitted]) a=a; b=b; c=c; d=d; a!=NULL; b!=NULL; c!=NULL; d!=NULL; key(a,b) - │ type inner · · - │ equality (a, b, c, d) = (a, b, c, d) · · - │ mergeJoinOrder +"(b=b)",+"(a=a)",+"(d=d)" · · - ├── scan · · (a, b, c, d) a!=NULL; b!=NULL; key(a,b); +b,+a - │ table pkba@primary · · - │ spans ALL · · - └── scan · · (a, b, c, d) a!=NULL; b!=NULL; d!=NULL; key(a,b,d); +b,+a,+d -· table pkbad@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM pkBAC AS l JOIN pkBAC AS r USING(a, b, c) ----- -render · · (a, b, c, d, d) a!=NULL; b!=NULL; c!=NULL; key(a,b,c) - │ render 0 l.a · · - │ render 1 l.b · · - │ render 2 l.c · · - │ render 3 l.d · · - │ render 4 r.d · · - └── merge-join · · (a, b, c, d, a[omitted], b[omitted], c[omitted], d) a=a; b=b; c=c; a!=NULL; b!=NULL; c!=NULL; key(a,b,c) - │ type inner · · - │ equality (a, b, c) = (a, b, c) · · - │ mergeJoinOrder +"(b=b)",+"(a=a)",+"(c=c)" · · - ├── scan · · (a, b, c, d) a!=NULL; b!=NULL; c!=NULL; key(a,b,c); +b,+a,+c - │ table pkbac@primary · · - │ spans ALL · · - └── scan · · (a, b, c, d) a!=NULL; b!=NULL; c!=NULL; key(a,b,c); +b,+a,+c -· table pkbac@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM pkBAC AS l JOIN pkBAD AS r ON l.c = r.d AND l.a = r.a AND l.b = r.b ----- -merge-join · · (a, b, c, d, a, b, c, d) a=a; b=b; c=d; a!=NULL; b!=NULL; c!=NULL; key(a,b,c) - │ type inner · · - │ equality (c, a, b) = (d, a, b) · · - │ mergeJoinOrder +"(b=b)",+"(a=a)",+"(c=d)" · · - ├── scan · · (a, b, c, d) a!=NULL; b!=NULL; c!=NULL; key(a,b,c); +b,+a,+c - │ table pkbac@primary · · - │ spans ALL · · - └── scan · · (a, b, c, d) a!=NULL; b!=NULL; d!=NULL; key(a,b,d); +b,+a,+d -· table pkbad@primary · · -· spans ALL · · - -# Tests with joins with merged columns of collated string type. -statement ok -CREATE TABLE str1 (a INT PRIMARY KEY, s STRING COLLATE en_u_ks_level1) - -statement ok -CREATE TABLE str2 (a INT PRIMARY KEY, s STRING COLLATE en_u_ks_level1) - -query TTTTT -EXPLAIN (VERBOSE) SELECT s, str1.s, str2.s FROM str1 INNER JOIN str2 USING(s) ----- -render · · (s, s, s) s=s - │ render 0 test.public.str1.s · · - │ render 1 test.public.str1.s · · - │ render 2 test.public.str2.s · · - └── render · · (s, a[omitted], a[omitted], s[hidden]) · - │ render 0 test.public.str1.s · · - │ render 1 NULL · · - │ render 2 NULL · · - │ render 3 test.public.str2.s · · - └── hash-join · · (a[omitted], s, a[omitted], s) · - │ type inner · · - │ equality (s) = (s) · · - ├── scan · · (a[omitted], s) a!=NULL; key(a) - │ table str1@primary · · - │ spans ALL · · - └── scan · · (a[omitted], s) a!=NULL; key(a) -· table str2@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT s, str1.s, str2.s FROM str1 LEFT OUTER JOIN str2 USING(s) ----- -render · · (s, s, s) s=s - │ render 0 test.public.str1.s · · - │ render 1 test.public.str1.s · · - │ render 2 test.public.str2.s · · - └── render · · (s, a[omitted], a[omitted], s[hidden]) · - │ render 0 test.public.str1.s · · - │ render 1 NULL · · - │ render 2 NULL · · - │ render 3 test.public.str2.s · · - └── hash-join · · (a[omitted], s, a[omitted], s) · - │ type left outer · · - │ equality (s) = (s) · · - ├── scan · · (a[omitted], s) a!=NULL; key(a) - │ table str1@primary · · - │ spans ALL · · - └── scan · · (a[omitted], s) a!=NULL; key(a) -· table str2@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT s, str1.s, str2.s FROM str1 RIGHT OUTER JOIN str2 USING(s) ----- -render · · (s, s, s) · - │ render 0 s · · - │ render 1 test.public.str1.s · · - │ render 2 test.public.str2.s · · - └── render · · (s, a[omitted], s[hidden], a[omitted], s[hidden]) · - │ render 0 IFNULL(test.public.str1.s, test.public.str2.s) · · - │ render 1 NULL · · - │ render 2 test.public.str1.s · · - │ render 3 NULL · · - │ render 4 test.public.str2.s · · - └── hash-join · · (a[omitted], s, a[omitted], s) · - │ type right outer · · - │ equality (s) = (s) · · - ├── scan · · (a[omitted], s) a!=NULL; key(a) - │ table str1@primary · · - │ spans ALL · · - └── scan · · (a[omitted], s) a!=NULL; key(a) -· table str2@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT s, str1.s, str2.s FROM str1 FULL OUTER JOIN str2 USING(s) ----- -render · · (s, s, s) · - │ render 0 s · · - │ render 1 test.public.str1.s · · - │ render 2 test.public.str2.s · · - └── render · · (s, a[omitted], s[hidden], a[omitted], s[hidden]) · - │ render 0 IFNULL(test.public.str1.s, test.public.str2.s) · · - │ render 1 NULL · · - │ render 2 test.public.str1.s · · - │ render 3 NULL · · - │ render 4 test.public.str2.s · · - └── hash-join · · (a[omitted], s, a[omitted], s) · - │ type full outer · · - │ equality (s) = (s) · · - ├── scan · · (a[omitted], s) a!=NULL; key(a) - │ table str1@primary · · - │ spans ALL · · - └── scan · · (a[omitted], s) a!=NULL; key(a) -· table str2@primary · · -· spans ALL · · - -# Verify that we resolve the merged column a to str2.a but use IFNULL for -# column s which is a collated string. -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM str1 RIGHT OUTER JOIN str2 USING(a, s) ----- -render · · (a, s) · - │ render 0 test.public.str2.a · · - │ render 1 s · · - └── render · · (a, s, a[hidden,omitted], s[hidden,omitted], s[hidden,omitted]) · - │ render 0 test.public.str2.a · · - │ render 1 IFNULL(test.public.str1.s, test.public.str2.s) · · - │ render 2 NULL · · - │ render 3 NULL · · - │ render 4 NULL · · - └── merge-join · · (a[omitted], s, a, s) · - │ type right outer · · - │ equality (a, s) = (a, s) · · - │ mergeJoinOrder +"(a=a)" · · - ├── scan · · (a, s) a!=NULL; key(a); +a - │ table str1@primary · · - │ spans ALL · · - └── scan · · (a, s) a!=NULL; key(a); +a -· table str2@primary · · -· spans ALL · · - - -statement ok -CREATE TABLE xyu (x INT, y INT, u INT, PRIMARY KEY(x,y,u)) - -statement ok -CREATE TABLE xyv (x INT, y INT, v INT, PRIMARY KEY(x,y,v)) - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM xyu INNER JOIN xyv USING(x, y) WHERE x > 2 ----- -render · · (x, y, u, v) x!=NULL; y!=NULL - │ render 0 test.public.xyu.x · · - │ render 1 test.public.xyu.y · · - │ render 2 test.public.xyu.u · · - │ render 3 test.public.xyv.v · · - └── merge-join · · (x, y, u, x[omitted], y[omitted], v) x=x; y=y; x!=NULL; y!=NULL - │ type inner · · - │ equality (x, y) = (x, y) · · - │ mergeJoinOrder +"(x=x)",+"(y=y)" · · - ├── scan · · (x, y, u) x!=NULL; y!=NULL; u!=NULL; key(x,y,u); +x,+y - │ table xyu@primary · · - │ spans /3- · · - └── scan · · (x, y, v) x!=NULL; y!=NULL; v!=NULL; key(x,y,v); +x,+y -· table xyv@primary · · -· spans /3- · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM xyu LEFT OUTER JOIN xyv USING(x, y) WHERE x > 2 ----- -render · · (x, y, u, v) · - │ render 0 test.public.xyu.x · · - │ render 1 test.public.xyu.y · · - │ render 2 test.public.xyu.u · · - │ render 3 test.public.xyv.v · · - └── merge-join · · (x, y, u, x[omitted], y[omitted], v) · - │ type left outer · · - │ equality (x, y) = (x, y) · · - │ mergeJoinOrder +"(x=x)",+"(y=y)" · · - ├── scan · · (x, y, u) x!=NULL; y!=NULL; u!=NULL; key(x,y,u); +x,+y - │ table xyu@primary · · - │ spans /3- · · - └── scan · · (x, y, v) x!=NULL; y!=NULL; v!=NULL; key(x,y,v); +x,+y -· table xyv@primary · · -· spans /3- · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM xyu RIGHT OUTER JOIN xyv USING(x, y) WHERE x > 2 ----- -render · · (x, y, u, v) · - │ render 0 test.public.xyv.x · · - │ render 1 test.public.xyv.y · · - │ render 2 test.public.xyu.u · · - │ render 3 test.public.xyv.v · · - └── render · · (x, y, x[hidden,omitted], y[hidden,omitted], u, v) · - │ render 0 test.public.xyv.x · · - │ render 1 test.public.xyv.y · · - │ render 2 NULL · · - │ render 3 NULL · · - │ render 4 test.public.xyu.u · · - │ render 5 test.public.xyv.v · · - └── merge-join · · (x[omitted], y[omitted], u, x, y, v) · - │ type right outer · · - │ equality (x, y) = (x, y) · · - │ mergeJoinOrder +"(x=x)",+"(y=y)" · · - ├── scan · · (x, y, u) x!=NULL; y!=NULL; u!=NULL; key(x,y,u); +x,+y - │ table xyu@primary · · - │ spans /3- · · - └── scan · · (x, y, v) x!=NULL; y!=NULL; v!=NULL; key(x,y,v); +x,+y -· table xyv@primary · · -· spans /3- · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM xyu FULL OUTER JOIN xyv USING(x, y) WHERE x > 2 ----- -render · · (x, y, u, v) x!=NULL - │ render 0 x · · - │ render 1 y · · - │ render 2 test.public.xyu.u · · - │ render 3 test.public.xyv.v · · - └── filter · · (x, y, x[hidden,omitted], y[hidden,omitted], u, x[hidden,omitted], y[hidden,omitted], v) x!=NULL - │ filter x > 2 · · - └── render · · (x, y, x[hidden,omitted], y[hidden,omitted], u, x[hidden,omitted], y[hidden,omitted], v) · - │ render 0 IFNULL(test.public.xyu.x, test.public.xyv.x) · · - │ render 1 IFNULL(test.public.xyu.y, test.public.xyv.y) · · - │ render 2 NULL · · - │ render 3 NULL · · - │ render 4 test.public.xyu.u · · - │ render 5 NULL · · - │ render 6 NULL · · - │ render 7 test.public.xyv.v · · - └── merge-join · · (x, y, u, x, y, v) · - │ type full outer · · - │ equality (x, y) = (x, y) · · - │ mergeJoinOrder +"(x=x)",+"(y=y)" · · - ├── scan · · (x, y, u) x!=NULL; y!=NULL; u!=NULL; key(x,y,u); +x,+y - │ table xyu@primary · · - │ spans ALL · · - └── scan · · (x, y, v) x!=NULL; y!=NULL; v!=NULL; key(x,y,v); +x,+y -· table xyv@primary · · -· spans ALL · · - -# Verify that we transfer constraints between the two sides. -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM xyu INNER JOIN xyv ON xyu.x = xyv.x AND xyu.y = xyv.y WHERE xyu.x = 1 AND xyu.y < 10 ----- -merge-join · · (x, y, u, x, y, v) x=x; y=y; x=CONST; y!=NULL - │ type inner · · - │ equality (x, y) = (x, y) · · - │ mergeJoinOrder +"(x=x)",+"(y=y)" · · - ├── scan · · (x, y, u) x=CONST; y!=NULL; u!=NULL; key(y,u); +y - │ table xyu@primary · · - │ spans /1-/1/10 · · - └── scan · · (x, y, v) x=CONST; y!=NULL; v!=NULL; key(y,v); +y -· table xyv@primary · · -· spans /1-/1/10 · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM xyu INNER JOIN xyv ON xyu.x = xyv.x AND xyu.y = xyv.y AND xyu.x = 1 AND xyu.y < 10 ----- -merge-join · · (x, y, u, x, y, v) x=x; y=y; x=CONST; y!=NULL - │ type inner · · - │ equality (x, y) = (x, y) · · - │ mergeJoinOrder +"(x=x)",+"(y=y)" · · - ├── scan · · (x, y, u) x=CONST; y!=NULL; u!=NULL; key(y,u); +y - │ table xyu@primary · · - │ spans /1-/1/10 · · - └── scan · · (x, y, v) x=CONST; y!=NULL; v!=NULL; key(y,v); +y -· table xyv@primary · · -· spans /1-/1/10 · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM xyu LEFT OUTER JOIN xyv ON xyu.x = xyv.x AND xyu.y = xyv.y AND xyu.x = 1 AND xyu.y < 10 ----- -merge-join · · (x, y, u, x, y, v) · - │ type left outer · · - │ equality (x, y) = (x, y) · · - │ mergeJoinOrder +"(x=x)",+"(y=y)" · · - │ pred (test.public.xyu.x = 1) AND (test.public.xyu.y < 10) · · - ├── scan · · (x, y, u) x!=NULL; y!=NULL; u!=NULL; key(x,y,u); +x,+y - │ table xyu@primary · · - │ spans ALL · · - └── scan · · (x, y, v) x=CONST; y!=NULL; v!=NULL; key(y,v); +y -· table xyv@primary · · -· spans /1-/1/10 · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM xyu RIGHT OUTER JOIN xyv ON xyu.x = xyv.x AND xyu.y = xyv.y AND xyu.x = 1 AND xyu.y < 10 ----- -merge-join · · (x, y, u, x, y, v) · - │ type right outer · · - │ equality (x, y) = (x, y) · · - │ mergeJoinOrder +"(x=x)",+"(y=y)" · · - │ pred (test.public.xyv.x = 1) AND (test.public.xyv.y < 10) · · - ├── scan · · (x, y, u) x=CONST; y!=NULL; u!=NULL; key(y,u); +y - │ table xyu@primary · · - │ spans /1-/1/10 · · - └── scan · · (x, y, v) x!=NULL; y!=NULL; v!=NULL; key(x,y,v); +x,+y -· table xyv@primary · · -· spans ALL · · - - -# Test OUTER joins that are run in the distSQL merge joiner - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM (SELECT * FROM xyu ORDER BY x, y) AS xyu LEFT OUTER JOIN (SELECT * FROM xyv ORDER BY x, y) AS xyv USING(x, y) WHERE x > 2 ----- -render · · (x, y, u, v) · - │ render 0 xyu.x · · - │ render 1 xyu.y · · - │ render 2 xyu.u · · - │ render 3 xyv.v · · - └── merge-join · · (x, y, u, x[omitted], y[omitted], v) · - │ type left outer · · - │ equality (x, y) = (x, y) · · - │ mergeJoinOrder +"(x=x)",+"(y=y)" · · - ├── scan · · (x, y, u) x!=NULL; y!=NULL; u!=NULL; key(x,y,u); +x,+y - │ table xyu@primary · · - │ spans /3- · · - └── scan · · (x, y, v) x!=NULL; y!=NULL; v!=NULL; key(x,y,v); +x,+y -· table xyv@primary · · -· spans /3- · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM (SELECT * FROM xyu ORDER BY x, y) AS xyu RIGHT OUTER JOIN (SELECT * FROM xyv ORDER BY x, y) AS xyv USING(x, y) WHERE x > 2 ----- -render · · (x, y, u, v) · - │ render 0 xyv.x · · - │ render 1 xyv.y · · - │ render 2 xyu.u · · - │ render 3 xyv.v · · - └── render · · (x, y, x[hidden,omitted], y[hidden,omitted], u, v) · - │ render 0 xyv.x · · - │ render 1 xyv.y · · - │ render 2 NULL · · - │ render 3 NULL · · - │ render 4 xyu.u · · - │ render 5 xyv.v · · - └── merge-join · · (x[omitted], y[omitted], u, x, y, v) · - │ type right outer · · - │ equality (x, y) = (x, y) · · - │ mergeJoinOrder +"(x=x)",+"(y=y)" · · - ├── scan · · (x, y, u) x!=NULL; y!=NULL; u!=NULL; key(x,y,u); +x,+y - │ table xyu@primary · · - │ spans /3- · · - └── scan · · (x, y, v) x!=NULL; y!=NULL; v!=NULL; key(x,y,v); +x,+y -· table xyv@primary · · -· spans /3- · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM (SELECT * FROM xyu ORDER BY x, y) AS xyu FULL OUTER JOIN (SELECT * FROM xyv ORDER BY x, y) AS xyv USING(x, y) WHERE x > 2 ----- -render · · (x, y, u, v) x!=NULL - │ render 0 x · · - │ render 1 y · · - │ render 2 xyu.u · · - │ render 3 xyv.v · · - └── filter · · (x, y, x[hidden,omitted], y[hidden,omitted], u, x[hidden,omitted], y[hidden,omitted], v) x!=NULL - │ filter x > 2 · · - └── render · · (x, y, x[hidden,omitted], y[hidden,omitted], u, x[hidden,omitted], y[hidden,omitted], v) · - │ render 0 IFNULL(xyu.x, xyv.x) · · - │ render 1 IFNULL(xyu.y, xyv.y) · · - │ render 2 NULL · · - │ render 3 NULL · · - │ render 4 xyu.u · · - │ render 5 NULL · · - │ render 6 NULL · · - │ render 7 xyv.v · · - └── merge-join · · (x, y, u, x, y, v) · - │ type full outer · · - │ equality (x, y) = (x, y) · · - │ mergeJoinOrder +"(x=x)",+"(y=y)" · · - ├── scan · · (x, y, u) x!=NULL; y!=NULL; u!=NULL; key(x,y,u); +x,+y - │ table xyu@primary · · - │ spans ALL · · - └── scan · · (x, y, v) x!=NULL; y!=NULL; v!=NULL; key(x,y,v); +x,+y -· table xyv@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM (SELECT * FROM xyu ORDER BY x, y) AS xyu LEFT OUTER JOIN (SELECT * FROM xyv ORDER BY x, y) AS xyv ON xyu.x = xyv.x AND xyu.y = xyv.y AND xyu.x = 1 AND xyu.y < 10 ----- -merge-join · · (x, y, u, x, y, v) · - │ type left outer · · - │ equality (x, y) = (x, y) · · - │ mergeJoinOrder +"(x=x)",+"(y=y)" · · - │ pred (xyu.x = 1) AND (xyu.y < 10) · · - ├── scan · · (x, y, u) x!=NULL; y!=NULL; u!=NULL; key(x,y,u); +x,+y - │ table xyu@primary · · - │ spans ALL · · - └── scan · · (x, y, v) x=CONST; y!=NULL; v!=NULL; key(y,v); +y -· table xyv@primary · · -· spans /1-/1/10 · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM xyu RIGHT OUTER JOIN (SELECT * FROM xyv ORDER BY x, y) AS xyv ON xyu.x = xyv.x AND xyu.y = xyv.y AND xyu.x = 1 AND xyu.y < 10 ----- -merge-join · · (x, y, u, x, y, v) · - │ type right outer · · - │ equality (x, y) = (x, y) · · - │ mergeJoinOrder +"(x=x)",+"(y=y)" · · - │ pred (xyv.x = 1) AND (xyv.y < 10) · · - ├── scan · · (x, y, u) x=CONST; y!=NULL; u!=NULL; key(y,u); +y - │ table xyu@primary · · - │ spans /1-/1/10 · · - └── scan · · (x, y, v) x!=NULL; y!=NULL; v!=NULL; key(x,y,v); +x,+y -· table xyv@primary · · -· spans ALL · · - -# Regression test for #20472: break up tuple inequalities. -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM xyu JOIN xyv USING(x, y) WHERE (x, y, u) > (1, 2, 3) ----- -render · · (x, y, u, v) x!=NULL; y!=NULL - │ render 0 test.public.xyu.x · · - │ render 1 test.public.xyu.y · · - │ render 2 test.public.xyu.u · · - │ render 3 test.public.xyv.v · · - └── merge-join · · (x, y, u, x[omitted], y[omitted], v) x=x; y=y; x!=NULL; y!=NULL - │ type inner · · - │ equality (x, y) = (x, y) · · - │ mergeJoinOrder +"(x=x)",+"(y=y)" · · - ├── scan · · (x, y, u) x!=NULL; y!=NULL; u!=NULL; key(x,y,u); +x,+y - │ table xyu@primary · · - │ spans /1/2/4- · · - └── scan · · (x, y, v) x!=NULL; y!=NULL; v!=NULL; key(x,y,v); +x,+y -· table xyv@primary · · -· spans /1/2- · · - - -# Regression test for #20858. - -statement ok -CREATE TABLE l (a INT PRIMARY KEY) - -statement ok -CREATE TABLE r (a INT PRIMARY KEY) - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM l LEFT OUTER JOIN r USING(a) WHERE a = 3; ----- -render · · (a) · - │ render 0 test.public.l.a · · - └── merge-join · · (a, a[omitted]) · - │ type left outer · · - │ equality (a) = (a) · · - │ mergeJoinOrder +"(a=a)" · · - ├── scan · · (a) a=CONST; key() - │ table l@primary · · - │ spans /3-/3/# · · - └── scan · · (a) a=CONST; key() -· table r@primary · · -· spans /3-/3/# · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM l LEFT OUTER JOIN r ON l.a = r.a WHERE l.a = 3; ----- -merge-join · · (a, a) · - │ type left outer · · - │ equality (a) = (a) · · - │ mergeJoinOrder +"(a=a)" · · - ├── scan · · (a) a=CONST; key() - │ table l@primary · · - │ spans /3-/3/# · · - └── scan · · (a) a=CONST; key() -· table r@primary · · -· spans /3-/3/# · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM l RIGHT OUTER JOIN r USING(a) WHERE a = 3; ----- -render · · (a) · - │ render 0 test.public.r.a · · - └── render · · (a, a[hidden,omitted]) · - │ render 0 test.public.r.a · · - │ render 1 NULL · · - └── merge-join · · (a[omitted], a) · - │ type right outer · · - │ equality (a) = (a) · · - │ mergeJoinOrder +"(a=a)" · · - ├── scan · · (a) a=CONST; key() - │ table l@primary · · - │ spans /3-/3/# · · - └── scan · · (a) a=CONST; key() -· table r@primary · · -· spans /3-/3/# · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM l RIGHT OUTER JOIN r ON l.a = r.a WHERE r.a = 3; ----- -merge-join · · (a, a) · - │ type right outer · · - │ equality (a) = (a) · · - │ mergeJoinOrder +"(a=a)" · · - ├── scan · · (a) a=CONST; key() - │ table l@primary · · - │ spans /3-/3/# · · - └── scan · · (a) a=CONST; key() -· table r@primary · · -· spans /3-/3/# · · - -# Regression tests for #21243 -statement ok -CREATE TABLE abcdef ( - a INT NOT NULL, - b INT NOT NULL, - c INT NOT NULL, - d INT NOT NULL, - e INT NULL, - f INT NULL, - PRIMARY KEY (a ASC, b ASC, c DESC, d ASC) -) - -statement ok -CREATE TABLE abg ( - a INT NOT NULL, - b INT NOT NULL, - g INT NULL, - PRIMARY KEY (a ASC, b ASC) -); - -query TTT -EXPLAIN SELECT * FROM abcdef join (select * from abg) USING (a,b) WHERE ((a,b)>(1,2) OR ((a,b)=(1,2) AND c < 6) OR ((a,b,c)=(1,2,6) AND d > 8)) ----- -render · · - └── merge-join · · - │ type inner - │ equality (a, b) = (a, b) - │ mergeJoinOrder +"(a=a)",+"(b=b)" - ├── scan · · - │ table abcdef@primary - │ spans /1/2/6/9- - │ filter (((a, b) > (1, 2)) OR (((a = 1) AND (b = 2)) AND (c < 6))) OR ((((a = 1) AND (b = 2)) AND (c = 6)) AND (d > 8)) - └── scan · · -· table abg@primary -· spans /1/2- -· filter (((a, b) > (1, 2)) OR ((a = 1) AND (b = 2))) OR ((a = 1) AND (b = 2)) - -# Regression tests for mixed-type equality columns (#22514). -statement ok -CREATE TABLE foo ( - a INT, - b INT, - c FLOAT, - d FLOAT -) - -statement ok -CREATE TABLE bar ( - a INT, - b FLOAT, - c FLOAT, - d INT -) - -# Only a and c can be equality columns. -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT * FROM foo NATURAL JOIN bar -] ----- -render · · - │ render 0 test.public.foo.a - │ render 1 test.public.foo.b - │ render 2 test.public.foo.c - │ render 3 test.public.foo.d - └── hash-join · · - │ type inner - │ equality (a, c) = (a, c) - │ pred (test.public.foo.b = test.public.bar.b) AND (test.public.foo.d = test.public.bar.d) - ├── scan · · - │ table foo@primary - │ spans ALL - └── scan · · -· table bar@primary -· spans ALL - -# b can't be an equality column. -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT * FROM foo JOIN bar USING (b) -] ----- -render · · - │ render 0 test.public.foo.b - │ render 1 test.public.foo.a - │ render 2 test.public.foo.c - │ render 3 test.public.foo.d - │ render 4 test.public.bar.a - │ render 5 test.public.bar.c - │ render 6 test.public.bar.d - └── render · · - │ render 0 test.public.foo.b - │ render 1 test.public.foo.a - │ render 2 test.public.foo.c - │ render 3 test.public.foo.d - │ render 4 NULL - │ render 5 test.public.bar.a - │ render 6 NULL - │ render 7 test.public.bar.c - │ render 8 test.public.bar.d - │ render 9 NULL - └── hash-join · · - │ type inner - │ pred test.public.foo.b = test.public.bar.b - ├── scan · · - │ table foo@primary - │ spans ALL - └── scan · · -· table bar@primary -· spans ALL - -# Only a can be an equality column. -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT * FROM foo JOIN bar USING (a, b) -] ----- -render · · - │ render 0 test.public.foo.a - │ render 1 test.public.foo.b - │ render 2 test.public.foo.c - │ render 3 test.public.foo.d - │ render 4 test.public.bar.c - │ render 5 test.public.bar.d - └── hash-join · · - │ type inner - │ equality (a) = (a) - │ pred test.public.foo.b = test.public.bar.b - ├── scan · · - │ table foo@primary - │ spans ALL - └── scan · · -· table bar@primary -· spans ALL - -# Only a and c can be equality columns. -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT * FROM foo JOIN bar USING (a, b, c) -] ----- -render · · - │ render 0 test.public.foo.a - │ render 1 test.public.foo.b - │ render 2 test.public.foo.c - │ render 3 test.public.foo.d - │ render 4 test.public.bar.d - └── hash-join · · - │ type inner - │ equality (a, c) = (a, c) - │ pred test.public.foo.b = test.public.bar.b - ├── scan · · - │ table foo@primary - │ spans ALL - └── scan · · -· table bar@primary -· spans ALL - -# b can't be an equality column. -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT * FROM foo JOIN bar ON foo.b = bar.b -] ----- -render · · - │ render 0 test.public.foo.a - │ render 1 test.public.foo.b - │ render 2 test.public.foo.c - │ render 3 test.public.foo.d - │ render 4 test.public.bar.a - │ render 5 test.public.bar.b - │ render 6 test.public.bar.c - │ render 7 test.public.bar.d - └── hash-join · · - │ type inner - │ pred test.public.foo.b = test.public.bar.b - ├── scan · · - │ table foo@primary - │ spans ALL - └── scan · · -· table bar@primary -· spans ALL - -# Only a can be an equality column. -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT * FROM foo JOIN bar ON foo.a = bar.a AND foo.b = bar.b -] ----- -render · · - │ render 0 test.public.foo.a - │ render 1 test.public.foo.b - │ render 2 test.public.foo.c - │ render 3 test.public.foo.d - │ render 4 test.public.bar.a - │ render 5 test.public.bar.b - │ render 6 test.public.bar.c - │ render 7 test.public.bar.d - └── hash-join · · - │ type inner - │ equality (a) = (a) - │ pred test.public.foo.b = test.public.bar.b - ├── scan · · - │ table foo@primary - │ spans ALL - └── scan · · -· table bar@primary -· spans ALL - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT * FROM foo, bar WHERE foo.b = bar.b -] ----- -render · · - │ render 0 test.public.foo.a - │ render 1 test.public.foo.b - │ render 2 test.public.foo.c - │ render 3 test.public.foo.d - │ render 4 test.public.bar.a - │ render 5 test.public.bar.b - │ render 6 test.public.bar.c - │ render 7 test.public.bar.d - └── hash-join · · - │ type inner - │ pred test.public.foo.b = test.public.bar.b - ├── scan · · - │ table foo@primary - │ spans ALL - └── scan · · -· table bar@primary -· spans ALL - -# Only a can be an equality column. -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT * FROM foo, bar WHERE foo.a = bar.a AND foo.b = bar.b -] ----- -render · · - │ render 0 test.public.foo.a - │ render 1 test.public.foo.b - │ render 2 test.public.foo.c - │ render 3 test.public.foo.d - │ render 4 test.public.bar.a - │ render 5 test.public.bar.b - │ render 6 test.public.bar.c - │ render 7 test.public.bar.d - └── hash-join · · - │ type inner - │ equality (a) = (a) - │ pred test.public.foo.b = test.public.bar.b - ├── scan · · - │ table foo@primary - │ spans ALL - └── scan · · -· table bar@primary -· spans ALL - -# Only a and c can be equality columns. -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT * FROM foo JOIN bar USING (a,b) WHERE foo.c = bar.c AND foo.d = bar.d -] ----- -render · · - │ render 0 test.public.foo.a - │ render 1 test.public.foo.b - │ render 2 test.public.foo.c - │ render 3 test.public.foo.d - │ render 4 test.public.bar.c - │ render 5 test.public.bar.d - └── hash-join · · - │ type inner - │ equality (a, c) = (a, c) - │ pred (test.public.foo.b = test.public.bar.b) AND (test.public.foo.d = test.public.bar.d) - ├── scan · · - │ table foo@primary - │ spans ALL - └── scan · · -· table bar@primary -· spans ALL diff --git a/pkg/sql/logictest/testdata/planner_test/limit b/pkg/sql/logictest/testdata/planner_test/limit deleted file mode 100644 index 14de2a6f4546..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/limit +++ /dev/null @@ -1,137 +0,0 @@ -# LogicTest: local - -statement ok -CREATE TABLE t (k INT PRIMARY KEY, v INT, w INT, INDEX(v)) - -# There must be no limit at the index scan level. -query TTTTT colnames -EXPLAIN (VERBOSE) SELECT * FROM t WHERE v > 4 AND w > 30 ORDER BY v LIMIT 2 ----- -tree field description columns ordering -limit · · (k, v, w) k!=NULL; v!=NULL; w!=NULL; key(k,v); +v - │ count 2 · · - └── index-join · · (k, v, w) k!=NULL; v!=NULL; w!=NULL; key(k,v); +v - │ table t@primary · · - │ filter w > 30 · · - └── scan · · (k, v[omitted], w[omitted]) k!=NULL; v!=NULL; w!=NULL; key(k,v); +v -· table t@t_v_idx · · -· spans /5- · · - -# This kind of query can be used to work around memory usage limits. We need to -# choose the "hard" limit of 100 over the "soft" limit of 25 (with the hard -# limit we will only store 100 rows in the sort node). See #19677. -query TTTTT colnames -EXPLAIN (VERBOSE) SELECT DISTINCT w FROM (SELECT w FROM t ORDER BY w LIMIT 100) ORDER BY w LIMIT 25 ----- -tree field description columns ordering -limit · · (w) weak-key(w); +w - │ count 25 · · - └── distinct · · (w) weak-key(w); +w - │ order key w · · - └── limit · · (w) +w - │ count 100 · · - └── sort · · (w) +w - │ order +w · · - └── render · · (w) · - │ render 0 test.public.t.w · · - └── scan · · (k[omitted], v[omitted], w) k!=NULL; key(k) -· table t@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT k, v FROM t ORDER BY k LIMIT 5 ----- -limit · · (k, v) k!=NULL; key(k); +k - │ count 5 · · - └── render · · (k, v) k!=NULL; key(k); +k - │ render 0 test.public.t.k · · - │ render 1 test.public.t.v · · - └── scan · · (k, v, w[omitted]) k!=NULL; key(k); +k -· table t@primary · · -· spans ALL · · -· limit 5 · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT k, v FROM t ORDER BY k OFFSET 5 ----- -limit · · (k, v) k!=NULL; weak-key(k,v); +k - │ offset 5 · · - └── sort · · (k, v) k!=NULL; weak-key(k,v); +k - │ order +k · · - └── render · · (k, v) k!=NULL; weak-key(k,v) - │ render 0 test.public.t.k · · - │ render 1 test.public.t.v · · - └── scan · · (k, v, w[omitted]) k!=NULL; weak-key(k,v) -· table t@t_v_idx · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT k, v FROM t ORDER BY v LIMIT (1+4) OFFSET 1 ----- -limit · · (k, v) k!=NULL; weak-key(k,v); +v - │ count 5 · · - │ offset 1 · · - └── render · · (k, v) k!=NULL; weak-key(k,v); +v - │ render 0 test.public.t.k · · - │ render 1 test.public.t.v · · - └── scan · · (k, v, w[omitted]) k!=NULL; weak-key(k,v); +v -· table t@t_v_idx · · -· spans ALL · · -· limit 6 · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT k, v FROM t ORDER BY v DESC LIMIT (1+4) OFFSET 1 ----- -limit · · (k, v) k!=NULL; weak-key(k,v); -v - │ count 5 · · - │ offset 1 · · - └── render · · (k, v) k!=NULL; weak-key(k,v); -v - │ render 0 test.public.t.k · · - │ render 1 test.public.t.v · · - └── revscan · · (k, v, w[omitted]) k!=NULL; weak-key(k,v); -v -· table t@t_v_idx · · -· spans ALL · · -· limit 6 · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT sum(w) FROM t GROUP BY k, v ORDER BY v DESC LIMIT 10 ----- -limit · · (sum) · - │ count 10 · · - └── sort · · (sum) · - │ order -v · · - └── group · · (sum, v) weak-key(v) - │ aggregate 0 sum(w) · · - │ aggregate 1 v · · - │ group by k, v · · - │ ordered +k · · - └── scan · · (k, v, w) k!=NULL; key(k) -· table t@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT k FROM (SELECT k, v FROM t ORDER BY v LIMIT 4) ----- -render · · (k) k!=NULL - │ render 0 k · · - └── limit · · (k, v[omitted]) k!=NULL; weak-key(k,v); +v - │ count 4 · · - └── render · · (k, v[omitted]) k!=NULL; weak-key(k,v); +v - │ render 0 test.public.t.k · · - │ render 1 NULL · · - └── scan · · (k, v[omitted], w[omitted]) k!=NULL; weak-key(k,v); +v -· table t@t_v_idx · · -· spans ALL · · -· limit 4 · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT k FROM (SELECT k, v, w FROM t ORDER BY v LIMIT 4) ----- -render · · (k) k!=NULL - │ render 0 k · · - └── limit · · (k, v[omitted], w[omitted]) k!=NULL; weak-key(k,v); +v - │ count 4 · · - └── scan · · (k, v[omitted], w[omitted]) k!=NULL; weak-key(k,v); +v -· table t@t_v_idx · · -· spans ALL · · -· limit 4 · · diff --git a/pkg/sql/logictest/testdata/planner_test/needed_columns b/pkg/sql/logictest/testdata/planner_test/needed_columns deleted file mode 100644 index 16f631282f50..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/needed_columns +++ /dev/null @@ -1,245 +0,0 @@ -# LogicTest: local - -query TTTTT -EXPLAIN (VERBOSE,NOOPTIMIZE) SELECT 1 a FROM (SELECT 2 AS s) ----- -render · · (a) a=CONST - │ render 0 1 · · - └── render · · (s) s=CONST - │ render 0 2 · · - └── emptyrow · · () · - -# Propagation to data sources. -query TTTTT -EXPLAIN (VERBOSE) SELECT 1 a FROM (SELECT 2 AS s) ----- -render · · (a) a=CONST - │ render 0 1 · · - └── render · · (s[omitted]) · - │ render 0 NULL · · - └── emptyrow · · () · - -# Propagation through CREATE TABLE. -query TTTTT -EXPLAIN (VERBOSE) CREATE TABLE t AS SELECT 1 a FROM (SELECT 2 AS s) ----- -create table · · () · - └── render · · (a) a=CONST - │ render 0 1 · · - └── render · · (s[omitted]) · - │ render 0 NULL · · - └── emptyrow · · () · - -# Propagation through LIMIT. -query TTTTT -EXPLAIN (VERBOSE) SELECT 1 b FROM (SELECT 2 AS s) LIMIT 1 ----- -limit · · (b) b=CONST - │ count 1 · · - └── render · · (b) b=CONST - │ render 0 1 · · - └── render · · (s[omitted]) · - │ render 0 NULL · · - └── emptyrow · · () · - -query TTTTT -EXPLAIN (VERBOSE) SELECT 1 b FROM (SELECT 2 AS s LIMIT 1) ----- -render · · (b) b=CONST - │ render 0 1 · · - └── limit · · (s[omitted]) · - │ count 1 · · - └── render · · (s[omitted]) · - │ render 0 NULL · · - └── emptyrow · · () · - -# Propagation through UNION. -query TTTTT -EXPLAIN (VERBOSE) SELECT 1 a FROM (SELECT 1 AS s UNION SELECT 2 AS s) ----- -render · · (a) a=CONST - │ render 0 1 · · - └── union · · (s) · - ├── render · · (s) s=CONST - │ │ render 0 2 · · - │ └── emptyrow · · () · - └── render · · (s) s=CONST - │ render 0 1 · · - └── emptyrow · · () · - -query TTTTT -EXPLAIN (VERBOSE) SELECT 1 a FROM (SELECT 1 AS s UNION ALL SELECT 2 AS s) ----- -render · · (a) a=CONST - │ render 0 1 · · - └── append · · (s[omitted]) · - ├── render · · (s[omitted]) · - │ │ render 0 NULL · · - │ └── emptyrow · · () · - └── render · · (s[omitted]) · - │ render 0 NULL · · - └── emptyrow · · () · - -# Propagation through WITH ORDINALITY. -query TTTTT -EXPLAIN (VERBOSE) SELECT 1 a FROM (SELECT 1 AS s) WITH ORDINALITY ----- -render · · (a) a=CONST - │ render 0 1 · · - └── ordinality · · (s[omitted], "ordinality") weak-key("ordinality") - └── render · · (s[omitted]) · - │ render 0 NULL · · - └── emptyrow · · () · - -# Propagation through sort, when the sorting column is in the results. -query TTTTT -EXPLAIN (VERBOSE) SELECT x FROM (SELECT 1 AS x, 2 AS y) ORDER BY x ----- -render · · (x) x=CONST - │ render 0 x · · - └── render · · (x, y[omitted]) x=CONST - │ render 0 1 · · - │ render 1 NULL · · - └── emptyrow · · () · - -# Propagation through sort, when the sorting column is not in the results. -query TTTTT -EXPLAIN (VERBOSE) SELECT x FROM (SELECT 1 AS x, 2 AS y, 3 AS z) ORDER BY y ----- -nosort · · (x) x=CONST - │ order +y · · - └── render · · (x, y) x=CONST; y=CONST - │ render 0 x · · - │ render 1 y · · - └── render · · (x, y, z[omitted]) x=CONST; y=CONST - │ render 0 1 · · - │ render 1 2 · · - │ render 2 NULL · · - └── emptyrow · · () · - -# Propagation to sub-queries. -query TTTTT -EXPLAIN (VERBOSE) SELECT 1 = (SELECT 2 AS x FROM (SELECT 3 AS s)) AS y ----- -root · · (y) y=CONST - ├── render · · (y) y=CONST - │ │ render 0 @S1 = 1 · · - │ └── emptyrow · · () · - └── subquery · · (y) y=CONST - │ id @S1 · · - │ original sql (SELECT 2 AS x FROM (SELECT 3 AS s)) · · - │ exec mode one row · · - └── max1row · · (x) x=CONST - └── limit · · (x) x=CONST - │ count 2 · · - └── render · · (x) x=CONST - │ render 0 2 · · - └── render · · (s[omitted]) · - │ render 0 NULL · · - └── emptyrow · · () · - -# Propagation through table scans. -statement ok -CREATE TABLE kv(k INT PRIMARY KEY, v INT) - -query TTTTT -EXPLAIN (VERBOSE) SELECT 1 a FROM kv ----- -render · · (a) a=CONST - │ render 0 1 · · - └── scan · · (k[omitted], v[omitted]) k!=NULL; key(k) -· table kv@primary · · -· spans ALL · · - -# Propagation through DISTINCT. -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT v FROM kv ----- -distinct · · (v) weak-key(v) - └── render · · (v) · - │ render 0 test.public.kv.v · · - └── scan · · (k[omitted], v) k!=NULL; key(k) -· table kv@primary · · -· spans ALL · · - -# Propagation through INSERT. -query TTTTT -EXPLAIN (VERBOSE) INSERT INTO kv(k, v) SELECT 1 AS a, 2 AS b FROM (SELECT 3 AS x, 4 AS y) ----- -count · · () · - └── insert · · () · - │ into kv(k, v) · · - │ strategy inserter · · - └── render · · (a, b) a=CONST; b=CONST - │ render 0 1 · · - │ render 1 2 · · - └── render · · (x[omitted], y[omitted]) · - │ render 0 NULL · · - │ render 1 NULL · · - └── emptyrow · · () · - -# Propagation through DELETE. -query TTTTT -EXPLAIN (VERBOSE) DELETE FROM kv WHERE k = 3 ----- -count · · () · - └── delete range · · () · -· from kv · · -· spans /3-/3/# · · - -# Ensure that propagations through a render node removes the renders -# and properly propagates the remaining needed columns. -query TTTTT -EXPLAIN (VERBOSE) SELECT x FROM (SELECT 1 AS x, y FROM (SELECT 2 AS y)) ----- -render · · (x) x=CONST - │ render 0 x · · - └── render · · (x, y[omitted]) x=CONST - │ render 0 1 · · - │ render 1 NULL · · - └── render · · (y[omitted]) · - │ render 0 NULL · · - └── emptyrow · · () · - -query TTTTT -EXPLAIN (VERBOSE) SELECT 1 a FROM (SELECT k+1 AS x, v-2 AS y FROM kv) ----- -render · · (a) a=CONST - │ render 0 1 · · - └── scan · · (k[omitted], v[omitted]) k!=NULL; key(k) -· table kv@primary · · -· spans ALL · · - -statement ok -CREATE TABLE a ("name" string, age int); - -query TTTTT -EXPLAIN (VERBOSE) SELECT count(*) FROM (SELECT "name", age FROM a); ----- -group · · (count) · - │ aggregate 0 count_rows() · · - │ scalar · · · - └── render · · () · - └── render · · (name[omitted], age[omitted]) · - │ render 0 NULL · · - │ render 1 NULL · · - └── scan · · (name[omitted], age[omitted], rowid[hidden,omitted]) rowid!=NULL; key(rowid) -· table a@primary · · -· spans ALL · · - -# Ensure that variables within filter conditions are omitted (not decoded) if -# the filter condition is replaced by an index search. - -statement ok -CREATE TABLE ab (a INT, b INT, PRIMARY KEY (a, b)); - -query TTTTT -EXPLAIN (VERBOSE) SELECT count(*) FROM ab WHERE a=1 ----- -group · · (count) · - │ aggregate 0 count_rows() · · - │ scalar · · · - └── render · · () · - └── scan · · (a[omitted], b[omitted]) a=CONST; b!=NULL; key(b) -· table ab@primary · · -· spans /1-/2 · · diff --git a/pkg/sql/logictest/testdata/planner_test/order_by b/pkg/sql/logictest/testdata/planner_test/order_by deleted file mode 100644 index fd7814521999..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/order_by +++ /dev/null @@ -1,817 +0,0 @@ -# LogicTest: local - -statement ok -CREATE TABLE t ( - a INT PRIMARY KEY, - b INT, - c BOOLEAN -) - -query TTT -EXPLAIN SELECT a, b FROM t ORDER BY b ----- -sort · · - │ order +b - └── render · · - └── scan · · -· table t@primary -· spans ALL - -query TTT -EXPLAIN SELECT a, b FROM t ORDER BY b DESC ----- -sort · · - │ order -b - └── render · · - └── scan · · -· table t@primary -· spans ALL - -query TTT -EXPLAIN SELECT a, b FROM t ORDER BY b LIMIT 2 ----- -limit · · - │ count 2 - └── sort · · - │ order +b - └── render · · - └── scan · · -· table t@primary -· spans ALL - -query TTTTT -EXPLAIN (VERBOSE) SELECT DISTINCT c FROM t ORDER BY b LIMIT 2 ----- -limit · · (c) weak-key(c) - │ count 2 · · - └── distinct · · (c) weak-key(c) - └── sort · · (c) · - │ order +b · · - └── render · · (c, b) · - │ render 0 test.public.t.c · · - │ render 1 test.public.t.b · · - └── scan · · (a[omitted], b, c) a!=NULL; key(a) -· table t@primary · · -· spans ALL · · - -query TTT -EXPLAIN SELECT b FROM t ORDER BY a DESC ----- -nosort · · - │ order -a - └── render · · - └── revscan · · -· table t@primary -· spans ALL - -# Check that LIMIT propagates past nosort nodes. -query TTT -EXPLAIN SELECT b FROM t ORDER BY a LIMIT 1 ----- -limit · · - │ count 1 - └── nosort · · - │ order +a - └── render · · - └── scan · · -· table t@primary -· spans ALL -· limit 1 - -query TTT -EXPLAIN SELECT b FROM t ORDER BY a DESC, b ASC ----- -nosort · · - │ order -a,+b - └── render · · - └── revscan · · -· table t@primary -· spans ALL - -query TTT -EXPLAIN SELECT b FROM t ORDER BY a DESC, b DESC ----- -nosort · · - │ order -a,-b - └── render · · - └── revscan · · -· table t@primary -· spans ALL - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM t ORDER BY (b, t.*) ----- -sort · · (a, b, c) a!=NULL; key(a); +b,+a - │ order +b,+a,+c · · - └── scan · · (a, b, c) a!=NULL; key(a) -· table t@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM t ORDER BY (b, a), c ----- -sort · · (a, b, c) a!=NULL; key(a); +b,+a - │ order +b,+a,+c · · - └── scan · · (a, b, c) a!=NULL; key(a) -· table t@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM t ORDER BY b, (a, c) ----- -sort · · (a, b, c) a!=NULL; key(a); +b,+a - │ order +b,+a,+c · · - └── scan · · (a, b, c) a!=NULL; key(a) -· table t@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM t ORDER BY (b, (a, c)) ----- -sort · · (a, b, c) a!=NULL; key(a); +b,+a - │ order +b,+a,+c · · - └── scan · · (a, b, c) a!=NULL; key(a) -· table t@primary · · -· spans ALL · · - -# Check that sort is skipped if the ORDER BY clause is constant. -query TTT -EXPLAIN SELECT * FROM t ORDER BY 1+2 ----- -nosort · · - │ order +"?column?" - └── render · · - └── scan · · -· table t@primary -· spans ALL - -query TTT -EXPLAIN SELECT 1, * FROM t ORDER BY 1 ----- -render · · - └── scan · · -· table t@primary -· spans ALL - -query TTT -EXPLAIN SELECT * FROM t ORDER BY length('abc') ----- -nosort · · - │ order +length - └── render · · - └── scan · · -· table t@primary -· spans ALL - -# Check that the sort key reuses the existing render. -query TTTTT -EXPLAIN (VERBOSE) SELECT b+2 AS c FROM t ORDER BY b+2 ----- -sort · · (c) +c - │ order +c · · - └── render · · (c) · - │ render 0 test.public.t.b + 2 · · - └── scan · · (a[omitted], b, c[omitted]) a!=NULL; key(a) -· table t@primary · · -· spans ALL · · - -# Check that the sort picks up a renamed render properly. -query TTTTT -EXPLAIN (VERBOSE) SELECT b+2 AS y FROM t ORDER BY y ----- -sort · · (y) +y - │ order +y · · - └── render · · (y) · - │ render 0 test.public.t.b + 2 · · - └── scan · · (a[omitted], b, c[omitted]) a!=NULL; key(a) -· table t@primary · · -· spans ALL · · - -statement ok -CREATE TABLE abc ( - a INT, - b INT, - c INT, - d VARCHAR, - PRIMARY KEY (a, b, c), - UNIQUE INDEX bc (b, c), - INDEX ba (b, a), - FAMILY (a, b, c), - FAMILY (d) -) - -statement ok -INSERT INTO abc VALUES (1, 2, 3, 'one'), (4, 5, 6, 'Two') - -statement ok -SET tracing = on,kv,results; SELECT * FROM abc ORDER BY a; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /abc/primary/1/2/3 -> NULL -fetched: /abc/primary/1/2/3/d -> 'one' -fetched: /abc/primary/4/5/6 -> NULL -fetched: /abc/primary/4/5/6/d -> 'Two' -output row: [1 2 3 'one'] -output row: [4 5 6 'Two'] - -statement ok -SET tracing = on,kv,results; SELECT a, b FROM abc ORDER BY b, a; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /abc/ba/2/1/3 -> NULL -fetched: /abc/ba/5/4/6 -> NULL -output row: [1 2] -output row: [4 5] - -# The non-unique index ba includes column c (required to make the keys unique) -# so the results will already be sorted. -query TTT -EXPLAIN SELECT a, b, c FROM abc ORDER BY b, a, c ----- -render · · - └── scan · · -· table abc@ba -· spans ALL - -# We use the WHERE condition to force the use of index ba. -query TTT -EXPLAIN SELECT a, b, c FROM abc WHERE b > 10 ORDER BY b, a, d ----- -sort · · - │ order +b,+a,+d - └── index-join · · - │ table abc@primary - └── scan · · -· table abc@bc -· spans /11- - -# We cannot have rows with identical values for a,b,c so we don't need to -# sort for d. -query TTT -EXPLAIN SELECT a, b, c, d FROM abc WHERE b > 10 ORDER BY b, a, c, d ----- -index-join · · - │ table abc@primary - └── scan · · -· table abc@ba -· spans /11- - -query TTT -EXPLAIN SELECT a, b FROM abc ORDER BY b, c ----- -nosort · · - │ order +b,+c - └── render · · - └── scan · · -· table abc@bc -· spans ALL - -query TTTTT -EXPLAIN (VERBOSE) SELECT a, b FROM abc ORDER BY b, c ----- -nosort · · (a, b) b!=NULL; +b - │ order +b,+c · · - └── render · · (a, b, c) b!=NULL; c!=NULL; key(b,c); +b,+c - │ render 0 test.public.abc.a · · - │ render 1 test.public.abc.b · · - │ render 2 test.public.abc.c · · - └── scan · · (a, b, c, d[omitted]) b!=NULL; c!=NULL; key(b,c); +b,+c -· table abc@bc · · -· spans ALL · · - -query TTT -EXPLAIN SELECT a, b FROM abc ORDER BY b, c, a ----- -nosort · · - │ order +b,+c,+a - └── render · · - └── scan · · -· table abc@bc -· spans ALL - -query TTT -EXPLAIN SELECT a, b FROM abc ORDER BY b, c, a DESC ----- -nosort · · - │ order +b,+c,-a - └── render · · - └── scan · · -· table abc@bc -· spans ALL - -statement ok -SET tracing = on,kv,results; SELECT b, c FROM abc ORDER BY b, c; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /abc/bc/2/3 -> /1 -fetched: /abc/bc/5/6 -> /4 -output row: [2 3] -output row: [5 6] - -statement ok -SET tracing = on,kv,results; SELECT a, b, c FROM abc ORDER BY b; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /abc/bc/2/3 -> /1 -fetched: /abc/bc/5/6 -> /4 -output row: [1 2 3] -output row: [4 5 6] - -statement ok -SET tracing = on,kv,results; SELECT a FROM abc ORDER BY a DESC; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /abc/primary/4/5/6/d -> 'Two' -fetched: /abc/primary/4/5/6 -> NULL -fetched: /abc/primary/1/2/3/d -> 'one' -fetched: /abc/primary/1/2/3 -> NULL -output row: [4] -output row: [1] - -query TTT -EXPLAIN SELECT a FROM abc ORDER BY a DESC ----- -render · · - └── revscan · · -· table abc@primary -· spans ALL - -query TTT -EXPLAIN SELECT c FROM abc WHERE b = 2 ORDER BY c ----- -render · · - └── scan · · -· table abc@bc -· spans /2-/3 - -query TTT -EXPLAIN SELECT c FROM abc WHERE b = 2 ORDER BY c DESC ----- -render · · - └── revscan · · -· table abc@bc -· spans /2-/3 - -# Verify that the ordering of the primary index is still used for the outer sort. -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM (SELECT b, c FROM abc WHERE a=1 ORDER BY a,b) ORDER BY b,c ----- -nosort · · (b, c) b!=NULL; c!=NULL; key(b,c); +b,+c - │ order +b,+c · · - └── render · · (b, c, a[omitted]) a=CONST; b!=NULL; c!=NULL; key(b,c); +b,+c - │ render 0 test.public.abc.b · · - │ render 1 test.public.abc.c · · - │ render 2 NULL · · - └── scan · · (a[omitted], b, c, d[omitted]) a=CONST; b!=NULL; c!=NULL; key(b,c); +b,+c -· table abc@primary · · -· spans /1-/2 · · - -statement ok -CREATE TABLE bar (id INT PRIMARY KEY, baz STRING, UNIQUE INDEX i_bar (baz)) - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM bar ORDER BY baz, id ----- -sort · · (id, baz) weak-key(baz); +baz,+id - │ order +baz,+id · · - └── scan · · (id, baz) weak-key(baz); +baz -· table bar@i_bar · · -· spans ALL · · - -statement ok -CREATE TABLE abcd ( - a INT PRIMARY KEY, - b INT, - c INT, - d INT, - INDEX abc (a, b, c) -) - -# Verify that render expressions after sorts perform correctly. We need the -# rowsort as we're attempting to force a RENDER expression after the first -# ORDER BY, to ensure it renders correctly, but the outer query doesn't -# guarantee that it will preserve the order. - -# The following tests verify we recognize that sorting is not necessary -query TTT -EXPLAIN SELECT a, b, c FROM abcd@abc WHERE (a, b) = (1, 4) ORDER BY c ----- -render · · - └── scan · · -· table abcd@abc -· spans /1/4-/1/5 - -query TTT -EXPLAIN SELECT a, b, c FROM abcd@abc WHERE (a, b) = (1, 4) ORDER BY c, b, a ----- -render · · - └── scan · · -· table abcd@abc -· spans /1/4-/1/5 - -query TTT -EXPLAIN SELECT a, b, c FROM abcd@abc WHERE (a, b) = (1, 4) ORDER BY b, a, c ----- -render · · - └── scan · · -· table abcd@abc -· spans /1/4-/1/5 - -query TTT -EXPLAIN SELECT a, b, c FROM abcd@abc WHERE (a, b) = (1, 4) ORDER BY b, c, a ----- -render · · - └── scan · · -· table abcd@abc -· spans /1/4-/1/5 - -statement ok -CREATE TABLE nan (id INT PRIMARY KEY, x REAL) - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM (SELECT * FROM (VALUES ('a'), ('b'), ('c')) AS c(x) ORDER BY x) ----- -sort · · (x) +x - │ order +x · · - └── values · · (x) · -· size 1 column, 3 rows · · -· row 0, expr 0 'a' · · -· row 1, expr 0 'b' · · -· row 2, expr 0 'c' · · - -query TTT -EXPLAIN SELECT * FROM (VALUES ('a'), ('b'), ('c')) WITH ORDINALITY ORDER BY ordinality ASC ----- -ordinality · · - └── values · · -· size 1 column, 3 rows - -query TTT -EXPLAIN SELECT * FROM (VALUES ('a'), ('b'), ('c')) WITH ORDINALITY ORDER BY ordinality DESC ----- -sort · · - │ order -"ordinality" - └── ordinality · · - └── values · · -· size 1 column, 3 rows - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM (SELECT * FROM (VALUES ('a'), ('b'), ('c')) AS c(x)) WITH ORDINALITY ----- -ordinality · · (x, "ordinality") weak-key("ordinality") - └── values · · (x) · -· size 1 column, 3 rows · · -· row 0, expr 0 'a' · · -· row 1, expr 0 'b' · · -· row 2, expr 0 'c' · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM (SELECT * FROM (VALUES ('a'), ('b'), ('c')) AS c(x) ORDER BY x) WITH ORDINALITY ----- -ordinality · · (x, "ordinality") weak-key("ordinality") - └── sort · · (x) +x - │ order +x · · - └── values · · (x) · -· size 1 column, 3 rows · · -· row 0, expr 0 'a' · · -· row 1, expr 0 'b' · · -· row 2, expr 0 'c' · · - -# Check that the ordering of the source does not propagate blindly to RETURNING. -query TTTTT -EXPLAIN (VERBOSE) INSERT INTO t(a, b) SELECT * FROM (SELECT 1 AS x, 2 AS y) ORDER BY x RETURNING b ----- -render · · (b) · - │ render 0 test.public.t.b · · - └── run · · (a, b, c) · - └── insert · · (a, b, c) · - │ into t(a, b) · · - │ strategy inserter · · - └── render · · (x, y) x=CONST; y=CONST - │ render 0 1 · · - │ render 1 2 · · - └── emptyrow · · () · - -query TTTTT -EXPLAIN (VERBOSE) DELETE FROM t WHERE a = 3 RETURNING b ----- -render · · (b) key() - │ render 0 test.public.t.b · · - └── run · · (a, b, c) a=CONST; key() - └── delete · · (a, b, c) a=CONST; key() - │ from t · · - │ strategy deleter · · - └── scan · · (a, b, c) a=CONST; key() -· table t@primary · · -· spans /3-/3/# · · - -query TTTTT -EXPLAIN (VERBOSE) UPDATE t SET c = TRUE RETURNING b ----- -render · · (b) · - │ render 0 test.public.t.b · · - └── run · · (a, b, c) · - └── update · · (a, b, c) · - │ table t · · - │ set c · · - │ strategy updater · · - └── render · · (a, b, c, bool) bool=CONST; a!=NULL; key(a) - │ render 0 test.public.t.a · · - │ render 1 test.public.t.b · · - │ render 2 test.public.t.c · · - │ render 3 true · · - └── scan · · (a, b, c) a!=NULL; key(a) -· table t@primary · · -· spans ALL · · - -statement ok -CREATE TABLE uvwxyz ( - u INT, - v INT, - w INT, - x INT, - y INT, - z INT, - INDEX ywxz (y, w, x, z, u, v), - INDEX ywz (y, w, z, x) -) - -# Verify that the outer ordering is propagated to index selection and we choose -# the index that avoids any sorting. -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM (SELECT y, w, x FROM uvwxyz WHERE y = 1 ORDER BY w) ORDER BY w, x ----- -render · · (y, w, x) y=CONST; +w,+x - │ render 0 test.public.uvwxyz.y · · - │ render 1 test.public.uvwxyz.w · · - │ render 2 test.public.uvwxyz.x · · - └── scan · · (u[omitted], v[omitted], w, x, y, z[omitted], rowid[hidden,omitted]) y=CONST; rowid!=NULL; weak-key(u,v,w,x,z,rowid); +w,+x -· table uvwxyz@ywxz · · -· spans /1-/2 · · - - -statement ok -CREATE TABLE blocks ( - block_id INT, - writer_id STRING, - block_num INT, - raw_bytes BYTES, - PRIMARY KEY (block_id, writer_id, block_num) -) - -# Test that ordering goes "through" a renderNode that has a duplicate render of -# an order-by column (#13696). -query TTTTT -EXPLAIN (VERBOSE) SELECT block_id,writer_id,block_num,block_id FROM blocks ORDER BY block_id, writer_id, block_num LIMIT 1 ----- -limit · · (block_id, writer_id, block_num, block_id) block_id=block_id; block_id!=NULL; writer_id!=NULL; block_num!=NULL; key(block_id,writer_id,block_num); +block_id,+writer_id,+block_num - │ count 1 · · - └── render · · (block_id, writer_id, block_num, block_id) block_id=block_id; block_id!=NULL; writer_id!=NULL; block_num!=NULL; key(block_id,writer_id,block_num); +block_id,+writer_id,+block_num - │ render 0 test.public.blocks.block_id · · - │ render 1 test.public.blocks.writer_id · · - │ render 2 test.public.blocks.block_num · · - │ render 3 test.public.blocks.block_id · · - └── scan · · (block_id, writer_id, block_num, raw_bytes[omitted]) block_id!=NULL; writer_id!=NULL; block_num!=NULL; key(block_id,writer_id,block_num); +block_id,+writer_id,+block_num -· table blocks@primary · · -· spans ALL · · -· limit 1 · · - -statement ok -CREATE TABLE foo(a INT, b CHAR) - -# Check that sort by ordinal picks up the existing render. -query TTTTT -EXPLAIN (VERBOSE) SELECT b, a FROM foo ORDER BY @1 ----- -sort · · (b, a) +a - │ order +a · · - └── render · · (b, a) · - │ render 0 test.public.foo.b · · - │ render 1 test.public.foo.a · · - └── scan · · (a, b, rowid[hidden,omitted]) rowid!=NULL; key(rowid) -· table foo@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT b, a FROM foo ORDER BY @2 ----- -sort · · (b, a) +b - │ order +b · · - └── render · · (b, a) · - │ render 0 test.public.foo.b · · - │ render 1 test.public.foo.a · · - └── scan · · (a, b, rowid[hidden,omitted]) rowid!=NULL; key(rowid) -· table foo@primary · · -· spans ALL · · - -# ------------------------------------------------------------------------------ -# Check star expansion in ORDER BY. -# ------------------------------------------------------------------------------ -statement ok -CREATE TABLE a(x, y) AS VALUES (1, 1), (2, 2) - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT * FROM a ORDER BY a.* -] ----- -sort · · - │ order +x,+y - └── render · · - │ render 0 test.public.a.x - │ render 1 test.public.a.y - └── scan · · -· table a@primary -· spans ALL - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT * FROM a ORDER BY (a.*) -] ----- -sort · · - │ order +x,+y - └── render · · - │ render 0 test.public.a.x - │ render 1 test.public.a.y - └── scan · · -· table a@primary -· spans ALL - -# ------------------------------------------------------------------------------ -# ORDER BY INDEX test cases. -# ------------------------------------------------------------------------------ -subtest order_by_index - -statement ok -CREATE TABLE kv(k INT PRIMARY KEY, v INT); CREATE INDEX foo ON kv(v DESC) - -query TTTTT -EXPLAIN (VERBOSE) SELECT v FROM kv ORDER BY PRIMARY KEY kv ----- -nosort · · (v) · - │ order +k · · - └── render · · (v, k) k!=NULL; key(k); +k - │ render 0 test.public.kv.v · · - │ render 1 test.public.kv.k · · - └── scan · · (k, v) k!=NULL; key(k); +k -· table kv@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT v FROM kv ORDER BY PRIMARY KEY kv ASC ----- -nosort · · (v) · - │ order +k · · - └── render · · (v, k) k!=NULL; key(k); +k - │ render 0 test.public.kv.v · · - │ render 1 test.public.kv.k · · - └── scan · · (k, v) k!=NULL; key(k); +k -· table kv@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT v FROM kv ORDER BY PRIMARY KEY kv DESC ----- -nosort · · (v) · - │ order -k · · - └── render · · (v, k) k!=NULL; key(k); -k - │ render 0 test.public.kv.v · · - │ render 1 test.public.kv.k · · - └── revscan · · (k, v) k!=NULL; key(k); -k -· table kv@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT k FROM kv ORDER BY v, PRIMARY KEY kv, v-2 ----- -sort · · (k) k!=NULL - │ order +v,+k,+"?column?" · · - └── render · · (k, v, "?column?") k!=NULL; weak-key(k,v); +v - │ render 0 test.public.kv.k · · - │ render 1 test.public.kv.v · · - │ render 2 test.public.kv.v - 2 · · - └── revscan · · (k, v) k!=NULL; weak-key(k,v); +v -· table kv@foo · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT k FROM kv ORDER BY INDEX kv@foo ----- -nosort · · (k) k!=NULL - │ order -v,+k · · - └── scan · · (k, v) k!=NULL; weak-key(k,v); -v,+k -· table kv@foo · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT k FROM kv ORDER BY INDEX kv@foo ASC ----- -nosort · · (k) k!=NULL - │ order -v,+k · · - └── scan · · (k, v) k!=NULL; weak-key(k,v); -v,+k -· table kv@foo · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT k FROM kv ORDER BY INDEX kv@foo DESC ----- -nosort · · (k) k!=NULL - │ order +v,-k · · - └── revscan · · (k, v) k!=NULL; weak-key(k,v); +v,-k -· table kv@foo · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT k FROM kv ORDER BY INDEX kv@foo, k ----- -nosort · · (k) k!=NULL - │ order -v,+k · · - └── scan · · (k, v) k!=NULL; weak-key(k,v); -v,+k -· table kv@foo · · -· spans ALL · · - -# Check the syntax can be used with joins. -# -# Note: an ORDER BY INDEX clause on the result of the join -# does not imply use of that index by the underlying scan. -# - -query TTTTT -EXPLAIN (VERBOSE) SELECT k FROM kv JOIN (VALUES (1,2)) AS z(a,b) ON kv.k = z.a ORDER BY INDEX kv@foo ----- -sort · · (k) · - │ order -v,+k · · - └── render · · (k, v) · - │ render 0 test.public.kv.k · · - │ render 1 test.public.kv.v · · - └── hash-join · · (k, v, a[omitted], b[omitted]) · - │ type inner · · - │ equality (k) = (a) · · - ├── scan · · (k, v) k!=NULL; key(k) - │ table kv@primary · · - │ spans ALL · · - └── values · · (column1, column2[omitted]) · -· size 2 columns, 1 row · · -· row 0, expr 0 1 · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT k FROM kv a NATURAL JOIN kv ORDER BY INDEX kv@foo ----- -sort · · (k) k!=NULL; key(k) - │ order -v,+k · · - └── render · · (k, v, k) k=k; k!=NULL; v!=NULL; key(k) - │ render 0 a.k · · - │ render 1 test.public.kv.v · · - │ render 2 test.public.kv.k · · - └── merge-join · · (k, v[omitted], k, v) k=k; v=v; k!=NULL; v!=NULL; key(k) - │ type inner · · - │ equality (k, v) = (k, v) · · - │ mergeJoinOrder +"(k=k)" · · - ├── scan · · (k, v) k!=NULL; key(k); +k - │ table kv@primary · · - │ spans ALL · · - └── scan · · (k, v) k!=NULL; key(k); +k -· table kv@primary · · -· spans ALL · · - -# The underlying index can be forced manually, of course. -query TTTTT -EXPLAIN (VERBOSE) SELECT k FROM kv@foo a NATURAL JOIN kv@foo ORDER BY INDEX kv@foo ----- -nosort · · (k) k!=NULL - │ order -v,+k · · - └── render · · (k, v, k) k=k; k!=NULL; v!=NULL; -v,+k - │ render 0 a.k · · - │ render 1 test.public.kv.v · · - │ render 2 test.public.kv.k · · - └── merge-join · · (k, v[omitted], k, v) k=k; v=v; k!=NULL; v!=NULL; -v,+k - │ type inner · · - │ equality (k, v) = (k, v) · · - │ mergeJoinOrder -"(v=v)",+"(k=k)" · · - ├── scan · · (k, v) k!=NULL; weak-key(k,v); -v,+k - │ table kv@foo · · - │ spans ALL · · - └── scan · · (k, v) k!=NULL; weak-key(k,v); -v,+k -· table kv@foo · · -· spans ALL · · diff --git a/pkg/sql/logictest/testdata/planner_test/ordinal_references b/pkg/sql/logictest/testdata/planner_test/ordinal_references deleted file mode 100644 index 773750d1b9ca..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/ordinal_references +++ /dev/null @@ -1,43 +0,0 @@ -# LogicTest: local - -statement ok -CREATE TABLE foo(a INT, b CHAR) - -# Check that sort by ordinal picks up the existing render. -query TTTTT -EXPLAIN (VERBOSE) SELECT b, a FROM foo ORDER BY @1 ----- -sort · · (b, a) +a - │ order +a · · - └── render · · (b, a) · - │ render 0 test.public.foo.b · · - │ render 1 test.public.foo.a · · - └── scan · · (a, b, rowid[hidden,omitted]) rowid!=NULL; key(rowid) -· table foo@primary · · -· spans ALL · · - -# Check that GROUP BY picks up column ordinals. -query TTTTT -EXPLAIN (VERBOSE) SELECT min(a) AS m FROM foo GROUP BY @1 ----- -group · · (m) · - │ aggregate 0 min(?column?) · · - │ group by ?column? · · - └── render · · ("?column?") · - │ render 0 test.public.foo.a · · - └── scan · · (a, b[omitted], rowid[hidden,omitted]) rowid!=NULL; key(rowid) -· table foo@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT min(a) AS m FROM foo GROUP BY @2 ----- -group · · (m) · - │ aggregate 0 min(a) · · - │ group by ?column? · · - └── render · · ("?column?", a) · - │ render 0 test.public.foo.b · · - │ render 1 test.public.foo.a · · - └── scan · · (a, b, rowid[hidden,omitted]) rowid!=NULL; key(rowid) -· table foo@primary · · -· spans ALL · · diff --git a/pkg/sql/logictest/testdata/planner_test/ordinality b/pkg/sql/logictest/testdata/planner_test/ordinality deleted file mode 100644 index 0203df1a0a8c..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/ordinality +++ /dev/null @@ -1,34 +0,0 @@ -# LogicTest: local - -statement ok -CREATE TABLE foo (x CHAR PRIMARY KEY) - -# Show that the primary key is used under ordinalityNode. -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM (SELECT * FROM foo WHERE x > 'a') WITH ORDINALITY ----- -ordinality · · (x, "ordinality") x!=NULL; key(x); weak-key("ordinality") - └── scan · · (x) x!=NULL; key(x) -· table foo@primary · · -· spans /"a\x00"- · · - -# Show that the primary key cannot be used with a PK predicate -# outside of ordinalityNode. -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM foo WITH ORDINALITY WHERE x > 'a' ----- -filter · · (x, "ordinality") x!=NULL; key(x); weak-key("ordinality") - │ filter test.public.foo.x > 'a' · · - └── ordinality · · (x, "ordinality") x!=NULL; key(x); weak-key("ordinality") - └── scan · · (x) x!=NULL; key(x) -· table foo@primary · · -· spans ALL · · - -# Regression test for #31911: ensure the ordinality properties are set correctly. -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM (SELECT * FROM system.role_members WHERE role = 'a' AND member = 'b') WITH ORDINALITY ----- -ordinality · · (role, member, "isAdmin", "ordinality") role=CONST; member=CONST; key(); weak-key("ordinality") - └── scan · · (role, member, "isAdmin") role=CONST; member=CONST; key() -· table role_members@primary · · -· spans /"a"/"b"-/"a"/"b"/# · · diff --git a/pkg/sql/logictest/testdata/planner_test/physical_props b/pkg/sql/logictest/testdata/planner_test/physical_props deleted file mode 100644 index 1060bc3f4c87..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/physical_props +++ /dev/null @@ -1,213 +0,0 @@ -# LogicTest: local - -statement ok -CREATE TABLE abcd (a INT PRIMARY KEY, b INT, c INT, d INT) - -query TTTTT colnames -EXPLAIN (VERBOSE) SELECT * FROM abcd WHERE b = c ----- -tree field description columns ordering -scan · · (a, b, c, d) b=c; a!=NULL; b!=NULL; c!=NULL; key(a) -· table abcd@primary · · -· spans ALL · · -· filter b = c · · - -query TTTTT colnames -EXPLAIN (VERBOSE) SELECT * FROM abcd WHERE a = 1 ----- -tree field description columns ordering -scan · · (a, b, c, d) a=CONST; key() -· table abcd@primary · · -· spans /1-/1/# · · - -query TTTTT colnames -EXPLAIN (VERBOSE) SELECT * FROM abcd WHERE b = 1 ----- -tree field description columns ordering -scan · · (a, b, c, d) b=CONST; a!=NULL; key(a) -· table abcd@primary · · -· spans ALL · · -· filter b = 1 · · - -query TTTTT colnames -EXPLAIN (VERBOSE) SELECT * FROM abcd WHERE a = 1 AND b = 1 ----- -tree field description columns ordering -scan · · (a, b, c, d) a=CONST; b=CONST; key() -· table abcd@primary · · -· spans /1-/1/# · · -· filter b = 1 · · - -query TTTTT colnames -EXPLAIN (VERBOSE) SELECT * FROM abcd WHERE a = 1 AND b = d ----- -tree field description columns ordering -scan · · (a, b, c, d) b=d; a=CONST; b!=NULL; d!=NULL; key() -· table abcd@primary · · -· spans /1-/1/# · · -· filter b = d · · - -query TTTTT colnames -EXPLAIN (VERBOSE) SELECT * FROM abcd WHERE a = b AND b = c ----- -tree field description columns ordering -scan · · (a, b, c, d) a=b=c; a!=NULL; b!=NULL; c!=NULL; key(a) -· table abcd@primary · · -· spans ALL · · -· filter (a = b) AND (b = c) · · - -query TTTTT colnames -EXPLAIN (VERBOSE) SELECT * FROM abcd WHERE a = b AND b = c AND c = 1 ----- -tree field description columns ordering -scan · · (a, b, c, d) a=b=c; a=CONST; b!=NULL; c!=NULL; key() -· table abcd@primary · · -· spans ALL · · -· filter ((a = b) AND (b = c)) AND (c = 1) · · - -query TTTTT colnames -EXPLAIN (VERBOSE) SELECT * FROM (VALUES (1, 2, 3), (4, 5, 6)) AS x(a,b,c) WHERE a = 1 ----- -tree field description columns ordering -filter · · (a, b, c) a=CONST - │ filter x.a = 1 · · - └── values · · (a, b, c) · -· size 3 columns, 2 rows · · -· row 0, expr 0 1 · · -· row 0, expr 1 2 · · -· row 0, expr 2 3 · · -· row 1, expr 0 4 · · -· row 1, expr 1 5 · · -· row 1, expr 2 6 · · - -query TTTTT colnames -EXPLAIN (VERBOSE) SELECT * FROM (VALUES (1, 2, 3), (4, 5, 6)) AS x(a,b,c) WHERE a = b ----- -tree field description columns ordering -filter · · (a, b, c) a=b; a!=NULL; b!=NULL - │ filter x.a = x.b · · - └── values · · (a, b, c) · -· size 3 columns, 2 rows · · -· row 0, expr 0 1 · · -· row 0, expr 1 2 · · -· row 0, expr 2 3 · · -· row 1, expr 0 4 · · -· row 1, expr 1 5 · · -· row 1, expr 2 6 · · - -query TTTTT colnames -EXPLAIN (VERBOSE) SELECT * FROM (VALUES (1, 2, 3), (4, 5, 6)) AS x(a,b,c) WHERE a = b AND b = 1 ----- -tree field description columns ordering -filter · · (a, b, c) a=b; a=CONST; b!=NULL - │ filter (x.a = x.b) AND (x.b = 1) · · - └── values · · (a, b, c) · -· size 3 columns, 2 rows · · -· row 0, expr 0 1 · · -· row 0, expr 1 2 · · -· row 0, expr 2 3 · · -· row 1, expr 0 4 · · -· row 1, expr 1 5 · · -· row 1, expr 2 6 · · - - -statement ok -CREATE TABLE efg (e INT PRIMARY KEY, f INT, g INT) - -query TTTTT colnames -EXPLAIN (VERBOSE) SELECT * FROM abcd JOIN efg ON a=e AND a=1 AND f=g ----- -tree field description columns ordering -merge-join · · (a, b, c, d, e, f, g) a=e; f=g; a=CONST; key() - │ type inner · · - │ equality (a) = (e) · · - │ mergeJoinOrder +"(a=e)" · · - ├── scan · · (a, b, c, d) a=CONST; key() - │ table abcd@primary · · - │ spans /1-/1/# · · - └── scan · · (e, f, g) f=g; e=CONST; f!=NULL; g!=NULL; key() -· table efg@primary · · -· spans /1-/1/# · · -· filter f = g · · - -query TTTTT colnames -EXPLAIN (VERBOSE) SELECT * FROM abcd JOIN efg ON a=e AND b=1 AND f=g ----- -tree field description columns ordering -merge-join · · (a, b, c, d, e, f, g) a=e; f=g; b=CONST; a!=NULL; key(a) - │ type inner · · - │ equality (a) = (e) · · - │ mergeJoinOrder +"(a=e)" · · - ├── scan · · (a, b, c, d) b=CONST; a!=NULL; key(a); +a - │ table abcd@primary · · - │ spans ALL · · - │ filter b = 1 · · - └── scan · · (e, f, g) f=g; e!=NULL; f!=NULL; g!=NULL; key(e); +e -· table efg@primary · · -· spans ALL · · -· filter f = g · · - -query TTTTT colnames -EXPLAIN (VERBOSE) SELECT * FROM abcd JOIN efg ON a=e ----- -tree field description columns ordering -merge-join · · (a, b, c, d, e, f, g) a=e; a!=NULL; key(a) - │ type inner · · - │ equality (a) = (e) · · - │ mergeJoinOrder +"(a=e)" · · - ├── scan · · (a, b, c, d) a!=NULL; key(a); +a - │ table abcd@primary · · - │ spans ALL · · - └── scan · · (e, f, g) e!=NULL; key(e); +e -· table efg@primary · · -· spans ALL · · - -# Verify keys don't get propagated when not appropriate. -query TTTTT colnames -EXPLAIN (VERBOSE) SELECT * FROM abcd JOIN efg ON a=f ----- -tree field description columns ordering -hash-join · · (a, b, c, d, e, f, g) · - │ type inner · · - │ equality (a) = (f) · · - ├── scan · · (a, b, c, d) a!=NULL; key(a) - │ table abcd@primary · · - │ spans ALL · · - └── scan · · (e, f, g) e!=NULL; key(e) -· table efg@primary · · -· spans ALL · · - -# Verify we retain all keys when appropriate. -query TTTTT colnames -EXPLAIN (VERBOSE) SELECT * FROM abcd JOIN (SELECT * FROM efg WITH ORDINALITY) ON a=e ----- -tree field description columns ordering -merge-join · · (a, b, c, d, e, f, g, "ordinality") a=e; a!=NULL; key(a); weak-key("ordinality") - │ type inner · · - │ equality (a) = (e) · · - │ mergeJoinOrder +"(a=e)" · · - ├── scan · · (a, b, c, d) a!=NULL; key(a); +a - │ table abcd@primary · · - │ spans ALL · · - └── ordinality · · (e, f, g, "ordinality") e!=NULL; key(e); weak-key("ordinality"); +e - └── scan · · (e, f, g) e!=NULL; key(e); +e -· table efg@primary · · -· spans ALL · · - -# Regression test for 24500 -statement ok -CREATE TABLE abc (a INT, b INT, c INT); -CREATE UNIQUE INDEX ON abc (a, b, c); -SELECT true FROM abc WHERE b=1 and b=c - -# a should be a weak key. -query TTTTT colnames -EXPLAIN (VERBOSE) SELECT true FROM abc WHERE b=1 and b=c; ----- -tree field description columns ordering -render · · (bool) bool=CONST - │ render 0 true · · - └── scan · · (a[omitted], b, c, rowid[hidden,omitted]) b=c; b=CONST; c!=NULL; weak-key(a) -· table abc@abc_a_b_c_key · · -· spans ALL · · -· filter (b = 1) AND (b = c) · · diff --git a/pkg/sql/logictest/testdata/planner_test/planning_errors b/pkg/sql/logictest/testdata/planner_test/planning_errors deleted file mode 100644 index 2a2ae1c489a5..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/planning_errors +++ /dev/null @@ -1,7 +0,0 @@ -# LogicTest: local - -# Check that plans that fail during expansion/optimization do not cause -# memory leaks. #17274 - -statement error pgcode 42P01 relation "nonexistent" does not exist -SELECT * FROM [SHOW JOBS], [SHOW CREATE TABLE nonexistent]; diff --git a/pkg/sql/logictest/testdata/planner_test/rows_from b/pkg/sql/logictest/testdata/planner_test/rows_from deleted file mode 100644 index 03b9f758e73a..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/rows_from +++ /dev/null @@ -1,48 +0,0 @@ -# LogicTest: local - -subtest rows_from_multiple_srfs - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM ROWS FROM(information_schema._pg_expandarray(array[5,6,7]), generate_series(1,4)) ----- -project set · · (x, n, generate_series) · - │ render 0 information_schema._pg_expandarray(ARRAY[5,6,7]) · · - │ render 1 generate_series(1, 4) · · - └── emptyrow · · () · - -subtest rows_from_scalar_func - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM ROWS FROM(generate_series(1,4), greatest(1,2,4,5)) ----- -project set · · (generate_series, "greatest") · - │ render 0 generate_series(1, 4) · · - │ render 1 5 · · - └── emptyrow · · () · - - -subtest rows_from_scalar_op - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM ROWS FROM(generate_series(1,4), NULLIF(1,2)) ----- -project set · · (generate_series, "NULLIF(1, 2)") · - │ render 0 generate_series(1, 4) · · - │ render 1 1 · · - └── emptyrow · · () · - -subtest rows_from_simplify - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM ROWS FROM (generate_series(1,3)) ----- -project set · · (generate_series) · - │ render 0 generate_series(1, 3) · · - └── emptyrow · · () · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM ROWS FROM (COALESCE(1,2,3)) ----- -project set · · ("COALESCE(1, 2, 3)") · - │ render 0 1 · · - └── emptyrow · · () · diff --git a/pkg/sql/logictest/testdata/planner_test/select b/pkg/sql/logictest/testdata/planner_test/select deleted file mode 100644 index de1ad9e42eeb..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/select +++ /dev/null @@ -1,658 +0,0 @@ -# LogicTest: local - -# Prepare a trace to be inspected below. - -statement ok -SET tracing = on; BEGIN; SELECT 1; COMMIT; SELECT 2; SET tracing = off - -# Inspect the trace: we exclude messages containing newlines as these -# may contain non-deterministic txn object descriptions. -# This also checks that the span column properly reports separate -# SQL transactions. -# We replace the command position because the values depend on exactly -# how many commands we ran in the session. -query ITT -SELECT - span, regexp_replace(message, 'pos:[0-9]*', 'pos:?'), operation -FROM [SHOW TRACE FOR SESSION] -WHERE message LIKE '%SPAN START%' OR message LIKE '%pos%executing%'; ----- -0 === SPAN START: session recording === session recording -1 === SPAN START: exec stmt === exec stmt -1 [NoTxn pos:?] executing ExecStmt: BEGIN TRANSACTION exec stmt -2 === SPAN START: sql txn === sql txn -3 === SPAN START: exec stmt === exec stmt -3 [Open pos:?] executing ExecStmt: SELECT 1 exec stmt -4 === SPAN START: consuming rows === consuming rows -5 === SPAN START: flow === flow -13 === SPAN START: values === -cockroach.processorid: 0 values -6 === SPAN START: exec stmt === exec stmt -6 [Open pos:?] executing ExecStmt: COMMIT TRANSACTION exec stmt -7 === SPAN START: exec stmt === exec stmt -7 [NoTxn pos:?] executing ExecStmt: SELECT 2 exec stmt -8 === SPAN START: sql txn === sql txn -9 === SPAN START: exec stmt === exec stmt -9 [Open pos:?] executing ExecStmt: SELECT 2 exec stmt -10 === SPAN START: consuming rows === consuming rows -11 === SPAN START: flow === flow -14 === SPAN START: values === -cockroach.processorid: 0 values -12 === SPAN START: exec stmt === exec stmt -12 [NoTxn pos:?] executing ExecStmt: SET TRACING = off exec stmt - -# ------------------------------------------------------------------------------ -# Test with storing columns. -# ------------------------------------------------------------------------------ -statement ok -CREATE TABLE t ( - a INT PRIMARY KEY, - b INT, - c INT, - d INT, - INDEX b_idx (b) STORING (c, d), - UNIQUE INDEX c_idx (c) STORING (b, d) -) - -query TTBITTBB colnames -SHOW INDEXES FROM t ----- -table_name index_name non_unique seq_in_index column_name direction storing implicit -t primary false 1 a ASC false false -t b_idx true 1 b ASC false false -t b_idx true 2 c N/A true false -t b_idx true 3 d N/A true false -t b_idx true 4 a ASC false true -t c_idx false 1 c ASC false false -t c_idx false 2 b N/A true false -t c_idx false 3 d N/A true false -t c_idx false 4 a ASC false true - -statement ok -INSERT INTO t VALUES (1, 2, 3, 4) - -statement ok -SET tracing = on,kv,results; SELECT * FROM t@b_idx; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/b_idx/2/1/c/d -> /3/4 -output row: [1 2 3 4] - -statement ok -SET tracing = on,kv,results; SELECT * FROM t@c_idx; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/c_idx/3/b/d -> /2/4 -output row: [1 2 3 4] - -# Test index backfill for UNIQUE and non-UNIQUE indexes with STORING columns. - -statement ok -CREATE INDEX d_idx ON t (d) STORING (b) - -statement ok -SET tracing = on,kv,results; SELECT a, b, d FROM t@d_idx; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/d_idx/4/1/b -> /2 -output row: [1 2 4] - -statement ok -CREATE UNIQUE INDEX a_idx ON t (a) STORING (b) - -statement ok -SET tracing = on,kv,results; SELECT a, b FROM t@a_idx; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/a_idx/1/b -> /2 -output row: [1 2] - -# Test that unspecified storing values are treated like NULL values. -statement ok -INSERT INTO t (a) VALUES (2) - -statement ok -INSERT INTO t VALUES (3) - -statement ok -SET tracing = on,kv,results; SELECT * FROM t@b_idx; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/b_idx/NULL/2 -> NULL -fetched: /t/b_idx/NULL/3 -> NULL -fetched: /t/b_idx/2/1/c/d -> /3/4 -output row: [2 NULL NULL NULL] -output row: [3 NULL NULL NULL] -output row: [1 2 3 4] - -# Regression test for #14601. - -statement ok -CREATE TABLE t14601 (a STRING, b BOOL) - -statement ok -CREATE INDEX i14601 ON t14601 (a) STORING (b) - -query TTT -EXPLAIN SELECT a FROM t14601 ORDER BY a ----- -render · · - └── scan · · -· table t14601@i14601 -· spans ALL - -# Updates were broken too. - -statement ok -CREATE TABLE t14601a ( - a STRING, - b BOOL, - c INT, - FAMILY f1 (a), - FAMILY f2 (b), - FAMILY f3 (c) -) - -statement ok -CREATE INDEX i14601a ON t14601a (a) STORING (b, c) - -query TTT -EXPLAIN SELECT a, b FROM t14601a ORDER BY a ----- -render · · - └── scan · · -· table t14601a@i14601a -· spans ALL - -statement ok -DROP index i14601a - -statement ok -CREATE UNIQUE INDEX i14601a ON t14601a (a) STORING (b) - -query TTT -EXPLAIN SELECT a, b FROM t14601a ORDER BY a ----- -render · · - └── scan · · -· table t14601a@i14601a -· spans ALL - -statement ok -DROP TABLE t; DROP TABLE t14601; DROP TABLE t14601a - -# ------------------------------------------------------------------------------ -# Ensure that correct index is used when indexed column has collation. -# ------------------------------------------------------------------------------ -statement ok -CREATE TABLE coll ( - a STRING COLLATE da, - b INT, - c BOOL, - PRIMARY KEY (a, b), - INDEX (b, a) STORING (c) -) - -query TTT -EXPLAIN SELECT a, b FROM coll ORDER BY a, b ----- -render · · - └── scan · · -· table coll@primary -· spans ALL - -query TTT -EXPLAIN SELECT b, a FROM coll ORDER BY b, a ----- -render · · - └── scan · · -· table coll@coll_b_a_idx -· spans ALL - -# ------------------------------------------------------------------------------ -# Ensure correct index is used when indexed column is computed. -# ------------------------------------------------------------------------------ -statement ok -CREATE TABLE computed ( - k INT PRIMARY KEY, - a JSON, - b TEXT AS (a->>'q') STORED, - INDEX (b) -) - -query TTT -EXPLAIN SELECT b FROM computed ORDER BY b ----- -render · · - └── scan · · -· table computed@computed_b_idx -· spans ALL - -# ------------------------------------------------------------------------------ -# Ensure that Select filter probes expected date/time key/values that are in -# different column families. -# ------------------------------------------------------------------------------ -statement ok -CREATE TABLE dt ( - a TIMESTAMP PRIMARY KEY, - b DATE, - c INTERVAL, - UNIQUE (b), - UNIQUE (c), - FAMILY (a), - FAMILY (b), - FAMILY (c) -) - -statement ok -INSERT INTO dt VALUES - ('2015-08-30 03:34:45.34567', '2015-08-30', '34h2s'), - ('2015-08-25 04:45:45.53453', '2015-08-25', '2h45m2s234ms'), - ('2015-08-29 23:10:09.98763', '2015-08-29', '234h45m2s234ms') - -statement ok -SET tracing = on,kv,results; SELECT * FROM dt WHERE a = '2015-08-25 04:45:45.53453+02:00'::timestamp; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /dt/primary/'2015-08-25 04:45:45.53453+00:00' -> NULL -fetched: /dt/primary/'2015-08-25 04:45:45.53453+00:00'/b -> '2015-08-25' -fetched: /dt/primary/'2015-08-25 04:45:45.53453+00:00'/c -> '02:45:02.234' -output row: ['2015-08-25 04:45:45.53453+00:00' '2015-08-25' '02:45:02.234'] - -statement ok -SET tracing = on,kv,results; SELECT b FROM dt WHERE b < '2015-08-29'::date; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /dt/dt_b_key/'2015-08-25' -> /'2015-08-25 04:45:45.53453+00:00' -output row: ['2015-08-25'] - -statement ok -SET tracing = on,kv,results; SELECT c FROM dt WHERE c < '234h45m2s234ms'::interval; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /dt/dt_c_key/'02:45:02.234' -> /'2015-08-25 04:45:45.53453+00:00' -fetched: /dt/dt_c_key/'34:00:02' -> /'2015-08-30 03:34:45.34567+00:00' -output row: ['02:45:02.234'] -output row: ['34:00:02'] - -# ------------------------------------------------------------------------------ -# Ensure that decimal values result in correct scan spans. -# ------------------------------------------------------------------------------ -statement ok -CREATE TABLE dec (d decimal, v decimal(3, 1), primary key (d, v)) - -query TTT -EXPLAIN SELECT * FROM dec WHERE d IS NaN and v IS NaN ----- -scan · · -· table dec@primary -· spans /NaN/NaN-/NaN/NaN/# - -# The NaN suffix is decimalNaNDesc, not decimalNaN(Asc). -query TTT -EXPLAIN SELECT * FROM dec WHERE d = 'Infinity' and v = 'Infinity' ----- -scan · · -· table dec@primary -· spans /Infinity/Infinity-/Infinity/Infinity/# - -query TTT -EXPLAIN SELECT * FROM dec WHERE d = '-Infinity' and v = '-Infinity' ----- -scan · · -· table dec@primary -· spans /-Infinity/-Infinity-/-Infinity/-Infinity/# - -# Test composite encoding of DECIMAL type in indexes. -statement ok -CREATE TABLE c ( - a INT PRIMARY KEY, - b DECIMAL(2,2), - INDEX b_idx (b) -) - -statement ok -INSERT INTO c VALUES(1, 0.4) - -# Test that unspecifying b is like specifying NULL. -statement ok -INSERT INTO c (a) VALUES(2) - -statement ok -INSERT INTO c VALUES(3) - -statement ok -SET tracing = on,kv,results; SELECT * FROM c@b_idx; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /c/b_idx/NULL/2 -> NULL -fetched: /c/b_idx/NULL/3 -> NULL -fetched: /c/b_idx/0.4/1/b -> /0.40 -output row: [2 NULL] -output row: [3 NULL] -output row: [1 0.40] - -# ------------------------------------------------------------------------------ -# Verify that lookups for Decimal NaN use indices when possible: -# - `WHERE d IS NaN` should perform a point lookup. -# - `WHERE d = 'NaN'` should also perform a point lookup. -# - `WHERE isnan(d)` is a function so it can't perform a point lookup. -# ------------------------------------------------------------------------------ -statement ok -CREATE TABLE dec2 (d decimal null, index (d)) - -query TTT -EXPLAIN SELECT * FROM dec2 WHERE d IS NaN ----- -render · · - └── scan · · -· table dec2@dec2_d_idx -· spans /NaN-/-Infinity - -query TTT -EXPLAIN SELECT * FROM dec2 WHERE d = 'NaN' ----- -render · · - └── scan · · -· table dec2@dec2_d_idx -· spans /NaN-/-Infinity - -query TTT -EXPLAIN SELECT * FROM dec2 WHERE isnan(d) ----- -render · · - └── scan · · -· table dec2@dec2_d_idx -· spans ALL -· filter isnan(d) - -# ------------------------------------------------------------------------------ -# Verify that lookups for Float NaN use indices when possible: -# - `WHERE f IS NaN` should perform a point lookup. -# - `WHERE f = 'NaN'` should also perform a point lookup. -# - `WHERE isnan(f)` is a function so it can't perform a point lookup. -# ------------------------------------------------------------------------------ -statement ok -CREATE TABLE flt (f float null, unique index (f)) - -query TTT -EXPLAIN SELECT * FROM flt WHERE f IS NaN ----- -render · · - └── scan · · -· table flt@flt_f_key -· spans /NaN-/NaN/PrefixEnd - -query TTT -EXPLAIN SELECT * FROM flt WHERE f = 'NaN' ----- -render · · - └── scan · · -· table flt@flt_f_key -· spans /NaN-/NaN/PrefixEnd - -query TTT -EXPLAIN SELECT * FROM flt WHERE isnan(f) ----- -render · · - └── scan · · -· table flt@flt_f_key -· spans ALL -· filter isnan(f) - -# ------------------------------------------------------ -# Verify that multi-span point lookups are parallelized. -# ------------------------------------------------------ -statement ok -CREATE TABLE a (a INT PRIMARY KEY, item STRING, price FLOAT, UNIQUE INDEX item (item), UNIQUE INDEX p (price)) - -statement ok -CREATE TABLE b (a INT, b INT, c INT NULL, d INT NULL, PRIMARY KEY (a, b)) - -# No parallel line printed out for single-span selects. -query TTT -EXPLAIN SELECT * FROM a WHERE a = 10 ----- -scan · · -· table a@primary -· spans /10-/10/# - -query TTT -EXPLAIN SELECT * FROM a WHERE a = 10 OR a = 20 ----- -scan · · -· table a@primary -· spans /10-/10/# /20-/20/# -· parallel · - -query TTT -EXPLAIN SELECT * FROM a WHERE a IN (10, 20) ----- -scan · · -· table a@primary -· spans /10-/10/# /20-/20/# -· parallel · - -# Verify that consolidated point spans are still parallelized. -query TTT -EXPLAIN SELECT * FROM a WHERE a in (10, 11) ----- -scan · · -· table a@primary -· spans /10-/11/# -· parallel · - -query TTT -EXPLAIN SELECT * FROM a WHERE a > 10 AND a < 20 ----- -scan · · -· table a@primary -· spans /11-/19/# -· parallel · - -# This ticks all the boxes for parallelization apart from the fact that there -# is no end key in the span. -query TTT -EXPLAIN SELECT * FROM a WHERE a > 10 ----- -scan · · -· table a@primary -· spans /11- - -# Test non-int types. - -# Point queries on non-int types are parallel. -query TTT -EXPLAIN SELECT price FROM a WHERE item IN ('sock', 'ball') ----- -render · · - └── index-join · · - │ table a@primary - └── scan · · -· table a@item -· spans /"ball"-/"ball"/PrefixEnd /"sock"-/"sock"/PrefixEnd -· parallel · - -# Range queries on non-int types are not parallel due to unbounded number of -# results. -query TTT -EXPLAIN SELECT item FROM a WHERE price > 5 AND price < 10 OR price > 20 AND price < 40 ----- -render · · - └── index-join · · - │ table a@primary - └── scan · · -· table a@p -· spans /5.000000000000001-/9.999999999999998/PrefixEnd /20.000000000000004-/39.99999999999999/PrefixEnd -· filter (price < 10.0) OR (price > 20.0) - -# TODO(radu): fix this testcase after #31614 is resolved. There should be no filter left. -query TTT -EXPLAIN SELECT * FROM b WHERE (a = 10 AND b = 10) OR (a = 20 AND b = 20) ----- -scan · · -· table b@primary -· spans /10/10-/10/10/# /20/20-/20/20/# -· parallel · -· filter ((a = 10) AND (b = 10)) OR ((a = 20) AND (b = 20)) - -# This one isn't parallelizable because it's not a point lookup - only part of -# the primary key is specified. -query TTT -EXPLAIN SELECT * FROM b WHERE a = 10 OR a = 20 ----- -scan · · -· table b@primary -· spans /10-/11 /20-/21 - -# This one isn't parallelizable because it has a LIMIT clause. -query TTT -EXPLAIN SELECT * FROM a WHERE a = 10 OR a = 20 LIMIT 1 ----- -limit · · - │ count 1 - └── scan · · -· table a@primary -· spans /10-/10/# /20-/20/# -· limit 1 - -statement ok -CREATE INDEX on b(b) STORING (c) - -# This one isn't parallelizable because its index isn't unique. -query TTT -EXPLAIN SELECT b FROM b WHERE b = 10 OR b = 20 ----- -render · · - └── scan · · -· table b@b_b_idx -· spans /10-/11 /20-/21 - -statement ok -CREATE UNIQUE INDEX on b(c) - -# If the index has nullable values, parallelize only when the spans do not -# specify any nulls. -query TTT -EXPLAIN SELECT c FROM b WHERE c = 10 OR c = 20 ----- -render · · - └── scan · · -· table b@b_c_key -· spans /10-/11 /20-/21 -· parallel · - -query TTT -EXPLAIN SELECT c FROM b WHERE c = 10 OR c < 2 ----- -render · · - └── scan · · -· table b@b_c_key -· spans /!NULL-/2 /10-/11 - -statement ok -CREATE UNIQUE INDEX on b(d DESC) - -# This scan is not parallelizable because the second span has a null in its end -# key. -query TTT -EXPLAIN SELECT d FROM b WHERE d = 10 OR d < 2 ----- -render · · - └── scan · · -· table b@b_d_key -· spans /10-/9 /1-/NULL - -statement ok -CREATE UNIQUE INDEX ON b(c, d) - -# This scan is not parallelizable because although the second column is -# constrained, the first column is null. -# TODO(radu): fix this testcase after #31614 is resolved. There should be no filter left. -query TTT -EXPLAIN SELECT d FROM b WHERE c = 10 AND d = 10 OR c IS NULL AND d > 0 AND d < 2 ----- -render · · - └── scan · · -· table b@b_c_d_key -· spans /NULL/1-/NULL/2 /10/10-/10/11 -· filter ((c = 10) AND (d = 10)) OR ((c IS NULL) AND (d < 2)) - -statement ok -CREATE UNIQUE INDEX on b(b) STORING (c) - -# This one is parallelizable because its index is unique and non-null. -query TTT -EXPLAIN SELECT b FROM b WHERE b = 10 OR b = 20 ----- -render · · - └── scan · · -· table b@b_b_key -· spans /10-/11 /20-/21 -· parallel · - -statement ok -ALTER TABLE a SPLIT AT VALUES(5) - -# Run a select to prime the range cache to simplify the trace below. -statement ok -SELECT * FROM a - -# Make sure that the scan actually gets parallelized. -statement ok -SET tracing = on; SELECT * FROM a WHERE a = 0 OR a = 10; SET tracing = off - -# The span "sending partial batch" means that the scan was parallelized. -# If this test is failing and doesn't have that span, it means that the scanNode -# was improperly configured to add a limit to the ScanRequest batch. -# See #30943 for more details. -query T -SELECT message FROM [SHOW TRACE FOR SESSION] WHERE message IN - ('querying next range at /Table/63/1/0', - 'querying next range at /Table/63/1/10', - '=== SPAN START: kv.DistSender: sending partial batch ===' - ) ----- -querying next range at /Table/63/1/0 -=== SPAN START: kv.DistSender: sending partial batch === -querying next range at /Table/63/1/10 - -# Ensure that the heuristic planner correctly rejects LATERAL joins. -statement error LATERAL is not supported -SELECT a.a FROM a, LATERAL (SELECT * FROM b.a WHERE a.a = b.a) diff --git a/pkg/sql/logictest/testdata/planner_test/select_index b/pkg/sql/logictest/testdata/planner_test/select_index deleted file mode 100644 index d9dc7d55591f..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/select_index +++ /dev/null @@ -1,1233 +0,0 @@ -# LogicTest: local - -statement ok -CREATE TABLE t ( - a INT, - b VARCHAR, - c INT, - d VARCHAR, - PRIMARY KEY (a, b), - INDEX bc (b, c), - INDEX dc (d, c), - INDEX a_desc (a DESC), - FAMILY (a, b), - FAMILY (c), - FAMILY (d) -) - -statement ok -INSERT INTO t VALUES - (1, 'one', 11, 'foo'), - (2, 'two', 22, 'bar'), - (3, 'three', 33, 'blah') - -statement ok -SET tracing = on,kv,results; SELECT * FROM t WHERE a = 2; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/primary/2/'two' -> NULL -fetched: /t/primary/2/'two'/c -> 22 -fetched: /t/primary/2/'two'/d -> 'bar' -output row: [2 'two' 22 'bar'] - -statement ok -SET tracing = on,kv,results; SELECT * FROM t WHERE a IN (1, 3); SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/primary/1/'one' -> NULL -fetched: /t/primary/1/'one'/c -> 11 -fetched: /t/primary/1/'one'/d -> 'foo' -fetched: /t/primary/3/'three' -> NULL -fetched: /t/primary/3/'three'/c -> 33 -fetched: /t/primary/3/'three'/d -> 'blah' -output row: [1 'one' 11 'foo'] -output row: [3 'three' 33 'blah'] - -statement ok -SET tracing = on,kv,results; SELECT * FROM t WHERE d = 'foo' OR d = 'bar'; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/dc/'bar'/22/2/'two' -> NULL -fetched: /t/dc/'foo'/11/1/'one' -> NULL -output row: [2 'two' 22 'bar'] -output row: [1 'one' 11 'foo'] - -statement ok -SET tracing = on,kv,results; SELECT * FROM t WHERE (d, c) IN (('foo', 11), ('bar', 22)); SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/dc/'bar'/22/2/'two' -> NULL -fetched: /t/dc/'foo'/11/1/'one' -> NULL -output row: [2 'two' 22 'bar'] -output row: [1 'one' 11 'foo'] - -statement ok -SET tracing = on,kv,results; SELECT * FROM t WHERE (d, c) = ('foo', 11); SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/dc/'foo'/11/1/'one' -> NULL -output row: [1 'one' 11 'foo'] - -statement ok -SET tracing = on,kv,results; SELECT * FROM t WHERE a < 2; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/primary/1/'one' -> NULL -fetched: /t/primary/1/'one'/c -> 11 -fetched: /t/primary/1/'one'/d -> 'foo' -output row: [1 'one' 11 'foo'] - -statement ok -SET tracing = on,kv,results; SELECT * FROM t WHERE a <= (1 + 1); SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/primary/1/'one' -> NULL -fetched: /t/primary/1/'one'/c -> 11 -fetched: /t/primary/1/'one'/d -> 'foo' -fetched: /t/primary/2/'two' -> NULL -fetched: /t/primary/2/'two'/c -> 22 -fetched: /t/primary/2/'two'/d -> 'bar' -output row: [1 'one' 11 'foo'] -output row: [2 'two' 22 'bar'] - -statement ok -SET tracing = on,kv,results; SELECT a, b FROM t WHERE b > 't'; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/bc/'three'/33/3 -> NULL -fetched: /t/bc/'two'/22/2 -> NULL -output row: [3 'three'] -output row: [2 'two'] - -statement ok -SET tracing = on,kv,results; SELECT * FROM t WHERE d < ('b' || 'l'); SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/dc/'bar'/22/2/'two' -> NULL -output row: [2 'two' 22 'bar'] - -# The where-clause does not contain columns matching a prefix of any -# index. Note that the index "dc" was chosen because it contains fewer -# keys per row than the primary key index while still containing all -# of the needed columns. -statement ok -SET tracing = on,kv,results; SELECT * FROM t WHERE c = 22; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/dc/'bar'/22/2/'two' -> NULL -fetched: /t/dc/'blah'/33/3/'three' -> NULL -fetched: /t/dc/'foo'/11/1/'one' -> NULL -output row: [2 'two' 22 'bar'] - -# Use the descending index -statement ok -SET tracing = on,kv,results; SELECT a FROM t ORDER BY a DESC; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/a_desc/3/'three' -> NULL -fetched: /t/a_desc/2/'two' -> NULL -fetched: /t/a_desc/1/'one' -> NULL -output row: [3] -output row: [2] -output row: [1] - -# Use the descending index with multiple spans. -statement ok -SET tracing = on,kv,results; SELECT a FROM t WHERE a in (2, 3) ORDER BY a DESC; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/a_desc/3/'three' -> NULL -fetched: /t/a_desc/2/'two' -> NULL -output row: [3] -output row: [2] - -# Index selection occurs in direct join operands too. -query TTT -EXPLAIN SELECT * FROM t x JOIN t y USING(b) WHERE x.b < '3' ----- -render · · - └── render · · - └── merge-join · · - │ type inner - │ equality (b) = (b) - │ mergeJoinOrder +"(b=b)" - ├── index-join · · - │ │ table t@primary - │ └── scan · · - │ table t@bc - │ spans -/"3" - └── index-join · · - │ table t@primary - └── scan · · -· table t@bc -· spans -/"3" - -statement ok -TRUNCATE TABLE t - -statement ok -INSERT INTO t VALUES - (1, 'a', NULL, NULL), - (1, 'b', NULL, NULL), - (1, 'c', NULL, NULL) - -statement ok -SET tracing = on,kv,results; SELECT * FROM t WHERE a = 1 AND b > 'b'; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/primary/1/'c' -> NULL -output row: [1 'c' NULL NULL] - -statement ok -SET tracing = on,kv,results; SELECT * FROM t WHERE a > 0 AND b > 'b'; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/primary/1/'c' -> NULL -output row: [1 'c' NULL NULL] - -statement ok -SET tracing = on,kv,results; SELECT * FROM t WHERE a > 1 AND b > 'b'; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- - -query TTT -EXPLAIN SELECT * FROM t WHERE a > 1 AND a < 2 ----- -norows · · - -statement ok -SET tracing = on,kv,results; SELECT * FROM t WHERE a = 1 AND 'a' < b AND 'c' > b; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/primary/1/'b' -> NULL -output row: [1 'b' NULL NULL] - -statement ok -DROP TABLE t - -statement ok -CREATE TABLE t ( - a INT PRIMARY KEY, - b INT, - INDEX ab (a, b) -) - -statement ok -INSERT INTO t VALUES (1, 2), (3, 4), (5, 6) - -statement ok -SET tracing = on,kv,results; SELECT * FROM t@ab WHERE a >= 3 AND a < 5; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/ab/3/4 -> NULL -output row: [3 4] - -statement ok -SET tracing = on,kv,results; SELECT * FROM t@ab WHERE a BETWEEN 3 AND 4; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/ab/3/4 -> NULL -output row: [3 4] - -statement ok -SET tracing = on,kv,results; SELECT * FROM t@ab WHERE a BETWEEN 3 AND 5; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/ab/3/4 -> NULL -fetched: /t/ab/5/6 -> NULL -output row: [3 4] -output row: [5 6] - -statement ok -SET tracing = on,kv,results; SELECT * FROM t@ab WHERE a < 2 OR a < 4; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/ab/1/2 -> NULL -fetched: /t/ab/3/4 -> NULL -output row: [1 2] -output row: [3 4] - -statement ok -SET tracing = on,kv,results; SELECT * FROM t@ab WHERE a < 3 OR a <= 3; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/ab/1/2 -> NULL -fetched: /t/ab/3/4 -> NULL -output row: [1 2] -output row: [3 4] - -statement ok -SET tracing = on,kv,results; SELECT * FROM t@ab WHERE a <= 3 OR a < 3; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/ab/1/2 -> NULL -fetched: /t/ab/3/4 -> NULL -output row: [1 2] -output row: [3 4] - -statement ok -SET tracing = on,kv,results; SELECT * FROM t@ab WHERE a > 3 OR a >= 3; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/ab/3/4 -> NULL -fetched: /t/ab/5/6 -> NULL -output row: [3 4] -output row: [5 6] - -statement ok -SET tracing = on,kv,results; SELECT * FROM t@ab WHERE a >= 3 OR a > 3; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/ab/3/4 -> NULL -fetched: /t/ab/5/6 -> NULL -output row: [3 4] -output row: [5 6] - -statement ok -SET tracing = on,kv,results; SELECT * FROM t@ab WHERE a = 3 OR a = 5; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/ab/3/4 -> NULL -fetched: /t/ab/5/6 -> NULL -output row: [3 4] -output row: [5 6] - -statement ok -SET tracing = on,kv,results; SELECT * FROM t@ab WHERE a < 3 OR a > 3; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/ab/1/2 -> NULL -fetched: /t/ab/5/6 -> NULL -output row: [1 2] -output row: [5 6] - -statement ok -SET tracing = on,kv,results; SELECT * FROM t@ab WHERE a + 1 = 4; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t/ab/3/4 -> NULL -output row: [3 4] - -query TTT -EXPLAIN SELECT * FROM t WHERE a = 1 AND false ----- -norows · · - -query TTT -EXPLAIN SELECT * FROM t WHERE a = 1 AND NULL ----- -norows · · - -query TTT -EXPLAIN SELECT * FROM t WHERE a = NULL AND a != NULL ----- -norows · · - -# Make sure that mixed type comparison operations are not used -# for selecting indexes. - -statement ok -DROP TABLE t - -statement ok -CREATE TABLE t ( - a INT PRIMARY KEY, - b INT, - c INT, - INDEX b_desc (b DESC), - INDEX bc (b, c) -) - -query TTT -EXPLAIN SELECT a FROM t WHERE c > 1 ----- -render · · - └── scan · · -· table t@bc -· spans ALL -· filter c > 1 - -query TTT -EXPLAIN SELECT a FROM t WHERE c < 1 AND b < 5 ----- -render · · - └── scan · · -· table t@bc -· spans /!NULL-/4/1 -· filter c < 1 - -query TTT -EXPLAIN SELECT a FROM t WHERE c > 1.0 ----- -render · · - └── scan · · -· table t@bc -· spans ALL -· filter c > 1 - -query TTT -EXPLAIN SELECT a FROM t WHERE c < 1.0 ----- -render · · - └── scan · · -· table t@bc -· spans ALL -· filter c < 1 - -query TTT -EXPLAIN SELECT a FROM t WHERE c > 1.0 AND b < 5 ----- -render · · - └── scan · · -· table t@bc -· spans /!NULL-/5 -· filter c > 1 - -query TTT -EXPLAIN SELECT a FROM t WHERE b < 5.0 AND c < 1 ----- -render · · - └── scan · · -· table t@bc -· spans /!NULL-/4/1 -· filter c < 1 - -query TTT -EXPLAIN SELECT a FROM t WHERE (b, c) = (5, 1) ----- -render · · - └── scan · · -· table t@bc -· spans /5/1-/5/2 - -query TTT -EXPLAIN SELECT a FROM t WHERE (b, c) = (5.0, 1) ----- -render · · - └── scan · · -· table t@bc -· spans /5/1-/5/2 - -query TTT -EXPLAIN SELECT a FROM t WHERE (b, c) = (5.1, 1) ----- -render · · - └── scan · · -· table t@bc -· spans /!NULL- -· filter (b = 5.1) AND (c = 1) - -# Note the span is reversed because of #20203. -query TTT -EXPLAIN SELECT a FROM t WHERE b IN (5.0, 1) ----- -render · · - └── scan · · -· table t@b_desc -· spans /5-/4 /1-/0 - -statement ok -CREATE TABLE abcd ( - a INT, - b INT, - c INT, - d INT, - INDEX adb (a, d, b), - INDEX abcd (a, b, c, d) -) - -# Verify that we prefer the index where more columns are constrained, even if it -# has more keys per row. -query TTT -EXPLAIN SELECT b FROM abcd WHERE (a, b) = (1, 4) ----- -render · · - └── scan · · -· table abcd@abcd -· spans /1/4-/1/5 - -query TTT -EXPLAIN SELECT b FROM abcd WHERE (a, b) IN ((1, 4), (2, 9)) ----- -render · · - └── scan · · -· table abcd@abcd -· spans /1/4-/1/5 /2/9-/2/10 - -statement ok -CREATE TABLE ab ( - s STRING, - i INT -); - -query TTT -EXPLAIN SELECT i, s FROM ab WHERE (i, s) < (1, 'c') ----- -render · · - └── scan · · -· table ab@primary -· spans ALL -· filter (i, s) < (1, 'c') - -statement ok -CREATE INDEX baz ON ab (i, s) - -query TTT -EXPLAIN SELECT i, s FROM ab@baz WHERE (i, s) < (1, 'c') ----- -render · · - └── scan · · -· table ab@baz -· spans /!NULL-/1/"c" -· filter (i, s) < (1, 'c') - -# Check that primary key definitions can indicate index ordering, -# and this information is subsequently used during index selection -# and span generation. #13882 -query TTBITTBB -CREATE TABLE abz(a INT, b INT, c INT, PRIMARY KEY (a DESC, b ASC), UNIQUE(c DESC, b ASC)); SHOW INDEX FROM abz ----- -abz primary false 1 a DESC false false -abz primary false 2 b ASC false false -abz abz_c_b_key false 1 c DESC false false -abz abz_c_b_key false 2 b ASC false false -abz abz_c_b_key false 3 a ASC false true - -query TTT -EXPLAIN SELECT a FROM abz ORDER BY a DESC LIMIT 1 ----- -limit · · - │ count 1 - └── render · · - └── scan · · -· table abz@primary -· spans ALL -· limit 1 - -query TTT -EXPLAIN SELECT c FROM abz ORDER BY c DESC LIMIT 1 ----- -limit · · - │ count 1 - └── render · · - └── scan · · -· table abz@abz_c_b_key -· spans ALL -· limit 1 - -# Issue #14426: verify we don't have an internal filter that contains "a IN ()" -# (which causes an error in DistSQL due to expression serialization). -statement ok -CREATE TABLE tab0( - k INT PRIMARY KEY, - a INT, - b INT -) - -query TTTTT -EXPLAIN (VERBOSE) SELECT k FROM tab0 WHERE (a IN (6) AND a > 6) OR b >= 4 ----- -render · · (k) k!=NULL; key(k) - │ render 0 test.public.tab0.k · · - └── scan · · (k, a, b) k!=NULL; key(k) -· table tab0@primary · · -· spans ALL · · -· filter ((a IN (6,)) AND (a > 6)) OR (b >= 4) · · - -# Check that no extraneous rows are fetched due to excessive batching (#15910) -# The test is composed of three parts: populate a table, check -# that the problematic plan is properly derived from the test query, -# then test the results. - -statement ok -CREATE TABLE test2 (id BIGSERIAL PRIMARY KEY, k TEXT UNIQUE, v INT DEFAULT 42); -INSERT INTO test2(k) - VALUES ('001'),('002'),('003'),('004'),('005'),('006'),('007'),('008'),('009'),('010'), - ('011'),('012'),('013'),('014'),('015'),('016'),('017'),('018'),('019'),('020'), - ('021'),('022'),('023'),('024'),('025'),('026'),('027'),('028'),('029'),('030') - -# Plan check: -# The query is using an index-join and the limit is propagated to the scan. - -query TTT -EXPLAIN SELECT * FROM test2 WHERE k <= '100' ORDER BY k DESC LIMIT 20 ----- -limit · · - │ count 20 - └── index-join · · - │ table test2@primary - └── revscan · · -· table test2@test2_k_key -· spans /!NULL-/"100"/PrefixEnd -· limit 20 - -# The result output of this test requires that vectorized execution -# is not used, so it has been moved to select_index_vectorize_off. - -# Regression test for #20035. -statement ok -CREATE TABLE favorites ( - id INT NOT NULL DEFAULT unique_rowid(), - resource_type STRING(30) NOT NULL, - resource_key STRING(255) NOT NULL, - device_group STRING(30) NOT NULL, - customerid INT NOT NULL, - jurisdiction STRING(2) NOT NULL, - brand STRING(255) NOT NULL, - created_ts TIMESTAMP NULL, - guid_id STRING(100) NOT NULL, - locale STRING(10) NOT NULL DEFAULT NULL, - CONSTRAINT "primary" PRIMARY KEY (id ASC), - UNIQUE INDEX favorites_idx (resource_type ASC, device_group ASC, resource_key ASC, customerid ASC), - INDEX favorites_guid_idx (guid_id ASC), - INDEX favorites_glob_fav_idx (resource_type ASC, device_group ASC, jurisdiction ASC, brand ASC, locale ASC, resource_key ASC), - FAMILY "primary" (id, resource_type, resource_key, device_group, customerid, jurisdiction, brand, created_ts, guid_id, locale) -) - -query TTT -EXPLAIN SELECT - resource_key, - count(resource_key) total -FROM favorites f1 -WHERE f1.jurisdiction = 'MT' -AND f1.brand = 'xxx' -AND f1.resource_type = 'GAME' -AND f1.device_group = 'web' -AND f1.locale = 'en_GB' -AND f1.resource_key IN ('ts', 'ts2', 'ts3') -GROUP BY resource_key -ORDER BY total DESC ----- -sort · · - │ order -total - └── group · · - │ aggregate 0 resource_key - │ aggregate 1 count(resource_key) - │ group by resource_key - │ ordered +resource_key - └── render · · - └── scan · · -· table favorites@favorites_glob_fav_idx -· spans /"GAME"/"web"/"MT"/"xxx"/"en_GB"/"ts"-/"GAME"/"web"/"MT"/"xxx"/"en_GB"/"ts"/PrefixEnd /"GAME"/"web"/"MT"/"xxx"/"en_GB"/"ts2"-/"GAME"/"web"/"MT"/"xxx"/"en_GB"/"ts2"/PrefixEnd /"GAME"/"web"/"MT"/"xxx"/"en_GB"/"ts3"-/"GAME"/"web"/"MT"/"xxx"/"en_GB"/"ts3"/PrefixEnd - -# Regression tests for #20362 (IS NULL handling). -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM abcd@abcd WHERE a IS NULL AND b > 5 ----- -render · · (a, b, c, d) a=CONST; b!=NULL - │ render 0 test.public.abcd.a · · - │ render 1 test.public.abcd.b · · - │ render 2 test.public.abcd.c · · - │ render 3 test.public.abcd.d · · - └── scan · · (a, b, c, d, rowid[hidden,omitted]) a=CONST; b!=NULL; rowid!=NULL; weak-key(b,c,d,rowid) -· table abcd@abcd · · -· spans /NULL/6-/!NULL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM abcd@abcd WHERE a IS NULL AND b < 5 ----- -render · · (a, b, c, d) a=CONST; b!=NULL - │ render 0 test.public.abcd.a · · - │ render 1 test.public.abcd.b · · - │ render 2 test.public.abcd.c · · - │ render 3 test.public.abcd.d · · - └── scan · · (a, b, c, d, rowid[hidden,omitted]) a=CONST; b!=NULL; rowid!=NULL; weak-key(b,c,d,rowid) -· table abcd@abcd · · -· spans /NULL/!NULL-/NULL/5 · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM abcd@abcd WHERE a IS NULL ORDER BY b ----- -render · · (a, b, c, d) a=CONST; +b - │ render 0 test.public.abcd.a · · - │ render 1 test.public.abcd.b · · - │ render 2 test.public.abcd.c · · - │ render 3 test.public.abcd.d · · - └── scan · · (a, b, c, d, rowid[hidden,omitted]) a=CONST; rowid!=NULL; weak-key(b,c,d,rowid); +b -· table abcd@abcd · · -· spans /NULL-/!NULL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM abcd@abcd WHERE a = 1 AND b IS NULL AND c > 0 AND c < 10 ORDER BY c ----- -render · · (a, b, c, d) a=CONST; b=CONST; c!=NULL; +c - │ render 0 test.public.abcd.a · · - │ render 1 test.public.abcd.b · · - │ render 2 test.public.abcd.c · · - │ render 3 test.public.abcd.d · · - └── scan · · (a, b, c, d, rowid[hidden,omitted]) a=CONST; b=CONST; c!=NULL; rowid!=NULL; weak-key(c,d,rowid); +c -· table abcd@abcd · · -· spans /1/NULL/1-/1/NULL/10 · · - -# Regression test for #3548: verify we create constraints on implicit columns -# when they are part of the key (non-unique index). -statement ok -CREATE TABLE abc (a INT, b INT, c INT, PRIMARY KEY(a,b), INDEX(c)) - -query TTTTT -EXPLAIN (VERBOSE) SELECT c FROM abc WHERE c = 1 and a = 3 ----- -render · · (c) c=CONST - │ render 0 test.public.abc.c · · - └── scan · · (a[omitted], b[omitted], c) a=CONST; c=CONST; b!=NULL; key(b) -· table abc@abc_c_idx · · -· spans /1/3-/1/4 · · - -# Verify we don't create constraints on implicit columns when they are not part -# of the key (unique index). -statement ok -CREATE TABLE def (d INT, e INT, f INT, PRIMARY KEY(d,e), UNIQUE INDEX(f)) - -query TTTTT -EXPLAIN (VERBOSE) SELECT f FROM def WHERE f = 1 and d = 3 ----- -render · · (f) f=CONST; key() - │ render 0 test.public.def.f · · - └── scan · · (d, e[omitted], f) d=CONST; f=CONST; key() -· table def@def_f_key · · -· spans /1-/2 · · -· filter d = 3 · · - -# Regression test for #20504. -query TTTTT -EXPLAIN (VERBOSE) SELECT a, b FROM abc WHERE (a, b) BETWEEN (1, 2) AND (3, 4) ----- -render · · (a, b) a!=NULL; b!=NULL; key(a,b) - │ render 0 test.public.abc.a · · - │ render 1 test.public.abc.b · · - └── scan · · (a, b, c[omitted]) a!=NULL; b!=NULL; key(a,b) -· table abc@primary · · -· spans /1/2-/3/4/# · · - -# Regression test for #21831. -statement ok -CREATE TABLE str (k INT PRIMARY KEY, v STRING, INDEX(v)) - -query TTTTT -EXPLAIN (VERBOSE) SELECT k, v FROM str WHERE v LIKE 'ABC%' ----- -scan · · (k, v) k!=NULL; v!=NULL; key(k,v) -· table str@str_v_idx · · -· spans /"ABC"-/"ABD" · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT k, v FROM str WHERE v LIKE 'ABC%Z' ----- -scan · · (k, v) k!=NULL; v!=NULL; key(k,v) -· table str@str_v_idx · · -· spans /"ABC"-/"ABD" · · -· filter v LIKE 'ABC%Z' · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT k, v FROM str WHERE v SIMILAR TO 'ABC_*' ----- -scan · · (k, v) k!=NULL; v!=NULL; key(k,v) -· table str@str_v_idx · · -· spans /"ABC"-/"ABD" · · -· filter v SIMILAR TO 'ABC_*' · · - -# Test that we generate spans for IS (NOT) DISTINCT FROM. -statement ok -CREATE TABLE xy (x INT, y INT, INDEX (y)) - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM xy WHERE y IS NOT DISTINCT FROM NULL ----- -render · · (x, y) y=CONST - │ render 0 test.public.xy.x · · - │ render 1 test.public.xy.y · · - └── index-join · · (x, y, rowid[hidden,omitted]) y=CONST; rowid!=NULL; key(rowid) - │ table xy@primary · · - └── scan · · (x[omitted], y[omitted], rowid[hidden]) y=CONST; rowid!=NULL; key(rowid) -· table xy@xy_y_idx · · -· spans /NULL-/!NULL · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM xy WHERE y IS NOT DISTINCT FROM 4 ----- -render · · (x, y) y=CONST - │ render 0 test.public.xy.x · · - │ render 1 test.public.xy.y · · - └── index-join · · (x, y, rowid[hidden,omitted]) y=CONST; rowid!=NULL; key(rowid) - │ table xy@primary · · - └── scan · · (x[omitted], y[omitted], rowid[hidden]) y=CONST; rowid!=NULL; key(rowid) -· table xy@xy_y_idx · · -· spans /4-/5 · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM xy WHERE y IS DISTINCT FROM NULL ----- -render · · (x, y) y!=NULL - │ render 0 test.public.xy.x · · - │ render 1 test.public.xy.y · · - └── index-join · · (x, y, rowid[hidden,omitted]) y!=NULL; rowid!=NULL; key(y,rowid) - │ table xy@primary · · - └── scan · · (x[omitted], y[omitted], rowid[hidden]) y!=NULL; rowid!=NULL; key(y,rowid) -· table xy@xy_y_idx · · -· spans /!NULL- · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM xy WHERE y IS DISTINCT FROM 4 ----- -render · · (x, y) y!=NULL - │ render 0 test.public.xy.x · · - │ render 1 test.public.xy.y · · - └── index-join · · (x, y, rowid[hidden,omitted]) y!=NULL; rowid!=NULL; key(y,rowid) - │ table xy@primary · · - └── scan · · (x[omitted], y[omitted], rowid[hidden]) y!=NULL; rowid!=NULL; key(y,rowid) -· table xy@xy_y_idx · · -· spans -/4 /5- · · - -# Regression tests for #22670. -statement ok -CREATE INDEX xy_idx ON xy (x, y) - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM xy WHERE x IN (NULL, 1, 2) ----- -render · · (x, y) x!=NULL - │ render 0 test.public.xy.x · · - │ render 1 test.public.xy.y · · - └── scan · · (x, y, rowid[hidden,omitted]) x!=NULL; rowid!=NULL; weak-key(x,y,rowid) -· table xy@xy_idx · · -· spans /1-/3 · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM xy WHERE (x, y) IN ((NULL, NULL), (1, NULL), (NULL, 1), (1, 1), (1, 2)) ----- -render · · (x, y) x=CONST; y!=NULL - │ render 0 test.public.xy.x · · - │ render 1 test.public.xy.y · · - └── scan · · (x, y, rowid[hidden,omitted]) x=CONST; y!=NULL; rowid!=NULL; key(y,rowid) -· table xy@xy_idx · · -· spans /1/1-/1/3 · · - -# ------------------------------------------------------------------------------ -# Non-covering index -# ------------------------------------------------------------------------------ -statement ok -CREATE TABLE noncover ( - a INT PRIMARY KEY, - b INT, - c INT, - d INT, - INDEX b (b), - UNIQUE INDEX c (c), - FAMILY (a), - FAMILY (b), - FAMILY (c), - FAMILY (d) -) - -statement ok -INSERT INTO noncover VALUES (1, 2, 3, 4), (5, 6, 7, 8) - -query TTT -EXPLAIN SELECT * FROM noncover WHERE b = 2 ----- -index-join · · - │ table noncover@primary - └── scan · · -· table noncover@b -· spans /2-/3 - -statement ok -SET tracing = on,kv,results; SELECT * FROM noncover WHERE b = 2; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /noncover/b/2/1 -> NULL -fetched: /noncover/primary/1 -> NULL -fetched: /noncover/primary/1/b -> 2 -fetched: /noncover/primary/1/c -> 3 -fetched: /noncover/primary/1/d -> 4 -output row: [1 2 3 4] - -query TTT -EXPLAIN SELECT * FROM noncover WHERE c = 6 ----- -index-join · · - │ table noncover@primary - └── scan · · -· table noncover@c -· spans /6-/7 - -statement ok -SET tracing = on,kv,results; SELECT * FROM noncover WHERE c = 7; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /noncover/c/7 -> /5 -fetched: /noncover/primary/5 -> NULL -fetched: /noncover/primary/5/b -> 6 -fetched: /noncover/primary/5/c -> 7 -fetched: /noncover/primary/5/d -> 8 -output row: [5 6 7 8] - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM noncover WHERE c > 0 ORDER BY c DESC ----- -index-join · · (a, b, c, d) c!=NULL; key(c); -c - │ table noncover@primary · · - └── revscan · · (a, b[omitted], c[omitted], d[omitted]) c!=NULL; key(c); -c -· table noncover@c · · -· spans /1- · · - -query TTT -EXPLAIN SELECT * FROM noncover WHERE c > 0 ORDER BY c ----- -index-join · · - │ table noncover@primary - └── scan · · -· table noncover@c -· spans /1- - -query TTT -EXPLAIN SELECT * FROM noncover WHERE c > 0 AND d = 8 ----- -index-join · · - │ table noncover@primary - │ filter d = 8 - └── scan · · -· table noncover@c -· spans /1- - -# The following testcases verify that when we have a small limit, we prefer an -# order-matching index. - -query TTT -EXPLAIN SELECT * FROM noncover ORDER BY c ----- -sort · · - │ order +c - └── scan · · -· table noncover@primary -· spans ALL - -query TTT -EXPLAIN SELECT * FROM noncover ORDER BY c LIMIT 5 ----- -limit · · - │ count 5 - └── index-join · · - │ table noncover@primary - └── scan · · -· table noncover@c -· spans ALL -· limit 5 - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT * FROM noncover ORDER BY c OFFSET 5 -] ----- -limit · · - │ offset 5 - └── sort · · - │ order +c - └── scan · · -· table noncover@primary -· spans ALL - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT * FROM noncover ORDER BY c LIMIT 5 OFFSET 5 -] ----- -limit · · - │ count 5 - │ offset 5 - └── index-join · · - │ table noncover@primary - └── scan · · -· table noncover@c -· spans ALL -· limit 10 - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT * FROM noncover ORDER BY c LIMIT 1000000 -] ----- -limit · · - │ count 1000000 - └── sort · · - │ order +c - └── scan · · -· table noncover@primary -· spans ALL - -# ------------------------------------------------------------------------------ -# These tests verify that while we are joining an index with the table, we -# evaluate what parts of the filter we can using the columns in the index -# to avoid unnecessary lookups in the table. -# ------------------------------------------------------------------------------ -statement ok -CREATE TABLE t2 ( - a INT PRIMARY KEY, - b INT, - c INT, - s STRING, - INDEX bc (b, c), - FAMILY (a), - FAMILY (b), - FAMILY (c), - FAMILY (s) -) - -statement ok -INSERT INTO t2 VALUES - (1, 1, 1, '11'), - (2, 1, 2, '12'), - (3, 1, 3, '13'), - (4, 2, 1, '21'), - (5, 2, 2, '22'), - (6, 2, 3, '23'), - (7, 3, 1, '31'), - (8, 3, 2, '32'), - (9, 3, 3, '33') - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT * FROM t2 WHERE b = 2 AND c % 2 = 0 -] ----- -index-join · · - │ table t2@primary - └── scan · · -· table t2@bc -· spans /2-/3 -· filter (c % 2) = 0 - -# We do NOT look up the table row for '21' and '23'. -statement ok -SET tracing = on,kv,results; SELECT * FROM t2 WHERE b = 2 AND c % 2 = 0; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t2/bc/2/1/4 -> NULL -fetched: /t2/bc/2/2/5 -> NULL -fetched: /t2/bc/2/3/6 -> NULL -fetched: /t2/primary/5 -> NULL -fetched: /t2/primary/5/b -> 2 -fetched: /t2/primary/5/c -> 2 -fetched: /t2/primary/5/s -> '22' -output row: [5 2 2 '22'] - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) SELECT * FROM t2 WHERE b = 2 AND c != b -] ----- -index-join · · - │ table t2@primary - └── scan · · -· table t2@bc -· spans /2/!NULL-/3 -· filter c != b - -# We do NOT look up the table row for '22'. -statement ok -SET tracing = on,kv,results; SELECT * FROM t2 WHERE b = 2 AND c != b; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t2/bc/2/1/4 -> NULL -fetched: /t2/bc/2/2/5 -> NULL -fetched: /t2/bc/2/3/6 -> NULL -fetched: /t2/primary/4 -> NULL -fetched: /t2/primary/4/b -> 2 -fetched: /t2/primary/4/c -> 1 -fetched: /t2/primary/4/s -> '21' -fetched: /t2/primary/6 -> NULL -fetched: /t2/primary/6/b -> 2 -fetched: /t2/primary/6/c -> 3 -fetched: /t2/primary/6/s -> '23' -output row: [4 2 1 '21'] -output row: [6 2 3 '23'] - -# We do NOT look up the table row for '22'. -statement ok -SET tracing = on,kv,results; SELECT * FROM t2 WHERE b = 2 AND c != b AND s <> '21'; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t2/bc/2/1/4 -> NULL -fetched: /t2/bc/2/2/5 -> NULL -fetched: /t2/bc/2/3/6 -> NULL -fetched: /t2/primary/4 -> NULL -fetched: /t2/primary/4/b -> 2 -fetched: /t2/primary/4/c -> 1 -fetched: /t2/primary/4/s -> '21' -fetched: /t2/primary/6 -> NULL -fetched: /t2/primary/6/b -> 2 -fetched: /t2/primary/6/c -> 3 -fetched: /t2/primary/6/s -> '23' -output row: [6 2 3 '23'] - -# We only look up the table rows where c = b+1 or a > b+4: '23', '32', '33'. -statement ok -SET tracing = on,kv,results; SELECT * FROM t2 WHERE b > 1 AND ((c = b+1 AND s != '23') OR (a > b+4 AND s != '32')); SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /t2/bc/2/1/4 -> NULL -fetched: /t2/bc/2/2/5 -> NULL -fetched: /t2/bc/2/3/6 -> NULL -fetched: /t2/bc/3/1/7 -> NULL -fetched: /t2/bc/3/2/8 -> NULL -fetched: /t2/bc/3/3/9 -> NULL -fetched: /t2/primary/6 -> NULL -fetched: /t2/primary/6/b -> 2 -fetched: /t2/primary/6/c -> 3 -fetched: /t2/primary/6/s -> '23' -fetched: /t2/primary/8 -> NULL -fetched: /t2/primary/8/b -> 3 -fetched: /t2/primary/8/c -> 2 -fetched: /t2/primary/8/s -> '32' -fetched: /t2/primary/9 -> NULL -fetched: /t2/primary/9/b -> 3 -fetched: /t2/primary/9/c -> 3 -fetched: /t2/primary/9/s -> '33' -output row: [9 3 3 '33'] - -# Check that splitting of the expression filter does not mistakenly -# bring non-indexed columns (s) under the index scanNode. (#12582) -# To test this we need an expression containing non-indexed -# columns that disappears during range simplification. -query TTTTT -EXPLAIN (VERBOSE) SELECT a FROM t2 WHERE b = 2 OR ((b BETWEEN 2 AND 1) AND ((s != 'a') OR (s = 'a'))) ----- -render · · (a) a!=NULL - │ render 0 test.public.t2.a · · - └── index-join · · (a, b[omitted], c[omitted], s[omitted]) b=CONST; a!=NULL; weak-key(a,c) - │ table t2@primary · · - └── scan · · (a, b[omitted], c[omitted], s[omitted]) b=CONST; a!=NULL; weak-key(a,c) -· table t2@bc · · -· spans /2-/3 · · diff --git a/pkg/sql/logictest/testdata/planner_test/select_index_flags b/pkg/sql/logictest/testdata/planner_test/select_index_flags deleted file mode 100644 index 247c2a73b6e1..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/select_index_flags +++ /dev/null @@ -1,182 +0,0 @@ -# LogicTest: local - -statement ok -CREATE TABLE abcd ( - a INT PRIMARY KEY, - b INT, - c INT, - d INT, - INDEX b (b), - INDEX cd (c,d), - UNIQUE INDEX bcd (b,c,d) -) - -# No hint -query TTT -EXPLAIN SELECT * FROM abcd WHERE a >= 20 AND a <= 30 ----- -scan · · -· table abcd@primary -· spans /20-/30/# -· parallel · - -# Force primary -query TTT -EXPLAIN SELECT * FROM abcd@primary WHERE a >= 20 AND a <= 30 ----- -scan · · -· table abcd@primary -· spans /20-/30/# -· parallel · - -# Force primary, reverse scan. -query TTT -EXPLAIN SELECT * FROM abcd@{FORCE_INDEX=primary,DESC} WHERE a >= 20 AND a <= 30 ----- -revscan · · -· table abcd@primary -· spans /20-/30/# -· parallel · - -# Force index b -query TTT -EXPLAIN SELECT * FROM abcd@b WHERE a >= 20 AND a <= 30 ----- -index-join · · - │ table abcd@primary - └── scan · · -· table abcd@b -· spans ALL -· filter (a >= 20) AND (a <= 30) - -# Force index b, reverse scan. -query TTT -EXPLAIN SELECT * FROM abcd@{FORCE_INDEX=b,DESC} WHERE a >= 20 AND a <= 30 ----- -index-join · · - │ table abcd@primary - └── revscan · · -· table abcd@b -· spans ALL -· filter (a >= 20) AND (a <= 30) - -# Force index cd -query TTT -EXPLAIN SELECT * FROM abcd@cd WHERE a >= 20 AND a <= 30 ----- -index-join · · - │ table abcd@primary - └── scan · · -· table abcd@cd -· spans ALL -· filter (a >= 20) AND (a <= 30) - -# Force index bcd -query TTT -EXPLAIN SELECT * FROM abcd@bcd WHERE a >= 20 AND a <= 30 ----- -scan · · -· table abcd@bcd -· spans ALL -· filter (a >= 20) AND (a <= 30) - -# Force index b (covering) -query TTT -EXPLAIN SELECT b FROM abcd@b WHERE a >= 20 AND a <= 30 ----- -render · · - └── scan · · -· table abcd@b -· spans ALL -· filter (a >= 20) AND (a <= 30) - -# Force index b (non-covering due to WHERE clause) -query TTT -EXPLAIN SELECT b FROM abcd@b WHERE c >= 20 AND c <= 30 ----- -render · · - └── index-join · · - │ table abcd@primary - │ filter (c >= 20) AND (c <= 30) - └── scan · · -· table abcd@b -· spans ALL - -# No hint, should be using index cd -query TTT -EXPLAIN SELECT c, d FROM abcd WHERE c >= 20 AND c < 40 ----- -render · · - └── scan · · -· table abcd@cd -· spans /20-/40 - -# Force primary index -query TTT -EXPLAIN SELECT c, d FROM abcd@primary WHERE c >= 20 AND c < 40 ----- -render · · - └── scan · · -· table abcd@primary -· spans ALL -· filter (c >= 20) AND (c < 40) - -# Force index b -query TTT -EXPLAIN SELECT c, d FROM abcd@b WHERE c >= 20 AND c < 40 ----- -render · · - └── index-join · · - │ table abcd@primary - │ filter (c >= 20) AND (c < 40) - └── scan · · -· table abcd@b -· spans ALL - -query TTT -EXPLAIN SELECT * FROM abcd@{FORCE_INDEX=b} WHERE a >= 20 AND a <= 30 ----- -index-join · · - │ table abcd@primary - └── scan · · -· table abcd@b -· spans ALL -· filter (a >= 20) AND (a <= 30) - -query TTT -EXPLAIN SELECT b, c, d FROM abcd WHERE c = 10 ----- -render · · - └── index-join · · - │ table abcd@primary - └── scan · · -· table abcd@cd -· spans /10-/11 - -query TTT -EXPLAIN SELECT b, c, d FROM abcd@{NO_INDEX_JOIN} WHERE c = 10 ----- -render · · - └── scan · · -· table abcd@bcd -· hint no index join -· spans ALL -· filter c = 10 - -query TTT -EXPLAIN SELECT b, c, d FROM abcd@{FORCE_INDEX=bcd} WHERE c = 10 ----- -render · · - └── scan · · -· table abcd@bcd -· spans ALL -· filter c = 10 - -query TTT -EXPLAIN SELECT b, c, d FROM abcd@{FORCE_INDEX=primary} WHERE c = 10 ----- -render · · - └── scan · · -· table abcd@primary -· spans ALL -· filter c = 10 diff --git a/pkg/sql/logictest/testdata/planner_test/select_index_vectorize_off b/pkg/sql/logictest/testdata/planner_test/select_index_vectorize_off deleted file mode 100644 index c5212d12bacd..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/select_index_vectorize_off +++ /dev/null @@ -1,69 +0,0 @@ -# LogicTest: local - -# This file contains test cases that cannot be run with the vectorized -# execution engine. - -statement ok -SET vectorize=off - -statement ok -CREATE TABLE test2 (id BIGSERIAL PRIMARY KEY, k TEXT UNIQUE, v INT DEFAULT 42); -INSERT INTO test2(k) - VALUES ('001'),('002'),('003'),('004'),('005'),('006'),('007'),('008'),('009'),('010'), - ('011'),('012'),('013'),('014'),('015'),('016'),('017'),('018'),('019'),('020'), - ('021'),('022'),('023'),('024'),('025'),('026'),('027'),('028'),('029'),('030') - -# Result check: The following query must not issue more than the -# requested LIMIT K/V reads, even though an index join batches 100 -# rows at a time -- the limit should be enforced by the scan. We are -# reading from the end (ORDER BY k DESC) so we should see 20 values -# from 030 to 011 (thus not 001-010). - -statement ok -SET tracing = on,kv,results; SELECT * FROM test2 WHERE k <= '100' ORDER BY k DESC LIMIT 20; SET tracing = off - -query T -SELECT regexp_replace(message, '\d\d\d\d\d+', '...PK...') - FROM [SHOW KV TRACE FOR SESSION] - WHERE message LIKE 'fetched:%' ----- -fetched: /test2/test2_k_key/'030' -> /...PK... -fetched: /test2/test2_k_key/'029' -> /...PK... -fetched: /test2/test2_k_key/'028' -> /...PK... -fetched: /test2/test2_k_key/'027' -> /...PK... -fetched: /test2/test2_k_key/'026' -> /...PK... -fetched: /test2/test2_k_key/'025' -> /...PK... -fetched: /test2/test2_k_key/'024' -> /...PK... -fetched: /test2/test2_k_key/'023' -> /...PK... -fetched: /test2/test2_k_key/'022' -> /...PK... -fetched: /test2/test2_k_key/'021' -> /...PK... -fetched: /test2/test2_k_key/'020' -> /...PK... -fetched: /test2/test2_k_key/'019' -> /...PK... -fetched: /test2/test2_k_key/'018' -> /...PK... -fetched: /test2/test2_k_key/'017' -> /...PK... -fetched: /test2/test2_k_key/'016' -> /...PK... -fetched: /test2/test2_k_key/'015' -> /...PK... -fetched: /test2/test2_k_key/'014' -> /...PK... -fetched: /test2/test2_k_key/'013' -> /...PK... -fetched: /test2/test2_k_key/'012' -> /...PK... -fetched: /test2/test2_k_key/'011' -> /...PK... -fetched: /test2/primary/...PK.../k/v -> /'030'/42 -fetched: /test2/primary/...PK.../k/v -> /'029'/42 -fetched: /test2/primary/...PK.../k/v -> /'028'/42 -fetched: /test2/primary/...PK.../k/v -> /'027'/42 -fetched: /test2/primary/...PK.../k/v -> /'026'/42 -fetched: /test2/primary/...PK.../k/v -> /'025'/42 -fetched: /test2/primary/...PK.../k/v -> /'024'/42 -fetched: /test2/primary/...PK.../k/v -> /'023'/42 -fetched: /test2/primary/...PK.../k/v -> /'022'/42 -fetched: /test2/primary/...PK.../k/v -> /'021'/42 -fetched: /test2/primary/...PK.../k/v -> /'020'/42 -fetched: /test2/primary/...PK.../k/v -> /'019'/42 -fetched: /test2/primary/...PK.../k/v -> /'018'/42 -fetched: /test2/primary/...PK.../k/v -> /'017'/42 -fetched: /test2/primary/...PK.../k/v -> /'016'/42 -fetched: /test2/primary/...PK.../k/v -> /'015'/42 -fetched: /test2/primary/...PK.../k/v -> /'014'/42 -fetched: /test2/primary/...PK.../k/v -> /'013'/42 -fetched: /test2/primary/...PK.../k/v -> /'012'/42 -fetched: /test2/primary/...PK.../k/v -> /'011'/42 diff --git a/pkg/sql/logictest/testdata/planner_test/show_trace b/pkg/sql/logictest/testdata/planner_test/show_trace deleted file mode 100644 index 528d93ed6ace..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/show_trace +++ /dev/null @@ -1,325 +0,0 @@ -# LogicTest: local - -# Disable automatic stats. -statement ok -SET CLUSTER SETTING sql.stats.automatic_collection.enabled = false - -# Check SHOW KV TRACE FOR SESSION. - -statement ok -SET tracing = on,kv,results; CREATE DATABASE t; SET tracing = off - -# Check the KV trace; we need to remove the eventlog entry and -# internal queries since the timestamp is non-deterministic. -query TT -SELECT operation, message FROM [SHOW KV TRACE FOR SESSION] -WHERE message NOT LIKE '%Z/%' - AND operation NOT LIKE 'kv.DistSender: sending partial batch%' -- order of partial batches is not deterministic - AND message NOT SIMILAR TO '%(PushTxn|ResolveIntent|SystemConfigSpan)%' - AND tag NOT LIKE '%intExec=%' - AND tag NOT LIKE '%scExec%' - AND tag NOT LIKE '%IndexBackfiller%' - AND operation != 'dist sender send' ----- -flow CPut /Table/2/1/0/"t"/3/1 -> 53 -flow CPut /Table/3/1/53/2/1 -> database: users: > > -exec stmt rows affected: 0 - - -# More KV operations. -statement ok -SET tracing = on,kv,results; CREATE TABLE t.kv(k INT PRIMARY KEY, v INT); SET tracing = off - -query TT -SELECT operation, regexp_replace(regexp_replace(message, 'wall_time:\d+', 'wall_time:...'), 'wall_time:\d+', 'wall_time:...') as message - FROM [SHOW KV TRACE FOR SESSION] -WHERE message NOT LIKE '%Z/%' - AND operation NOT LIKE 'kv.DistSender: sending partial batch%' -- order of partial batches is not deterministic - AND message NOT SIMILAR TO '%(PushTxn|ResolveIntent|SystemConfigSpan)%' - AND tag NOT LIKE '%intExec=%' - AND tag NOT LIKE '%scExec%' - AND tag NOT LIKE '%IndexBackfiller%' - AND operation != 'dist sender send' ----- -flow CPut /Table/2/1/53/"kv"/3/1 -> 54 -flow CPut /Table/3/1/54/2/1 -> table: columns: > nullable:false hidden:false > columns: > nullable:true hidden:false > next_column_id:3 families: next_family_id:1 primary_index: interleave:<> partitioning: type:FORWARD > next_index_id:2 privileges: users: > next_mutation_id:1 format_version:3 state:PUBLIC view_query:"" drop_time:0 replacement_of: > audit_mode:DISABLED drop_job_id:0 create_query:"" create_as_of_time: > -exec stmt rows affected: 0 - -# We avoid using the full trace output, because that would make the -# ensuing trace especially chatty, as it traces the index backfill at -# the end of the implicit transaction. A chatty trace could be OK in -# tests, however the backfill also incur job table traffic which has a -# timestamp index, and we can't use (non-deterministic) timestamp -# values in expected values. -statement ok -SET tracing = on,kv,results; CREATE UNIQUE INDEX woo ON t.kv(v); SET tracing = off - -query TT -SELECT operation, - regexp_replace(regexp_replace(regexp_replace(message, 'mutationJobs:<[^>]*>', 'mutationJobs:<...>'), 'wall_time:\d+', 'wall_time:...'), 'wall_time:\d+', 'wall_time:...') as message - FROM [SHOW KV TRACE FOR SESSION] -WHERE message NOT LIKE '%Z/%' AND message NOT LIKE 'querying next range at%' - AND operation NOT LIKE 'kv.DistSender: sending partial batch%' -- order of partial batches is not deterministic - /* since the transactions involved are multi-range, intent resolving is async and - sometimes there's still intents around */ - AND message NOT SIMILAR TO '%(PushTxn|ResolveIntent|SystemConfigSpan)%' - AND tag NOT LIKE '%intExec=%' - AND tag NOT LIKE '%scExec%' - AND tag NOT LIKE '%IndexBackfiller%' - AND operation != 'dist sender send' ----- -flow Put /Table/3/1/54/2/1 -> table: columns: > nullable:false hidden:false > columns: > nullable:true hidden:false > next_column_id:3 families: next_family_id:1 primary_index: interleave:<> partitioning: type:FORWARD > next_index_id:3 privileges: users: > mutations: interleave:<> partitioning: type:FORWARD > state:DELETE_ONLY direction:ADD mutation_id:1 rollback:false > next_mutation_id:2 format_version:3 state:PUBLIC view_query:"" mutationJobs:<...> drop_time:0 replacement_of: > audit_mode:DISABLED drop_job_id:0 create_query:"" create_as_of_time: > -exec stmt rows affected: 0 - -statement ok -SET tracing = on,kv,results; INSERT INTO t.kv(k, v) VALUES (1,2); SET tracing = off - -query TT -SELECT operation, message FROM [SHOW KV TRACE FOR SESSION] - WHERE operation != 'dist sender send' ----- -flow CPut /Table/54/1/1/0 -> /TUPLE/2:2:Int/2 -flow InitPut /Table/54/2/2/0 -> /BYTES/0x89 -kv.DistSender: sending partial batch r20: sending batch 1 CPut, 1 EndTxn to (n1,s1):1 -flow fast path completed -exec stmt rows affected: 1 - - -statement error duplicate key value -SET tracing = on,kv,results; INSERT INTO t.kv(k, v) VALUES (1,2); SET tracing = off - -query TT -set tracing=off; -SELECT operation, message FROM [SHOW KV TRACE FOR SESSION] - WHERE operation != 'dist sender send' ----- -flow CPut /Table/54/1/1/0 -> /TUPLE/2:2:Int/2 -flow InitPut /Table/54/2/2/0 -> /BYTES/0x89 -kv.DistSender: sending partial batch r20: sending batch 1 CPut, 1 EndTxn to (n1,s1):1 -exec stmt execution failed after 0 rows: duplicate key value (k)=(1) violates unique constraint "primary" - -statement error duplicate key value -SET tracing = on,kv,results; INSERT INTO t.kv(k, v) VALUES (2,2); SET tracing = off - -query TT -set tracing=off; -SELECT operation, message FROM [SHOW KV TRACE FOR SESSION] - WHERE operation != 'dist sender send' ----- -flow CPut /Table/54/1/2/0 -> /TUPLE/2:2:Int/2 -flow InitPut /Table/54/2/2/0 -> /BYTES/0x8a -kv.DistSender: sending partial batch r20: sending batch 1 CPut, 1 EndTxn to (n1,s1):1 -exec stmt execution failed after 0 rows: duplicate key value (v)=(2) violates unique constraint "woo" - -statement ok -SET tracing = on,kv,results; CREATE TABLE t.kv2 AS TABLE t.kv; SET tracing = off - -query TT -SELECT operation, regexp_replace(regexp_replace(regexp_replace(message, 'wall_time:\d+', 'wall_time:...'), 'wall_time:\d+', 'wall_time:...'), '\d\d\d\d\d+', '...PK...') as message - FROM [SHOW KV TRACE FOR SESSION] -WHERE message NOT LIKE '%Z/%' - AND operation NOT LIKE 'kv.DistSender: sending partial batch%' -- order of partial batches is not deterministic - AND message NOT SIMILAR TO '%(PushTxn|ResolveIntent|SystemConfigSpan)%' - AND tag NOT LIKE '%intExec=%' - AND tag NOT LIKE '%scExec%' - AND tag NOT LIKE '%IndexBackfiller%' - AND operation != 'dist sender send' ----- -table reader Scan /Table/54/{1-2} -flow CPut /Table/2/1/53/"kv2"/3/1 -> 55 -flow CPut /Table/3/1/55/2/1 -> table: columns: > nullable:true hidden:false > columns: > nullable:true hidden:false > columns: > nullable:false default_expr:"unique_rowid()" hidden:true > next_column_id:4 families: next_family_id:1 primary_index: interleave:<> partitioning: type:FORWARD > next_index_id:2 privileges: users: > next_mutation_id:1 format_version:3 state:ADD view_query:"" drop_time:0 replacement_of: > audit_mode:DISABLED drop_job_id:0 create_query:"TABLE t.public.kv" create_as_of_time: > -exec stmt rows affected: 0 - -statement ok -SET tracing = on,kv,results; UPDATE t.kv2 SET v = v + 2; SET tracing = off - -query TT -SELECT operation, message - FROM [SHOW KV TRACE FOR SESSION] -WHERE message NOT LIKE '%Z/%' - AND message NOT SIMILAR TO '%(PushTxn|ResolveIntent|SystemConfigSpan)%' - AND tag NOT LIKE '%intExec=%' - AND tag NOT LIKE '%scExec%' - AND tag NOT LIKE '%IndexBackfiller%' - AND operation != 'dist sender send' ----- -[async] kv.DistSender: sending pre-commit query intents r7: sending batch 1 QueryIntent to (n1,s1):1 -table reader Scan /Table/55/{1-2} -table reader fetched: /kv2/primary/1/k/v -> /1/2 -flow Put /Table/55/1/1/0 -> /TUPLE/1:1:Int/1/1:2:Int/4 -flow fast path completed -exec stmt rows affected: 1 - -statement ok -SET tracing = on,kv,results; DELETE FROM t.kv2; SET tracing = off - -query TT -SELECT operation, message FROM [SHOW KV TRACE FOR SESSION] - WHERE operation != 'dist sender send' ----- -flow DelRange /Table/55/1 - /Table/55/2 -flow fast path completed -exec stmt rows affected: 1 - -statement ok -SET tracing = on,kv,results; DROP TABLE t.kv2; SET tracing = off - -query TT -SELECT operation, - regexp_replace(regexp_replace(regexp_replace(regexp_replace(message, 'wall_time:\d+', 'wall_time:...'), 'drop_job_id:[1-9]\d*', 'drop_job_id:...'), 'wall_time:\d+', 'wall_time:...'), 'drop_time:\d+', 'drop_time:...') as message - FROM [SHOW KV TRACE FOR SESSION] -WHERE message NOT LIKE '%Z/%' AND message NOT LIKE 'querying next range at%' - AND operation NOT LIKE 'kv.DistSender: sending partial batch%' -- order of partial batches is not deterministic - AND message NOT SIMILAR TO '%(PushTxn|ResolveIntent|SystemConfigSpan)%' - AND tag NOT LIKE '%intExec=%' - AND tag NOT LIKE '%scExec%' - AND tag NOT LIKE '%IndexBackfiller%' - AND operation != 'dist sender send' ----- -flow Put /Table/3/1/55/2/1 -> table: columns: > nullable:true hidden:false > columns: > nullable:true hidden:false > columns: > nullable:false default_expr:"unique_rowid()" hidden:true > next_column_id:4 families: next_family_id:1 primary_index: interleave:<> partitioning: type:FORWARD > next_index_id:2 privileges: users: > next_mutation_id:1 format_version:3 state:DROP draining_names: view_query:"" drop_time:... replacement_of: > audit_mode:DISABLED drop_job_id:... create_query:"TABLE t.public.kv" create_as_of_time: > -exec stmt rows affected: 0 - -statement ok -SET tracing = on,kv,results; DELETE FROM t.kv; SET tracing = off - -query TT -SELECT operation, message FROM [SHOW KV TRACE FOR SESSION] - WHERE operation != 'dist sender send' ----- -table reader Scan /Table/54/{1-2} -table reader fetched: /kv/primary/1/v -> /2 -flow Del /Table/54/2/2/0 -flow Del /Table/54/1/1/0 -kv.DistSender: sending partial batch r20: sending batch 1 Del to (n1,s1):1 -flow fast path completed -exec stmt rows affected: 1 - -statement ok -SET tracing = on,kv,results; DROP INDEX t.kv@woo CASCADE; SET tracing = off - -query TT -SELECT operation, - regexp_replace(regexp_replace(regexp_replace(message, 'wall_time:\d+', 'wall_time:...'), 'mutationJobs:<[^>]*>', 'mutationJobs:<...>'), 'wall_time:\d+', 'wall_time:...') as message - FROM [SHOW KV TRACE FOR SESSION] -WHERE message NOT LIKE '%Z/%' AND message NOT LIKE 'querying next range at%' - AND operation NOT LIKE 'kv.DistSender: sending partial batch%' -- order of partial batches is not deterministic - /* since the transactions involved are multi-range, intent resolving is async and - sometimes there's still intents around */ - AND message NOT SIMILAR TO '%(PushTxn|ResolveIntent|SystemConfigSpan)%' - AND tag NOT LIKE '%intExec=%' - AND tag NOT LIKE '%scExec%' - AND tag NOT LIKE '%IndexBackfiller%' - AND operation != 'dist sender send' ----- -flow Put /Table/3/1/54/2/1 -> table: columns: > nullable:false hidden:false > columns: > nullable:true hidden:false > next_column_id:3 families: next_family_id:1 primary_index: interleave:<> partitioning: type:FORWARD > next_index_id:3 privileges: users: > mutations: interleave:<> partitioning: type:FORWARD > state:DELETE_AND_WRITE_ONLY direction:DROP mutation_id:2 rollback:false > next_mutation_id:3 format_version:3 state:PUBLIC view_query:"" mutationJobs:<...> drop_time:0 replacement_of: > audit_mode:DISABLED drop_job_id:0 create_query:"" create_as_of_time: > -exec stmt rows affected: 0 - -statement ok -SET tracing = on,kv,results; DROP TABLE t.kv; SET tracing = off - -query TT -SELECT operation, regexp_replace(regexp_replace(regexp_replace(regexp_replace(message, 'wall_time:\d+', 'wall_time:...'), 'job_id:[1-9]\d*', 'job_id:...', 'g'), 'wall_time:\d+', 'wall_time:...'), 'drop_time:\d+', 'drop_time:...', 'g') as message - FROM [SHOW KV TRACE FOR SESSION] -WHERE message NOT LIKE '%Z/%' AND message NOT LIKE 'querying next range at%' - AND operation NOT LIKE 'kv.DistSender: sending partial batch%' -- order of partial batches is not deterministic - AND message NOT SIMILAR TO '%(PushTxn|ResolveIntent|SystemConfigSpan)%' - AND tag NOT LIKE '%intExec=%' - AND tag NOT LIKE '%scExec%' - AND tag NOT LIKE '%IndexBackfiller%' - AND operation != 'dist sender send' ----- -flow Put /Table/3/1/54/2/1 -> table: columns: > nullable:false hidden:false > columns: > nullable:true hidden:false > next_column_id:3 families: next_family_id:1 primary_index: interleave:<> partitioning: type:FORWARD > next_index_id:3 privileges: users: > next_mutation_id:3 format_version:3 state:DROP draining_names: view_query:"" drop_time:... replacement_of: > audit_mode:DISABLED drop_job_id:... gc_mutations: create_query:"" create_as_of_time: > -exec stmt rows affected: 0 - -# Check that session tracing does not inhibit the fast path for inserts & -# friends (the path resulting in 1PC transactions). - -subtest autocommit - -statement ok -CREATE TABLE t.kv3(k INT PRIMARY KEY, v INT) - -statement ok -SET tracing = on; INSERT INTO t.kv3 (k, v) VALUES (1,1); SET tracing = off - -# We look for rows containing an EndTxn as proof that the -# insertNode is committing the txn. -query T -SELECT message FROM [SHOW TRACE FOR SESSION] WHERE message LIKE e'%1 CPut, 1 EndTxn%' AND message NOT LIKE e'%proposing command%' ----- -r21: sending batch 1 CPut, 1 EndTxn to (n1,s1):1 -1 CPut, 1 EndTxn - -## TODO(tschottdorf): re-enable -# statement ok -# CREATE TABLE t.enginestats(k INT PRIMARY KEY, v INT) -# -# statement ok -# SHOW TRACE FOR SELECT * FROM t.enginestats -# -# query T -# SELECT message FROM [ SHOW TRACE FOR SESSION ] WHERE message LIKE '%InternalDelete%' -# ---- -# engine stats: {InternalDeleteSkippedCount:0 TimeBoundNumSSTs:0} - -# Check that we can run set tracing regardless of the current tracing state. -# This is convenient; sometimes it's unclear, for example, if you previously -# stopped tracing or not, so issuing a set tracing=off should just work. -subtest idempotent - -statement ok -SET tracing = on; SET tracing = on; - -statement ok -SET tracing = off; SET tracing = off; - -# Check that we can run set tracing in the aborted state (this is implemented by -# making set tracing an ObserverStmt). This is very convenient for clients that -# start tracing, then might get an error, then want to stop tracing. -subtest aborted_txn - -query error pq: foo -BEGIN; SELECT crdb_internal.force_error('', 'foo') - -statement ok -SET tracing = off - -statement ok -ROLLBACK - -subtest replica - -statement ok -CREATE TABLE t (a INT PRIMARY KEY) - -statement ok -SET tracing = on; SELECT * FROM t; SET tracing = off - -query III colnames -SELECT DISTINCT node_id, store_id, replica_id - FROM [SHOW EXPERIMENTAL_REPLICA TRACE FOR SESSION] ----- -node_id store_id replica_id -1 1 6 -1 1 7 -1 1 21 - -subtest system_table_lookup - -# We use AOST to bypass the table cache. -statement ok -SET tracing = on,kv; SELECT * FROM system.eventlog AS OF SYSTEM TIME '-1us'; SET tracing = off - -query TT -SELECT operation, regexp_replace(regexp_replace(regexp_replace(message, 'job_id:[1-9]\d*', 'job_id:...', 'g'), 'wall_time:\d+', 'wall_time:...'), 'drop_time:\d+', 'drop_time:...', 'g') as message - FROM [SHOW KV TRACE FOR SESSION] -WHERE (message LIKE 'querying next range%' OR message LIKE '%batch%') - AND message NOT LIKE '%SystemConfigSpan%' - AND message NOT LIKE '%PushTxn%' ----- -dist sender send querying next range at /Table/3/1/12/2/1 -dist sender send r6: sending batch 1 Get to (n1,s1):1 -dist sender send querying next range at /Table/3/1/1/2/1 -dist sender send r6: sending batch 1 Get to (n1,s1):1 -dist sender send querying next range at /Table/12/1 -dist sender send r8: sending batch 1 Scan to (n1,s1):1 diff --git a/pkg/sql/logictest/testdata/planner_test/spool b/pkg/sql/logictest/testdata/planner_test/spool deleted file mode 100644 index f8ab6b18bf37..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/spool +++ /dev/null @@ -1,245 +0,0 @@ -# LogicTest: local - -statement ok -CREATE TABLE t(x INT PRIMARY KEY); INSERT INTO t VALUES(1); - -# Check that if a mutation uses further processing, a spool is added. -query TTT -EXPLAIN WITH a AS (INSERT INTO t VALUES (2) RETURNING x) - SELECT * FROM a LIMIT 1 ----- -limit · · - │ count 1 - └── spool · · - │ limit 1 - └── run · · - └── insert · · - │ into t(x) - │ strategy inserter - └── values · · -· size 1 column, 1 row - -query TTT -EXPLAIN WITH a AS (DELETE FROM t RETURNING x) - SELECT * FROM a LIMIT 1 ----- -limit · · - │ count 1 - └── spool · · - │ limit 1 - └── run · · - └── delete · · - │ from t - │ strategy deleter - └── scan · · -· table t@primary -· spans ALL - - -query TTT -EXPLAIN WITH a AS (UPDATE t SET x = x + 1 RETURNING x) - SELECT * FROM a LIMIT 1 ----- -limit · · - │ count 1 - └── spool · · - │ limit 1 - └── run · · - └── update · · - │ table t - │ set x - │ strategy updater - └── render · · - └── scan · · -· table t@primary -· spans ALL - -query TTT -EXPLAIN WITH a AS (UPSERT INTO t VALUES (2) RETURNING x) - SELECT * FROM a LIMIT 1 ----- -limit · · - │ count 1 - └── spool · · - │ limit 1 - └── run · · - └── upsert · · - │ into t(x) - │ strategy upserter - └── values · · -· size 1 column, 1 row - -# Ditto all mutations, with the statement source syntax. -query TTT -EXPLAIN SELECT * FROM [INSERT INTO t VALUES (2) RETURNING x] LIMIT 1 ----- -limit · · - │ count 1 - └── spool · · - │ limit 1 - └── run · · - └── insert · · - │ into t(x) - │ strategy inserter - └── values · · -· size 1 column, 1 row - -query TTT -EXPLAIN SELECT * FROM [DELETE FROM t RETURNING x] LIMIT 1 ----- -limit · · - │ count 1 - └── spool · · - │ limit 1 - └── run · · - └── delete · · - │ from t - │ strategy deleter - └── scan · · -· table t@primary -· spans ALL - -query TTT -EXPLAIN SELECT * FROM [UPDATE t SET x = x + 1 RETURNING x] LIMIT 1 ----- -limit · · - │ count 1 - └── spool · · - │ limit 1 - └── run · · - └── update · · - │ table t - │ set x - │ strategy updater - └── render · · - └── scan · · -· table t@primary -· spans ALL - -query TTT -EXPLAIN SELECT * FROM [UPSERT INTO t VALUES (2) RETURNING x] LIMIT 1 ----- -limit · · - │ count 1 - └── spool · · - │ limit 1 - └── run · · - └── upsert · · - │ into t(x) - │ strategy upserter - └── values · · -· size 1 column, 1 row - -# Check that a spool is also inserted for other processings than LIMIT. -query TTT -EXPLAIN SELECT * FROM [INSERT INTO t VALUES (2) RETURNING x] ORDER BY x ----- -sort · · - │ order +x - └── spool · · - └── run · · - └── insert · · - │ into t(x) - │ strategy inserter - └── values · · -· size 1 column, 1 row - -query TTT -EXPLAIN SELECT * FROM [INSERT INTO t VALUES (2) RETURNING x], t ----- -hash-join · · - │ type cross - ├── spool · · - │ └── run · · - │ └── insert · · - │ │ into t(x) - │ │ strategy inserter - │ └── values · · - │ size 1 column, 1 row - └── scan · · -· table t@primary -· spans ALL - -# Check that if a spool is already added at some level, then it is not added -# again at levels below. -query TTT -EXPLAIN WITH a AS (INSERT INTO t VALUES(2) RETURNING x), - b AS (INSERT INTO t SELECT x+1 FROM a RETURNING x) - SELECT * FROM b LIMIT 1 ----- -limit · · - │ count 1 - └── spool · · - │ limit 1 - └── run · · - └── insert · · - │ into t(x) - │ strategy inserter - └── render · · - └── run · · - └── insert · · - │ into t(x) - │ strategy inserter - └── values · · -· size 1 column, 1 row - -# Check that no spool is inserted if a top-level render is elided. -query TTT -EXPLAIN SELECT * FROM [INSERT INTO t VALUES (2) RETURNING x] ----- -run · · - └── insert · · - │ into t(x) - │ strategy inserter - └── values · · -· size 1 column, 1 row - -# Check that no spool is used for a top-level INSERT, but -# sub-INSERTs still get a spool. -query TTT -EXPLAIN INSERT INTO t SELECT x+1 FROM [INSERT INTO t VALUES(2) RETURNING x] ----- -count · · - └── insert · · - │ into t(x) - │ strategy inserter - └── spool · · - └── render · · - └── run · · - └── insert · · - │ into t(x) - │ strategy inserter - └── values · · -· size 1 column, 1 row - -# Check that simple computations using RETURNING get their spool pulled up. -query TTT -EXPLAIN SELECT * FROM [INSERT INTO t VALUES (1) RETURNING x+10] WHERE @1 < 3 LIMIT 10 ----- -limit · · - │ count 10 - └── spool · · - │ limit 10 - └── filter · · - │ filter "?column?" < 3 - └── render · · - └── run · · - └── insert · · - │ into t(x) - │ strategy inserter - └── values · · -· size 1 column, 1 row - -# Check that a pulled up spool gets elided at the top level. -query TTT -EXPLAIN SELECT * FROM [INSERT INTO t VALUES (1) RETURNING x+10] WHERE @1 < 3 ----- -filter · · - │ filter "?column?" < 3 - └── render · · - └── run · · - └── insert · · - │ into t(x) - │ strategy inserter - └── values · · -· size 1 column, 1 row diff --git a/pkg/sql/logictest/testdata/planner_test/srfs b/pkg/sql/logictest/testdata/planner_test/srfs deleted file mode 100644 index 36da12d68b61..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/srfs +++ /dev/null @@ -1,153 +0,0 @@ -# LogicTest: local - -subtest generate_series - -query TTT -EXPLAIN SELECT * FROM generate_series(1, 3) ----- -project set · · - └── emptyrow · · - -query TTT -EXPLAIN SELECT * FROM generate_series(1, 2), generate_series(1, 2) ----- -hash-join · · - │ type cross - ├── project set · · - │ └── emptyrow · · - └── project set · · - └── emptyrow · · - -query TTT -EXPLAIN SELECT generate_series(1, 3) ----- -project set · · - └── emptyrow · · - -subtest multiple_SRFs - -query TTTTT -EXPLAIN (VERBOSE) SELECT generate_series(1, 2), generate_series(1, 2) ----- -project set · · (generate_series, generate_series) · - │ render 0 generate_series(1, 2) · · - │ render 1 generate_series(1, 2) · · - └── emptyrow · · () · - -statement ok -CREATE TABLE t (a string) - -statement ok -CREATE TABLE u (b string) - -query TTTTT -EXPLAIN (VERBOSE) SELECT t.*, u.*, generate_series(1,2), generate_series(3, 4) FROM t, u ----- -render · · (a, b, generate_series, generate_series) · - │ render 0 test.public.t.a · · - │ render 1 test.public.u.b · · - │ render 2 generate_series_0.generate_series · · - │ render 3 generate_series_1.generate_series · · - └── project set · · (a, rowid[hidden,omitted], b, rowid[hidden,omitted], generate_series, generate_series) · - │ render 0 generate_series(1, 2) · · - │ render 1 generate_series(3, 4) · · - └── hash-join · · (a, rowid[hidden,omitted], b, rowid[hidden,omitted]) · - │ type cross · · - ├── scan · · (a, rowid[hidden,omitted]) rowid!=NULL; key(rowid) - │ table t@primary · · - │ spans ALL · · - └── scan · · (b, rowid[hidden,omitted]) rowid!=NULL; key(rowid) -· table u@primary · · -· spans ALL · · - -subtest corr_SRFs - -# Check that sources get omitted properly. -query TTT -SELECT tree, description, columns FROM [EXPLAIN (VERBOSE) SELECT generate_series(1, 3) FROM t] ----- -render · (generate_series) - │ generate_series_0.generate_series · - └── project set · (a[omitted], rowid[hidden,omitted], generate_series) - │ generate_series(1, 3) · - └── scan · (a[omitted], rowid[hidden,omitted]) -· t@primary · -· ALL · - -# Check that SRFs get omitted properly. -query TTT -SELECT tree, description, columns FROM [EXPLAIN (VERBOSE) SELECT a FROM (SELECT a, generate_series(1, 3) FROM t)] ----- -render · (a) - │ a · - └── render · (a, generate_series[omitted]) - │ test.public.t.a · - │ NULL · - └── project set · (a, rowid[hidden,omitted], generate_series[omitted]) - │ generate_series(1, 3) · - └── scan · (a, rowid[hidden,omitted]) -· t@primary · -· ALL · - -# Check that an omitted column in the render doesn't cause the omitted -# column to disappear from underneath the SRF. -query TTT -SELECT tree, description, columns FROM [EXPLAIN (VERBOSE) SELECT count(*) FROM (SELECT generate_series(1, length(a)) FROM t)] ----- -group · (count) - │ count_rows() · - │ · · - └── render · () - └── render · (generate_series[omitted]) - │ NULL · - └── project set · (a, rowid[hidden,omitted], generate_series[omitted]) - │ generate_series(1, length(test.public.t.a)) · - └── scan · (a, rowid[hidden,omitted]) -· t@primary · -· ALL · - -query TTT -SELECT tree, description, columns FROM [EXPLAIN (VERBOSE) SELECT generate_series(1, length(a)) FROM t] ----- -render · (generate_series) - │ generate_series_0.generate_series · - └── project set · (a, rowid[hidden,omitted], generate_series) - │ generate_series(1, length(test.public.t.a)) · - └── scan · (a, rowid[hidden,omitted]) -· t@primary · -· ALL · - -# Check that the unary source gets processed properly. -query TTT -SELECT tree, description, columns FROM [EXPLAIN (VERBOSE) SELECT generate_series(1, length(a)), crdb_internal.unary_table(), generate_series(1, 3) FROM t] ----- -render · (generate_series, "crdb_internal.unary_table", generate_series) - │ generate_series_0.generate_series · - │ () · - │ generate_series_2.generate_series · - └── project set · (a, rowid[hidden,omitted], generate_series, generate_series) - │ generate_series(1, length(test.public.t.a)) · - │ crdb_internal.unary_table() · - │ generate_series(1, 3) · - └── scan · (a, rowid[hidden,omitted]) -· t@primary · -· ALL · - -subtest srf_source_order - -# Check that SRFs do not abuse their source's ordering. - -statement ok -CREATE TABLE v(x INT PRIMARY KEY) - -query TTTTT -EXPLAIN(VERBOSE) SELECT x, generate_series(3, x, -1) FROM v -ORDER BY 1, 2; ----- -sort · · (x, generate_series) x!=NULL; +x,+generate_series - │ order +x,+generate_series · · - └── project set · · (x, generate_series) x!=NULL; +x - │ render 0 generate_series(3, test.public.v.x, -1) · · - └── scan · · (x) x!=NULL; key(x); +x -· table v@primary · · -· spans ALL · · diff --git a/pkg/sql/logictest/testdata/planner_test/subquery b/pkg/sql/logictest/testdata/planner_test/subquery deleted file mode 100644 index f2e7c4b81f8d..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/subquery +++ /dev/null @@ -1,188 +0,0 @@ -# LogicTest: local - -# Tests for subqueries (SELECT statements which are part of a bigger statement). - -query TTT -EXPLAIN SELECT (SELECT 1) ----- -root · · - ├── render · · - │ └── emptyrow · · - └── subquery · · - │ id @S1 - │ original sql (SELECT 1) - │ exec mode one row - └── max1row · · - └── limit · · - │ count 2 - └── render · · - └── emptyrow · · - -statement ok -CREATE TABLE abc (a INT PRIMARY KEY, b INT, c INT) - -query TTT -EXPLAIN ALTER TABLE abc SPLIT AT VALUES ((SELECT 42)) ----- -root · · - ├── split · · - │ └── values · · - │ size 1 column, 1 row - └── subquery · · - │ id @S1 - │ original sql (SELECT 42) - │ exec mode one row - └── max1row · · - └── limit · · - │ count 2 - └── render · · - └── emptyrow · · - -statement ok -ALTER TABLE abc SPLIT AT VALUES ((SELECT 1)) - -query TTT -EXPLAIN SELECT EXISTS (SELECT a FROM abc) ----- -root · · - ├── render · · - │ └── emptyrow · · - └── subquery · · - │ id @S1 - │ original sql EXISTS (SELECT a FROM abc) - │ exec mode exists - └── limit · · - │ count 1 - └── render · · - └── scan · · -· table abc@primary -· spans ALL -· limit 1 - -query TTT -EXPLAIN SELECT (SELECT a FROM abc) ----- -root · · - ├── render · · - │ └── emptyrow · · - └── subquery · · - │ id @S1 - │ original sql (SELECT a FROM abc) - │ exec mode one row - └── max1row · · - └── limit · · - │ count 2 - └── render · · - └── scan · · -· table abc@primary -· spans ALL -· limit 2 - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM abc WHERE a = (SELECT max(a) FROM abc WHERE EXISTS(SELECT * FROM abc WHERE c=a+3)) ----- -root · · (a, b, c) a!=NULL; key(a) - ├── scan · · (a, b, c) a!=NULL; key(a) - │ table abc@primary · · - │ spans ALL · · - │ filter a = @S2 · · - ├── subquery · · (a, b, c) a!=NULL; key(a) - │ │ id @S1 · · - │ │ original sql EXISTS (SELECT * FROM abc WHERE c = (a + 3)) · · - │ │ exec mode exists · · - │ └── limit · · (a, b[omitted], c) a!=NULL; c!=NULL; key(a) - │ │ count 1 · · - │ └── scan · · (a, b[omitted], c) a!=NULL; c!=NULL; key(a) - │ table abc@primary · · - │ spans ALL · · - │ filter c = (a + 3) · · - └── subquery · · (a, b, c) a!=NULL; key(a) - │ id @S2 · · - │ original sql (SELECT max(a) FROM abc WHERE EXISTS (SELECT * FROM abc WHERE c = (a + 3))) · · - │ exec mode one row · · - └── max1row · · (max) · - └── limit · · (max) · - │ count 2 · · - └── group · · (max) · - │ aggregate 0 max(a) · · - │ scalar · · · - └── render · · (a) a!=NULL; key(a); -a - │ render 0 test.public.abc.a · · - └── revscan · · (a, b[omitted], c[omitted]) a!=NULL; key(a); -a -· table abc@primary · · -· spans ALL · · -· filter @S1 AND (a IS NOT NULL) · · - -# check that residual filters are not expanded twice -query TTTTT -EXPLAIN (VERBOSE) SELECT a FROM abc WHERE a IN (SELECT a FROM abc) ----- -root · · (a) a!=NULL; key(a) - ├── render · · (a) a!=NULL; key(a) - │ │ render 0 test.public.abc.a · · - │ └── scan · · (a, b[omitted], c[omitted]) a!=NULL; key(a) - │ table abc@primary · · - │ spans ALL · · - │ filter a IN @S1 · · - └── subquery · · (a) a!=NULL; key(a) - │ id @S1 · · - │ original sql (SELECT a FROM abc) · · - │ exec mode all rows normalized · · - └── render · · (a) a!=NULL; key(a) - │ render 0 test.public.abc.a · · - └── scan · · (a, b[omitted], c[omitted]) a!=NULL; key(a) -· table abc@primary · · -· spans ALL · · - -query TTT -EXPLAIN SELECT * FROM (SELECT * FROM (VALUES (1, 8, 8), (3, 1, 1), (2, 4, 4)) AS moo (moo1, moo2, moo3) ORDER BY moo2) as foo (foo1) ORDER BY foo1 ----- -sort · · - │ order +foo1 - └── values · · -· size 3 columns, 3 rows - -# the subquery's plan must be visible in EXPLAIN -query TTT -EXPLAIN VALUES (1), ((SELECT 2)) ----- -root · · - ├── values · · - │ size 1 column, 2 rows - └── subquery · · - │ id @S1 - │ original sql (SELECT 2) - │ exec mode one row - └── max1row · · - └── limit · · - │ count 2 - └── render · · - └── emptyrow · · - -# This test checks that the double sub-query plan expansion caused by a -# sub-expression being shared by two or more plan nodes does not -# panic. -statement ok -CREATE TABLE tab4(col0 INTEGER, col1 FLOAT, col3 INTEGER, col4 FLOAT) - -statement ok -CREATE INDEX idx_tab4_0 ON tab4 (col4,col0) - -query TTT -EXPLAIN SELECT col0 FROM tab4 WHERE (col0 <= 0 AND col4 <= 5.38) OR (col4 IN (SELECT col1 FROM tab4 WHERE col1 > 8.27)) AND (col3 <= 5 AND (col3 BETWEEN 7 AND 9)) ----- -root · · - ├── render · · - │ └── scan · · - │ table tab4@primary - │ spans ALL - │ filter ((col0 <= 0) AND (col4 <= 5.38)) OR ((((col4 IN @S1) AND (col3 <= 5)) AND (col3 >= 7)) AND (col3 <= 9)) - └── subquery · · - │ id @S1 - │ original sql (SELECT col1 FROM tab4 WHERE col1 > 8.27) - │ exec mode all rows normalized - └── render · · - └── scan · · -· table tab4@primary -· spans ALL -· filter col1 > 8.27 diff --git a/pkg/sql/logictest/testdata/planner_test/tuple b/pkg/sql/logictest/testdata/planner_test/tuple deleted file mode 100644 index 4e42f81d28d8..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/tuple +++ /dev/null @@ -1,134 +0,0 @@ -# LogicTest: local - -subtest unlabeled_tuple - -statement ok -CREATE TABLE uvw ( - u INT, - v INT, - w INT, - INDEX (u,v,w) -) - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM uvw WHERE (u, v, w) >= (1, 2, 3) ORDER BY u, v, w ----- -render · · (u, v, w) +u,+v,+w - │ render 0 test.public.uvw.u · · - │ render 1 test.public.uvw.v · · - │ render 2 test.public.uvw.w · · - └── scan · · (u, v, w, rowid[hidden,omitted]) rowid!=NULL; weak-key(u,v,w,rowid); +u,+v,+w -· table uvw@uvw_u_v_w_idx · · -· spans /1/2/3- · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM uvw WHERE (u, v, w) > (2, 1, 1) ORDER BY u, v, w ----- -render · · (u, v, w) +u,+v,+w - │ render 0 test.public.uvw.u · · - │ render 1 test.public.uvw.v · · - │ render 2 test.public.uvw.w · · - └── scan · · (u, v, w, rowid[hidden,omitted]) rowid!=NULL; weak-key(u,v,w,rowid); +u,+v,+w -· table uvw@uvw_u_v_w_idx · · -· spans /2/1/2- · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM uvw WHERE (u, v, w) <= (2, 3, 1) ORDER BY u, v, w ----- -render · · (u, v, w) +u,+v,+w - │ render 0 test.public.uvw.u · · - │ render 1 test.public.uvw.v · · - │ render 2 test.public.uvw.w · · - └── scan · · (u, v, w, rowid[hidden,omitted]) rowid!=NULL; weak-key(u,v,w,rowid); +u,+v,+w -· table uvw@uvw_u_v_w_idx · · -· spans /!NULL-/2/3/2 · · -· filter (u, v, w) <= (2, 3, 1) · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM uvw WHERE (u, v, w) < (2, 2, 2) ORDER BY u, v, w ----- -render · · (u, v, w) +u,+v,+w - │ render 0 test.public.uvw.u · · - │ render 1 test.public.uvw.v · · - │ render 2 test.public.uvw.w · · - └── scan · · (u, v, w, rowid[hidden,omitted]) rowid!=NULL; weak-key(u,v,w,rowid); +u,+v,+w -· table uvw@uvw_u_v_w_idx · · -· spans /!NULL-/2/2/2 · · -· filter (u, v, w) < (2, 2, 2) · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM uvw WHERE (u, v, w) != (1, 2, 3) ORDER BY u, v, w ----- -render · · (u, v, w) +u,+v,+w - │ render 0 test.public.uvw.u · · - │ render 1 test.public.uvw.v · · - │ render 2 test.public.uvw.w · · - └── scan · · (u, v, w, rowid[hidden,omitted]) rowid!=NULL; weak-key(u,v,w,rowid); +u,+v,+w -· table uvw@uvw_u_v_w_idx · · -· spans -/1/2/3 /1/2/4- · · -· filter (u, v, w) != (1, 2, 3) · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM uvw WHERE (u, v, w) >= (1, NULL, 3) ORDER BY u, v, w ----- -render · · (u, v, w) +u,+v,+w - │ render 0 test.public.uvw.u · · - │ render 1 test.public.uvw.v · · - │ render 2 test.public.uvw.w · · - └── scan · · (u, v, w, rowid[hidden,omitted]) rowid!=NULL; weak-key(u,v,w,rowid); +u,+v,+w -· table uvw@uvw_u_v_w_idx · · -· spans /2- · · - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM uvw WHERE (u, v, w) < (2, NULL, 3) ORDER BY u, v, w ----- -render · · (u, v, w) +u,+v,+w - │ render 0 test.public.uvw.u · · - │ render 1 test.public.uvw.v · · - │ render 2 test.public.uvw.w · · - └── scan · · (u, v, w, rowid[hidden,omitted]) rowid!=NULL; weak-key(u,v,w,rowid); +u,+v,+w -· table uvw@uvw_u_v_w_idx · · -· spans /!NULL-/2 · · - -statement ok -DROP TABLE uvw - -# Regression test for #6390. -statement ok -CREATE TABLE abc (a INT, b INT, c INT, INDEX(a, b)) - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM abc WHERE (a, b, c) > (1, 2, 3) AND (a, b, c) < (8, 9, 10) ----- -render · · (a, b, c) · - │ render 0 test.public.abc.a · · - │ render 1 test.public.abc.b · · - │ render 2 test.public.abc.c · · - └── index-join · · (a, b, c, rowid[hidden,omitted]) rowid!=NULL; weak-key(a,b,rowid) - │ table abc@primary · · - │ filter ((a, b, c) > (1, 2, 3)) AND ((a, b, c) < (8, 9, 10)) · · - └── scan · · (a, b, c[omitted], rowid[hidden]) rowid!=NULL; weak-key(a,b,rowid) -· table abc@abc_a_b_idx · · -· spans /1/2-/8/10 · · -· filter ((a, b) >= (1, 2)) AND ((a, b) <= (8, 9)) · · - -statement ok -DROP TABLE abc - -statement ok -CREATE TABLE abc (a INT, b INT, c INT, INDEX(a, b DESC, c)) - -query TTTTT -EXPLAIN (VERBOSE) SELECT * FROM abc WHERE (a, b, c) > (1, 2, 3) ----- -render · · (a, b, c) · - │ render 0 test.public.abc.a · · - │ render 1 test.public.abc.b · · - │ render 2 test.public.abc.c · · - └── scan · · (a, b, c, rowid[hidden,omitted]) rowid!=NULL; weak-key(a,b,c,rowid) -· table abc@abc_a_b_c_idx · · -· spans /1- · · -· filter (a, b, c) > (1, 2, 3) · · - -statement ok -DROP TABLE abc diff --git a/pkg/sql/logictest/testdata/planner_test/union b/pkg/sql/logictest/testdata/planner_test/union deleted file mode 100644 index e6ade41a6255..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/union +++ /dev/null @@ -1,44 +0,0 @@ -# LogicTest: local - -statement ok -CREATE TABLE uniontest ( - k INT, - v INT -) - -query TTT -EXPLAIN SELECT v FROM uniontest UNION SELECT k FROM uniontest ----- -union · · - ├── render · · - │ └── scan · · - │ table uniontest@primary - │ spans ALL - └── render · · - └── scan · · -· table uniontest@primary -· spans ALL - -query TTT -EXPLAIN SELECT v FROM uniontest UNION ALL SELECT k FROM uniontest ----- -append · · - ├── render · · - │ └── scan · · - │ table uniontest@primary - │ spans ALL - └── render · · - └── scan · · -· table uniontest@primary -· spans ALL - -# Check that EXPLAIN properly releases memory for virtual tables. -query TTT -EXPLAIN SELECT node_id FROM crdb_internal.node_build_info UNION VALUES(123) ----- -union · · - ├── values · · - │ size 1 column, 1 row - └── render · · - └── values · · -· size 3 columns, 6 rows diff --git a/pkg/sql/logictest/testdata/planner_test/update b/pkg/sql/logictest/testdata/planner_test/update deleted file mode 100644 index 611145a7b99d..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/update +++ /dev/null @@ -1,299 +0,0 @@ -# LogicTest: local - -statement ok -CREATE TABLE kv2 ( - k CHAR PRIMARY KEY, - v CHAR, - UNIQUE INDEX a (v), - FAMILY (k), - FAMILY (v) -) - -statement count 4 -INSERT INTO kv2 VALUES ('a', 'b'), ('c', 'd'), ('e', 'f'), ('f', 'g') - -statement ok -SET tracing = on,kv,results; SELECT * FROM kv2; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /kv2/primary/'a' -> NULL -fetched: /kv2/primary/'a'/v -> 'b' -fetched: /kv2/primary/'c' -> NULL -fetched: /kv2/primary/'c'/v -> 'd' -fetched: /kv2/primary/'e' -> NULL -fetched: /kv2/primary/'e'/v -> 'f' -fetched: /kv2/primary/'f' -> NULL -fetched: /kv2/primary/'f'/v -> 'g' -output row: ['a' 'b'] -output row: ['c' 'd'] -output row: ['e' 'f'] -output row: ['f' 'g'] - -statement ok -SET tracing = on,kv,results; SELECT * FROM kv2@a; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /kv2/a/'b' -> /'a' -fetched: /kv2/a/'d' -> /'c' -fetched: /kv2/a/'f' -> /'e' -fetched: /kv2/a/'g' -> /'f' -output row: ['a' 'b'] -output row: ['c' 'd'] -output row: ['e' 'f'] -output row: ['f' 'g'] - -statement error duplicate key value \(v\)=\('g'\) violates unique constraint "a" -UPDATE kv2 SET v = 'g' WHERE k IN ('a') - -statement ok -SET tracing = on,kv,results; SELECT * FROM kv2; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /kv2/primary/'a' -> NULL -fetched: /kv2/primary/'a'/v -> 'b' -fetched: /kv2/primary/'c' -> NULL -fetched: /kv2/primary/'c'/v -> 'd' -fetched: /kv2/primary/'e' -> NULL -fetched: /kv2/primary/'e'/v -> 'f' -fetched: /kv2/primary/'f' -> NULL -fetched: /kv2/primary/'f'/v -> 'g' -output row: ['a' 'b'] -output row: ['c' 'd'] -output row: ['e' 'f'] -output row: ['f' 'g'] - -statement ok -SET tracing = on,kv,results; SELECT * FROM kv2@a; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /kv2/a/'b' -> /'a' -fetched: /kv2/a/'d' -> /'c' -fetched: /kv2/a/'f' -> /'e' -fetched: /kv2/a/'g' -> /'f' -output row: ['a' 'b'] -output row: ['c' 'd'] -output row: ['e' 'f'] -output row: ['f' 'g'] - -statement ok -CREATE TABLE xyz ( - x INT PRIMARY KEY, - y INT, - z INT -) - -query TTT -EXPLAIN UPDATE xyz SET y = x ----- -count · · - └── update · · - │ table xyz - │ set y - │ strategy updater - └── scan · · -· table xyz@primary -· spans ALL - -query TTTTT -EXPLAIN (VERBOSE) UPDATE xyz SET (x, y) = (1, 2) ----- -count · · () · - └── update · · () · - │ table xyz · · - │ set x, y · · - │ strategy updater · · - └── render · · (x, y, z, "?column?", "?column?") "?column?"=CONST; "?column?"=CONST; x!=NULL; key(x) - │ render 0 test.public.xyz.x · · - │ render 1 test.public.xyz.y · · - │ render 2 test.public.xyz.z · · - │ render 3 1 · · - │ render 4 2 · · - └── scan · · (x, y, z) x!=NULL; key(x) -· table xyz@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) UPDATE xyz SET (x, y) = (y, x) ----- -count · · () · - └── update · · () · - │ table xyz · · - │ set x, y · · - │ strategy updater · · - └── scan · · (x, y, z) x!=NULL; key(x) -· table xyz@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (VERBOSE) UPDATE xyz SET (x, y) = (2, 2) ----- -count · · () · - └── update · · () · - │ table xyz · · - │ set x, y · · - │ strategy updater · · - └── render · · (x, y, z, "?column?") "?column?"=CONST; x!=NULL; key(x) - │ render 0 test.public.xyz.x · · - │ render 1 test.public.xyz.y · · - │ render 2 test.public.xyz.z · · - │ render 3 2 · · - └── scan · · (x, y, z) x!=NULL; key(x) -· table xyz@primary · · -· spans ALL · · - -statement ok -CREATE TABLE pks ( - k1 INT, - k2 INT, - v INT, - PRIMARY KEY (k1, k2), - UNIQUE INDEX i (k2, v), - FAMILY (k1, k2), - FAMILY (v) -) - -statement count 2 -INSERT INTO pks VALUES (1, 2, 3), (4, 5, 3) - -statement error duplicate key value \(k2,v\)=\(5,3\) violates unique constraint "i" -UPDATE pks SET k2 = 5 where k1 = 1 - -# Test updating only one of the columns of a multi-column primary key. - -statement count 1 -UPDATE pks SET k1 = 2 WHERE k1 = 1 - -statement ok -SET tracing = on,kv,results; SELECT * FROM pks WHERE k1 = 2; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /pks/primary/2/2 -> NULL -fetched: /pks/primary/2/2/v -> 3 -output row: [2 2 3] - -# Check that UPDATE properly supports ORDER BY (MySQL extension) - -statement ok -CREATE TABLE kv ( - k INT PRIMARY KEY, - v INT -) - -query TTT -EXPLAIN UPDATE kv SET v = v + 1 ORDER BY v DESC ----- -count · · - └── update · · - │ table kv - │ set v - │ strategy updater - └── render · · - └── sort · · - │ order -v - └── scan · · -· table kv@primary -· spans ALL - -# Use case for UPDATE ... ORDER BY: renumbering a PK without unique violation. -query TTT -EXPLAIN UPDATE kv SET v = v - 1 WHERE k < 3 LIMIT 1 ----- -count · · - └── update · · - │ table kv - │ set v - │ strategy updater - └── render · · - └── limit · · - │ count 1 - └── scan · · -· table kv@primary -· spans -/2/# -· limit 1 - -# Check that updates on tables with multiple column families behave as -# they should. - -statement ok -CREATE TABLE tu (a INT PRIMARY KEY, b INT, c INT, d INT, FAMILY (a), FAMILY (b), FAMILY (c,d)); - INSERT INTO tu VALUES (1, 2, 3, 4) - -statement ok -SET tracing = on,kv,results; UPDATE tu SET b = NULL, c = NULL, d = NULL; SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] - WHERE operation != 'dist sender send' ----- -Scan /Table/57/{1-2} -fetched: /tu/primary/1 -> NULL -fetched: /tu/primary/1/b -> 2 -fetched: /tu/primary/1/c/d -> /3/4 -Del /Table/57/1/1/1/1 -Del /Table/57/1/1/2/1 -fast path completed -rows affected: 1 - -# Ensure that the scan for cross-range point updates are parallelized. -statement ok -CREATE TABLE a (a INT PRIMARY KEY, b INT) - -query TTT -EXPLAIN UPDATE a SET b = 10 WHERE a IN (10, 20) ----- -count · · - └── update · · - │ table a - │ set b - │ strategy updater - └── render · · - └── scan · · -· table a@primary -· spans /10-/10/# /20-/20/# -· parallel · - -statement ok -ALTER TABLE a SPLIT AT VALUES(5) - -# Run a select to prime the range cache to simplify the trace below. -statement ok -SELECT * FROM a - -# Make sure that the scan for the update actually gets parallelized. -statement ok -SET tracing = on; UPDATE a SET b=10 WHERE a = 0 OR a = 10; SET tracing = off - -# The span "sending partial batch" means that the scan was parallelized. -# If this test is failing and doesn't have that span, it means that the scanNode -# was improperly configured to add a limit to the ScanRequest batch. -# See #30943 for more details. -query T -SELECT message FROM [SHOW TRACE FOR SESSION] WHERE message IN - ('querying next range at /Table/58/1/0', - 'querying next range at /Table/58/1/10', - '=== SPAN START: kv.DistSender: sending partial batch ===' - ) ----- -querying next range at /Table/58/1/0 -=== SPAN START: kv.DistSender: sending partial batch === -querying next range at /Table/58/1/10 diff --git a/pkg/sql/logictest/testdata/planner_test/upsert b/pkg/sql/logictest/testdata/planner_test/upsert deleted file mode 100644 index e92e3bfefbd7..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/upsert +++ /dev/null @@ -1,176 +0,0 @@ -# LogicTest: local - -statement ok -CREATE TABLE kv ( - k INT PRIMARY KEY, - v INT -) - -query TTT -SELECT tree, field, description FROM [ -EXPLAIN (VERBOSE) UPSERT INTO kv TABLE kv ORDER BY v DESC -] ----- -count · · - └── upsert · · - │ into kv(k, v) - │ strategy fast upserter - └── sort · · - │ order -v - └── scan · · -· table kv@primary -· spans ALL - -# Regression test for #25726. -# UPSERT over tables with column families, on the fast path, use the -# INSERT logic. This has special casing for column families of 1 -# column, and another special casing for column families of 2+ -# columns. The special casing is only for families that do not include -# the primary key. So we need a table with 3 families: 1 for the PK, 1 -# with just 1 col, and 1 with 2+ cols. -statement ok -CREATE TABLE tu (a INT PRIMARY KEY, b INT, c INT, d INT, FAMILY (a), FAMILY (b), FAMILY (c,d)); - INSERT INTO tu VALUES (1, 2, 3, 4) - -statement ok -SET tracing = on,kv,results; UPSERT INTO tu VALUES (1, NULL, NULL, NULL); SET tracing = off - -query T -SELECT message FROM [SHOW KV TRACE FOR SESSION] - WHERE operation != 'dist sender send' ----- -Put /Table/54/1/1/0 -> /TUPLE/ -Del /Table/54/1/1/1/1 -Del /Table/54/1/1/2/1 -fast path completed -rows affected: 1 - -# KV operations. -statement ok -CREATE DATABASE t; CREATE TABLE t.kv(k INT PRIMARY KEY, v INT) - -statement ok -CREATE UNIQUE INDEX woo ON t.kv(v) - -statement ok -SET tracing = on,kv,results; UPSERT INTO t.kv(k, v) VALUES (2,3); SET tracing = off - -query TT -SELECT operation, message FROM [SHOW KV TRACE FOR SESSION] - WHERE operation != 'dist sender send' ----- -flow Scan /Table/56/1/2{-/#} -flow CPut /Table/56/1/2/0 -> /TUPLE/2:2:Int/3 -flow InitPut /Table/56/2/3/0 -> /BYTES/0x8a -kv.DistSender: sending partial batch r20: sending batch 1 CPut, 1 EndTxn to (n1,s1):1 -flow fast path completed -exec stmt rows affected: 1 - -statement ok -SET tracing = on,kv,results; UPSERT INTO t.kv(k, v) VALUES (1,2); SET tracing = off - -query TT -SELECT operation, message FROM [SHOW KV TRACE FOR SESSION] - WHERE operation != 'dist sender send' ----- -flow Scan /Table/56/1/1{-/#} -flow CPut /Table/56/1/1/0 -> /TUPLE/2:2:Int/2 -flow InitPut /Table/56/2/2/0 -> /BYTES/0x89 -kv.DistSender: sending partial batch r20: sending batch 1 CPut, 1 EndTxn to (n1,s1):1 -flow fast path completed -exec stmt rows affected: 1 - -statement error duplicate key value -SET tracing = on,kv,results; UPSERT INTO t.kv(k, v) VALUES (2,2); SET tracing = off - -query TT -set tracing=off; -SELECT operation, message FROM [SHOW KV TRACE FOR SESSION] - WHERE operation != 'dist sender send' ----- -flow Scan /Table/56/1/2{-/#} -flow fetched: /kv/primary/2/v -> /3 -flow Put /Table/56/1/2/0 -> /TUPLE/2:2:Int/2 -flow Del /Table/56/2/3/0 -flow CPut /Table/56/2/2/0 -> /BYTES/0x8a (expecting does not exist) -kv.DistSender: sending partial batch r20: sending batch 1 Put, 1 EndTxn to (n1,s1):1 -exec stmt execution failed after 0 rows: duplicate key value (v)=(2) violates unique constraint "woo" - -subtest regression_32834 - -statement ok -CREATE TABLE test_table ( - id BIGINT PRIMARY KEY, - a BIGINT, - b BIGINT -); - -statement ok -INSERT INTO test_table (id, a) VALUES - (123, 456), (123, 456) - ON CONFLICT (id) DO UPDATE SET a = EXCLUDED.a; - -query II colnames -SELECT id, a -FROM test_table ----- -id a -123 456 - -statement ok -INSERT INTO test_table (id, a) VALUES - (123, 1), (123, 2), (123, 1) - ON CONFLICT (id) DO UPDATE SET a = EXCLUDED.a; - -query II colnames -SELECT id, a -FROM test_table ----- -id a -123 1 - -statement ok -INSERT INTO test_table (id, a) VALUES - (123, 1), (123, 2), (123, 3) - ON CONFLICT (id) DO UPDATE SET a = EXCLUDED.a; - -query II colnames -SELECT id, a -FROM test_table ----- -id a -123 3 - -statement ok -DROP TABLE test_table; - -subtest regression_32473 - -statement ok -CREATE TABLE customers ( - customer_id serial PRIMARY KEY, - name VARCHAR UNIQUE, - email VARCHAR NOT NULL -); - -# The heuristic planner does not support non-tuple expressions on the RHS, throwing -# a planning error immediately. -statement error unimplemented: cannot use this type of expression on the right of UPDATE SET -INSERT INTO customers (name, email) VALUES ('bob', 'bob@email.com') ON CONFLICT (name) - DO UPDATE SET (name, email) = ( - SELECT 'bob', 'otherbob@email.com' - ) - -statement ok -DROP TABLE customers - -# The heuristic planner behaves differently than the CBO in this case. It always -# checks constraints, even if no insert or update actually occurs. -statement ok -CREATE TABLE t5 (k INT PRIMARY KEY, a INT, b int CHECK (a > b)) - -statement ok -INSERT INTO t5 VALUES (1, 10, 9) ON CONFLICT (k) DO NOTHING - -statement error pgcode 23514 failed to satisfy CHECK constraint -INSERT INTO t5 VALUES (1, 10, 20) ON CONFLICT (k) DO NOTHING diff --git a/pkg/sql/logictest/testdata/planner_test/window b/pkg/sql/logictest/testdata/planner_test/window deleted file mode 100644 index 30f9f71d5c08..000000000000 --- a/pkg/sql/logictest/testdata/planner_test/window +++ /dev/null @@ -1,264 +0,0 @@ -# LogicTest: local 5node-dist - -statement ok -CREATE TABLE kv ( - -- don't add column "a" - k INT PRIMARY KEY, - v INT, - w INT, - f FLOAT, - d DECIMAL, - s STRING, - b BOOL, - t TIMESTAMP, - FAMILY (k, v, w, f, b), - FAMILY (d), - FAMILY (s) -) - -statement OK -INSERT INTO kv VALUES -(1, 2, 3, 1.0, 1, 'a', true), -(3, 4, 5, 2, 8, 'a', true), -(5, NULL, 5, 9.9, -321, NULL, false), -(6, 2, 3, 4.4, 4.4, 'b', true), -(7, 2, 2, 6, 7.9, 'b', true), -(8, 4, 2, 3, 3, 'A', false) - -statement ok -SET tracing = on,kv,results; SELECT k, stddev(d) OVER w FROM kv WINDOW w as (PARTITION BY v) ORDER BY variance(d) OVER w, k; SET tracing = off - -query T rowsort -SELECT message FROM [SHOW KV TRACE FOR SESSION] WITH ORDINALITY - WHERE message LIKE 'fetched:%' OR message LIKE 'output row%' - ORDER BY message LIKE 'fetched:%' DESC, ordinality ASC ----- -fetched: /kv/primary/1/v -> /2 -fetched: /kv/primary/1/d -> 1 -fetched: /kv/primary/1/s -> 'a' -fetched: /kv/primary/3/v -> /4 -fetched: /kv/primary/3/d -> 8 -fetched: /kv/primary/3/s -> 'a' -fetched: /kv/primary/5 -> NULL -fetched: /kv/primary/5/d -> -321 -fetched: /kv/primary/6/v -> /2 -fetched: /kv/primary/6/d -> 4.4 -fetched: /kv/primary/6/s -> 'b' -fetched: /kv/primary/7/v -> /2 -fetched: /kv/primary/7/d -> 7.9 -fetched: /kv/primary/7/s -> 'b' -fetched: /kv/primary/8/v -> /4 -fetched: /kv/primary/8/d -> 3 -fetched: /kv/primary/8/s -> 'A' -output row: [5 NULL] -output row: [1 3.4501207708330056852] -output row: [6 3.4501207708330056852] -output row: [7 3.4501207708330056852] -output row: [3 3.5355339059327376220] -output row: [8 3.5355339059327376220] - - -query TTT -EXPLAIN SELECT k, stddev(d) OVER w FROM kv WINDOW w as (PARTITION BY v) ORDER BY variance(d) OVER w, k ----- -sort · · - │ order +variance,+k - └── window · · - └── render · · - └── scan · · -· table kv@primary -· spans ALL - -query TTTTT -EXPLAIN (TYPES) SELECT k, stddev(d) OVER w FROM kv WINDOW w as (PARTITION BY v) ORDER BY variance(d) OVER w, k ----- -sort · · (k int, stddev decimal) · - │ order +variance,+k · · - └── window · · (k int, stddev decimal, variance decimal) · - │ window 0 (stddev((d)[decimal]) OVER w)[decimal] · · - │ window 1 (variance((d)[decimal]) OVER w)[decimal] · · - │ render 1 (stddev((d)[decimal]) OVER w)[decimal] · · - │ render 2 (variance((d)[decimal]) OVER w)[decimal] · · - └── render · · (k int, v int, d decimal) k!=NULL; key(k) - │ render 0 (k)[int] · · - │ render 1 (v)[int] · · - │ render 2 (d)[decimal] · · - └── scan · · (k int, v int, w[omitted] int, f[omitted] float, d decimal, s[omitted] string, b[omitted] bool, t[omitted] timestamp) k!=NULL; key(k) -· table kv@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (TYPES) SELECT k, stddev(d) OVER (PARTITION BY v, 'a') FROM kv ORDER BY variance(d) OVER (PARTITION BY v, 100), k ----- -sort · · (k int, stddev decimal) · - │ order +variance,+k · · - └── window · · (k int, stddev decimal, variance decimal) · - │ window 0 (stddev((d)[decimal]) OVER (PARTITION BY (v)[int], ('a')[string]))[decimal] · · - │ window 1 (variance((d)[decimal]) OVER (PARTITION BY (v)[int], (100)[int]))[decimal] · · - │ render 1 (stddev((d)[decimal]) OVER (PARTITION BY (v)[int], ('a')[string]))[decimal] · · - │ render 2 (variance((d)[decimal]) OVER (PARTITION BY (v)[int], (100)[int]))[decimal] · · - └── render · · (k int, v int, "?column?" string, "?column?" int, d decimal) "?column?"=CONST; "?column?"=CONST; k!=NULL; key(k) - │ render 0 (k)[int] · · - │ render 1 (v)[int] · · - │ render 2 ('a')[string] · · - │ render 3 (100)[int] · · - │ render 4 (d)[decimal] · · - └── scan · · (k int, v int, w[omitted] int, f[omitted] float, d decimal, s[omitted] string, b[omitted] bool, t[omitted] timestamp) k!=NULL; key(k) -· table kv@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (TYPES,NONORMALIZE) SELECT k, stddev(d) OVER (PARTITION BY v, 'a') FROM kv ORDER BY k ----- -sort · · (k int, stddev decimal) +k - │ order +k · · - └── window · · (k int, stddev decimal) · - │ window 0 (stddev((d)[decimal]) OVER (PARTITION BY (v)[int], ('a')[string]))[decimal] · · - │ render 1 (stddev((d)[decimal]) OVER (PARTITION BY (v)[int], ('a')[string]))[decimal] · · - └── render · · (k int, v int, "?column?" string, d decimal) "?column?"=CONST; k!=NULL; key(k) - │ render 0 (k)[int] · · - │ render 1 (v)[int] · · - │ render 2 ('a')[string] · · - │ render 3 (d)[decimal] · · - └── scan · · (k int, v int, w[omitted] int, f[omitted] float, d decimal, s[omitted] string, b[omitted] bool, t[omitted] timestamp) k!=NULL; key(k) -· table kv@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (TYPES) SELECT k, k + stddev(d) OVER (PARTITION BY v, 'a') FROM kv ORDER BY variance(d) OVER (PARTITION BY v, 100), k ----- -sort · · (k int, "?column?" decimal) · - │ order +variance,+k · · - └── window · · (k int, "?column?" decimal, variance decimal) · - │ window 0 (stddev((d)[decimal]) OVER (PARTITION BY (v)[int], ('a')[string]))[decimal] · · - │ window 1 (variance((d)[decimal]) OVER (PARTITION BY (v)[int], (100)[int]))[decimal] · · - │ render 1 ((k)[int] + (stddev((d)[decimal]) OVER (PARTITION BY (v)[int], ('a')[string]))[decimal])[decimal] · · - │ render 2 (variance((d)[decimal]) OVER (PARTITION BY (v)[int], (100)[int]))[decimal] · · - └── render · · (k int, v int, "?column?" string, "?column?" int, d decimal) "?column?"=CONST; "?column?"=CONST; k!=NULL; key(k) - │ render 0 (k)[int] · · - │ render 1 (v)[int] · · - │ render 2 ('a')[string] · · - │ render 3 (100)[int] · · - │ render 4 (d)[decimal] · · - └── scan · · (k int, v int, w[omitted] int, f[omitted] float, d decimal, s[omitted] string, b[omitted] bool, t[omitted] timestamp) k!=NULL; key(k) -· table kv@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (TYPES) SELECT max(k), max(k) + stddev(d) OVER (PARTITION BY v, 'a') FROM kv GROUP BY d, v ORDER BY variance(d) OVER (PARTITION BY v, 100) ----- -sort · · (max int, "?column?" decimal) · - │ order +variance · · - └── window · · (max int, "?column?" decimal, variance decimal) · - │ window 0 (stddev((d)[decimal]) OVER (PARTITION BY (v)[int], ('a')[string]))[decimal] · · - │ window 1 (variance((d)[decimal]) OVER (PARTITION BY (v)[int], (100)[int]))[decimal] · · - │ render 1 ((max((k)[int]))[int] + (stddev((d)[decimal]) OVER (PARTITION BY (v)[int], ('a')[string]))[decimal])[decimal] · · - │ render 2 (variance((d)[decimal]) OVER (PARTITION BY (v)[int], (100)[int]))[decimal] · · - └── render · · (max int, v int, "?column?" string, "?column?" int, d decimal) "?column?"=CONST; "?column?"=CONST; weak-key(v,d) - │ render 0 (agg0)[int] · · - │ render 1 (agg1)[int] · · - │ render 2 ('a')[string] · · - │ render 3 (100)[int] · · - │ render 4 (agg2)[decimal] · · - └── group · · (agg0 int, agg1 int, agg2 decimal) weak-key(agg1,agg2) - │ aggregate 0 max(k) · · - │ aggregate 1 v · · - │ aggregate 2 d · · - │ group by d, v · · - └── render · · (d decimal, v int, k int) k!=NULL; key(k) - │ render 0 (d)[decimal] · · - │ render 1 (v)[int] · · - │ render 2 (k)[int] · · - └── scan · · (k int, v int, w[omitted] int, f[omitted] float, d decimal, s[omitted] string, b[omitted] bool, t[omitted] timestamp) k!=NULL; key(k) -· table kv@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (TYPES) SELECT max(k), stddev(d) OVER (PARTITION BY v, 'a') FROM kv GROUP BY d, v ORDER BY 1 ----- -sort · · (max int, stddev decimal) +max - │ order +max · · - └── window · · (max int, stddev decimal) · - │ window 0 (stddev((d)[decimal]) OVER (PARTITION BY (v)[int], ('a')[string]))[decimal] · · - │ render 1 (stddev((d)[decimal]) OVER (PARTITION BY (v)[int], ('a')[string]))[decimal] · · - └── render · · (max int, v int, "?column?" string, d decimal) "?column?"=CONST; weak-key(v,d) - │ render 0 (agg0)[int] · · - │ render 1 (agg1)[int] · · - │ render 2 ('a')[string] · · - │ render 3 (agg2)[decimal] · · - └── group · · (agg0 int, agg1 int, agg2 decimal) weak-key(agg1,agg2) - │ aggregate 0 max(k) · · - │ aggregate 1 v · · - │ aggregate 2 d · · - │ group by d, v · · - └── render · · (d decimal, v int, k int) k!=NULL; key(k) - │ render 0 (d)[decimal] · · - │ render 1 (v)[int] · · - │ render 2 (k)[int] · · - └── scan · · (k int, v int, w[omitted] int, f[omitted] float, d decimal, s[omitted] string, b[omitted] bool, t[omitted] timestamp) k!=NULL; key(k) -· table kv@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (TYPES) SELECT max(k) OVER (ROWS 1 PRECEDING) FROM kv ----- -window · · (max int) · - │ window 0 (max((k)[int]) OVER (ROWS (1)[int] PRECEDING))[int] · · - │ render 0 (max((k)[int]) OVER (ROWS (1)[int] PRECEDING))[int] · · - └── render · · (k int) k!=NULL; key(k) - │ render 0 (k)[int] · · - └── scan · · (k int, v[omitted] int, w[omitted] int, f[omitted] float, d[omitted] decimal, s[omitted] string, b[omitted] bool, t[omitted] timestamp) k!=NULL; key(k) -· table kv@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (TYPES) SELECT max(k) OVER (ORDER BY f RANGE BETWEEN 1.23 PRECEDING AND 2.34 FOLLOWING) FROM kv ----- -window · · (max int) · - │ window 0 (max((k)[int]) OVER (ORDER BY (f)[float] RANGE BETWEEN (1.23)[float] PRECEDING AND (2.34)[float] FOLLOWING))[int] · · - │ render 0 (max((k)[int]) OVER (ORDER BY (f)[float] RANGE BETWEEN (1.23)[float] PRECEDING AND (2.34)[float] FOLLOWING))[int] · · - └── render · · ("?column?" float, k int) k!=NULL; key(k) - │ render 0 (f)[float] · · - │ render 1 (k)[int] · · - └── scan · · (k int, v[omitted] int, w[omitted] int, f float, d[omitted] decimal, s[omitted] string, b[omitted] bool, t[omitted] timestamp) k!=NULL; key(k) -· table kv@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (TYPES) SELECT max(k) OVER (ORDER BY d RANGE BETWEEN 1.23 PRECEDING AND 2.34 FOLLOWING) FROM kv ----- -window · · (max int) · - │ window 0 (max((k)[int]) OVER (ORDER BY (d)[decimal] RANGE BETWEEN (1.23)[decimal] PRECEDING AND (2.34)[decimal] FOLLOWING))[int] · · - │ render 0 (max((k)[int]) OVER (ORDER BY (d)[decimal] RANGE BETWEEN (1.23)[decimal] PRECEDING AND (2.34)[decimal] FOLLOWING))[int] · · - └── render · · ("?column?" decimal, k int) k!=NULL; key(k) - │ render 0 (d)[decimal] · · - │ render 1 (k)[int] · · - └── scan · · (k int, v[omitted] int, w[omitted] int, f[omitted] float, d decimal, s[omitted] string, b[omitted] bool, t[omitted] timestamp) k!=NULL; key(k) -· table kv@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (TYPES) SELECT max(k) OVER (ORDER BY t RANGE BETWEEN '1 days' PRECEDING AND '1 months' FOLLOWING) FROM kv ----- -window · · (max int) · - │ window 0 (max((k)[int]) OVER (ORDER BY (t)[timestamp] RANGE BETWEEN ('1 day')[interval] PRECEDING AND ('1 mon')[interval] FOLLOWING))[int] · · - │ render 0 (max((k)[int]) OVER (ORDER BY (t)[timestamp] RANGE BETWEEN ('1 day')[interval] PRECEDING AND ('1 mon')[interval] FOLLOWING))[int] · · - └── render · · ("?column?" timestamp, k int) k!=NULL; key(k) - │ render 0 (t)[timestamp] · · - │ render 1 (k)[int] · · - └── scan · · (k int, v[omitted] int, w[omitted] int, f[omitted] float, d[omitted] decimal, s[omitted] string, b[omitted] bool, t timestamp) k!=NULL; key(k) -· table kv@primary · · -· spans ALL · · - -query TTTTT -EXPLAIN (TYPES) SELECT max(k) OVER (ORDER BY v GROUPS 1 PRECEDING) FROM kv ----- -window · · (max int) · - │ window 0 (max((k)[int]) OVER (ORDER BY (v)[int] GROUPS (1)[int] PRECEDING))[int] · · - │ render 0 (max((k)[int]) OVER (ORDER BY (v)[int] GROUPS (1)[int] PRECEDING))[int] · · - └── render · · ("?column?" int, k int) k!=NULL; key(k) - │ render 0 (v)[int] · · - │ render 1 (k)[int] · · - └── scan · · (k int, v int, w[omitted] int, f[omitted] float, d[omitted] decimal, s[omitted] string, b[omitted] bool, t[omitted] timestamp) k!=NULL; key(k) -· table kv@primary · · -· spans ALL · · diff --git a/pkg/sql/opt/exec/execbuilder/builder_test.go b/pkg/sql/opt/exec/execbuilder/builder_test.go index 6b013b3f2916..265f121137da 100644 --- a/pkg/sql/opt/exec/execbuilder/builder_test.go +++ b/pkg/sql/opt/exec/execbuilder/builder_test.go @@ -21,8 +21,8 @@ import ( // TestExecBuild runs logic tests that are specific to how the optimizer builds // queries. // -// The test files should use combinations of the local-opt, fakedist-opt and -// 5node-dist-opt configs. For tests that only have EXPLAIN (PLAN) statements, +// The test files should use combinations of the local, fakedist and +// 5node-dist configs. For tests that only have EXPLAIN (PLAN) statements, // it's sufficient to run on a single configuration. func TestExecBuild(t *testing.T) { defer leaktest.AfterTest(t)() diff --git a/pkg/sql/opt/exec/execbuilder/testdata/aggregate b/pkg/sql/opt/exec/execbuilder/testdata/aggregate index 91987bde8a68..cbbaffd6f30b 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/aggregate +++ b/pkg/sql/opt/exec/execbuilder/testdata/aggregate @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE kv ( diff --git a/pkg/sql/opt/exec/execbuilder/testdata/cascade b/pkg/sql/opt/exec/execbuilder/testdata/cascade index 14a9b1193f06..f9925522d8e0 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/cascade +++ b/pkg/sql/opt/exec/execbuilder/testdata/cascade @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local subtest DeleteCascade_Basic ### Basic Delete Cascade diff --git a/pkg/sql/opt/exec/execbuilder/testdata/catalog b/pkg/sql/opt/exec/execbuilder/testdata/catalog index 2f130a33830f..7091954f9cda 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/catalog +++ b/pkg/sql/opt/exec/execbuilder/testdata/catalog @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE xyz ( diff --git a/pkg/sql/opt/exec/execbuilder/testdata/check_constraints b/pkg/sql/opt/exec/execbuilder/testdata/check_constraints index 862718bc5bdc..96561c450bf4 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/check_constraints +++ b/pkg/sql/opt/exec/execbuilder/testdata/check_constraints @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local # Use multiple column families. diff --git a/pkg/sql/opt/exec/execbuilder/testdata/ddl b/pkg/sql/opt/exec/execbuilder/testdata/ddl index e59f02fed229..e1469208c6b7 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/ddl +++ b/pkg/sql/opt/exec/execbuilder/testdata/ddl @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local # ------------------------------------------------------------------------------ # ALTER TABLE tests. diff --git a/pkg/sql/opt/exec/execbuilder/testdata/delete b/pkg/sql/opt/exec/execbuilder/testdata/delete index 7cf96afd8d8f..622d7366ea46 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/delete +++ b/pkg/sql/opt/exec/execbuilder/testdata/delete @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE kv ( diff --git a/pkg/sql/opt/exec/execbuilder/testdata/distinct b/pkg/sql/opt/exec/execbuilder/testdata/distinct index 4c889f86af90..7dda4114fd78 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/distinct +++ b/pkg/sql/opt/exec/execbuilder/testdata/distinct @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE xyz ( diff --git a/pkg/sql/opt/exec/execbuilder/testdata/distinct_on b/pkg/sql/opt/exec/execbuilder/testdata/distinct_on index 5063d9005553..7005287c5023 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/distinct_on +++ b/pkg/sql/opt/exec/execbuilder/testdata/distinct_on @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE xyz ( diff --git a/pkg/sql/opt/exec/execbuilder/testdata/distsql_agg b/pkg/sql/opt/exec/execbuilder/testdata/distsql_agg index e66fefa97048..1df1160047a0 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/distsql_agg +++ b/pkg/sql/opt/exec/execbuilder/testdata/distsql_agg @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist-opt +# LogicTest: 5node-dist statement ok CREATE TABLE data (a INT, b INT, c FLOAT, d DECIMAL, PRIMARY KEY (a, b, c, d)) diff --git a/pkg/sql/opt/exec/execbuilder/testdata/distsql_auto_mode b/pkg/sql/opt/exec/execbuilder/testdata/distsql_auto_mode index c21078aefc9b..4af527330a55 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/distsql_auto_mode +++ b/pkg/sql/opt/exec/execbuilder/testdata/distsql_auto_mode @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local # # Tests that verify DistSQL support and auto mode determination. diff --git a/pkg/sql/opt/exec/execbuilder/testdata/distsql_distinct_on b/pkg/sql/opt/exec/execbuilder/testdata/distsql_distinct_on index ad1849fb8eb6..91cd676afdda 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/distsql_distinct_on +++ b/pkg/sql/opt/exec/execbuilder/testdata/distsql_distinct_on @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist-opt +# LogicTest: 5node-dist statement ok CREATE TABLE xyz ( diff --git a/pkg/sql/opt/exec/execbuilder/testdata/distsql_indexjoin b/pkg/sql/opt/exec/execbuilder/testdata/distsql_indexjoin index 1f18b5811577..ccf010292c79 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/distsql_indexjoin +++ b/pkg/sql/opt/exec/execbuilder/testdata/distsql_indexjoin @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist-opt +# LogicTest: 5node-dist statement ok CREATE TABLE t (k INT PRIMARY KEY, v INT, w INT, INDEX v(v)) diff --git a/pkg/sql/opt/exec/execbuilder/testdata/distsql_interleaved_join b/pkg/sql/opt/exec/execbuilder/testdata/distsql_interleaved_join index 29a285e02898..0dec92ffb6d2 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/distsql_interleaved_join +++ b/pkg/sql/opt/exec/execbuilder/testdata/distsql_interleaved_join @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist-opt +# LogicTest: 5node-dist # The following tables form the interleaved hierarchy: # name: primary key: # rows: 'a' = id mod X : diff --git a/pkg/sql/opt/exec/execbuilder/testdata/distsql_join b/pkg/sql/opt/exec/execbuilder/testdata/distsql_join index 20dac6f7fd05..af7d039327d3 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/distsql_join +++ b/pkg/sql/opt/exec/execbuilder/testdata/distsql_join @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist-opt +# LogicTest: 5node-dist statement ok CREATE TABLE data (a INT, b INT, c INT, d INT, PRIMARY KEY (a, b, c, d)) diff --git a/pkg/sql/opt/exec/execbuilder/testdata/distsql_misc b/pkg/sql/opt/exec/execbuilder/testdata/distsql_misc index e253fc676ee6..8d9f4c8adb2a 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/distsql_misc +++ b/pkg/sql/opt/exec/execbuilder/testdata/distsql_misc @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist-opt +# LogicTest: 5node-dist subtest scrub diff --git a/pkg/sql/opt/exec/execbuilder/testdata/distsql_numtables b/pkg/sql/opt/exec/execbuilder/testdata/distsql_numtables index 49f9dca5449c..5a80156a7b4e 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/distsql_numtables +++ b/pkg/sql/opt/exec/execbuilder/testdata/distsql_numtables @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist-opt +# LogicTest: 5node-dist # First, we set up two data tables: # - NumToSquare maps integers from 1 to 100 to their squares diff --git a/pkg/sql/opt/exec/execbuilder/testdata/distsql_ordinality b/pkg/sql/opt/exec/execbuilder/testdata/distsql_ordinality index 86e0925c06b2..fe835e204773 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/distsql_ordinality +++ b/pkg/sql/opt/exec/execbuilder/testdata/distsql_ordinality @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist-opt +# LogicTest: 5node-dist statement ok CREATE TABLE xyz ( diff --git a/pkg/sql/opt/exec/execbuilder/testdata/distsql_tighten_spans b/pkg/sql/opt/exec/execbuilder/testdata/distsql_tighten_spans index 40176335cd9d..ea0027994e18 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/distsql_tighten_spans +++ b/pkg/sql/opt/exec/execbuilder/testdata/distsql_tighten_spans @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist-opt +# LogicTest: 5node-dist # This test verifies that we correctly tighten spans during index selection as # well as after partitioning spans in distsql. diff --git a/pkg/sql/opt/exec/execbuilder/testdata/distsql_union b/pkg/sql/opt/exec/execbuilder/testdata/distsql_union index 401e4f37a506..8957316e4c1d 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/distsql_union +++ b/pkg/sql/opt/exec/execbuilder/testdata/distsql_union @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist-opt +# LogicTest: 5node-dist statement ok CREATE TABLE xyz ( diff --git a/pkg/sql/opt/exec/execbuilder/testdata/explain b/pkg/sql/opt/exec/execbuilder/testdata/explain index 08813593541d..7db79d29c6ca 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/explain +++ b/pkg/sql/opt/exec/execbuilder/testdata/explain @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local query TTT colnames EXPLAIN (PLAN) SELECT 1 FROM system.jobs WHERE FALSE diff --git a/pkg/sql/opt/exec/execbuilder/testdata/explain_env b/pkg/sql/opt/exec/execbuilder/testdata/explain_env index 10bb065f9f93..289bf43ca942 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/explain_env +++ b/pkg/sql/opt/exec/execbuilder/testdata/explain_env @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE x ( diff --git a/pkg/sql/opt/exec/execbuilder/testdata/fk b/pkg/sql/opt/exec/execbuilder/testdata/fk index c8d386b3ae8c..96400bd33fcd 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/fk +++ b/pkg/sql/opt/exec/execbuilder/testdata/fk @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local # To get an unvalidated foreign key for testing, use the loophole that we # currently don't support adding a validated FK in the same transaction as diff --git a/pkg/sql/opt/exec/execbuilder/testdata/fk_opt b/pkg/sql/opt/exec/execbuilder/testdata/fk_opt index 84b6533a3e1d..e6c44e894e81 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/fk_opt +++ b/pkg/sql/opt/exec/execbuilder/testdata/fk_opt @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok SET experimental_optimizer_foreign_keys = true diff --git a/pkg/sql/opt/exec/execbuilder/testdata/information_schema b/pkg/sql/opt/exec/execbuilder/testdata/information_schema index 3debc28eda31..4f38bb24016f 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/information_schema +++ b/pkg/sql/opt/exec/execbuilder/testdata/information_schema @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local query TTTTT EXPLAIN (VERBOSE) SELECT * FROM system.information_schema.schemata diff --git a/pkg/sql/opt/exec/execbuilder/testdata/insert b/pkg/sql/opt/exec/execbuilder/testdata/insert index 3ea32183d605..e132e60764e5 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/insert +++ b/pkg/sql/opt/exec/execbuilder/testdata/insert @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE kv ( diff --git a/pkg/sql/opt/exec/execbuilder/testdata/interleaved b/pkg/sql/opt/exec/execbuilder/testdata/interleaved index 9b7d2b44361b..f98099d5cf67 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/interleaved +++ b/pkg/sql/opt/exec/execbuilder/testdata/interleaved @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local # ------------------------------------------------------------------------------ # Test index selection for deeply interleaved tables. diff --git a/pkg/sql/opt/exec/execbuilder/testdata/inverted_index b/pkg/sql/opt/exec/execbuilder/testdata/inverted_index index 449dd5c313fb..574830c7b8d2 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/inverted_index +++ b/pkg/sql/opt/exec/execbuilder/testdata/inverted_index @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE d ( diff --git a/pkg/sql/opt/exec/execbuilder/testdata/join b/pkg/sql/opt/exec/execbuilder/testdata/join index b065d4cee762..825c729b9f8f 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/join +++ b/pkg/sql/opt/exec/execbuilder/testdata/join @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE onecolumn (x INT); INSERT INTO onecolumn(x) VALUES (44), (NULL), (42) diff --git a/pkg/sql/opt/exec/execbuilder/testdata/join_order b/pkg/sql/opt/exec/execbuilder/testdata/join_order index 338759050ee6..6d47b6201cf6 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/join_order +++ b/pkg/sql/opt/exec/execbuilder/testdata/join_order @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE bx ( diff --git a/pkg/sql/opt/exec/execbuilder/testdata/limit b/pkg/sql/opt/exec/execbuilder/testdata/limit index 5603f664de8a..2a26a1d56dc6 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/limit +++ b/pkg/sql/opt/exec/execbuilder/testdata/limit @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE t (k INT PRIMARY KEY, v INT, w INT, INDEX(v)) diff --git a/pkg/sql/opt/exec/execbuilder/testdata/lookup_join b/pkg/sql/opt/exec/execbuilder/testdata/lookup_join index 1fe3c305dfe0..e97faa9375ec 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/lookup_join +++ b/pkg/sql/opt/exec/execbuilder/testdata/lookup_join @@ -1,4 +1,4 @@ -# LogicTest: 5node-dist-opt +# LogicTest: 5node-dist statement ok CREATE TABLE abc (a INT, b INT, c INT, PRIMARY KEY (a, c)) diff --git a/pkg/sql/opt/exec/execbuilder/testdata/orderby b/pkg/sql/opt/exec/execbuilder/testdata/orderby index be576f0236c2..eb38d37bc9eb 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/orderby +++ b/pkg/sql/opt/exec/execbuilder/testdata/orderby @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE t ( diff --git a/pkg/sql/opt/exec/execbuilder/testdata/ordinality b/pkg/sql/opt/exec/execbuilder/testdata/ordinality index b9e32807786b..2484338e2a8b 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/ordinality +++ b/pkg/sql/opt/exec/execbuilder/testdata/ordinality @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE foo (x CHAR PRIMARY KEY); INSERT INTO foo(x) VALUES ('a'), ('b') diff --git a/pkg/sql/opt/exec/execbuilder/testdata/prepare b/pkg/sql/opt/exec/execbuilder/testdata/prepare index b6a1e153ef8e..9475bedf3d93 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/prepare +++ b/pkg/sql/opt/exec/execbuilder/testdata/prepare @@ -1,4 +1,4 @@ -# LogicTest: fakedist-opt +# LogicTest: fakedist statement ok CREATE TABLE ab (a INT PRIMARY KEY, b INT); INSERT INTO ab (a, b) VALUES (1, 10) diff --git a/pkg/sql/opt/exec/execbuilder/testdata/scalar b/pkg/sql/opt/exec/execbuilder/testdata/scalar index 09139620938c..774e6c65429a 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/scalar +++ b/pkg/sql/opt/exec/execbuilder/testdata/scalar @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local # # This file tests that we build scalar expressions correctly. We do this by # putting expressions inside projections and checking that they roundtrip diff --git a/pkg/sql/opt/exec/execbuilder/testdata/select b/pkg/sql/opt/exec/execbuilder/testdata/select index 6f11b110c9a6..8ccbb00cb597 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/select +++ b/pkg/sql/opt/exec/execbuilder/testdata/select @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local # Prepare a trace to be inspected below. diff --git a/pkg/sql/opt/exec/execbuilder/testdata/select_index b/pkg/sql/opt/exec/execbuilder/testdata/select_index index 4f586e12af30..abcf2f5d0ce0 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/select_index +++ b/pkg/sql/opt/exec/execbuilder/testdata/select_index @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE t ( diff --git a/pkg/sql/opt/exec/execbuilder/testdata/select_index_flags b/pkg/sql/opt/exec/execbuilder/testdata/select_index_flags index 45bd4bb7946b..e909dfbff236 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/select_index_flags +++ b/pkg/sql/opt/exec/execbuilder/testdata/select_index_flags @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE abcd ( diff --git a/pkg/sql/opt/exec/execbuilder/testdata/select_index_vectorize_off b/pkg/sql/opt/exec/execbuilder/testdata/select_index_vectorize_off index 1760288d85e4..60b3322a9b55 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/select_index_vectorize_off +++ b/pkg/sql/opt/exec/execbuilder/testdata/select_index_vectorize_off @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local # This file contains test cases that cannot be run with the vectorized # execution engine. diff --git a/pkg/sql/opt/exec/execbuilder/testdata/show_trace b/pkg/sql/opt/exec/execbuilder/testdata/show_trace index 75ae10484875..08b81a57afd7 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/show_trace +++ b/pkg/sql/opt/exec/execbuilder/testdata/show_trace @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local # Check SHOW KV TRACE FOR SESSION. diff --git a/pkg/sql/opt/exec/execbuilder/testdata/spool b/pkg/sql/opt/exec/execbuilder/testdata/spool index f1185e2e688e..69434167b61d 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/spool +++ b/pkg/sql/opt/exec/execbuilder/testdata/spool @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE t(x INT PRIMARY KEY) diff --git a/pkg/sql/opt/exec/execbuilder/testdata/srfs b/pkg/sql/opt/exec/execbuilder/testdata/srfs index fee89c4caafc..8f2fbd9938fe 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/srfs +++ b/pkg/sql/opt/exec/execbuilder/testdata/srfs @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local subtest generate_series diff --git a/pkg/sql/opt/exec/execbuilder/testdata/stats b/pkg/sql/opt/exec/execbuilder/testdata/stats index e0a326faaba1..f5ffd22b4369 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/stats +++ b/pkg/sql/opt/exec/execbuilder/testdata/stats @@ -1,4 +1,4 @@ -# LogicTest: fakedist-opt +# LogicTest: fakedist # Tests that verify we retrieve the stats correctly. Note that we can't create # statistics if distsql mode is OFF. diff --git a/pkg/sql/opt/exec/execbuilder/testdata/subquery b/pkg/sql/opt/exec/execbuilder/testdata/subquery index 2afdec743da3..0f8552920032 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/subquery +++ b/pkg/sql/opt/exec/execbuilder/testdata/subquery @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local # ------------------------------------------------------------------------------ # Uncorrelated subqueries. diff --git a/pkg/sql/opt/exec/execbuilder/testdata/subquery_correlated b/pkg/sql/opt/exec/execbuilder/testdata/subquery_correlated index ae7fca45d9a5..263a62574cf7 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/subquery_correlated +++ b/pkg/sql/opt/exec/execbuilder/testdata/subquery_correlated @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local # ------------------------------------------------------------------------------ # Create a simple schema that models customers and orders. Each customer has an @@ -11,9 +11,6 @@ statement ok CREATE TABLE c (c_id INT PRIMARY KEY, bill TEXT); CREATE TABLE o (o_id INT PRIMARY KEY, c_id INT, ship TEXT); -statement ok -SET optimizer = always - # We can't decorrelate cases which don't use a scalar type in the # ARRAY(...) operator. statement error can't execute a correlated ARRAY\(...\) over tuple\{int, string\} diff --git a/pkg/sql/opt/exec/execbuilder/testdata/telemetry b/pkg/sql/opt/exec/execbuilder/testdata/telemetry index 2f321711d8cf..2ae3ae1e013d 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/telemetry +++ b/pkg/sql/opt/exec/execbuilder/testdata/telemetry @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok SELECT EXISTS(SELECT * FROM generate_series(1,2)) diff --git a/pkg/sql/opt/exec/execbuilder/testdata/tuple b/pkg/sql/opt/exec/execbuilder/testdata/tuple index 38517379bbcb..f826d5e68e1f 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/tuple +++ b/pkg/sql/opt/exec/execbuilder/testdata/tuple @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE uvw ( diff --git a/pkg/sql/opt/exec/execbuilder/testdata/union b/pkg/sql/opt/exec/execbuilder/testdata/union index 71edebee0619..768150cd01a5 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/union +++ b/pkg/sql/opt/exec/execbuilder/testdata/union @@ -1,4 +1,4 @@ -# LogicTest: local-opt fakedist-opt +# LogicTest: local fakedist statement ok CREATE TABLE uniontest ( diff --git a/pkg/sql/opt/exec/execbuilder/testdata/update b/pkg/sql/opt/exec/execbuilder/testdata/update index 614b32a5ed5b..84894204785a 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/update +++ b/pkg/sql/opt/exec/execbuilder/testdata/update @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE kv2 ( diff --git a/pkg/sql/opt/exec/execbuilder/testdata/update_from b/pkg/sql/opt/exec/execbuilder/testdata/update_from index 807f44ad00c2..36ab1dc4208b 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/update_from +++ b/pkg/sql/opt/exec/execbuilder/testdata/update_from @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE abc (a int primary key, b int, c int) diff --git a/pkg/sql/opt/exec/execbuilder/testdata/upsert b/pkg/sql/opt/exec/execbuilder/testdata/upsert index 808bfe3052e8..756a9cf13b30 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/upsert +++ b/pkg/sql/opt/exec/execbuilder/testdata/upsert @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE kv ( diff --git a/pkg/sql/opt/exec/execbuilder/testdata/values b/pkg/sql/opt/exec/execbuilder/testdata/values index 22a7de2789a9..4d0e4f3747dc 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/values +++ b/pkg/sql/opt/exec/execbuilder/testdata/values @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local # Tests for the implicit one row, zero column values operator. query TTTTT diff --git a/pkg/sql/opt/exec/execbuilder/testdata/window b/pkg/sql/opt/exec/execbuilder/testdata/window index 2a45ffb840aa..d1793411c88c 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/window +++ b/pkg/sql/opt/exec/execbuilder/testdata/window @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE kv ( diff --git a/pkg/sql/opt/exec/execbuilder/testdata/with b/pkg/sql/opt/exec/execbuilder/testdata/with index b7041ed8ed56..a90851aa994b 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/with +++ b/pkg/sql/opt/exec/execbuilder/testdata/with @@ -1,4 +1,4 @@ -# LogicTest: local-opt +# LogicTest: local statement ok CREATE TABLE x(a INT) diff --git a/pkg/sql/plan.go b/pkg/sql/plan.go index 9604d7f9e1ad..3e043b8051b2 100644 --- a/pkg/sql/plan.go +++ b/pkg/sql/plan.go @@ -455,11 +455,6 @@ func (p *planTop) close(ctx context.Context) { } } -// columns retrieves the plan's columns. -func (p *planTop) columns() sqlbase.ResultColumns { - return planColumns(p.plan) -} - // autoCommitNode is implemented by planNodes that might be able to commit the // KV txn in which they operate. Some nodes might want to do this to take // advantage of the 1PC optimization in case they're running as an implicit diff --git a/pkg/sql/schema_changer.go b/pkg/sql/schema_changer.go index 7d15045b9029..fa92e7bfc26e 100644 --- a/pkg/sql/schema_changer.go +++ b/pkg/sql/schema_changer.go @@ -2267,8 +2267,7 @@ func createSchemaChangeEvalCtx( DataConversion: sessiondata.DataConversionConfig{ Location: dummyLocation, }, - User: security.NodeUser, - OptimizerMode: sessiondata.OptimizerOn, + User: security.NodeUser, } evalCtx := extendedEvalContext{ diff --git a/pkg/sql/sessiondata/session_data.go b/pkg/sql/sessiondata/session_data.go index 425473d5b235..00cae2d15526 100644 --- a/pkg/sql/sessiondata/session_data.go +++ b/pkg/sql/sessiondata/session_data.go @@ -38,8 +38,6 @@ type SessionData struct { // ForceSplitAt indicates whether checks to prevent incorrect usage of ALTER // TABLE ... SPLIT AT should be skipped. ForceSplitAt bool - // OptimizerMode indicates whether to use the optimizer for query planning. - OptimizerMode OptimizerMode // OptimizerFKs indicates whether we should use the new paths to plan foreign // key checks in the optimizer. OptimizerFKs bool @@ -303,54 +301,6 @@ func VectorizeExecModeFromString(val string) (VectorizeExecMode, bool) { return m, true } -// OptimizerMode controls if and when the Executor uses the optimizer. -type OptimizerMode int64 - -const ( - // OptimizerOff means that we don't use the optimizer. - OptimizerOff = iota - // OptimizerOn means that we use the optimizer for all supported statements. - OptimizerOn - // OptimizerLocal means that we use the optimizer for all supported - // statements, but we don't try to distribute the resulting plan. - OptimizerLocal - // OptimizerAlways means that we attempt to use the optimizer always, even - // for unsupported statements which result in errors. This mode is useful - // for testing. - OptimizerAlways -) - -func (m OptimizerMode) String() string { - switch m { - case OptimizerOff: - return "off" - case OptimizerOn: - return "on" - case OptimizerLocal: - return "local" - case OptimizerAlways: - return "always" - default: - return fmt.Sprintf("invalid (%d)", m) - } -} - -// OptimizerModeFromString converts a string into a OptimizerMode -func OptimizerModeFromString(val string) (_ OptimizerMode, ok bool) { - switch strings.ToUpper(val) { - case "OFF": - return OptimizerOff, true - case "ON": - return OptimizerOn, true - case "LOCAL": - return OptimizerLocal, true - case "ALWAYS": - return OptimizerAlways, true - default: - return 0, false - } -} - // SerialNormalizationMode controls if and when the Executor uses DistSQL. type SerialNormalizationMode int64 diff --git a/pkg/sql/vars.go b/pkg/sql/vars.go index e99309b77ca3..34660d4e027b 100644 --- a/pkg/sql/vars.go +++ b/pkg/sql/vars.go @@ -425,21 +425,19 @@ var varGen = map[string]sessionVar{ }, // CockroachDB extension. + // This is deprecated; the only allowable setting is "on". `optimizer`: { Set: func(_ context.Context, m *sessionDataMutator, s string) error { - mode, ok := sessiondata.OptimizerModeFromString(s) - if !ok { - return newVarValueError(`optimizer`, s, "on", "off", "local", "always") + if strings.ToUpper(s) != "ON" { + return newVarValueError(`optimizer`, s, "on") } - m.SetOptimizerMode(mode) return nil }, Get: func(evalCtx *extendedEvalContext) string { - return evalCtx.SessionData.OptimizerMode.String() + return "on" }, GlobalDefault: func(sv *settings.Values) string { - return sessiondata.OptimizerMode( - OptimizerClusterMode.Get(sv)).String() + return "on" }, },